协议修订版:2025-03-26

模型上下文协议(MCP)由多个关键组件组成,协同工作:

  • 基础协议:核心 JSON-RPC 消息类型
  • 生命周期管理:连接初始化、能力协商和会话控制
  • 服务器功能:服务器暴露的资源、提示和工具
  • 客户端功能:客户端提供的采样和根目录列表
  • 实用工具:日志记录和参数补全等跨领域关注点

所有实现 必须 支持基础协议和生命周期管理组件。其他组件 可以 根据应用程序的具体需求选择实现。

这些协议层建立了清晰的关注点分离,同时支持客户端与服务器之间的丰富交互。模块化设计允许实现仅支持所需的功能。

消息

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。

批处理

JSON-RPC 还定义了一种通过数组发送 多个请求和通知的批处理 方法。MCP 实现 可以 支持发送 JSON-RPC 批处理,但 必须 支持接收 JSON-RPC 批处理。

授权

MCP 提供了一个用于 HTTP 的 授权框架。使用基于 HTTP 的传输的实现 应该 遵循此规范,而使用 STDIO 传输的实现 不应该 遵循此规范,而是应从环境中检索凭据。

此外,客户端和服务器 可以 协商自己的自定义认证和授权策略。

有关 MCP 授权机制演进的进一步讨论和贡献,请加入我们在 GitHub 讨论区 的讨论,共同塑造协议的未来!

模式

协议的完整规范以 TypeScript 模式 定义。这是所有协议消息和结构的真实来源。

此外,还有一个 JSON 模式,它是从 TypeScript 真实来源自动生成的,供各种自动化工具使用。