Skip to main content
模型上下文协议 (MCP) 允许服务器暴露可由语言模型调用的工具。工具使模型能够与外部系统交互,例如查询数据库、调用 API 或执行计算。每个工具都通过名称唯一标识,并包含描述其模式的元数据。

用户交互模型

MCP 中的工具设计为 模型控制,这意味着语言模型可以根据其上下文理解和用户的提示自动发现和调用工具。 然而,实现可以自由地通过任何适合其需求的界面模式暴露工具——协议本身不强制任何特定的用户交互模型。
为了信任、安全和安保,始终 应当 有人类参与循环,并具有拒绝工具调用的能力。应用程序 应当
  • 提供 UI,明确显示哪些工具被暴露给 AI 模型
  • 在工具被调用时插入清晰的视觉指示
  • 向用户呈现操作确认提示,以确保人类参与循环

能力

支持工具的服务器 必须 声明 tools 能力:
listChanged 指示服务器是否在可用工具列表变更时发出通知。

协议消息

列出工具

要发现可用工具,客户端发送 tools/list 请求。此操作支持 分页 请求:
响应:

调用工具

要调用工具,客户端发送 tools/call 请求: 请求:
响应:

列表变更通知

当可用工具列表变更时,声明了 listChanged 能力的服务器 应当 发送通知:

消息流

数据类型

工具

工具定义包括:
  • name:工具的唯一标识符
  • description:功能的人类可读描述
  • inputSchema:定义预期参数的 JSON Schema

工具结果

工具结果可以包含多种不同类型的内容项:

文本内容

图像内容

嵌入资源

资源 可以 被嵌入,以提供额外的上下文或数据,背后是一个 URI,客户端可以订阅该 URI 或稍后再次获取:

错误处理

工具使用两种错误报告机制:
  1. 协议错误:标准 JSON-RPC 错误,用于此类问题:
    • 未知工具
    • 无效参数
    • 服务器错误
  2. 工具执行错误:在工具结果中报告,isError: true
    • API 失败
    • 无效输入数据
    • 业务逻辑错误
协议错误示例:
工具执行错误示例:

安全考量

  1. 服务器 必须
    • 验证所有工具输入
    • 实施适当的访问控制
    • 限制工具调用速率
    • 清理工具输出
  2. 客户端 应当
    • 在敏感操作上提示用户确认
    • 在调用服务器前向用户显示工具输入,以避免恶意或意外的数据泄露
    • 在传递给 LLM 之前验证工具结果
    • 为工具调用实施超时
    • 记录工具使用情况以用于审计目的