菜单

工具

相关源文件

MCP Go SDK 中的工具系统提供了一个全面的框架,用于定义、管理和执行可由 MCP 客户端调用的可执行函数。该系统处理工具模式定义、参数验证、执行路由以及与 MCP 协议的集成。

有关数据访问等其他 MCP 功能的信息,请参阅资源。有关用户交互模板,请参阅提示。有关完整的服务器设置和配置,请参阅MCP 服务器

工具定义和模式

MCP 中的工具是使用Tool结构体定义的,该结构体包含名称、描述、输入模式和行为注释。输入模式使用 JSON Schema 来验证和记录预期参数。

工具模式结构

Sources: mcp/tools.go472-483 mcp/tools.go518-540 mcp/tools.go541-552

该系统支持两种定义工具模式的方法

方法用例优点
结构化模式 (ToolInputSchema)大多数具有标准 JSON Schema 需求的工具类型安全、构建器模式、验证
原始模式 (RawInputSchema)需要高级 JSON Schema 功能的复杂模式完整的 JSON Schema 灵活性

工具创建和配置

工具是使用构建器函数创建的,这些函数提供了用于配置的流畅 API。NewTool 函数创建具有结构化模式的工具,而 NewToolWithRawSchema 允许任意 JSON Schema 定义。

工具构建器模式

Sources: mcp/tools.go569-591 mcp/tools.go600-608 mcp/tools.go847-865

属性配置

该系统提供具有验证选项的特定类型属性构建器

属性类型构建器函数通用选项
字符串WithString(name, opts...)Required(), MinLength(), MaxLength(), Pattern(), Enum()
数字WithNumber(name, opts...)Required(), Min(), Max(), MultipleOf()
布尔值WithBoolean(name, opts...)Required(), DefaultBool()
数组WithArray(name, opts...)Required(), Items(), MinItems(), MaxItems(), UniqueItems()
对象WithObject(name, opts...)Required(), Properties(), AdditionalProperties()

Sources: mcp/tools.go804-821 mcp/tools.go825-843 mcp/tools.go847-865

参数处理和绑定

CallToolRequest 提供了多种访问工具参数的方法,从简单的键值访问到强类型绑定。

参数访问方法

Sources: mcp/tools.go46-70 mcp/tools.go73-90 mcp/tools.go93-234

灵活的参数支持

该系统处理三种参数格式

  1. 映射参数 (map[string]any) - 传统的键值参数
  2. 结构化参数 - 自定义结构体序列化为 JSON
  3. 原始参数 - 任意数据类型
访问方式返回类型错误处理
GetString(key, default)字符串如果缺失/无效,则返回默认值
RequireString(key)(string, error)如果缺失/无效,则返回错误
BindArguments(&struct)errorJSON 解组到结构体
GetRawArguments()any按原样返回参数

Sources: mcp/tools.go58-70 mcp/tools.go93-113 mcp/tools.go236-278

工具执行和处理器

工具执行由处理CallToolRequest并返回CallToolResult的处理器函数处理。该系统支持无类型和强类型处理器。

处理器函数类型

Sources: mcp/typed_tools.go8-20 mcp/tools.go26-43

结果结构

工具执行结果包含内容和错误信息

字段类型目的
内容[]Content响应数据(文本、图像、音频、嵌入式资源)
IsErrorbool指示工具执行是否失败

CallToolResult 遵循 MCP 约定,即工具级别的错误在结果对象中报告,而不是作为协议级别的错误,从而允许 LLM 查看并可能从失败中恢复。

Sources: mcp/tools.go26-43

服务器集成

工具通过ServerTool封装器和管理方法集成到 MCP 服务器中。服务器处理工具注册、列出和执行路由。

服务器工具集成

Sources: server/server_test.go161-180 server/server_test.go255-285

工具生命周期管理

服务器提供全面的工具生命周期管理

操作方法通知
添加单个工具AddTool(tool, handler)notifications/tools/list_changed
替换所有工具SetTools(...ServerTool)notifications/tools/list_changed
移除工具DeleteTools(...names)notifications/tools/list_changed 如果有任何工具被移除

当工具列表被修改时,服务器会自动向活跃的客户端会话发送tools/list_changed通知。

Sources: server/server_test.go182-210 server/server_test.go287-315

协议集成

工具通过标准化的请求/响应消息和通知模式与 MCP 协议集成。

MCP 协议流程

Sources: mcp/tools.go15-24 mcp/tools.go464-469

协议消息类型

消息类型方向目的
tools/list客户端 → 服务器请求可用工具
tools/call客户端 → 服务器执行特定工具
notifications/tools/list_changed服务器 → 客户端通知工具列表更改

该协议支持工具列表的分页,并包含用于进度跟踪和附加上下文的元数据。

Sources: mcp/tools.go15-24 mcp/tools.go464-469