Documentation
¶
Overview ¶
Package clientHandler implements a high-level Go clientHandler for the Model Context Protocol (MCP).
It provides a thin wrapper around the protocol interface defined in the github.com/viant/mcp-protocol module and adds:
- Automatic `initialize` handshake and capability negotiation.
- Pluggable JSON-RPC transports (STDIO, HTTP/SSE, Streaming …).
- Optional authorization interceptor that can acquire OAuth2/OIDC tokens on the fly and transparently retry failed requests.
- Convenience helpers such as strongly typed `ListResources`, `CallTool`, `Complete`, … methods that avoid manual request/response handling.
The package is transport-agnostic; callers supply any implementation that satisfies the jsonrpc/transport.Transport interface.
Example:
sseTransport, _ := sse.New(ctx, "https://mcp.example.com/sse")
cli := clientHandler.New("demo", "1.0", sseTransport, clientHandler.WithCapabilities(schema.ClientCapabilities{}))
res, _ := cli.ListResources(ctx, nil)
fmt.Println(res.Resources)
Index ¶
- type Client
- func (c *Client) CallTool(ctx context.Context, params *schema.CallToolRequestParams, ...) (*schema.CallToolResult, error)
- func (c *Client) Close()
- func (c *Client) Complete(ctx context.Context, params *schema.CompleteRequestParams, ...) (*schema.CompleteResult, error)
- func (c *Client) CreateMessage(ctx context.Context, params *schema.CreateMessageRequestParams, ...) (*schema.CreateMessageResult, error)
- func (c *Client) Elicit(ctx context.Context, params *schema.ElicitRequestParams, ...) (*schema.ElicitResult, error)
- func (c *Client) GetPrompt(ctx context.Context, params *schema.GetPromptRequestParams, ...) (*schema.GetPromptResult, error)
- func (c *Client) Initialize(ctx context.Context, options ...RequestOption) (*schema.InitializeResult, error)
- func (c *Client) ListPrompts(ctx context.Context, cursor *string, options ...RequestOption) (*schema.ListPromptsResult, error)
- func (c *Client) ListResourceTemplates(ctx context.Context, cursor *string, options ...RequestOption) (*schema.ListResourceTemplatesResult, error)
- func (c *Client) ListResources(ctx context.Context, cursor *string, options ...RequestOption) (*schema.ListResourcesResult, error)
- func (c *Client) ListRoots(ctx context.Context, params *schema.ListRootsRequestParams, ...) (*schema.ListRootsResult, error)
- func (c *Client) ListTools(ctx context.Context, cursor *string, options ...RequestOption) (*schema.ListToolsResult, error)
- func (c *Client) Ping(ctx context.Context, params *schema.PingRequestParams, ...) (*schema.PingResult, error)
- func (c *Client) ReadResource(ctx context.Context, params *schema.ReadResourceRequestParams, ...) (*schema.ReadResourceResult, error)
- func (c *Client) SetLevel(ctx context.Context, params *schema.SetLevelRequestParams, ...) (*schema.SetLevelResult, error)
- func (c *Client) Subscribe(ctx context.Context, params *schema.SubscribeRequestParams, ...) (*schema.SubscribeResult, error)
- func (c *Client) Unsubscribe(ctx context.Context, params *schema.UnsubscribeRequestParams, ...) (*schema.UnsubscribeResult, error)
- type Handler
- func (h *Handler) CreateMessageRequest(ctx context.Context, request *jsonrpc.Request) (*schema.CreateMessageResult, *jsonrpc.Error)
- func (h *Handler) Elicit(ctx context.Context, request *jsonrpc.Request) (*schema.ElicitResult, *jsonrpc.Error)
- func (h *Handler) ListRoots(ctx context.Context, request *jsonrpc.Request) (*schema.ListRootsResult, *jsonrpc.Error)
- func (s *Handler) OnNotification(ctx context.Context, notification *jsonrpc.Notification)
- func (h *Handler) Serve(ctx context.Context, request *jsonrpc.Request, response *jsonrpc.Response)
- type Interface
- type Option
- func WithAuthInterceptor(authorizer *auth.Authorizer) Option
- func WithCapabilities(capabilities schema.ClientCapabilities) Option
- func WithClientHandler(handler pclient.Handler) Option
- func WithMetadata(metadata map[string]any) Option
- func WithPingInterval(interval time.Duration) Option
- func WithProtocolVersion(version string) Option
- func WithReconnect(reconnect func(ctx context.Context) (transport.Transport, error)) Option
- type RequestOption
- type RequestOptions
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
func (*Client) CallTool ¶
func (c *Client) CallTool(ctx context.Context, params *schema.CallToolRequestParams, options ...RequestOption) (*schema.CallToolResult, error)
func (*Client) Close ¶ added in v0.8.2
func (c *Client) Close()
Close stops background routines (like pinger). It does not close underlying transports.
func (*Client) Complete ¶
func (c *Client) Complete(ctx context.Context, params *schema.CompleteRequestParams, options ...RequestOption) (*schema.CompleteResult, error)
func (*Client) CreateMessage ¶ added in v0.2.10
func (c *Client) CreateMessage(ctx context.Context, params *schema.CreateMessageRequestParams, options ...RequestOption) (*schema.CreateMessageResult, error)
func (*Client) Elicit ¶ added in v0.2.10
func (c *Client) Elicit(ctx context.Context, params *schema.ElicitRequestParams, options ...RequestOption) (*schema.ElicitResult, error)
func (*Client) GetPrompt ¶
func (c *Client) GetPrompt(ctx context.Context, params *schema.GetPromptRequestParams, options ...RequestOption) (*schema.GetPromptResult, error)
func (*Client) Initialize ¶
func (c *Client) Initialize(ctx context.Context, options ...RequestOption) (*schema.InitializeResult, error)
func (*Client) ListPrompts ¶
func (c *Client) ListPrompts(ctx context.Context, cursor *string, options ...RequestOption) (*schema.ListPromptsResult, error)
func (*Client) ListResourceTemplates ¶
func (c *Client) ListResourceTemplates(ctx context.Context, cursor *string, options ...RequestOption) (*schema.ListResourceTemplatesResult, error)
func (*Client) ListResources ¶
func (c *Client) ListResources(ctx context.Context, cursor *string, options ...RequestOption) (*schema.ListResourcesResult, error)
func (*Client) ListRoots ¶ added in v0.2.10
func (c *Client) ListRoots(ctx context.Context, params *schema.ListRootsRequestParams, options ...RequestOption) (*schema.ListRootsResult, error)
func (*Client) ListTools ¶
func (c *Client) ListTools(ctx context.Context, cursor *string, options ...RequestOption) (*schema.ListToolsResult, error)
func (*Client) Ping ¶
func (c *Client) Ping(ctx context.Context, params *schema.PingRequestParams, options ...RequestOption) (*schema.PingResult, error)
func (*Client) ReadResource ¶
func (c *Client) ReadResource(ctx context.Context, params *schema.ReadResourceRequestParams, options ...RequestOption) (*schema.ReadResourceResult, error)
func (*Client) SetLevel ¶
func (c *Client) SetLevel(ctx context.Context, params *schema.SetLevelRequestParams, options ...RequestOption) (*schema.SetLevelResult, error)
func (*Client) Subscribe ¶
func (c *Client) Subscribe(ctx context.Context, params *schema.SubscribeRequestParams, options ...RequestOption) (*schema.SubscribeResult, error)
func (*Client) Unsubscribe ¶
func (c *Client) Unsubscribe(ctx context.Context, params *schema.UnsubscribeRequestParams, options ...RequestOption) (*schema.UnsubscribeResult, error)
type Handler ¶
type Handler struct {
// contains filtered or unexported fields
}
func NewHandler ¶ added in v0.3.1
NewHandler create clientHandler clientHandler
func (*Handler) CreateMessageRequest ¶
func (h *Handler) CreateMessageRequest(ctx context.Context, request *jsonrpc.Request) (*schema.CreateMessageResult, *jsonrpc.Error)
CreateMessageRequest handles the sampling/createMessage method
func (*Handler) Elicit ¶ added in v0.2.10
func (h *Handler) Elicit(ctx context.Context, request *jsonrpc.Request) (*schema.ElicitResult, *jsonrpc.Error)
Elicit handles the "elicitation/create" method.
func (*Handler) ListRoots ¶
func (h *Handler) ListRoots(ctx context.Context, request *jsonrpc.Request) (*schema.ListRootsResult, *jsonrpc.Error)
ListRoots handles the root/listRoots method
func (*Handler) OnNotification ¶
func (s *Handler) OnNotification(ctx context.Context, notification *jsonrpc.Notification)
type Interface ¶ added in v0.2.5
type Interface interface {
// Initialize initializes the clientHandler
Initialize(ctx context.Context, options ...RequestOption) (*schema.InitializeResult, error)
// ListResourceTemplates lists resource templates
ListResourceTemplates(ctx context.Context, cursor *string, options ...RequestOption) (*schema.ListResourceTemplatesResult, error)
// ListResources lists resources
ListResources(ctx context.Context, cursor *string, options ...RequestOption) (*schema.ListResourcesResult, error)
// ListPrompts lists prompts
ListPrompts(ctx context.Context, cursor *string, options ...RequestOption) (*schema.ListPromptsResult, error)
// ListTools lists tools
ListTools(ctx context.Context, cursor *string, options ...RequestOption) (*schema.ListToolsResult, error)
// ReadResource reads a resource
ReadResource(ctx context.Context, params *schema.ReadResourceRequestParams, options ...RequestOption) (*schema.ReadResourceResult, error)
// GetPrompt gets a prompt
GetPrompt(ctx context.Context, params *schema.GetPromptRequestParams, options ...RequestOption) (*schema.GetPromptResult, error)
// CallTool calls a tool
CallTool(ctx context.Context, params *schema.CallToolRequestParams, options ...RequestOption) (*schema.CallToolResult, error)
// Complete completes a request
Complete(ctx context.Context, params *schema.CompleteRequestParams, options ...RequestOption) (*schema.CompleteResult, error)
// Ping pings the server
Ping(ctx context.Context, params *schema.PingRequestParams, options ...RequestOption) (*schema.PingResult, error)
// Subscribe subscribes to a resource
Subscribe(ctx context.Context, params *schema.SubscribeRequestParams, options ...RequestOption) (*schema.SubscribeResult, error)
// Unsubscribe unsubscribes from a resource
Unsubscribe(ctx context.Context, params *schema.UnsubscribeRequestParams, options ...RequestOption) (*schema.UnsubscribeResult, error)
// SetLevel sets the logging level
SetLevel(ctx context.Context, params *schema.SetLevelRequestParams, options ...RequestOption) (*schema.SetLevelResult, error)
// ListRoots lists clientHandler roots (clientHandler side capability discovery)
ListRoots(ctx context.Context, params *schema.ListRootsRequestParams, options ...RequestOption) (*schema.ListRootsResult, error)
// CreateMessage creates a sampling message on the clientHandler side
CreateMessage(ctx context.Context, params *schema.CreateMessageRequestParams, options ...RequestOption) (*schema.CreateMessageResult, error)
// Elicit is a server-initiated request asking the clientHandler to elicit additional information from the end-user
Elicit(ctx context.Context, params *schema.ElicitRequestParams, options ...RequestOption) (*schema.ElicitResult, error)
}
Interface defines the clientHandler interface for all exported methods
type Option ¶
type Option func(c *Client)
Option represents option
func WithAuthInterceptor ¶
func WithAuthInterceptor(authorizer *auth.Authorizer) Option
WithAuthInterceptor attaches an Authorizer to the clientHandler, enabling automatic retry of requests when receiving a 401 Unauthorized response. The interceptor's Intercept method will be called after each Send.
func WithCapabilities ¶
func WithCapabilities(capabilities schema.ClientCapabilities) Option
WithCapabilities set capabilites
func WithClientHandler ¶ added in v0.4.0
WithClientHandler with clientHandler
func WithPingInterval ¶ added in v0.8.2
WithPingInterval enables a background pinger with the specified interval. Set to a positive duration (e.g., 30*time.Second) to keep sessions warm and detect/recover from transport issues. Zero or negative disables pinger.
func WithProtocolVersion ¶ added in v0.2.7
func WithReconnect ¶ added in v0.5.1
WithReconnect sets reconnect function that can rebuild transport and perform re-initialization. It is used internally to automatically recover from transport-level errors like expired sessions. External callers typically do not need to set this option directly – it is configured by the mcp.NewClient helper that builds an MCP client from ClientOptions.
type RequestOption ¶ added in v0.5.3
type RequestOption func(*RequestOptions)
func WithAuthToken ¶ added in v0.5.3
func WithAuthToken(token string) RequestOption
func WithJsonRpcRequestId ¶ added in v0.5.3
func WithJsonRpcRequestId(requestId jsonrpc.RequestId) RequestOption
type RequestOptions ¶ added in v0.5.3
func NewRequestOptions ¶ added in v0.5.3
func NewRequestOptions(options []RequestOption) *RequestOptions
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package auth contains supporting helpers that enable fine-grained client side authorization when talking to an MCP server.
|
Package auth contains supporting helpers that enable fine-grained client side authorization when talking to an MCP server. |
|
mock
Package mock provides in-memory and stub implementations that facilitate unit testing of the client-side authorization flow.
|
Package mock provides in-memory and stub implementations that facilitate unit testing of the client-side authorization flow. |
|
store
Package store defines simple token and client-configuration stores used by the authorization helpers in the parent `auth` package.
|
Package store defines simple token and client-configuration stores used by the authorization helpers in the parent `auth` package. |
|
transport
Package transport implements an http.RoundTripper that performs the OAuth 2.1 [Protected Resource Metadata](https://www.rfc-editor.org/rfc/rfc9728) discovery, token acquisition and automatic request retry logic required by MCP when a server challenges the client with `401 Unauthorized`.
|
Package transport implements an http.RoundTripper that performs the OAuth 2.1 [Protected Resource Metadata](https://www.rfc-editor.org/rfc/rfc9728) discovery, token acquisition and automatic request retry logic required by MCP when a server challenges the client with `401 Unauthorized`. |