基础协议

Protocol Revision: 2025-03-26

Model Context Protocol(MCP)由多个关键组件协同工作组成:

  • Base Protocol(基础协议):核心 JSON-RPC 消息类型
  • Lifecycle Management(生命周期管理):连接初始化、能力协商和会话控制
  • Server Features(服务器功能):服务器提供的资源、提示和工具
  • Client Features(客户端功能):客户端提供的采样和根目录列表
  • Utilities(实用工具):如日志记录和参数补全等跨模块需求

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

这些协议层提供了明确的关注点分离,同时在客户端和服务器之间实现了丰富的交互。模块化设计使得实现可以根据需求支持恰当的功能。

消息

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

请求(Requests)

客户端或服务器发送请求以启动操作。

{
  jsonrpc: "2.0";
  id: string | number;
  method: string;
  params?: {
    [key: string]: unknown;
  };
}
  • 请求必须包含字符串或整数 ID。
  • 不同于基础 JSON-RPC,ID 不得null
  • 请求 ID 不得在同一会话中被请求者重复使用。

响应(Responses)

响应用于回复请求,包含操作结果或错误信息。

{
  jsonrpc: "2.0";
  id: string | number;
  result?: {
    [key: string]: unknown;
  }
  error?: {
    code: number;
    message: string;
    data?: unknown;
  }
}
  • 响应必须包含与其对应请求相同的 ID。
  • 响应分为成功结果错误,要么设置 result,要么设置 error,但不得同时设置两者。
  • 结果可以遵循任意 JSON 对象结构,而错误至少包括错误代码和消息。
  • 错误代码必须是整数。

通知(Notifications)

通知是从客户端或服务器发送的一种单向消息。接收者不得发送响应。

{
  jsonrpc: "2.0";
  method: string;
  params?: {
    [key: string]: unknown;
  };
}
  • 通知不得包含 ID。

批处理(Batching)

JSON-RPC 定义了一个方法来 批量发送多个请求和通知,将它们以数组方式发送。MCP 实现可以支持发送 JSON-RPC 批处理,但必须支持接收 JSON-RPC 批处理。

认证(Auth)

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

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

关于 MCP 认证机制演化的进一步讨论和贡献,请加入 GitHub Discussions,共同助力协议未来的发展!

架构(Schema)

协议的完整规范定义为一个 TypeScript 模式。这是所有协议消息和结构的源头。

同时还生成了一个 JSON Schema,它是从 TypeScript 源头自动生成的,可用于各种自动化工具。