Documentation
¶
Overview ¶
Package mcp provides high-level helpers for working with the Model Context Protocol (MCP).
The package glues the low-level protocol types defined in the github.com/viant/mcp-protocol module with concrete transports, authentication layers and convenience configuration structures. In practice it is used as an umbrella package that exposes two primary entry-points:
- NewClient – returns a fully configured MCP client instance and
- NewServer – returns a fully configured MCP server instance.
Both constructors accept option structures that can be populated from CLI flags or configuration files, making it straightforward to spin up an MCP client/server with support for HTTP(SSE) or stdio transports, OAuth2 / "backend-for-frontend" flows and custom metadata.
Example:
srv, _ := mcp.NewServer(myImplementation, &mcp.ServerOptions{ /* … */ }) cli, _ := mcp.NewClient(srv, &mcp.ClientOptions{ /* … */ })
See the README for a more complete introduction.
Index ¶
- func NewClient(handler pclient.Handler, options *ClientOptions) (*client.Client, error)
- func NewServer(newHandler protoserver.NewHandler, options *ServerOptions) (*server.Server, error)
- type ClientAuth
- type ClientOptions
- type ClientTransport
- type ClientTransportHTTP
- type ClientTransportStdio
- type ServerOptionAuth
- type ServerOptions
- type ServerTransport
- type ServerTransportOptions
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NewClient ¶
NewClient creates an MCP client with transport and authorization configured via ClientOptions.
func NewServer ¶
func NewServer(newHandler protoserver.NewHandler, options *ServerOptions) (*server.Server, error)
NewServer creates a new MCP server with the given implementer and options.
Types ¶
type ClientAuth ¶
type ClientAuth struct { OAuth2ConfigURL []string `yaml:"oauth2ConfigURL,omitempty" json:"oauth2ConfigURL,omitempty" short:"c" long:"config" description:"oauth2 config file"` EncryptionKey string `yaml:"encryptionKey,omitempty" json:"encryptionKey,omitempty" short:"k" long:"key" description:"encryption key"` UseIdToken bool `yaml:"useIdToken,omitempty" json:"useIdToken,omitempty"` BackendForFrontend bool `` /* 149-byte string literal not displayed */ }
ClientAuth defines authentication options for an MCP client.
type ClientOptions ¶
type ClientOptions struct { Name string `yaml:"name" json:"name,omitempty" short:"n" long:"name" description:"mcp name"` Version string `yaml:"version,omitempty" json:"version,omitempty" short:"v" long:"version" description:"mcp version"` ProtocolVersion string `yaml:"protocol,omitempty" json:"protocol,omitempty" short:"p" long:"protocol" description:"mcp protocol"` Namespace string `yaml:"namespace,omitempty" json:"namespace,omitempty" short:"N" long:"namespace" description:"mcp namespace"` Transport ClientTransport `yaml:"transport,omitempty" json:"transport,omitempty" short:"t" long:"transport" description:"mcp transport options"` Auth *ClientAuth `yaml:"auth,omitempty" json:"auth,omitempty" short:"a" long:"auth" description:"mcp auth options"` }
ClientOptions
defines options for configuring an MCP client.
func (*ClientOptions) Init ¶
func (c *ClientOptions) Init()
func (*ClientOptions) Options ¶
func (c *ClientOptions) Options(authRT *authtransport.RoundTripper) []client.Option
Options builds client options (metadata and auth interceptor) based on ClientOptions.Auth and Namespace.
type ClientTransport ¶
type ClientTransport struct { Type string `` /* 165-byte string literal not displayed */ ClientTransportStdio `yaml:",inline"` ClientTransportHTTP `yaml:",inline"` }
ClientTransport defines transport options for an MCP client.
type ClientTransportHTTP ¶
type ClientTransportHTTP struct {
URL string `yaml:"url" json:"url" short:"u" long:"url" description:"mcp url"`
}
ClientTransportHTTP defines options for a server-sent events transport for an MCP client.
type ClientTransportStdio ¶
type ClientTransportStdio struct { Command string `yaml:"command" json:"command" short:"C" long:"command" description:"mcp command"` Arguments []string `yaml:"arguments" json:"arguments" short:"A" long:"arguments" description:"mcp command arguments"` }
ClientTransportStdio defines options for a standard input/output transport for an MCP client.
type ServerOptionAuth ¶
type ServerOptionAuth struct { ProtectedResourcesHandler http.HandlerFunc Authorizer server.Middleware JRPCAuthorizer auth.JRPCAuthorizer //experimental UseJRPCAuthorizer bool // if true, JRPCAuthorizer will be used for JSON-RPC requests //Optional metadata for protected resources Policy *authorization.Policy }
type ServerOptions ¶
type ServerOptions struct { Name string `yaml:"name" json:"name"` Version string `yaml:"version" json:"version"` ProtocolVersion string `yaml:"protocol" json:"protocol" short:"p" long:"protocol" description:"mcp protocol"` LoggerName string `yaml:"loggerName" json:"loggerName"` Transport *ServerTransport `yaml:"transport" json:"transport"` }
ServerOptions defines options for configuring an MCP server.
type ServerTransport ¶
type ServerTransport struct { Type string `yaml:"type" json:"type"` Options *ServerTransportOptions `yaml:"options" json:"options"` Auth *ServerOptionAuth `yaml:"-" json:"-"` CustomHandlers map[string]http.HandlerFunc `yaml:"-" json:"-"` }
type ServerTransportOptions ¶
Directories
¶
Path | Synopsis |
---|---|
Command bridge is a standalone binary that runs an MCP bridge.
|
Command bridge is a standalone binary that runs an MCP bridge. |
mcp
Package mcp provides the implementation of the `bridge` proxy service.
|
Package mcp provides the implementation of the `bridge` proxy service. |
Package clientHandler implements a high-level Go clientHandler for the Model Context Protocol (MCP).
|
Package clientHandler implements a high-level Go clientHandler for the Model Context Protocol (MCP). |
auth
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. |
auth/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. |
auth/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. |
auth/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`. |
Package example contains self-contained snippets and integration tests that demonstrate how to use the MCP client/server libraries.
|
Package example contains self-contained snippets and integration tests that demonstrate how to use the MCP client/server libraries. |
auth/experimental
Package term shows an experimental end-to-end flow that exercises the MCP authorization stack using a browser-based OAuth 2.1 flow.
|
Package term shows an experimental end-to-end flow that exercises the MCP authorization stack using a browser-based OAuth 2.1 flow. |
auth/percall
Package percall demonstrates per-call token usage.
|
Package percall demonstrates per-call token usage. |
auth/term
Package term demonstrates how to integrate terminal-based user interaction with an MCP server secured by OAuth2/OIDC.
|
Package term demonstrates how to integrate terminal-based user interaction with an MCP server secured by OAuth2/OIDC. |
custom
Package custom shows how to implement a fully custom MCP tool and register it with a server.
|
Package custom shows how to implement a fully custom MCP tool and register it with a server. |
fs
Package fs contains examples that treat a local filesystem subtree as an MCP resource provider.
|
Package fs contains examples that treat a local filesystem subtree as an MCP resource provider. |
resource
Package resource contains helper types used by other examples to model simple resources exposed over MCP.
|
Package resource contains helper types used by other examples to model simple resources exposed over MCP. |
tool
Package tool implements a very small sample tool that can be registered with an MCP server for demonstration purposes (see tests in the parent example packages).
|
Package tool implements a very small sample tool that can be registered with an MCP server for demonstration purposes (see tests in the parent example packages). |
internal
|
|
conv
Package conv collects tiny helper functions that are not part of the public API but aid internal conversions.
|
Package conv collects tiny helper functions that are not part of the public API but aid internal conversions. |
Package handler provides a configurable MCP handler implementation.
|
Package handler provides a configurable MCP handler implementation. |
auth
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. |