Hotdry.

Article

MCP工具注册中心与动态发现协议:从JSON Schema到运行时能力协商

深入解析MCP协议层工具注册机制,涵盖JSON Schema描述规范、动态发现流程与能力协商细节,为知识工作插件系统提供协议层实现参考。

2026-05-26ai-systems

在构建知识工作插件系统时,MCP(Model Context Protocol)协议层的工具注册与动态发现机制是实现 LLM 与外部工具无缝协作的核心基础设施。与单纯的 API 调用不同,MCP 通过标准化的 JSON Schema 描述和运行时能力协商,使模型能够 "理解" 工具的能力边界并做出合理选择。

工具描述的 Schema 规范

MCP 协议对工具的定义采用严格的 JSON Schema 2020-12 作为默认方言。每个 Tool 对象必须包含name标识符、inputSchema输入参数定义,以及可选的outputSchema输出结构描述。这种设计使得 LLM 在调用工具前能够精确了解参数类型、必填字段和约束条件。

interface Tool extends BaseMetadata, Icons {
  description?: string;
  inputSchema: {
    $schema?: string;
    type: "object";
    properties?: { [key: string]: object };
    required?: string[];
  };
  outputSchema?: {
    $schema?: string;
    type: "object";
    properties?: { [key: string]: object };
    required?: string[];
  };
  annotations?: ToolAnnotations;
  execution?: ToolExecution;
}

值得注意的是,当 Schema 未显式声明$schema字段时,协议默认采用 JSON Schema 2020-12 版本。这种设计既保证了兼容性,又允许实现方根据需求指定其他方言版本。

行为提示与 Annotations 机制

除了结构化的 Schema 定义,MCP 还引入了ToolAnnotations机制来传达工具的语义特征。这些注解字段包括readOnlyHint(只读提示)、destructiveHint(破坏性操作提示)、idempotentHint(幂等性提示)和openWorldHint(开放世界交互提示)。

这些注解并非强制约束,而是作为 "提示"(hints)供客户端和 LLM 参考。例如,当destructiveHint为 false 时,表明工具仅执行添加性更新而非破坏性操作;idempotentHint为 true 则意味着重复调用相同参数不会产生额外副作用。这种设计让模型能够在工具选择阶段进行初步的风险评估。

动态发现与能力协商

MCP 的动态发现机制贯穿连接生命周期的多个阶段。初始化阶段,客户端通过initialize请求与服务器交换能力声明(Capabilities)。服务器在ServerCapabilities中声明是否支持工具列表(tools字段存在性)以及是否支持工具列表变更通知(tools.listChanged)。

运行时,客户端通过发送tools/list请求获取完整的工具目录。该请求支持分页机制,通过cursor参数实现大规模工具集的高效遍历。服务器返回的工具列表包含完整的 Schema 定义,客户端可将其转换为 LLM 可用的函数描述格式。

当服务器端的工具配置发生变化时,支持listChanged能力的服务器会主动推送notifications/tools/list_changed通知。客户端接收到通知后应重新获取工具列表,确保 LLM 始终使用最新的工具描述。

运行时调用与参数验证

工具调用通过tools/call请求完成,请求参数包含工具名称和符合inputSchema的参数字典。协议规定,工具执行的错误应通过CallToolResultisError字段返回,而非作为协议级错误响应,确保 LLM 能够感知错误并尝试自我修复。

对于耗时较长的工具操作,MCP 支持任务增强(Task Augmentation)机制。工具可在定义中声明taskSupport属性(forbidden/optional/required),允许客户端通过任务系统异步获取执行结果,避免长时间阻塞会话。

安全边界与实现约束

在实现工具注册中心时,需特别注意协议明确的安全边界。ToolAnnotations中的描述仅作为参考,客户端绝不应仅依赖服务器提供的注解做出安全决策,特别是在面对不可信服务器时。

此外,协议对 Schema 的嵌套层级存在限制。例如在elicitation/create场景中,请求的 Schema 仅允许顶层属性定义,不支持嵌套对象或数组结构。这一约束同样适用于工具参数的设计,复杂的嵌套结构可能导致验证失败或兼容性问题。

知识工作插件的实践映射

在 Anthropic 开源的知识工作插件体系中,.mcp.json配置文件承担了工具连接声明的角色。插件开发者通过该文件声明所需的 MCP 服务器连接,而具体的工具发现与调用则完全遵循上述协议规范。这种分层设计使得业务逻辑与协议细节解耦,Skills 文件专注于领域知识描述,而工具交互由协议层统一处理。

对于企业级部署,建议在工具注册中心层实现 Schema 缓存与版本控制机制。由于工具描述可能在运行时动态变化,客户端应建立合理的缓存失效策略,在性能与新鲜度之间取得平衡。同时,输入参数的严格校验应在客户端侧完成,避免将无效请求传递至服务器。


资料来源

ai-systems

内容声明:本文无广告投放、无付费植入。

如有事实性问题,欢迎发送勘误至 i@hotdrydog.com