Help us shape the future of Go! Take the 2026 Go Developer Survey

mcpclient

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Nov 1, 2026 License: MIT Imports: 26 Imported by: 0

Documentation

Overview

Package mcpclient 定义 MCP server 配置,在执行环境的工作区里连接 MCP server,并经客户端连接转发客户端侧 MCP server 的消息。

Index

Constants

View Source
const (
	// DefaultStartupTimeout 是 MCP server 没有指定启动超时时,一次连接最多等待的时间;StartupTimeout 为 0 会立即超时。
	DefaultStartupTimeout = 30 * time.Second
	// DefaultToolTimeout 是 MCP server 没有指定工具超时时,一次工具调用最多等待的时间;ToolTimeout 为 0 会立即超时。
	DefaultToolTimeout = 300 * time.Second
)

Variables

This section is empty.

Functions

func GetToolNameParts

func GetToolNameParts(name string) (serverID, toolName string, ok bool)

GetToolNameParts 把 mcp__<server id>__<工具名> 形式的模型工具名拆成 server ID 和工具名;不是这个形式时 ok 为 false。

func RunRelayStream

func RunRelayStream(ctx context.Context, transport mcp.Transport, incoming <-chan json.RawMessage, send func(json.RawMessage) error) error

RunRelayStream 在客户端一侧连接本机 MCP server:incoming 里 serve 发来的消息写给 server,server 发出的消息交给 send,直到任一方结束。

Types

type Connection

type Connection interface {
	// Run 持有连接状态:启动后马上连接;断开后立刻重连一次,再断开要等下一次 GetTools 才连;收到 tools/list_changed 后重读工具列表;
	// ctx 结束时断开,stdio 进程随之结束,返回 ctx.Err()。只能调用一次。
	Run(ctx context.Context) error
	// GetTools 返回提供给模型的工具(名字已改成 mcp__<id>__<原名>,MCPServerID 已填):已连上时返回缓存;
	// 正在连时等这次连接;失败过时再连一次;最多等启动超时,连不上返回错误。Run 已返回时返回错误;
	// Run 还没开始时等它开始,最多等到 ctx 结束。
	GetTools(ctx context.Context) ([]*defs.ToolDefinition, error)
	// CallTool 在已连上的会话上调用一次工具;没连上时返回 mcp_server_unavailable,超时、取消、server 报错和中途断开也都写进结果的 Error。
	// 工具名不在本连接的工具列表里时返回 mcp_request_failed,不发给 server。
	CallTool(ctx context.Context, call *defs.Item) *defs.ToolResult
	// IsRequired 这个 server 是不是强依赖:连不上时让这一轮报错,而不是跳过?
	IsRequired() bool
	// GetInfo 返回连接此刻的情况;还没连上时也立刻返回。
	GetInfo() ConnectionInfo
}

Connection 是到一个 MCP server 的连接;执行环境自己的 MCP server 和客户端登记的 MCP server 都用它。

func NewConnection

func NewConnection(opt *ConnectionOpt) (Connection, error)

NewConnection 校验配置,创建还没运行的连接。

type ConnectionInfo

type ConnectionInfo struct {
	ServerID string          `json:"server_id"`
	State    ConnectionState `json:"state"`
	Required bool            `json:"required"`
	// Tools 是 server 当前提供的工具(已按 ToolNames 过滤);没连上时为空。
	Tools []ConnectionTool `json:"tools"`
	// Error 是最近一次连接失败或断开的原因;连上后清空。
	Error string `json:"error,omitempty"`
	// PluginName 是声明这个 server 的插件名;不是插件声明的为空。
	PluginName string `json:"plugin_name,omitempty"`
}

ConnectionInfo 是一个 MCP 连接此刻的情况。

type ConnectionOpt

type ConnectionOpt struct {
	Definition *ServerDefinition
	// Workspace 是运行位置:stdio 用 StartProcess 启动,http、sse 用 Dial 连接。
	Workspace workspace.Workspace
	// Transport 是客户端 MCP 用的消息转发传输(RelayTransport):MCP 消息经客户端连接转发给客户端侧的 MCP server。
	Transport mcp.Transport
}

ConnectionOpt 是一个连接的配置和运行位置;Workspace 与 Transport 二选一。

func NewConnectionOpt

func NewConnectionOpt(definition *ServerDefinition, executorWorkspace workspace.Workspace) *ConnectionOpt

NewConnectionOpt 保存 MCP server 定义及运行工作区。

func (*ConnectionOpt) WithTransport

func (o *ConnectionOpt) WithTransport(transport mcp.Transport) *ConnectionOpt

WithTransport 设置客户端消息转发传输并返回本配置。

