Documentation
¶
Overview ¶
Package mcpclient 定义 MCP server 配置,在执行环境的工作区里连接 MCP server,并经客户端连接转发客户端侧 MCP server 的消息。
Index ¶
- Constants
- func GetToolNameParts(name string) (serverID, toolName string, ok bool)
- func RunRelayStream(ctx context.Context, transport mcp.Transport, incoming <-chan json.RawMessage, ...) error
- type Connection
- type ConnectionInfo
- type ConnectionOpt
- type ConnectionState
- type ConnectionTool
- type RelaySender
- type RelayTransport
- type RelayTransportOpt
- type ServerDefinition
- type ServerTransportType
Constants ¶
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 ¶
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" )