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 */
// Store allows injecting a persistent token store so tokens survive
// across multiple client instances (e.g., per-user cache in caller).
Store store.Store `yaml:"-" json:"-"`
}
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"`
// CookieJar, if set, is attached to the underlying HTTP client so that
// servers using cookies (e.g., BFF flows) can persist session cookies
// across reconnects and calls.
CookieJar http.CookieJar `yaml:"-" json:"-"`
// PingIntervalSeconds overrides the default background ping interval
// used to keep MCP sessions warm and detect transport failures.
// If <= 0, the default is used (currently 60 seconds).
PingIntervalSeconds int `yaml:"pingIntervalSeconds,omitempty" json:"pingIntervalSeconds,omitempty"`
// contains filtered or unexported fields
}
ClientOptions
defines options for configuring an MCP client.
func (*ClientOptions) AuthStore ¶ added in v0.7.3
func (c *ClientOptions) AuthStore() store.Store
AuthStore exposes the underlying token store used by the auth transport. It allows callers to persist and reuse tokens across client instances.
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 `` /* 167-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 ¶
type ServerTransportOptions struct {
Type string `` /* 167-byte string literal not displayed */
Port int `yaml:"port" json:"port"`
Endpoint string `yaml:"endpoint" json:"endpoint"`
MessageEndpoint string `yaml:"messageEndpoint" json:"messageEndpoint"`
Cors *server.Cors `yaml:"cors" json:"cors"`
// Optional HTTP transport configuration
SSEURI string `yaml:"sseURI" json:"sseURI"`
SSEMessageURI string `yaml:"sseMessageURI" json:"sseMessageURI"`
StreamableURI string `yaml:"streamableURI" json:"streamableURI"`
RootRedirect bool `yaml:"rootRedirect" json:"rootRedirect"`
}
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. |
|
namespace
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. |
|
oob
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. |