client

package
v0.8.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 10, 2025 License: Apache-2.0 Imports: 13 Imported by: 3

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

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 New

func New(name, version string, transport transport.Transport, options ...Option) *Client

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

func NewHandler(handler pclient.Handler) *Handler

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)

func (*Handler) Serve

func (h *Handler) Serve(ctx context.Context, request *jsonrpc.Request, response *jsonrpc.Response)

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

func WithClientHandler(handler pclient.Handler) Option

WithClientHandler with clientHandler

func WithMetadata

func WithMetadata(metadata map[string]any) Option

WithMetadata with meta

func WithPingInterval added in v0.8.2

func WithPingInterval(interval time.Duration) Option

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 WithProtocolVersion(version string) Option

func WithReconnect added in v0.5.1

func WithReconnect(reconnect func(ctx context.Context) (transport.Transport, error)) Option

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

type RequestOptions struct {
	RequestId   jsonrpc.RequestId
	StringToken string
}

func NewRequestOptions added in v0.5.3

func NewRequestOptions(options []RequestOption) *RequestOptions

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`.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL