基础协议

ℹ️
协议修订版本: 2025-03-26

Model Context Protocol (MCP) 由多个关键组件共同构成:

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

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

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

消息

所有 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。
  • 响应 分为 成功结果错误 两种情况。响应中 必须 设置 resulterror 之一,但 不得 同时设置两者。
  • 结果 (result) 可以 遵循任意 JSON 对象结构,而错误 (error) 必须 至少包括错误代码和错误消息。
  • 错误代码 必须 是整数。

通知 (Notifications)

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

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

批处理 (Batching)

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

认证 (Auth)

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

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

如果您希望进一步讨论和推动 MCP 认证机制的演化,请访问 GitHub Discussions,共同塑造协议的未来!

Schema

协议的完整规范定义为 TypeScript Schema。这是所有协议消息和结构的权威来源。

同时,还有一个 JSON Schema,它由 TypeScript 源代码自动生成,可用于各种自动化工具。