Documentation
¶
Overview ¶
Package handler provides a configurable MCP handler implementation.
It wires protocol handlers from the github.com/viant/mcp-protocol/handler package with optional middleware such as:
- Transport (HTTP, HTTP-SSE, Streaming, STDIO)
- OAuth2 / OIDC authorization
- CORS handling
- Structured logging
Callers typically construct a handler via `server.New` and then expose it over HTTP or stdio:
s, _ := handler.New(handler.WithNewHandler(myImpl)) log.Fatal(s.HTTP(ctx, ":4981").ListenAndServe())
Index ¶
- Constants
- func ChainMiddlewareHandlers(h http.Handler, mws ...Middleware) http.Handler
- type Adapter
- func (a *Adapter) CallTool(ctx context.Context, params *schema.CallToolRequestParams, ...) (*schema.CallToolResult, error)
- func (a *Adapter) Complete(ctx context.Context, params *schema.CompleteRequestParams, ...) (*schema.CompleteResult, error)
- func (a *Adapter) CreateMessage(ctx context.Context, params *schema.CreateMessageRequestParams, ...) (*schema.CreateMessageResult, error)
- func (a *Adapter) Elicit(ctx context.Context, params *schema.ElicitRequestParams, ...) (*schema.ElicitResult, error)
- func (a *Adapter) GetPrompt(ctx context.Context, params *schema.GetPromptRequestParams, ...) (*schema.GetPromptResult, error)
- func (a *Adapter) Initialize(ctx context.Context, options ...client.RequestOption) (*schema.InitializeResult, error)
- func (a *Adapter) ListPrompts(ctx context.Context, cursor *string, options ...client.RequestOption) (*schema.ListPromptsResult, error)
- func (a *Adapter) ListResourceTemplates(ctx context.Context, cursor *string, options ...client.RequestOption) (*schema.ListResourceTemplatesResult, error)
- func (a *Adapter) ListResources(ctx context.Context, cursor *string, options ...client.RequestOption) (*schema.ListResourcesResult, error)
- func (a *Adapter) ListRoots(ctx context.Context, params *schema.ListRootsRequestParams, ...) (*schema.ListRootsResult, error)
- func (a *Adapter) ListTools(ctx context.Context, cursor *string, options ...client.RequestOption) (*schema.ListToolsResult, error)
- func (a *Adapter) Ping(ctx context.Context, params *schema.PingRequestParams, ...) (*schema.PingResult, error)
- func (a *Adapter) ReadResource(ctx context.Context, params *schema.ReadResourceRequestParams, ...) (*schema.ReadResourceResult, error)
- func (a *Adapter) SetLevel(ctx context.Context, params *schema.SetLevelRequestParams, ...) (*schema.SetLevelResult, error)
- func (a *Adapter) Subscribe(ctx context.Context, params *schema.SubscribeRequestParams, ...) (*schema.SubscribeResult, error)
- func (a *Adapter) Unsubscribe(ctx context.Context, params *schema.UnsubscribeRequestParams, ...) (*schema.UnsubscribeResult, error)
- type Client
- func (c *Client) CreateMessage(ctx context.Context, ...) (*schema.CreateMessageResult, *jsonrpc.Error)
- func (c *Client) Elicit(ctx context.Context, request *jsonrpc.TypedRequest[*schema.ElicitRequest]) (*schema.ElicitResult, *jsonrpc.Error)
- func (c *Client) Implements(method string) bool
- func (c *Client) Init(ctx context.Context, capabilities *schema.ClientCapabilities)
- func (c *Client) ListRoots(ctx context.Context, request *jsonrpc.TypedRequest[*schema.ListRootsRequest]) (*schema.ListRootsResult, *jsonrpc.Error)
- func (c *Client) NextRequestId() uint64
- type Cors
- type Handler
- func (h *Handler) CallTool(ctx context.Context, request *jsonrpc.Request) (*schema.CallToolResult, *jsonrpc.Error)
- func (h *Handler) Cancel(ctx context.Context, notification *jsonrpc.Notification) *jsonrpc.Error
- func (h *Handler) Complete(ctx context.Context, request *jsonrpc.Request) (*schema.CompleteResult, *jsonrpc.Error)
- func (h *Handler) GetPrompt(ctx context.Context, request *jsonrpc.Request) (*schema.GetPromptResult, *jsonrpc.Error)
- func (h *Handler) Initialize(ctx context.Context, request *jsonrpc.Request) (*schema.InitializeResult, *jsonrpc.Error)
- func (h *Handler) ListPrompts(ctx context.Context, request *jsonrpc.Request) (*schema.ListPromptsResult, *jsonrpc.Error)
- func (h *Handler) ListResourceTemplates(ctx context.Context, request *jsonrpc.Request) (*schema.ListResourceTemplatesResult, *jsonrpc.Error)
- func (h *Handler) ListResources(ctx context.Context, request *jsonrpc.Request) (*schema.ListResourcesResult, *jsonrpc.Error)
- func (h *Handler) ListTools(ctx context.Context, request *jsonrpc.Request) (*schema.ListToolsResult, *jsonrpc.Error)
- func (h *Handler) OnNotification(ctx context.Context, notification *jsonrpc.Notification)
- func (h *Handler) Ping(ctx context.Context, request *jsonrpc.Request) (*schema.PingResult, *jsonrpc.Error)
- func (h *Handler) ReadResource(ctx context.Context, request *jsonrpc.Request) (*schema.ReadResourceResult, *jsonrpc.Error)
- func (h *Handler) Serve(parent context.Context, request *jsonrpc.Request, response *jsonrpc.Response)
- func (h *Handler) SetLevel(ctx context.Context, request *jsonrpc.Request) (*schema.SetLevelResult, *jsonrpc.Error)
- func (h *Handler) Subscribe(ctx context.Context, request *jsonrpc.Request) (*schema.SubscribeResult, *jsonrpc.Error)
- func (h *Handler) Unsubscribe(ctx context.Context, request *jsonrpc.Request) (*schema.UnsubscribeResult, *jsonrpc.Error)
- type Logger
- func (l *Logger) Alert(ctx context.Context, data interface{}) error
- func (l *Logger) Critical(ctx context.Context, data interface{}) error
- func (l *Logger) Debug(ctx context.Context, data interface{}) error
- func (l *Logger) Emergency(ctx context.Context, data interface{}) error
- func (l *Logger) Error(ctx context.Context, data interface{}) error
- func (l *Logger) Info(ctx context.Context, data interface{}) error
- func (l *Logger) Logger(name string) logger.Logger
- func (l *Logger) Notice(ctx context.Context, data interface{}) error
- func (l *Logger) Warning(ctx context.Context, data interface{}) error
- type Middleware
- type Option
- func WithAuthorizer(authorizer Middleware) Option
- func WithCORS(cors *Cors) Option
- func WithCustomHTTPHandler(path string, handler http.HandlerFunc) Option
- func WithEndpointAddress(addr string) Option
- func WithImplementation(implementation schema.Implementation) Option
- func WithJRPCAuthorizer(authorizer auth.JRPCAuthorizer) Option
- func WithLoggerName(name string) Option
- func WithNewHandler(newHandler server.NewHandler) Option
- func WithProtectedResourcesHandler(handler http.HandlerFunc) Option
- func WithProtocolVersion(version string) Option
- func WithRootRedirect(enable bool) Option
- func WithSSEMessageURI(uri string) Option
- func WithSSEURI(uri string) Option
- func WithStreamableURI(uri string) Option
- type Server
- func (s *Server) AsClient(ctx context.Context) client.Interface
- func (s *Server) CancelOperation(id int)
- func (s *Server) HTTP(_ context.Context, addr string) *http.Server
- func (s *Server) NewHandler(ctx context.Context, transport transport.Transport) transport.Handler
- func (s *Server) Stdio(ctx context.Context) *stdio.Server
- func (s *Server) UseStreamableHTTP(flag bool)
Constants ¶
const ( AllowOriginHeader = "Access-Control-Allow-Origin" AllowHeadersHeader = "Access-Control-Allow-Headers" AllowMethodsHeader = "Access-Control-Allow-Methods" AllControlRequestHeader = "Access-Control-Request-Method" AllowCredentialsHeader = "Access-Control-Allow-Credentials" ExposeHeadersHeader = "Access-Control-Expose-Headers" MaxAgeHeader = "Access-Control-Max-Age" Separator = ", " )
Variables ¶
This section is empty.
Functions ¶
func ChainMiddlewareHandlers ¶ added in v0.2.5
func ChainMiddlewareHandlers(h http.Handler, mws ...Middleware) http.Handler
ChainMiddlewareHandlers chains multiple middleware handlers together
Types ¶
type Adapter ¶ added in v0.2.5
type Adapter struct {
// contains filtered or unexported fields
}
Adapter adapts a handler Handler to implement the client.Interface
func NewAdapter ¶ added in v0.2.5
NewAdapter creates a new adapter for the given handler
func (*Adapter) CallTool ¶ added in v0.2.5
func (a *Adapter) CallTool(ctx context.Context, params *schema.CallToolRequestParams, options ...client.RequestOption) (*schema.CallToolResult, error)
CallTool calls a tool
func (*Adapter) Complete ¶ added in v0.2.5
func (a *Adapter) Complete(ctx context.Context, params *schema.CompleteRequestParams, options ...client.RequestOption) (*schema.CompleteResult, error)
Complete completes a request
func (*Adapter) CreateMessage ¶ added in v0.2.10
func (a *Adapter) CreateMessage(ctx context.Context, params *schema.CreateMessageRequestParams, options ...client.RequestOption) (*schema.CreateMessageResult, error)
CreateMessage proxies "sampling/createMessage" to the underlying handler.
func (*Adapter) Elicit ¶ added in v0.2.10
func (a *Adapter) Elicit(ctx context.Context, params *schema.ElicitRequestParams, options ...client.RequestOption) (*schema.ElicitResult, error)
Elicit proxies "elicitation/create" to the underlying handler.
func (*Adapter) GetPrompt ¶ added in v0.2.5
func (a *Adapter) GetPrompt(ctx context.Context, params *schema.GetPromptRequestParams, options ...client.RequestOption) (*schema.GetPromptResult, error)
GetPrompt gets a prompt
func (*Adapter) Initialize ¶ added in v0.2.5
func (a *Adapter) Initialize(ctx context.Context, options ...client.RequestOption) (*schema.InitializeResult, error)
Initialize initializes the client
func (*Adapter) ListPrompts ¶ added in v0.2.5
func (a *Adapter) ListPrompts(ctx context.Context, cursor *string, options ...client.RequestOption) (*schema.ListPromptsResult, error)
ListPrompts lists prompts
func (*Adapter) ListResourceTemplates ¶ added in v0.2.5
func (a *Adapter) ListResourceTemplates(ctx context.Context, cursor *string, options ...client.RequestOption) (*schema.ListResourceTemplatesResult, error)
ListResourceTemplates lists resource templates
func (*Adapter) ListResources ¶ added in v0.2.5
func (a *Adapter) ListResources(ctx context.Context, cursor *string, options ...client.RequestOption) (*schema.ListResourcesResult, error)
ListResources lists resources
func (*Adapter) ListRoots ¶ added in v0.2.10
func (a *Adapter) ListRoots(ctx context.Context, params *schema.ListRootsRequestParams, options ...client.RequestOption) (*schema.ListRootsResult, error)
ListRoots proxies "roots/list" to the underlying handler.
func (*Adapter) ListTools ¶ added in v0.2.5
func (a *Adapter) ListTools(ctx context.Context, cursor *string, options ...client.RequestOption) (*schema.ListToolsResult, error)
ListTools lists tools
func (*Adapter) Ping ¶ added in v0.2.5
func (a *Adapter) Ping(ctx context.Context, params *schema.PingRequestParams, options ...client.RequestOption) (*schema.PingResult, error)
Ping pings the handler
func (*Adapter) ReadResource ¶ added in v0.2.5
func (a *Adapter) ReadResource(ctx context.Context, params *schema.ReadResourceRequestParams, options ...client.RequestOption) (*schema.ReadResourceResult, error)
ReadResource reads a resource
func (*Adapter) SetLevel ¶ added in v0.2.5
func (a *Adapter) SetLevel(ctx context.Context, params *schema.SetLevelRequestParams, options ...client.RequestOption) (*schema.SetLevelResult, error)
SetLevel sets the logging level
func (*Adapter) Subscribe ¶ added in v0.2.5
func (a *Adapter) Subscribe(ctx context.Context, params *schema.SubscribeRequestParams, options ...client.RequestOption) (*schema.SubscribeResult, error)
Subscribe subscribes to a resource
func (*Adapter) Unsubscribe ¶ added in v0.2.5
func (a *Adapter) Unsubscribe(ctx context.Context, params *schema.UnsubscribeRequestParams, options ...client.RequestOption) (*schema.UnsubscribeResult, error)
Unsubscribe unsubscribes from a resource
type Client ¶
type Client struct {
transport.Transport
transport.Sequencer
// contains filtered or unexported fields
}
Client implements mcp-protocol/client.Operations for the handler side. It allows handler implementers to invoke client-side RPC methods over the same transport channel on which the original request arrived.
func (*Client) CreateMessage ¶
func (c *Client) CreateMessage(ctx context.Context, request *jsonrpc.TypedRequest[*schema.CreateMessageRequest]) (*schema.CreateMessageResult, *jsonrpc.Error)
CreateMessage creates a sampling message on the client side.
func (*Client) Elicit ¶ added in v0.2.10
func (c *Client) Elicit(ctx context.Context, request *jsonrpc.TypedRequest[*schema.ElicitRequest]) (*schema.ElicitResult, *jsonrpc.Error)
Elicit asks the client to elicit additional information from the user.
func (*Client) Implements ¶ added in v0.2.11
func (*Client) Init ¶ added in v0.2.11
func (c *Client) Init(ctx context.Context, capabilities *schema.ClientCapabilities)
func (*Client) ListRoots ¶
func (c *Client) ListRoots(ctx context.Context, request *jsonrpc.TypedRequest[*schema.ListRootsRequest]) (*schema.ListRootsResult, *jsonrpc.Error)
func (*Client) NextRequestId ¶ added in v0.4.2
type Cors ¶ added in v0.2.5
type Cors struct {
AllowCredentials *bool `yaml:"AllowCredentials,omitempty"`
AllowHeaders []string `yaml:"AllowHeaders,omitempty"`
AllowMethods []string `yaml:"AllowMethods,omitempty"`
AllowOrigins []string `yaml:"AllowOrigins,omitempty"`
ExposeHeaders []string `yaml:"ExposeHeaders,omitempty"`
MaxAge *int64 `yaml:"MaxAge,omitempty"`
}
type Handler ¶
type Handler struct {
transport.Notifier
*Logger
*Server
Initialized bool
// contains filtered or unexported fields
}
Handler represents handler
func (*Handler) CallTool ¶
func (h *Handler) CallTool(ctx context.Context, request *jsonrpc.Request) (*schema.CallToolResult, *jsonrpc.Error)
CallTool handles the tools/call method
func (*Handler) Complete ¶
func (h *Handler) Complete(ctx context.Context, request *jsonrpc.Request) (*schema.CompleteResult, *jsonrpc.Error)
Complete handles the completion/complete method
func (*Handler) GetPrompt ¶
func (h *Handler) GetPrompt(ctx context.Context, request *jsonrpc.Request) (*schema.GetPromptResult, *jsonrpc.Error)
GetPrompt handles the prompts/get method
func (*Handler) Initialize ¶
func (h *Handler) Initialize(ctx context.Context, request *jsonrpc.Request) (*schema.InitializeResult, *jsonrpc.Error)
Initialize handles the initialize method
func (*Handler) ListPrompts ¶
func (h *Handler) ListPrompts(ctx context.Context, request *jsonrpc.Request) (*schema.ListPromptsResult, *jsonrpc.Error)
ListPrompts handles the prompts/list method
func (*Handler) ListResourceTemplates ¶
func (h *Handler) ListResourceTemplates(ctx context.Context, request *jsonrpc.Request) (*schema.ListResourceTemplatesResult, *jsonrpc.Error)
ListResourceTemplates handles the resources/templates/list method
func (*Handler) ListResources ¶
func (h *Handler) ListResources(ctx context.Context, request *jsonrpc.Request) (*schema.ListResourcesResult, *jsonrpc.Error)
ListResources handles the resources/list method
func (*Handler) ListTools ¶
func (h *Handler) ListTools(ctx context.Context, request *jsonrpc.Request) (*schema.ListToolsResult, *jsonrpc.Error)
ListTools handles the tools/list method
func (*Handler) OnNotification ¶
func (h *Handler) OnNotification(ctx context.Context, notification *jsonrpc.Notification)
OnNotification handles incoming JSON-RPC notifications
func (*Handler) Ping ¶
func (h *Handler) Ping(ctx context.Context, request *jsonrpc.Request) (*schema.PingResult, *jsonrpc.Error)
Ping handles the ping method
func (*Handler) ReadResource ¶
func (h *Handler) ReadResource(ctx context.Context, request *jsonrpc.Request) (*schema.ReadResourceResult, *jsonrpc.Error)
ReadResource handles the resources/read method
func (*Handler) Serve ¶
func (h *Handler) Serve(parent context.Context, request *jsonrpc.Request, response *jsonrpc.Response)
Serve handles incoming JSON-RPC requests
func (*Handler) SetLevel ¶
func (h *Handler) SetLevel(ctx context.Context, request *jsonrpc.Request) (*schema.SetLevelResult, *jsonrpc.Error)
SetLevel handles the logging/setLevel method
type Logger ¶
type Logger struct {
// contains filtered or unexported fields
}
type Middleware ¶ added in v0.2.5
Middleware is a function that takes an http.Handler and returns an http.Handler
type Option ¶
Option is a function that configures the handler.
func WithAuthorizer ¶
func WithAuthorizer(authorizer Middleware) Option
WithAuthorizer adds a new authorizer to the handler.
func WithCustomHTTPHandler ¶ added in v0.4.0
func WithCustomHTTPHandler(path string, handler http.HandlerFunc) Option
WithCustomHTTPHandler adds a custom handler to the handler.
func WithEndpointAddress ¶ added in v0.2.10
WithEndpointAddress sets the protocol version.
func WithImplementation ¶
func WithImplementation(implementation schema.Implementation) Option
WithImplementation sets the handler implementation.
func WithJRPCAuthorizer ¶ added in v0.2.5
func WithJRPCAuthorizer(authorizer auth.JRPCAuthorizer) Option
WithJRPCAuthorizer adds a new JRPCAuthorizer to the handler.
func WithNewHandler ¶ added in v0.4.0
func WithNewHandler(newHandler server.NewHandler) Option
WithNewHandler sets the new handler.
func WithProtectedResourcesHandler ¶ added in v0.2.5
func WithProtectedResourcesHandler(handler http.HandlerFunc) Option
func WithProtocolVersion ¶ added in v0.2.10
WithProtocolVersion sets the protocol version for the handler.
func WithRootRedirect ¶ added in v0.7.0
WithRootRedirect enables redirect from "/" to the active transport base URI.
func WithSSEMessageURI ¶ added in v0.7.0
WithSSEMessageURI sets the message POST URI for SSE transport (default "/message").
func WithSSEURI ¶ added in v0.7.0
WithSSEURI sets the base URI for the SSE endpoint (default "/sse").
func WithStreamableURI ¶ added in v0.7.0
WithStreamableURI sets the base URI for the streamable HTTP endpoint (default "/mcp").
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server represents MCP protocol handler
func (*Server) AsClient ¶ added in v0.2.5
AsClient returns a client.Interface implementation that uses this handler directly
func (*Server) CancelOperation ¶ added in v0.4.2
func (*Server) HTTP ¶
HTTP creates and returns an HTTP handler with OAuth2 authorizer and SSE handlers.
func (*Server) NewHandler ¶
NewHandler creates a new handler instance
func (*Server) UseStreamableHTTP ¶ added in v0.7.0
UseStreamableHTTP sets whether to use streamableHTTP or SSE for the HTTP handler.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package auth exposes helpers that make it easy to protect an MCP server with OAuth2/OIDC.
|
Package auth exposes helpers that make it easy to protect an MCP server with OAuth2/OIDC. |
|
Package namespace provides a reusable, policy-aware namespace resolution utility for MCP servers and services.
|
Package namespace provides a reusable, policy-aware namespace resolution utility for MCP servers and services. |
|
Package oob provides minimal, generic primitives to manage out-of-band (OOB) interactions using typed pending entries bound to a namespace.
|
Package oob provides minimal, generic primitives to manage out-of-band (OOB) interactions using typed pending entries bound to a namespace. |