type ConnectionState

type ConnectionState string

ConnectionState 是一个 MCP 连接现在的状态。

const (
	// ConnectionStateConnecting 是 Run 还没开始,或第一次连接还没有结果。
	ConnectionStateConnecting ConnectionState = "connecting"
	// ConnectionStateConnected 是已经连上。
	ConnectionStateConnected ConnectionState = "connected"
	// ConnectionStateFailed 是连接失败或断开;再次连接期间也保持 failed,直到连上。
	ConnectionStateFailed ConnectionState = "failed"
)

type ConnectionTool

type ConnectionTool struct {
	// Name 是模型看到的名字 mcp__<server id>__<原名>:非法字符换成下划线,替换后重名或超过 64 字符时改用带哈希的名字。
	Name string `json:"name"`
	// OriginalName 是 server 里的原名。
	OriginalName string          `json:"original_name"`
	Description  string          `json:"description,omitempty"`
	InputSchema  json.RawMessage `json:"input_schema"`
}

ConnectionTool 是 server 提供的一个工具。

type RelaySender

type RelaySender interface {
	// SendMCPConnect 请求客户端为 streamID 连接指定 server。
	SendMCPConnect(streamID, serverID string) error
	// SendMCPMessage 向客户端发送流上的完整 JSON-RPC 消息。
	SendMCPMessage(streamID string, message json.RawMessage) error
	// SendMCPDisconnect 请求客户端断开指定流。
	SendMCPDisconnect(streamID string) error
}

RelaySender 把转发消息发给客户端;由 serve 的客户端连接实现。 MCP SDK 会并发写消息,实现必须允许并发调用。

type RelayTransport

type RelayTransport interface {
	mcp.Transport
	// DeliverMessage 交付客户端在 streamID 这条流上发来的一条完整 JSON-RPC 消息,直到 MCP SDK 读走它或这条流结束才返回,
	// 同一条流按到达顺序交付消息,流不存在或已结束时丢弃。
	DeliverMessage(streamID string, message json.RawMessage)
	// DeliverClosed 告知客户端已结束 streamID 这条流:MCP SDK 的读取随之以 err 结束,err 为 nil 表示正常结束。
	// 流不存在或已结束时丢弃。
	DeliverClosed(streamID string, err error)
}

RelayTransport 是经客户端连接收发 MCP 消息的传输:Connect 每次新开一条转发流, 客户端发来的 clientMCP/message、clientMCP/closed 由 serve 按 stream_id 交给 DeliverMessage、DeliverClosed。 同一个 RelayTransport 可以反复 Connect(重连),各条流互不影响。

func NewRelayTransport

func NewRelayTransport(opt *RelayTransportOpt) RelayTransport

NewRelayTransport 创建转发传输。

type RelayTransportOpt

type RelayTransportOpt struct {
	// ServerID 是客户端登记的 MCP server id,每次连接都带给客户端,让它找到对应的配置。
	ServerID string
	// Sender 把消息发给客户端。
	Sender RelaySender
}

RelayTransportOpt 保存客户端 server ID 和消息发送对象。

func NewRelayTransportOpt

func NewRelayTransportOpt(serverID string, sender RelaySender) *RelayTransportOpt

NewRelayTransportOpt 保存客户端 MCP server ID 和消息发送对象。

type ServerDefinition

type ServerDefinition struct {
	ID      string
	Type    ServerTransportType
	Command string
	Args    []string
	Env     map[string]string
	URL     string
	Headers map[string]string
	// ExecutorIDs 是在哪些 Executor 上运行;客户端 MCP 为空。
	ExecutorIDs []string
	// ToolNames 是提供给模型的工具原名;nil 表示全部。
	ToolNames []string
	// Required 是否强依赖?连不上时让这一轮报错,而不是跳过。
	Required bool
	// StartupTimeout 是一次连接(启动、握手、读工具列表)最多等多久。
	StartupTimeout time.Duration
	// ToolTimeout 是一次工具调用最多等多久。
	ToolTimeout time.Duration
	// Plugin 是声明这个 server 的插件,只读;其他来源为 nil。plugin update 会改 InstalledAt,reload 时这个 server 随之重启。
	Plugin *defs.Plugin
}

ServerDefinition 是一个 MCP server 的配置,不含运行位置;Executor 用自己的工作区按它建连接。

type ServerTransportType

type ServerTransportType string

ServerTransportType 是 MCP server 的连接方式。

const (
	ServerTransportStdio ServerTransportType = "stdio"
	ServerTransportHTTP  ServerTransportType = "http"
	ServerTransportSSE   ServerTransportType = "sse"
)

Jump to

Keyboard shortcuts

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