协议修订: 2025-06-18
模型上下文协议 (Model Context Protocol) 由几个协同工作的关键组件组成
  • 基础协议:核心 JSON-RPC 消息类型
  • 生命周期管理:连接初始化、能力协商和会话控制
  • 授权:用于基于 HTTP 传输的身份验证和授权框架
  • 服务器功能:服务器公开的资源、提示和工具
  • 客户端功能:客户端提供的采样和根目录列表
  • 实用工具:如日志记录和参数补全等跨领域功能
所有实现都必须支持基础协议和生命周期管理组件。其他组件可以根据应用的具体需求来实现。 这些协议层在实现客户端和服务器之间丰富交互的同时,建立了清晰的关注点分离。模块化设计允许实现仅支持其所需的功能。

消息

MCP 客户端和服务器之间的所有消息必须遵循 JSON-RPC 2.0 规范。该协议定义了以下几种消息类型

请求

请求从客户端发送到服务器,或反之,以发起一个操作。
{
  jsonrpc: "2.0";
  id: string | number;
  method: string;
  params?: {
    [key: string]: unknown;
  };
}
  • 请求必须包含一个字符串或整数 ID。
  • 与基础 JSON-RPC 不同,ID 不得null
  • 请求 ID 在同一会话中不得被请求方重复使用。

响应

响应是为回复请求而发送的,包含操作的结果或错误。
{
  jsonrpc: "2.0";
  id: string | number;
  result?: {
    [key: string]: unknown;
  }
  error?: {
    code: number;
    message: string;
    data?: unknown;
  }
}
  • 响应必须包含与其对应的请求相同的 ID。
  • 响应进一步细分为成功结果错误必须设置 resulterror 两者之一。响应不得同时设置两者。
  • 结果可以遵循任何 JSON 对象结构,而错误必须至少包含一个错误代码和消息。
  • 错误代码必须是整数。

通知

通知从客户端发送到服务器,或反之,作为单向消息。接收方不得发送响应。
{
  jsonrpc: "2.0";
  method: string;
  params?: {
    [key: string]: unknown;
  };
}
  • 通知不得包含 ID。

认证

MCP 提供了一个用于 HTTP 的授权框架。使用基于 HTTP 传输的实现应该遵循此规范,而使用 STDIO 传输的实现不应该遵循此规范,而应从环境中检索凭据。 此外,客户端和服务器可以协商自己的自定义身份验证和授权策略。 若要进一步讨论和贡献 MCP 认证机制的演进,请加入我们的 GitHub Discussions,共同塑造协议的未来!

模式

协议的完整规范定义为一个 TypeScript 模式。这是所有协议消息和结构的真实来源。 还有一个 JSON Schema,它是从 TypeScript 真实来源自动生成的,可用于各种自动化工具。

通用字段

_meta

_meta 属性/参数由 MCP 保留,以允许客户端和服务器在其交互中附加额外的元数据。 某些键名由 MCP 保留用于协议级别的元数据,如下所述;实现不得对这些键的值做任何假设。 此外,模式中的定义可能会为特定目的的元数据保留特定名称,如这些定义中所声明。 键名格式:有效的 _meta 键名有两个部分:一个可选的前缀和一个名称 前缀:
  • 如果指定,必须是一系列由点 (.) 分隔的标签,后跟一个斜杠 (/)。
    • 标签必须以字母开头,以字母或数字结尾;内部字符可以是字母、数字或连字符 (-)。
  • 任何以零个或多个有效标签开头,后跟 modelcontextprotocolmcp,再后跟任何有效标签的前缀,均保留给 MCP 使用。
    • 例如:modelcontextprotocol.io/mcp.dev/api.modelcontextprotocol.org/tools.mcp.com/ 都是保留的。
名称
  • 除非为空,否则必须以字母数字字符 ([a-z0-9A-Z]) 开头和结尾。
  • 中间可以包含连字符 (-)、下划线 (_)、点 (.) 和字母数字。