协议修订:2024-11-05
用户交互模型
MCP 中的工具设计为由模型控制,这意味着语言模型可以根据其上下文理解和用户的提示自动发现并调用工具。 然而,实现可以自由地通过任何适合其需求的接口模式暴露工具——协议本身不强制任何特定的用户交互模型。功能
支持工具的服务器必须声明tools 能力:
listChanged 表示当可用工具列表发生变化时,服务器是否会发送通知。
协议消息
列出工具
要发现可用工具,客户端发送tools/list 请求。该操作支持分页。
请求:
调用工具
要调用工具,客户端发送tools/call 请求:
请求:
工具列表变更通知
当可用工具列表发生变化时,声明了listChanged 能力的服务器应该发送通知:
消息流程
数据类型
工具(Tool)
一个工具定义包括:name:工具的唯一标识符description:功能的可读性描述inputSchema:定义预期参数的 JSON Schema
工具结果(Tool Result)
工具结果可以包含多个不同类型的内容项:文本内容
图像内容
嵌入式资源
资源 可以嵌入,以提供额外的上下文或数据,通过客户端稍后可以订阅或再次获取的 URI:错误处理
工具使用两种错误报告机制:-
协议错误:标准的 JSON-RPC 错误,用于以下问题:
- 未知工具
- 参数无效
- 服务器错误
-
工具执行错误:在工具结果中使用
isError: true报告:- API 调用失败
- 输入数据无效
- 业务逻辑错误
安全考虑
-
服务器必须:
- 验证所有工具输入
- 实现适当的访问控制
- 对工具调用进行速率限制
- 对工具输出进行清理
-
客户端应该:
- 对敏感操作提示用户确认
- 在调用服务器前向用户显示工具输入,以防止恶意或意外的数据泄露
- 在传递给 LLM 前验证工具结果
- 为工具调用实现超时机制
- 记录工具使用情况以便审计