Documentation
¶
Index ¶
- Constants
- type DefaultMCPClient
- func NewMCPClient(reader io.Reader, writer io.Writer, logger *zap.Logger) *DefaultMCPClient
- func NewMCPClientWithTransport(transport Transport, logger *zap.Logger) *DefaultMCPClient
- func NewSSEClient(endpoint string, logger *zap.Logger) *DefaultMCPClient
- func NewWebSocketClient(url string, logger *zap.Logger) *DefaultMCPClient
- func (c *DefaultMCPClient) BatchCallTools(ctx context.Context, calls []ToolCall) ([]any, error)
- func (c *DefaultMCPClient) CallTool(ctx context.Context, name string, args map[string]any) (any, error)
- func (c *DefaultMCPClient) Connect(ctx context.Context, serverURL string) error
- func (c *DefaultMCPClient) Disconnect(ctx context.Context) error
- func (c *DefaultMCPClient) GetPrompt(ctx context.Context, name string, vars map[string]string) (string, error)
- func (c *DefaultMCPClient) GetServerInfo(ctx context.Context) (*ServerInfo, error)
- func (c *DefaultMCPClient) IsConnected() bool
- func (c *DefaultMCPClient) ListPrompts(ctx context.Context) ([]PromptTemplate, error)
- func (c *DefaultMCPClient) ListResources(ctx context.Context) ([]Resource, error)
- func (c *DefaultMCPClient) ListTools(ctx context.Context) ([]ToolDefinition, error)
- func (c *DefaultMCPClient) ReadResource(ctx context.Context, uri string) (*Resource, error)
- func (c *DefaultMCPClient) Start(ctx context.Context) error
- func (c *DefaultMCPClient) SubscribeResource(ctx context.Context, uri string) (<-chan Resource, error)
- func (c *DefaultMCPClient) UnsubscribeResource(ctx context.Context, uri string) error
- type DefaultMCPServer
- func (s *DefaultMCPServer) CallTool(ctx context.Context, name string, args map[string]any) (any, error)
- func (s *DefaultMCPServer) Close() error
- func (s *DefaultMCPServer) DeleteResource(uri string) error
- func (s *DefaultMCPServer) GetPrompt(ctx context.Context, name string, vars map[string]string) (string, error)
- func (s *DefaultMCPServer) GetResource(ctx context.Context, uri string) (*Resource, error)
- func (s *DefaultMCPServer) GetServerInfo() ServerInfo
- func (s *DefaultMCPServer) ListPrompts(ctx context.Context) ([]PromptTemplate, error)
- func (s *DefaultMCPServer) ListResources(ctx context.Context) ([]Resource, error)
- func (s *DefaultMCPServer) ListTools(ctx context.Context) ([]ToolDefinition, error)
- func (s *DefaultMCPServer) RegisterPrompt(prompt *PromptTemplate) error
- func (s *DefaultMCPServer) RegisterResource(resource *Resource) error
- func (s *DefaultMCPServer) RegisterTool(tool *ToolDefinition, handler ToolHandler) error
- func (s *DefaultMCPServer) SetLogLevel(level string) error
- func (s *DefaultMCPServer) SubscribeResource(ctx context.Context, uri string) (<-chan Resource, error)
- func (s *DefaultMCPServer) UnregisterPrompt(name string) error
- func (s *DefaultMCPServer) UnregisterTool(name string) error
- func (s *DefaultMCPServer) UpdateResource(resource *Resource) error
- type MCPClient
- type MCPError
- type MCPHandler
- type MCPMessage
- type MCPServer
- type PromptExample
- type PromptTemplate
- type Resource
- type ResourceType
- type SSETransport
- type ServerCapabilities
- type ServerInfo
- type StdioTransport
- type ToolCall
- type ToolDefinition
- type ToolHandler
- type Transport
- type WSState
- type WSTransportConfig
- type WebSocketTransport
- func (t *WebSocketTransport) Close() error
- func (t *WebSocketTransport) Connect(ctx context.Context) error
- func (t *WebSocketTransport) IsConnected() bool
- func (t *WebSocketTransport) OnStateChange(fn func(WSState))
- func (t *WebSocketTransport) Receive(ctx context.Context) (*MCPMessage, error)
- func (t *WebSocketTransport) Send(ctx context.Context, msg *MCPMessage) error
- func (t *WebSocketTransport) State() WSState
Constants ¶
const ( ErrorCodeParseError = -32700 ErrorCodeInvalidRequest = -32600 ErrorCodeMethodNotFound = -32601 ErrorCodeInvalidParams = -32602 ErrorCodeInternalError = -32603 )
标准错误码
const MCPVersion = "2024-11-05"
MCPVersion MCP 协议版本
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DefaultMCPClient ¶
type DefaultMCPClient struct {
// contains filtered or unexported fields
}
DefaultMCPClient MCP 客户端默认实现
func NewMCPClient ¶
NewMCPClient 创建 MCP 客户端(兼容旧接口,使用 StdioTransport)
func NewMCPClientWithTransport ¶
func NewMCPClientWithTransport(transport Transport, logger *zap.Logger) *DefaultMCPClient
NewMCPClientWithTransport 使用指定传输层创建客户端
func NewSSEClient ¶
func NewSSEClient(endpoint string, logger *zap.Logger) *DefaultMCPClient
NewSSEClient 创建 SSE 客户端
func NewWebSocketClient ¶
func NewWebSocketClient(url string, logger *zap.Logger) *DefaultMCPClient
NewWebSocketClient 创建 WebSocket 客户端
func (*DefaultMCPClient) BatchCallTools ¶
BatchCallTools 批量调用工具
func (*DefaultMCPClient) CallTool ¶
func (c *DefaultMCPClient) CallTool(ctx context.Context, name string, args map[string]any) (any, error)
CallTool 调用工具
func (*DefaultMCPClient) Connect ¶
func (c *DefaultMCPClient) Connect(ctx context.Context, serverURL string) error
Connect 连接到 MCP 服务器(含 initialize 握手)
func (*DefaultMCPClient) Disconnect ¶
func (c *DefaultMCPClient) Disconnect(ctx context.Context) error
Disconnect 断开连接
func (*DefaultMCPClient) GetPrompt ¶
func (c *DefaultMCPClient) GetPrompt(ctx context.Context, name string, vars map[string]string) (string, error)
GetPrompt 获取提示词
func (*DefaultMCPClient) GetServerInfo ¶
func (c *DefaultMCPClient) GetServerInfo(ctx context.Context) (*ServerInfo, error)
GetServerInfo 获取服务器信息
func (*DefaultMCPClient) IsConnected ¶
func (c *DefaultMCPClient) IsConnected() bool
IsConnected 检查是否已连接
func (*DefaultMCPClient) ListPrompts ¶
func (c *DefaultMCPClient) ListPrompts(ctx context.Context) ([]PromptTemplate, error)
ListPrompts 列出提示词模板
func (*DefaultMCPClient) ListResources ¶
func (c *DefaultMCPClient) ListResources(ctx context.Context) ([]Resource, error)
ListResources 列出资源
func (*DefaultMCPClient) ListTools ¶
func (c *DefaultMCPClient) ListTools(ctx context.Context) ([]ToolDefinition, error)
ListTools 列出工具
func (*DefaultMCPClient) ReadResource ¶
ReadResource 读取资源
func (*DefaultMCPClient) Start ¶
func (c *DefaultMCPClient) Start(ctx context.Context) error
Start 启动客户端消息循环(兼容旧接口,内部调用 messageLoop)
func (*DefaultMCPClient) SubscribeResource ¶
func (c *DefaultMCPClient) SubscribeResource(ctx context.Context, uri string) (<-chan Resource, error)
SubscribeResource 订阅资源更新
func (*DefaultMCPClient) UnsubscribeResource ¶
func (c *DefaultMCPClient) UnsubscribeResource(ctx context.Context, uri string) error
UnsubscribeResource 取消订阅资源
type DefaultMCPServer ¶
type DefaultMCPServer struct {
// contains filtered or unexported fields
}
DefaultMCPServer 默认 MCP 服务器实现
func NewMCPServer ¶
func NewMCPServer(name, version string, logger *zap.Logger) *DefaultMCPServer
NewMCPServer 创建 MCP 服务器
func (*DefaultMCPServer) CallTool ¶
func (s *DefaultMCPServer) CallTool(ctx context.Context, name string, args map[string]any) (any, error)
CallTool 调用工具(带 30 秒超时控制)
func (*DefaultMCPServer) DeleteResource ¶
func (s *DefaultMCPServer) DeleteResource(uri string) error
DeleteResource 删除资源
func (*DefaultMCPServer) GetPrompt ¶
func (s *DefaultMCPServer) GetPrompt(ctx context.Context, name string, vars map[string]string) (string, error)
GetPrompt 获取渲染后的提示词
func (*DefaultMCPServer) GetResource ¶
GetResource 获取资源
func (*DefaultMCPServer) GetServerInfo ¶
func (s *DefaultMCPServer) GetServerInfo() ServerInfo
GetServerInfo 获取服务器信息
func (*DefaultMCPServer) ListPrompts ¶
func (s *DefaultMCPServer) ListPrompts(ctx context.Context) ([]PromptTemplate, error)
ListPrompts 列出所有提示词模板
func (*DefaultMCPServer) ListResources ¶
func (s *DefaultMCPServer) ListResources(ctx context.Context) ([]Resource, error)
ListResources 列出所有资源
func (*DefaultMCPServer) ListTools ¶
func (s *DefaultMCPServer) ListTools(ctx context.Context) ([]ToolDefinition, error)
ListTools 列出所有工具
func (*DefaultMCPServer) RegisterPrompt ¶
func (s *DefaultMCPServer) RegisterPrompt(prompt *PromptTemplate) error
RegisterPrompt 注册提示词模板
func (*DefaultMCPServer) RegisterResource ¶
func (s *DefaultMCPServer) RegisterResource(resource *Resource) error
RegisterResource 注册资源
func (*DefaultMCPServer) RegisterTool ¶
func (s *DefaultMCPServer) RegisterTool(tool *ToolDefinition, handler ToolHandler) error
RegisterTool 注册工具
func (*DefaultMCPServer) SetLogLevel ¶
func (s *DefaultMCPServer) SetLogLevel(level string) error
SetLogLevel 设置日志级别
func (*DefaultMCPServer) SubscribeResource ¶
func (s *DefaultMCPServer) SubscribeResource(ctx context.Context, uri string) (<-chan Resource, error)
SubscribeResource 订阅资源更新
func (*DefaultMCPServer) UnregisterPrompt ¶
func (s *DefaultMCPServer) UnregisterPrompt(name string) error
UnregisterPrompt 注销提示词模板
func (*DefaultMCPServer) UnregisterTool ¶
func (s *DefaultMCPServer) UnregisterTool(name string) error
UnregisterTool 注销工具
func (*DefaultMCPServer) UpdateResource ¶
func (s *DefaultMCPServer) UpdateResource(resource *Resource) error
UpdateResource 更新资源
type MCPClient ¶
type MCPClient interface {
// 连接管理
Connect(ctx context.Context, serverURL string) error
Disconnect(ctx context.Context) error
IsConnected() bool
// 服务器交互
GetServerInfo(ctx context.Context) (*ServerInfo, error)
// 资源操作
ListResources(ctx context.Context) ([]Resource, error)
ReadResource(ctx context.Context, uri string) (*Resource, error)
// 工具操作
ListTools(ctx context.Context) ([]ToolDefinition, error)
CallTool(ctx context.Context, name string, args map[string]any) (any, error)
// 提示词操作
ListPrompts(ctx context.Context) ([]PromptTemplate, error)
GetPrompt(ctx context.Context, name string, vars map[string]string) (string, error)
}
MCPClient MCP 客户端接口
type MCPError ¶
type MCPError struct {
Code int `json:"code"`
Message string `json:"message"`
Data any `json:"data,omitempty"`
}
MCPError MCP 错误
type MCPHandler ¶
type MCPHandler struct {
// contains filtered or unexported fields
}
MCPHandler HTTP 处理器,将 MCP 服务器暴露为 HTTP 端点
func NewMCPHandler ¶
func NewMCPHandler(server *DefaultMCPServer, logger *zap.Logger) *MCPHandler
NewMCPHandler 创建 MCP HTTP 处理器
func (*MCPHandler) ServeHTTP ¶
func (h *MCPHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
ServeHTTP 实现 http.Handler
type MCPMessage ¶
type MCPMessage struct {
JSONRPC string `json:"jsonrpc"`
ID any `json:"id,omitempty"`
Method string `json:"method,omitempty"`
Params map[string]any `json:"params,omitempty"`
Result any `json:"result,omitempty"`
Error *MCPError `json:"error,omitempty"`
}
MCPMessage MCP 消息(JSON-RPC 2.0)
func NewMCPError ¶
func NewMCPError(id any, code int, message string, data any) *MCPMessage
NewMCPError 创建 MCP 错误响应
func NewMCPRequest ¶
func NewMCPRequest(id any, method string, params map[string]any) *MCPMessage
NewMCPRequest 创建 MCP 请求
func (*MCPMessage) MarshalJSON ¶
func (m *MCPMessage) MarshalJSON() ([]byte, error)
MarshalJSON 自定义 JSON 序列化
type MCPServer ¶
type MCPServer interface {
// 服务器信息
GetServerInfo() ServerInfo
// 资源管理
ListResources(ctx context.Context) ([]Resource, error)
GetResource(ctx context.Context, uri string) (*Resource, error)
SubscribeResource(ctx context.Context, uri string) (<-chan Resource, error)
// 工具管理
ListTools(ctx context.Context) ([]ToolDefinition, error)
CallTool(ctx context.Context, name string, args map[string]any) (any, error)
// 提示词管理
ListPrompts(ctx context.Context) ([]PromptTemplate, error)
GetPrompt(ctx context.Context, name string, vars map[string]string) (string, error)
// 日志
SetLogLevel(level string) error
}
MCPServer MCP 服务器接口
type PromptExample ¶
type PromptExample struct {
Variables map[string]string `json:"variables"`
Output string `json:"output"`
}
PromptExample 提示词示例
type PromptTemplate ¶
type PromptTemplate struct {
Name string `json:"name"`
Description string `json:"description"`
Template string `json:"template"`
Variables []string `json:"variables"`
Examples []PromptExample `json:"examples,omitempty"`
Metadata map[string]any `json:"metadata,omitempty"`
}
PromptTemplate MCP 提示词模板
func (*PromptTemplate) RenderPrompt ¶
func (p *PromptTemplate) RenderPrompt(vars map[string]string) (string, error)
RenderPrompt 渲染提示词模板
func (*PromptTemplate) Validate ¶
func (p *PromptTemplate) Validate() error
ValidatePromptTemplate 验证提示词模板
type Resource ¶
type Resource struct {
URI string `json:"uri"` // 资源 URI
Name string `json:"name"` // 资源名称
Description string `json:"description"` // 资源描述
Type ResourceType `json:"type"` // 资源类型
MimeType string `json:"mimeType"` // MIME 类型
Content any `json:"content"` // 资源内容
Metadata map[string]any `json:"metadata"` // 元数据
Size int64 `json:"size"` // 资源大小(字节)
CreatedAt time.Time `json:"createdAt"` // 创建时间
UpdatedAt time.Time `json:"updatedAt"` // 更新时间
}
Resource MCP 资源
type ResourceType ¶
type ResourceType string
ResourceType 资源类型
const ( ResourceTypeText ResourceType = "text" ResourceTypeImage ResourceType = "image" ResourceTypeFile ResourceType = "file" ResourceTypeData ResourceType = "data" ResourceTypeStream ResourceType = "stream" )
type SSETransport ¶
type SSETransport struct {
// contains filtered or unexported fields
}
SSETransport SSE 传输,GET /sse 接收事件,POST /message 发送
func NewSSETransport ¶
func NewSSETransport(endpoint string, logger *zap.Logger) *SSETransport
NewSSETransport 创建 SSE 传输
func (*SSETransport) Connect ¶
func (t *SSETransport) Connect(ctx context.Context) error
Connect 建立 SSE 连接(GET /sse)
func (*SSETransport) Receive ¶
func (t *SSETransport) Receive(ctx context.Context) (*MCPMessage, error)
Receive 从 SSE 事件通道接收消息
func (*SSETransport) Send ¶
func (t *SSETransport) Send(ctx context.Context, msg *MCPMessage) error
Send 通过 POST /message 发送消息
type ServerCapabilities ¶
type ServerCapabilities struct {
Resources bool `json:"resources"`
Tools bool `json:"tools"`
Prompts bool `json:"prompts"`
Logging bool `json:"logging"`
Sampling bool `json:"sampling"`
}
ServerCapabilities 服务器能力
type ServerInfo ¶
type ServerInfo struct {
Name string `json:"name"`
Version string `json:"version"`
ProtocolVersion string `json:"protocolVersion"`
Capabilities ServerCapabilities `json:"capabilities"`
Metadata map[string]any `json:"metadata,omitempty"`
}
ServerInfo 服务器信息
type StdioTransport ¶
type StdioTransport struct {
// contains filtered or unexported fields
}
StdioTransport 基于 bufio.Reader/io.Writer 的 stdio 传输
func NewStdioTransport ¶
NewStdioTransport 创建 stdio 传输
func (*StdioTransport) Receive ¶
func (t *StdioTransport) Receive(ctx context.Context) (*MCPMessage, error)
Receive 接收消息(读取 Content-Length 头 + JSON body)
func (*StdioTransport) Send ¶
func (t *StdioTransport) Send(ctx context.Context, msg *MCPMessage) error
Send 发送消息(Content-Length 头 + JSON body)
type ToolCall ¶
type ToolCall struct {
ID string `json:"id"`
Name string `json:"name"`
Arguments json.RawMessage `json:"arguments"`
}
ToolCall 工具调用(复用 protocol.go 中的定义)
type ToolDefinition ¶
type ToolDefinition struct {
Name string `json:"name"`
Description string `json:"description"`
InputSchema map[string]any `json:"inputSchema"` // JSON Schema
OutputSchema map[string]any `json:"outputSchema,omitempty"`
Metadata map[string]any `json:"metadata,omitempty"`
}
ToolDefinition MCP 工具定义
func FromLLMToolSchema ¶
func FromLLMToolSchema(schema llm.ToolSchema) ToolDefinition
FromLLMToolSchema 从 LLM 工具 Schema 创建 MCP 工具定义
func (*ToolDefinition) ToLLMToolSchema ¶
func (t *ToolDefinition) ToLLMToolSchema() llm.ToolSchema
ToLLMToolSchema 将 MCP 工具定义转换为 LLM 工具 Schema
func (*ToolDefinition) Validate ¶
func (t *ToolDefinition) Validate() error
ValidateToolDefinition 验证工具定义
type ToolHandler ¶
ToolHandler 工具处理函数
type Transport ¶
type Transport interface {
// Send 发送消息
Send(ctx context.Context, msg *MCPMessage) error
// Receive 接收消息(阻塞)
Receive(ctx context.Context) (*MCPMessage, error)
// Close 关闭传输
Close() error
}
Transport MCP 传输层接口
type WSState ¶
type WSState string
WSState represents the connection state of a WebSocket transport.
type WSTransportConfig ¶
type WSTransportConfig struct {
HeartbeatInterval time.Duration // Interval between heartbeat pings (default 30s)
HeartbeatTimeout time.Duration // Max time without a pong before considering dead (default 10s)
MaxReconnects int // Maximum reconnection attempts (default 5, 0 = no reconnect)
ReconnectDelay time.Duration // Base delay for exponential backoff (default 1s)
MaxBackoff time.Duration // Maximum backoff duration (default 30s)
BackoffMultiplier float64 // Backoff multiplier (default 2.0)
ReconnectEnabled bool // Whether auto-reconnect is enabled (default true)
EnableHeartbeat bool // Whether to enable heartbeat (default true)
Subprotocols []string // WebSocket subprotocols (default ["mcp"])
SendBufferSize int // Outbound message buffer size during reconnect (default 64)
}
WSTransportConfig configures the WebSocket transport behavior.
func DefaultWSTransportConfig ¶
func DefaultWSTransportConfig() WSTransportConfig
DefaultWSTransportConfig returns a WSTransportConfig with sensible defaults.
type WebSocketTransport ¶
type WebSocketTransport struct {
// contains filtered or unexported fields
}
WebSocketTransport implements MCP Transport over WebSocket with heartbeat, exponential-backoff reconnection, and connection state callbacks.
func NewWebSocketTransport ¶
func NewWebSocketTransport(url string, logger *zap.Logger) *WebSocketTransport
NewWebSocketTransport creates a WebSocket transport with default configuration. This preserves backward compatibility with the original constructor.
func NewWebSocketTransportWithConfig ¶
func NewWebSocketTransportWithConfig(url string, config WSTransportConfig, logger *zap.Logger) *WebSocketTransport
NewWebSocketTransportWithConfig creates a WebSocket transport with custom configuration.
func (*WebSocketTransport) Close ¶
func (t *WebSocketTransport) Close() error
Close shuts down the transport, stopping the heartbeat goroutine and closing the underlying WebSocket connection.
func (*WebSocketTransport) Connect ¶
func (t *WebSocketTransport) Connect(ctx context.Context) error
Connect establishes the WebSocket connection and starts the heartbeat goroutine.
func (*WebSocketTransport) IsConnected ¶
func (t *WebSocketTransport) IsConnected() bool
IsConnected returns true when the transport has an active connection.
func (*WebSocketTransport) OnStateChange ¶
func (t *WebSocketTransport) OnStateChange(fn func(WSState))
OnStateChange registers a callback invoked whenever the connection state changes.
func (*WebSocketTransport) Receive ¶
func (t *WebSocketTransport) Receive(ctx context.Context) (*MCPMessage, error)
Receive reads the next JSON-RPC message from the WebSocket connection. If the received message is a heartbeat pong (method "pong"), it updates lastHeartbeat and reads the next message instead. On read errors, it attempts reconnection if enabled before returning the error.
func (*WebSocketTransport) Send ¶
func (t *WebSocketTransport) Send(ctx context.Context, msg *MCPMessage) error
Send writes a JSON-RPC message over the WebSocket connection. The write is mutex-protected to be safe for concurrent callers. If the write fails and reconnect is enabled, it attempts to reconnect and retries the send once. Messages are buffered during reconnection.
func (*WebSocketTransport) State ¶
func (t *WebSocketTransport) State() WSState
State returns the current connection state.