all: remove ServerRequest[T] for concrete T (#342)

Replace all occurrences of ServerRequest[*CallToolParams] and other
concrete instantiations with CallToolRequest and the like.

Make the XXXRequest types aliases, to preserve the convenience of
generics for the internal machinery (see shared.go, for example.)

I will expand the aliases in a followup PR.
This commit is contained in:
Jonathan Amsterdam 2025-08-21 12:10:53 -04:00 • committed by GitHub
commit 6378df6f24
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -54,24 +54,24 @@ type ServerOptions struct {
// Optional instructions for connected clients.
Instructions string
// If non-nil, called when "notifications/initialized" is received.
InitializedHandler func(context.Context, *ServerRequest[*InitializedParams])
InitializedHandler func(context.Context, *InitializedRequest)
// PageSize is the maximum number of items to return in a single page for
// list methods (e.g. ListTools).
PageSize int
// If non-nil, called when "notifications/roots/list_changed" is received.
RootsListChangedHandler func(context.Context, *ServerRequest[*RootsListChangedParams])
RootsListChangedHandler func(context.Context, *RootsListChangedRequest)
// If non-nil, called when "notifications/progress" is received.
ProgressNotificationHandler func(context.Context, *ServerRequest[*ProgressNotificationParams])
ProgressNotificationHandler func(context.Context, *ProgressNotificationRequest)
// If non-nil, called when "completion/complete" is received.
CompletionHandler func(context.Context, *ServerRequest[*CompleteParams]) (*CompleteResult, error)
CompletionHandler func(context.Context, *CompleteRequest) (*CompleteResult, error)
// If non-zero, defines an interval for regular "ping" requests.
// If the peer fails to respond to pings originating from the keepalive check,
// the session is automatically closed.
KeepAlive time.Duration
// Function called when a client session subscribes to a resource.
SubscribeHandler func(context.Context, *ServerRequest[*SubscribeParams]) error
SubscribeHandler func(context.Context, *SubscribeRequest) error
// Function called when a client session unsubscribes from a resource.
UnsubscribeHandler func(context.Context, *ServerRequest[*UnsubscribeParams]) error
UnsubscribeHandler func(context.Context, *UnsubscribeRequest) error
// If true, advertises the prompts capability during initialization,
// even if no prompts have been registered.
HasPrompts bool
@ -212,7 +212,7 @@ func toolForErr[In, Out any](t *Tool, h ToolHandlerFor[In, Out]) (*Tool, ToolHan
}
}
th := func(ctx context.Context, req *ServerRequest[*CallToolParams]) (*CallToolResult, error) {
th := func(ctx context.Context, req *CallToolRequest) (*CallToolResult, error) {
// Unmarshal and validate args.
rawArgs := req.Params.Arguments.(json.RawMessage)
var in In
@ -395,7 +395,7 @@ func (s *Server) capabilities() *ServerCapabilities {
return caps
}
func (s *Server) complete(ctx context.Context, req *ServerRequest[*CompleteParams]) (Result, error) {
func (s *Server) complete(ctx context.Context, req *CompleteRequest) (Result, error) {
if s.opts.CompletionHandler == nil {
return nil, jsonrpc2.ErrMethodNotFound
}
@ -424,7 +424,7 @@ func (s *Server) Sessions() iter.Seq[*ServerSession] {
return slices.Values(clients)
}
func (s *Server) listPrompts(_ context.Context, req *ServerRequest[*ListPromptsParams]) (*ListPromptsResult, error) {
func (s *Server) listPrompts(_ context.Context, req *ListPromptsRequest) (*ListPromptsResult, error) {
s.mu.Lock()
defer s.mu.Unlock()
if req.Params == nil {
@ -438,7 +438,7 @@ func (s *Server) listPrompts(_ context.Context, req *ServerRequest[*ListPromptsP
})
}
func (s *Server) getPrompt(ctx context.Context, req *ServerRequest[*GetPromptParams]) (*GetPromptResult, error) {
func (s *Server) getPrompt(ctx context.Context, req *GetPromptRequest) (*GetPromptResult, error) {
s.mu.Lock()
prompt, ok := s.prompts.get(req.Params.Name)
s.mu.Unlock()
@ -452,7 +452,7 @@ func (s *Server) getPrompt(ctx context.Context, req *ServerRequest[*GetPromptPar
return prompt.handler(ctx, req.Session, req.Params)
}
func (s *Server) listTools(_ context.Context, req *ServerRequest[*ListToolsParams]) (*ListToolsResult, error) {
func (s *Server) listTools(_ context.Context, req *ListToolsRequest) (*ListToolsResult, error) {
s.mu.Lock()
defer s.mu.Unlock()
if req.Params == nil {
@ -466,7 +466,7 @@ func (s *Server) listTools(_ context.Context, req *ServerRequest[*ListToolsParam
})
}
func (s *Server) callTool(ctx context.Context, req *ServerRequest[*CallToolParams]) (*CallToolResult, error) {
func (s *Server) callTool(ctx context.Context, req *CallToolRequest) (*CallToolResult, error) {
s.mu.Lock()
st, ok := s.tools.get(req.Params.Name)
s.mu.Unlock()
@ -481,7 +481,7 @@ func (s *Server) callTool(ctx context.Context, req *ServerRequest[*CallToolParam
return st.handler(ctx, req)
}
func (s *Server) listResources(_ context.Context, req *ServerRequest[*ListResourcesParams]) (*ListResourcesResult, error) {
func (s *Server) listResources(_ context.Context, req *ListResourcesRequest) (*ListResourcesResult, error) {
s.mu.Lock()
defer s.mu.Unlock()
if req.Params == nil {
@ -495,7 +495,7 @@ func (s *Server) listResources(_ context.Context, req *ServerRequest[*ListResour
})
}
func (s *Server) listResourceTemplates(_ context.Context, req *ServerRequest[*ListResourceTemplatesParams]) (*ListResourceTemplatesResult, error) {
func (s *Server) listResourceTemplates(_ context.Context, req *ListResourceTemplatesRequest) (*ListResourceTemplatesResult, error) {
s.mu.Lock()
defer s.mu.Unlock()
if req.Params == nil {
@ -510,7 +510,7 @@ func (s *Server) listResourceTemplates(_ context.Context, req *ServerRequest[*Li
})
}
func (s *Server) readResource(ctx context.Context, req *ServerRequest[*ReadResourceParams]) (*ReadResourceResult, error) {
func (s *Server) readResource(ctx context.Context, req *ReadResourceRequest) (*ReadResourceResult, error) {
uri := req.Params.URI
// Look up the resource URI in the lists of resources and resource templates.
// This is a security check as well as an information lookup.
@ -575,7 +575,7 @@ func fileResourceHandler(dir string) ResourceHandler {
if err != nil {
panic(err)
}
return func(ctx context.Context, req *ServerRequest[*ReadResourceParams]) (_ *ReadResourceResult, err error) {
return func(ctx context.Context, req *ReadResourceRequest) (_ *ReadResourceResult, err error) {
defer util.Wrapf(&err, "reading resource %s", req.Params.URI)
// TODO(#25): use a memoizing API here.
@ -610,7 +610,7 @@ func (s *Server) ResourceUpdated(ctx context.Context, params *ResourceUpdatedNot
return nil
}
func (s *Server) subscribe(ctx context.Context, req *ServerRequest[*SubscribeParams]) (*emptyResult, error) {
func (s *Server) subscribe(ctx context.Context, req *SubscribeRequest) (*emptyResult, error) {
if s.opts.SubscribeHandler == nil {
return nil, fmt.Errorf("%w: server does not support resource subscriptions", jsonrpc2.ErrMethodNotFound)
}
@ -628,7 +628,7 @@ func (s *Server) subscribe(ctx context.Context, req *ServerRequest[*SubscribePar
return &emptyResult{}, nil
}
func (s *Server) unsubscribe(ctx context.Context, req *ServerRequest[*UnsubscribeParams]) (*emptyResult, error) {
func (s *Server) unsubscribe(ctx context.Context, req *UnsubscribeRequest) (*emptyResult, error) {
if s.opts.UnsubscribeHandler == nil {
return nil, jsonrpc2.ErrMethodNotFound
}
@ -762,7 +762,7 @@ func (ss *ServerSession) initialized(ctx context.Context, params *InitializedPar
return nil, nil
}
func (s *Server) callRootsListChangedHandler(ctx context.Context, req *ServerRequest[*RootsListChangedParams]) (Result, error) {
func (s *Server) callRootsListChangedHandler(ctx context.Context, req *RootsListChangedRequest) (Result, error) {
if h := s.opts.RootsListChangedHandler; h != nil {
h(ctx, req)
}