Documentation
¶
Overview ¶
Package mcp 实现 Model Context Protocol (MCP) 支持
本文件实现 MCP 与 ai-core tool.Tool 之间的适配
Package mcp 实现 Model Context Protocol (MCP) 支持 ¶
MCP 是 Anthropic 提出的标准协议,用于 LLM 与外部工具/数据源通信。
主要功能:
- MCP 客户端:连接 MCP 服务器,调用远程工具
- MCP 服务器:暴露本地工具为 MCP 服务
- 工具适配器:将 MCP 工具转换为 Hexagon 工具
使用示例:
client := mcp.NewClient("localhost:8080")
tools, _ := client.ListTools(ctx)
result, _ := client.CallTool(ctx, "calculator", map[string]any{"a": 1, "b": 2})
Package mcp 实现 Model Context Protocol (MCP) 支持 ¶
本文件实现将远程 MCP 工具包装为 ai-core tool.Tool 的代理
Package mcp 提供 MCP(Model Context Protocol)客户端与服务端能力 ¶
本文件实现 MCP 工具集的自动重连:当与远端 MCP 服务器的连接出现瞬时故障 (网络抖动、服务器重启等)时,按指数退避重试初始化握手,恢复后重新拉取工具列表。 重连退避复用 toolkit/util/retry,不重复实现退避逻辑。
Package mcp 实现 Model Context Protocol (MCP) 支持 ¶
本文件实现 ai-core Schema 与 MCP JSONSchema 之间的双向转换
Package mcp 实现 Model Context Protocol (MCP) 支持 ¶
本文件实现 MCP 服务器,用于将 Hexagon 工具暴露为 MCP 服务
Package mcp 实现 Model Context Protocol (MCP) 支持 ¶
本文件定义 MCP 传输层接口及 HTTP 实现
Package mcp 实现 Model Context Protocol (MCP) 支持 ¶
本文件实现 Stdio 传输层,用于与本地 MCP 进程通信
Index ¶
- Constants
- func ConnectMCPServer(ctx context.Context, endpoint string) ([]tool.Tool, error)deprecated
- func ConnectMCPServerV2(ctx context.Context, transport sdkmcp.Transport) ([]tool.Tool, io.Closer, error)
- func ConnectSSEServerV2(ctx context.Context, endpoint string) ([]tool.Tool, io.Closer, error)
- func ConnectStdioServer(ctx context.Context, command string, args ...string) ([]tool.Tool, func(), error)deprecated
- func ConnectStdioServerV2(ctx context.Context, command string, args ...string) ([]tool.Tool, func(), error)
- func ConnectStdioServerV2WithEnv(ctx context.Context, command string, env map[string]string, args ...string) ([]tool.Tool, func(), error)
- func ConnectStreamableServerV2(ctx context.Context, endpoint string) ([]tool.Tool, io.Closer, error)
- func SchemaFromMCP(js *JSONSchema) *llm.Schema
- func WrapMCPTools(client *TransportClient, mcpTools []Tool) []tool.Tool
- type Client
- func (c *Client) CallTool(ctx context.Context, name string, args map[string]any) (*ToolCallResponse, error)
- func (c *Client) GetPrompt(ctx context.Context, name string, args map[string]string) ([]PromptMessage, error)
- func (c *Client) GetServerCapabilities() *ServerCapabilities
- func (c *Client) Initialize(ctx context.Context) error
- func (c *Client) ListPrompts(ctx context.Context) ([]Prompt, error)
- func (c *Client) ListResources(ctx context.Context) ([]Resource, error)
- func (c *Client) ListTools(ctx context.Context) ([]Tool, error)
- func (c *Client) ReadResource(ctx context.Context, uri string) (*ResourceContent, error)
- type ClientOption
- type ContentBlock
- type HTTPTransport
- type HTTPTransportOption
- type HexagonToolAdapterdeprecated
- type JSONSchema
- type LoggingCapability
- type MCPError
- type MCPProxyTool
- type MCPProxyToolV2
- type MCPRequest
- type MCPResponse
- type MCPToolAdapterdeprecated
- type MCPToolSet
- func ConnectMCPServerWithToolSet(ctx context.Context, endpoint string) (*MCPToolSet, error)deprecated
- func ConnectStdioServerWithToolSet(ctx context.Context, command string, args ...string) (*MCPToolSet, func(), error)deprecated
- func NewMCPToolSet(client *TransportClient, mcpTools []Tool) *MCPToolSet
- func (s *MCPToolSet) Close() error
- func (s *MCPToolSet) Get(name string) (tool.Tool, bool)
- func (s *MCPToolSet) HandleListChanged(ctx context.Context) error
- func (s *MCPToolSet) Reconnect(ctx context.Context) error
- func (s *MCPToolSet) Refresh(ctx context.Context) error
- func (s *MCPToolSet) SetOnToolsChanged(fn func([]tool.Tool))
- func (s *MCPToolSet) SetReconnectPolicy(cfg *ReconnectConfig)
- func (s *MCPToolSet) Tools() []tool.Tool
- type MessageType
- type Method
- type Prompt
- type PromptArgument
- type PromptHandler
- type PromptMessage
- type PromptsCapability
- type ReconnectConfig
- type RegisteredPrompt
- type RegisteredResource
- type RegisteredTool
- type Resource
- type ResourceContent
- type ResourceHandler
- type ResourcesCapability
- type Server
- func (s *Server) RegisterAICoreTool(t tool.Tool)
- func (s *Server) RegisterAICoreTools(tools ...tool.Tool)
- func (s *Server) RegisterPrompt(prompt Prompt, handler PromptHandler)
- func (s *Server) RegisterResource(resource Resource, handler ResourceHandler)
- func (s *Server) RegisterTool(tool Tool, handler ToolHandler)
- func (s *Server) Start() error
- func (s *Server) Stop(ctx context.Context) error
- type ServerCapabilities
- type ServerConfig
- type ServerV2
- func (s *ServerV2) HTTPHandler() http.Handler
- func (s *ServerV2) RegisterTool(t tool.Tool)
- func (s *ServerV2) RegisterTools(tools ...tool.Tool)
- func (s *ServerV2) SSEHandler() http.Handler
- func (s *ServerV2) ServeHTTP(ctx context.Context, addr string) error
- func (s *ServerV2) ServeSSE(ctx context.Context, addr string) error
- func (s *ServerV2) ServeStdio(ctx context.Context) error
- func (s *ServerV2) Server() *sdkmcp.Server
- type StdioTransport
- type Tool
- type ToolCallRequest
- type ToolCallResponse
- type ToolDefinitiondeprecated
- type ToolHandler
- type ToolsCapability
- type Transport
- type TransportClient
- func (c *TransportClient) CallTool(ctx context.Context, name string, args map[string]any) (*ToolCallResponse, error)
- func (c *TransportClient) Close() error
- func (c *TransportClient) GetPrompt(ctx context.Context, name string, args map[string]string) ([]PromptMessage, error)
- func (c *TransportClient) GetServerCapabilities() *ServerCapabilities
- func (c *TransportClient) Initialize(ctx context.Context) error
- func (c *TransportClient) ListPrompts(ctx context.Context) ([]Prompt, error)
- func (c *TransportClient) ListResources(ctx context.Context) ([]Resource, error)
- func (c *TransportClient) ListTools(ctx context.Context) ([]Tool, error)
- func (c *TransportClient) ReadResource(ctx context.Context, uri string) (*ResourceContent, error)
- func (c *TransportClient) Transport() Transport
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 ¶
func ConnectMCPServer
deprecated
ConnectMCPServer 连接 MCP 服务器并返回工具列表
Deprecated: 请使用 ConnectMCPServerV2,基于官方 Go SDK 实现。
这是最常用的便捷函数,一行代码即可获取远程 MCP 工具
示例:
tools, err := mcp.ConnectMCPServer(ctx, "http://localhost:8080")
if err != nil {
log.Fatal(err)
}
agent := agent.New(
agent.WithTools(tools...),
)
func ConnectMCPServerV2 ¶
func ConnectMCPServerV2(ctx context.Context, transport sdkmcp.Transport) ([]tool.Tool, io.Closer, error)
ConnectMCPServerV2 使用官方 SDK 连接 MCP Server 并获取工具列表
返回的 []tool.Tool 可直接用于 Hexagon Agent。 调用方需要在使用完毕后调用 closer.Close() 释放连接。
transport: 官方 SDK 的 Transport(如 &mcp.CommandTransport{}, &mcp.SSEClientTransport{})
示例:
// 连接 SSE 服务器
transport := &mcp.SSEClientTransport{Endpoint: "http://localhost:8080/sse"}
tools, closer, err := mcp.ConnectMCPServerV2(ctx, transport)
defer closer.Close()
func ConnectSSEServerV2 ¶
ConnectSSEServerV2 使用官方 SDK 连接 SSE MCP Server
通过 Server-Sent Events 协议通信,适合远程 MCP 服务。
示例:
tools, closer, err := mcp.ConnectSSEServerV2(ctx, "http://localhost:8080/sse") defer closer.Close()
func ConnectStdioServer
deprecated
func ConnectStdioServer(ctx context.Context, command string, args ...string) ([]tool.Tool, func(), error)
ConnectStdioServer 连接本地 MCP 进程并返回工具列表
Deprecated: 请使用 ConnectStdioServerV2,基于官方 Go SDK 实现。
这是连接本地 MCP 服务的便捷函数。 返回的 cleanup 函数用于关闭进程和释放资源。
示例:
// 连接 filesystem MCP 服务
tools, cleanup, err := mcp.ConnectStdioServer(ctx, "npx", "-y",
"@modelcontextprotocol/server-filesystem", "/tmp")
if err != nil {
log.Fatal(err)
}
defer cleanup()
for _, t := range tools {
fmt.Printf("Tool: %s - %s\n", t.Name(), t.Description())
}
func ConnectStdioServerV2 ¶
func ConnectStdioServerV2(ctx context.Context, command string, args ...string) ([]tool.Tool, func(), error)
ConnectStdioServerV2 使用官方 SDK 连接 Stdio MCP Server
启动子进程并通过 stdin/stdout 通信。 返回的 cleanup 函数会终止子进程并释放资源。
示例:
tools, cleanup, err := mcp.ConnectStdioServerV2(ctx, "npx", "-y", "@modelcontextprotocol/server-filesystem", "/tmp") defer cleanup()
func ConnectStdioServerV2WithEnv ¶
func ConnectStdioServerV2WithEnv(ctx context.Context, command string, env map[string]string, args ...string) ([]tool.Tool, func(), error)
ConnectStdioServerV2WithEnv 同 ConnectStdioServerV2,但向子进程注入额外环境变量。
数据连接器走 MCP 的地基:MySQL/Redis 等 stdio MCP server 通过 env 配置连接信息 (如 MYSQL_HOST / MYSQL_PASSWORD)。env 合并进 os.Environ()(保留 PATH 等,否则 npx/uvx 不可用)。
示例:
tools, cleanup, err := mcp.ConnectStdioServerV2WithEnv(ctx, "npx",
map[string]string{"MYSQL_HOST": "localhost"}, "-y", "@benborla29/mcp-server-mysql")
func ConnectStreamableServerV2 ¶
func ConnectStreamableServerV2(ctx context.Context, endpoint string) ([]tool.Tool, io.Closer, error)
ConnectStreamableServerV2 uses Streamable HTTP transport (MCP 2025-03-26 standard).
Single-endpoint bidirectional communication via HTTP POST + optional SSE response.
Example:
tools, closer, err := mcp.ConnectStreamableServerV2(ctx, "http://localhost:8080/mcp") defer closer.Close()
func SchemaFromMCP ¶
func SchemaFromMCP(js *JSONSchema) *llm.Schema
SchemaFromMCP 将 MCP JSONSchema 转换为 ai-core Schema
支持的字段映射:
- Type -> Type
- Description -> Description
- Properties -> Properties (递归转换)
- Required -> Required
- Items -> Items (数组元素)
- Enum -> Enum
示例:
mcpTools, _ := client.ListTools(ctx)
for _, t := range mcpTools {
aiSchema := mcp.SchemaFromMCP(t.InputSchema)
}
func WrapMCPTools ¶
func WrapMCPTools(client *TransportClient, mcpTools []Tool) []tool.Tool
WrapMCPTools 将 MCP 工具列表包装为 ai-core tool.Tool 列表
这是一个便捷函数,用于快速将 MCP 工具转换为 Hexagon 可用的工具
示例:
mcpTools, _ := client.ListTools(ctx) tools := mcp.WrapMCPTools(client, mcpTools)
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client MCP 客户端
func (*Client) CallTool ¶
func (c *Client) CallTool(ctx context.Context, name string, args map[string]any) (*ToolCallResponse, error)
CallTool 调用工具
func (*Client) GetPrompt ¶
func (c *Client) GetPrompt(ctx context.Context, name string, args map[string]string) ([]PromptMessage, error)
GetPrompt 获取提示
func (*Client) GetServerCapabilities ¶
func (c *Client) GetServerCapabilities() *ServerCapabilities
GetServerCapabilities 获取服务器能力
func (*Client) Initialize ¶
Initialize 初始化客户端
func (*Client) ListPrompts ¶
ListPrompts 列出可用提示
func (*Client) ListResources ¶
ListResources 列出可用资源
func (*Client) ReadResource ¶
ReadResource 读取资源
type ClientOption ¶
type ClientOption func(*Client)
ClientOption 客户端选项
func WithHTTPClientOption ¶
func WithHTTPClientOption(client *http.Client) ClientOption
WithHTTPClientOption 设置 HTTP 客户端
type ContentBlock ¶
type ContentBlock struct {
Type string `json:"type"`
Text string `json:"text,omitempty"`
Data string `json:"data,omitempty"`
MimeType string `json:"mimeType,omitempty"`
}
ContentBlock 内容块
type HTTPTransport ¶
type HTTPTransport struct {
// contains filtered or unexported fields
}
HTTPTransport HTTP 传输层实现
通过 HTTP POST 请求与 MCP 服务器通信,使用 JSON-RPC 2.0 协议。
示例:
transport := mcp.NewHTTPTransport("http://localhost:8080")
client := mcp.NewClientWithTransport(transport)
func NewHTTPTransport ¶
func NewHTTPTransport(endpoint string, opts ...HTTPTransportOption) *HTTPTransport
NewHTTPTransport 创建 HTTP 传输层
endpoint 是 MCP 服务器的 HTTP 地址,如 "http://localhost:8080"
示例:
transport := mcp.NewHTTPTransport("http://localhost:8080",
mcp.WithTimeout(60*time.Second),
)
func (*HTTPTransport) Send ¶
func (t *HTTPTransport) Send(ctx context.Context, req *MCPRequest) (*MCPResponse, error)
Send 发送 MCP 请求
type HTTPTransportOption ¶
type HTTPTransportOption func(*HTTPTransport)
HTTPTransportOption HTTP 传输层选项
func WithHTTPClient ¶
func WithHTTPClient(client *http.Client) HTTPTransportOption
WithHTTPClient 设置自定义 HTTP 客户端
type HexagonToolAdapter
deprecated
type HexagonToolAdapter struct {
// contains filtered or unexported fields
}
HexagonToolAdapter 将 Hexagon 工具转换为 MCP 工具(兼容旧版本)
Deprecated: 请使用 Server.RegisterAICoreTool
func NewHexagonToolAdapter
deprecated
func NewHexagonToolAdapter(server *Server) *HexagonToolAdapter
NewHexagonToolAdapter 创建 Hexagon 工具适配器
Deprecated: 请使用 Server.RegisterAICoreTools
func (*HexagonToolAdapter) RegisterToolDefinition ¶
func (a *HexagonToolAdapter) RegisterToolDefinition(def ToolDefinition)
RegisterToolDefinition 注册工具定义为 MCP 工具
func (*HexagonToolAdapter) RegisterToolDefinitions ¶
func (a *HexagonToolAdapter) RegisterToolDefinitions(defs []ToolDefinition)
RegisterToolDefinitions 批量注册工具定义
type JSONSchema ¶
type JSONSchema struct {
Type string `json:"type"`
Properties map[string]*JSONSchema `json:"properties,omitempty"`
Required []string `json:"required,omitempty"`
Description string `json:"description,omitempty"`
Enum []any `json:"enum,omitempty"`
Items *JSONSchema `json:"items,omitempty"`
}
JSONSchema JSON Schema 定义
func SchemaToMCP ¶
func SchemaToMCP(s *llm.Schema) *JSONSchema
SchemaToMCP 将 ai-core Schema 转换为 MCP JSONSchema
支持的字段映射:
- Type -> Type
- Description -> Description
- Properties -> Properties (递归转换)
- Required -> Required
- Items -> Items (数组元素)
- Enum -> Enum
示例:
aiSchema := llm.SchemaOf[MyInput]() mcpSchema := mcp.SchemaToMCP(aiSchema)
type MCPError ¶
type MCPError struct {
Code int `json:"code"`
Message string `json:"message"`
Data any `json:"data,omitempty"`
}
MCPError MCP 错误
type MCPProxyTool ¶
type MCPProxyTool struct {
// contains filtered or unexported fields
}
MCPProxyTool 将远程 MCP 工具包装为 ai-core tool.Tool
这是 MCP 适配层的核心组件,它允许将任意 MCP 服务器上的工具 直接用于 Hexagon Agent,无需任何额外适配代码。
示例:
// 连接 MCP 服务器并获取工具
tools, _ := mcp.ConnectMCPServer(ctx, "http://localhost:8080")
// 直接用于 Agent
agent := agent.New(
agent.WithTools(tools...),
)
func NewMCPProxyTool ¶
func NewMCPProxyTool(mcpTool Tool, client *TransportClient) *MCPProxyTool
NewMCPProxyTool 创建 MCP 代理工具
mcpTool 是从 MCP 服务器获取的工具定义 client 是用于调用工具的传输客户端
func (*MCPProxyTool) Schema ¶
func (t *MCPProxyTool) Schema() *llm.Schema
Schema 返回工具参数的 JSON Schema
type MCPProxyToolV2 ¶
type MCPProxyToolV2 struct {
// contains filtered or unexported fields
}
MCPProxyToolV2 将官方 SDK 获取的远程 MCP 工具包装为 ai-core tool.Tool
使用官方 Go SDK 通信,支持最新协议特性。
示例:
tools, closer, _ := mcp.ConnectMCPServerV2(ctx, transport) defer closer.Close() agent := agent.New(agent.WithTools(tools...))
func (*MCPProxyToolV2) Description ¶
func (t *MCPProxyToolV2) Description() string
func (*MCPProxyToolV2) Name ¶
func (t *MCPProxyToolV2) Name() string
func (*MCPProxyToolV2) Schema ¶
func (t *MCPProxyToolV2) Schema() *llm.Schema
type MCPRequest ¶
type MCPRequest struct {
JSONRPC string `json:"jsonrpc"`
ID any `json:"id,omitempty"`
Method Method `json:"method"`
Params any `json:"params,omitempty"`
}
MCPRequest MCP 请求
type MCPResponse ¶
type MCPResponse struct {
JSONRPC string `json:"jsonrpc"`
ID any `json:"id,omitempty"`
Result any `json:"result,omitempty"`
Error *MCPError `json:"error,omitempty"`
}
MCPResponse MCP 响应
type MCPToolAdapter
deprecated
type MCPToolAdapter struct {
// contains filtered or unexported fields
}
MCPToolAdapter 将 MCP 工具转换为可调用格式(兼容旧版本)
Deprecated: 请使用 ConnectMCPServer 或 MCPProxyTool
func LoadMCPTools
deprecated
func LoadMCPTools(ctx context.Context, endpoint string) (*MCPToolAdapter, error)
LoadMCPTools 从 MCP 服务器加载工具
Deprecated: 请使用 ConnectMCPServer
func NewMCPToolAdapter
deprecated
func NewMCPToolAdapter(client *Client) *MCPToolAdapter
NewMCPToolAdapter 创建 MCP 工具适配器
Deprecated: 请使用 ConnectMCPServer
func (*MCPToolAdapter) CallTool ¶
func (a *MCPToolAdapter) CallTool(ctx context.Context, name string, args map[string]any) (string, error)
CallTool 调用 MCP 工具
func (*MCPToolAdapter) GetMCPTools ¶
func (a *MCPToolAdapter) GetMCPTools() []Tool
GetMCPTools 获取 MCP 工具列表
type MCPToolSet ¶
type MCPToolSet struct {
// contains filtered or unexported fields
}
MCPToolSet 管理一组来自同一 MCP 服务器的工具
使用 MCPToolSet 可以方便地管理多个 MCP 工具, 并提供统一的生命周期管理(如关闭连接)
func ConnectMCPServerWithToolSet
deprecated
func ConnectMCPServerWithToolSet(ctx context.Context, endpoint string) (*MCPToolSet, error)
ConnectMCPServerWithToolSet 连接 MCP 服务器并返回工具集合
Deprecated: 请使用 ConnectMCPServerV2,基于官方 Go SDK 实现。
与 ConnectMCPServer 类似,但返回 MCPToolSet 以便管理生命周期
示例:
toolSet, err := mcp.ConnectMCPServerWithToolSet(ctx, "http://localhost:8080")
if err != nil {
log.Fatal(err)
}
defer toolSet.Close()
agent := agent.New(
agent.WithTools(toolSet.Tools()...),
)
func ConnectStdioServerWithToolSet
deprecated
func ConnectStdioServerWithToolSet(ctx context.Context, command string, args ...string) (*MCPToolSet, func(), error)
ConnectStdioServerWithToolSet 连接本地 MCP 进程并返回工具集合
Deprecated: 请使用 ConnectStdioServerV2,基于官方 Go SDK 实现。
与 ConnectStdioServer 类似,但返回 MCPToolSet 以便管理生命周期
示例:
toolSet, cleanup, err := mcp.ConnectStdioServerWithToolSet(ctx,
"npx", "-y", "@modelcontextprotocol/server-filesystem", "/tmp")
if err != nil {
log.Fatal(err)
}
defer cleanup()
agent := agent.New(
agent.WithTools(toolSet.Tools()...),
)
func NewMCPToolSet ¶
func NewMCPToolSet(client *TransportClient, mcpTools []Tool) *MCPToolSet
NewMCPToolSet 从 MCP 服务器创建工具集合
func (*MCPToolSet) HandleListChanged ¶
func (s *MCPToolSet) HandleListChanged(ctx context.Context) error
HandleListChanged 是 MCP notifications/tools/list_changed 通知的处理入口, 语义等价于 Refresh——收到该通知时调用即可动态更新工具集。
func (*MCPToolSet) Reconnect ¶
func (s *MCPToolSet) Reconnect(ctx context.Context) error
Reconnect 主动按指数退避重连远端 MCP 服务器并刷新工具集。
未设置策略时使用 DefaultReconnectConfig。重连恢复连接后会重新拉取工具列表 并触发 OnToolsChanged 回调。重试耗尽仍失败则返回错误。
注意:本方法重试的是初始化握手,可恢复传输层能自愈的瞬时故障(HTTP/SSE 抖动、服务器重启后可重新连上)。对子进程已退出的 stdio 传输,进程重启属传输 层职责,本层重试会耗尽并返回错误。
func (*MCPToolSet) Refresh ¶
func (s *MCPToolSet) Refresh(ctx context.Context) error
Refresh 重新从 MCP 服务器拉取工具列表并重建工具集(动态发现)。
适用场景:收到 notifications/tools/list_changed 通知时、或需要主动刷新远端 工具时调用。客户端在初始化握手中已声明 tools.listChanged 能力,服务器据此 在工具集变化时推送通知;上层把通知路由到本方法即可实现动态工具发现。 成功刷新后若注册了 OnToolsChanged 回调会被触发。 若配置了重连策略(SetReconnectPolicy),首次拉取失败时会按指数退避自动重连 后再列一次;重连仍失败才返回错误。未配置策略时行为不变(失败即返回)。
func (*MCPToolSet) SetOnToolsChanged ¶
func (s *MCPToolSet) SetOnToolsChanged(fn func([]tool.Tool))
SetOnToolsChanged 注册工具集变化回调。
Refresh 重建工具集后会触发该回调,便于上层(如 Agent 工具注册表)同步 动态发现的工具集。传 nil 可清除回调。
func (*MCPToolSet) SetReconnectPolicy ¶
func (s *MCPToolSet) SetReconnectPolicy(cfg *ReconnectConfig)
SetReconnectPolicy 设置工具集的自动重连策略。
设置后,Refresh 在拉取失败时会按该策略指数退避重连;传 nil 关闭自动重连。
type MessageType ¶
type MessageType string
MessageType 消息类型
const ( MessageTypeRequest MessageType = "request" MessageTypeResponse MessageType = "response" MessageTypeNotification MessageType = "notification" )
type Method ¶
type Method string
Method MCP 方法
const ( // 初始化 MethodInitialize Method = "initialize" // 工具相关 MethodToolsList Method = "tools/list" MethodToolsCall Method = "tools/call" // 资源相关 MethodResourcesList Method = "resources/list" MethodResourcesRead Method = "resources/read" MethodResourcesSubscribe Method = "resources/subscribe" // 提示相关 MethodPromptsList Method = "prompts/list" MethodPromptsGet Method = "prompts/get" // 采样 MethodSamplingCreateMessage Method = "sampling/createMessage" // 日志 MethodLoggingSetLevel Method = "logging/setLevel" )
type Prompt ¶
type Prompt struct {
Name string `json:"name"`
Description string `json:"description,omitempty"`
Arguments []PromptArgument `json:"arguments,omitempty"`
}
Prompt MCP 提示模板
type PromptArgument ¶
type PromptArgument struct {
Name string `json:"name"`
Description string `json:"description,omitempty"`
Required bool `json:"required,omitempty"`
}
PromptArgument 提示参数
type PromptHandler ¶
PromptHandler 提示处理函数
type PromptMessage ¶
type PromptMessage struct {
Role string `json:"role"`
Content ContentBlock `json:"content"`
}
PromptMessage 提示消息
type PromptsCapability ¶
type PromptsCapability struct {
ListChanged bool `json:"listChanged,omitempty"`
}
PromptsCapability 提示能力
type ReconnectConfig ¶
type ReconnectConfig struct {
// MaxAttempts 最大尝试次数(含首次);零值表示执行一次、零次重试
MaxAttempts int
// InitialDelay 首次重试前的等待;零值使用默认值
InitialDelay time.Duration
// MaxDelay 退避上限;零值使用默认值
MaxDelay time.Duration
// Multiplier 退避倍数(指数退避);零值使用默认值
Multiplier float64
}
ReconnectConfig 自动重连策略。
退避序列:第 n 次重试等待 min(InitialDelay × Multiplier^(n-1), MaxDelay)。
func DefaultReconnectConfig ¶
func DefaultReconnectConfig() *ReconnectConfig
DefaultReconnectConfig 默认重连策略:最多 5 次、初始 500ms、上限 30s、倍数 2.0。
type RegisteredPrompt ¶
type RegisteredPrompt struct {
Prompt Prompt
Handler PromptHandler
}
RegisteredPrompt 注册的提示
type RegisteredResource ¶
type RegisteredResource struct {
Resource Resource
Handler ResourceHandler
}
RegisteredResource 注册的资源
type RegisteredTool ¶
type RegisteredTool struct {
Tool Tool
Handler ToolHandler
}
RegisteredTool 注册的工具
type Resource ¶
type Resource struct {
URI string `json:"uri"`
Name string `json:"name"`
Description string `json:"description,omitempty"`
MimeType string `json:"mimeType,omitempty"`
}
Resource MCP 资源
type ResourceContent ¶
type ResourceContent struct {
URI string `json:"uri"`
MimeType string `json:"mimeType,omitempty"`
Text string `json:"text,omitempty"`
Blob string `json:"blob,omitempty"`
}
ResourceContent 资源内容
type ResourceHandler ¶
type ResourceHandler func(ctx context.Context) (*ResourceContent, error)
ResourceHandler 资源处理函数
type ResourcesCapability ¶
type ResourcesCapability struct {
Subscribe bool `json:"subscribe,omitempty"`
ListChanged bool `json:"listChanged,omitempty"`
}
ResourcesCapability 资源能力
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server MCP 服务器
func ServeMCPTools
deprecated
func ServeMCPTools(addr string, tools []ToolDefinition) (*Server, error)
ServeMCPTools 将工具定义作为 MCP 服务器暴露
Deprecated: 请使用 ServeMCPToolsFromAICore
func ServeMCPToolsFromAICore ¶
ServeMCPToolsFromAICore 将 ai-core 工具作为 MCP 服务暴露
这是一个便捷函数,一行代码即可启动 MCP 服务
示例:
calculator := tool.NewFunc("calc", "计算器", calcFn)
searcher := tool.NewFunc("search", "搜索", searchFn)
server, err := mcp.ServeMCPToolsFromAICore(":8080", calculator, searcher)
if err != nil {
log.Fatal(err)
}
defer server.Stop(context.Background())
func (*Server) RegisterAICoreTool ¶
RegisterAICoreTool 将 ai-core tool.Tool 注册到 MCP 服务器
这允许将 Hexagon 工具暴露为 MCP 服务,供其他 MCP 客户端调用
示例:
calculator := tool.NewFunc("calc", "计算器", calcFn)
server.RegisterAICoreTool(calculator)
func (*Server) RegisterAICoreTools ¶
RegisterAICoreTools 批量注册 ai-core 工具
示例:
server.RegisterAICoreTools(calculator, searcher, fileReader)
func (*Server) RegisterPrompt ¶
func (s *Server) RegisterPrompt(prompt Prompt, handler PromptHandler)
RegisterPrompt 注册提示
func (*Server) RegisterResource ¶
func (s *Server) RegisterResource(resource Resource, handler ResourceHandler)
RegisterResource 注册资源
func (*Server) RegisterTool ¶
func (s *Server) RegisterTool(tool Tool, handler ToolHandler)
RegisterTool 注册工具
type ServerCapabilities ¶
type ServerCapabilities struct {
Tools *ToolsCapability `json:"tools,omitempty"`
Resources *ResourcesCapability `json:"resources,omitempty"`
Prompts *PromptsCapability `json:"prompts,omitempty"`
Logging *LoggingCapability `json:"logging,omitempty"`
}
ServerCapabilities 服务器能力
type ServerConfig ¶
type ServerConfig struct {
Name string `json:"name"`
Version string `json:"version"`
Addr string `json:"addr"`
}
ServerConfig 服务器配置
type ServerV2 ¶
type ServerV2 struct {
// contains filtered or unexported fields
}
ServerV2 基于官方 SDK 的 MCP 服务器
将 Hexagon/ai-core 工具暴露为标准 MCP 服务, 支持 Stdio 和 HTTP 两种运行模式。
示例:
server := mcp.NewMCPServerV2("my-tools", "1.0.0")
server.RegisterTool(myCalculator)
server.RegisterTool(myFileReader)
// Stdio 模式(CLI 工具)
server.ServeStdio(ctx)
// 或 HTTP 模式
server.ServeHTTP(ctx, ":8080")
func NewMCPServerV2 ¶
NewMCPServerV2 创建基于官方 SDK 的 MCP 服务器
func (*ServerV2) HTTPHandler ¶
HTTPHandler 返回基于 Streamable HTTP 传输的 http.Handler。
适合挂载到调用方自己的 mux/路由(如鉴权中间件之后),所有请求复用本服务器实例。 Streamable HTTP 是 MCP 的现代远程传输(单端点 POST + 可选 SSE 响应)。
func (*ServerV2) RegisterTool ¶
RegisterTool 注册单个 ai-core 工具到 MCP 服务器
自动将 ai-core Schema 转换为 MCP InputSchema
func (*ServerV2) RegisterTools ¶
RegisterTools 批量注册 ai-core 工具
func (*ServerV2) SSEHandler ¶
SSEHandler 返回基于 SSE 传输的 http.Handler(兼容较旧的 SSE 客户端)。
func (*ServerV2) ServeHTTP ¶
ServeHTTP 以 Streamable HTTP 模式在 addr 上运行 MCP 服务器。
阻塞直到 ctx 取消(取消时优雅关闭,最长等待 5s)。需要把 handler 挂到既有 HTTP 服务时改用 HTTPHandler()。
注意:本方法签名为 (ctx, addr),与 http.Handler.ServeHTTP(w, r) 不同, ServerV2 不是 http.Handler。
func (*ServerV2) ServeStdio ¶
ServeStdio 以 Stdio 模式运行 MCP 服务器
通过 stdin/stdout 与客户端通信,适合作为 CLI 工具或 IDE 插件。 阻塞直到 context 取消或连接断开。
type StdioTransport ¶
type StdioTransport struct {
// contains filtered or unexported fields
}
StdioTransport 标准输入输出传输层
通过 stdin/stdout 与本地 MCP 进程通信。 适用于 npx、uvx 等工具启动的本地 MCP 服务。
通信协议:
- 每行一个 JSON-RPC 消息(以换行符分隔)
- 请求发送到进程的 stdin
- 响应从进程的 stdout 读取
示例:
// 连接 filesystem MCP 服务
transport, cleanup, err := mcp.NewStdioTransport("npx", "-y",
"@modelcontextprotocol/server-filesystem", "/tmp")
if err != nil {
log.Fatal(err)
}
defer cleanup()
client := mcp.NewTransportClient(transport)
func NewStdioTransport ¶
func NewStdioTransport(command string, args ...string) (*StdioTransport, func(), error)
NewStdioTransport 创建 Stdio 传输层
command 是要执行的命令,args 是命令参数
返回值:
- transport: Stdio 传输层实例
- cleanup: 清理函数,用于关闭进程和释放资源
- error: 错误信息
示例:
// 使用 npx 启动 MCP 服务
transport, cleanup, err := mcp.NewStdioTransport("npx", "-y",
"@modelcontextprotocol/server-filesystem", "/tmp")
if err != nil {
log.Fatal(err)
}
defer cleanup()
// 使用 uvx 启动 Python MCP 服务
transport, cleanup, err := mcp.NewStdioTransport("uvx", "mcp-server-fetch")
func (*StdioTransport) Send ¶
func (t *StdioTransport) Send(ctx context.Context, req *MCPRequest) (*MCPResponse, error)
Send 发送 MCP 请求
type Tool ¶
type Tool struct {
Name string `json:"name"`
Description string `json:"description,omitempty"`
InputSchema *JSONSchema `json:"inputSchema"`
}
Tool MCP 工具定义
type ToolCallRequest ¶
type ToolCallRequest struct {
Name string `json:"name"`
Arguments map[string]any `json:"arguments,omitempty"`
}
ToolCallRequest 工具调用请求
type ToolCallResponse ¶
type ToolCallResponse struct {
Content []ContentBlock `json:"content"`
IsError bool `json:"isError,omitempty"`
}
ToolCallResponse 工具调用响应
type ToolDefinition
deprecated
type ToolHandler ¶
ToolHandler 工具处理函数
type ToolsCapability ¶
type ToolsCapability struct {
ListChanged bool `json:"listChanged,omitempty"`
}
ToolsCapability 工具能力
type Transport ¶
type Transport interface {
// Send 发送 MCP 请求并返回响应
// 实现应该处理 JSON-RPC 2.0 格式的请求和响应
Send(ctx context.Context, req *MCPRequest) (*MCPResponse, error)
// Close 关闭传输层
// 释放相关资源(如进程句柄、网络连接等)
Close() error
}
Transport MCP 传输层接口
Transport 定义了 MCP 客户端与服务器通信的方式。 支持多种实现:HTTP、Stdio 等。
type TransportClient ¶
type TransportClient struct {
// contains filtered or unexported fields
}
TransportClient 基于 Transport 的 MCP 客户端
与 Client 类似,但使用 Transport 接口而非固定的 HTTP 通信
func NewTransportClient ¶
func NewTransportClient(transport Transport) *TransportClient
NewTransportClient 创建基于 Transport 的客户端
示例:
// HTTP 传输
transport := mcp.NewHTTPTransport("http://localhost:8080")
client := mcp.NewTransportClient(transport)
// Stdio 传输
transport, _ := mcp.NewStdioTransport("npx", "-y", "@modelcontextprotocol/server-filesystem", "/tmp")
client := mcp.NewTransportClient(transport)
func (*TransportClient) CallTool ¶
func (c *TransportClient) CallTool(ctx context.Context, name string, args map[string]any) (*ToolCallResponse, error)
CallTool 调用工具
func (*TransportClient) GetPrompt ¶
func (c *TransportClient) GetPrompt(ctx context.Context, name string, args map[string]string) ([]PromptMessage, error)
GetPrompt 获取提示
func (*TransportClient) GetServerCapabilities ¶
func (c *TransportClient) GetServerCapabilities() *ServerCapabilities
GetServerCapabilities 获取服务器能力
func (*TransportClient) Initialize ¶
func (c *TransportClient) Initialize(ctx context.Context) error
Initialize 初始化客户端
func (*TransportClient) ListPrompts ¶
func (c *TransportClient) ListPrompts(ctx context.Context) ([]Prompt, error)
ListPrompts 列出可用提示
func (*TransportClient) ListResources ¶
func (c *TransportClient) ListResources(ctx context.Context) ([]Resource, error)
ListResources 列出可用资源
func (*TransportClient) ListTools ¶
func (c *TransportClient) ListTools(ctx context.Context) ([]Tool, error)
ListTools 列出可用工具
func (*TransportClient) ReadResource ¶
func (c *TransportClient) ReadResource(ctx context.Context, uri string) (*ResourceContent, error)
ReadResource 读取资源
func (*TransportClient) Transport ¶
func (c *TransportClient) Transport() Transport
Transport 返回底层传输层