协议修订版本: 草案
- 基础协议:核心 JSON-RPC 消息类型
- 生命周期管理:连接初始化、能力协商和会话控制
- 授权:基于 HTTP 传输的认证和授权框架
- 服务器功能:服务器提供的资源、提示词和工具
- 客户端功能:客户端提供的采样和根目录列表
- 实用工具:日志记录、参数补全等通用功能
消息
MCP 客户端与服务器之间的所有消息 必须 遵循 JSON-RPC 2.0 规范。协议定义了以下类型的消息:请求
请求由客户端发送到服务器,或由服务器发送到客户端,用于启动一个操作。- 请求 必须 包含一个字符串或整数的 ID。
- 与基础 JSON-RPC 不同,ID 不能 为
null。 - 请求的 ID 不得 在同一会话中由发送方重复使用。
响应
响应是对请求的回复,包含操作的结果或错误信息。- 响应 必须 包含与其对应的请求相同的 ID。
- 响应进一步细分为 成功结果 或 错误。必须设置
result或error之一,不能同时设置两者。 - 结果可以遵循任意 JSON 对象结构,而错误至少 必须 包含错误代码和消息。
- 错误代码 必须 是整数。
通知
通知由客户端发送到服务器,或由服务器发送到客户端,是一种单向消息。接收方 不得 发送响应。- 通知 不得 包含 ID。
认证(Auth)
MCP 提供了一个授权框架供 HTTP 使用。使用基于 HTTP 的传输的实现 应该 遵循此规范;而使用 STDIO 传输的实现 不应该 遵循此规范,而是应从环境中获取凭证。 此外,客户端和服务器 可以 协商它们自己的自定义认证和授权策略。 如需进一步讨论并为 MCP 的认证机制发展做出贡献,请加入我们: GitHub Discussions,共同塑造协议的未来!协议结构定义(Schema)
协议的完整规范定义为一个 TypeScript 结构定义。 这是所有协议消息和结构的权威来源。 还有一个 JSON Schema, 它由 TypeScript 的权威定义自动生成,可用于各种自动化工具。通用字段
_meta
_meta 属性/参数由 MCP 保留,供客户端和服务器在其交互中附加额外的元数据。
某些键名由 MCP 保留用于协议级别的元数据,如下所述;实现 不得 对这些键中的值做出假设。
此外,schema 中的定义可能为特定用途保留特定名称的元数据,这些定义中声明了具体用途。
键名格式: 有效的 _meta 键名包含两个部分:一个可选的 前缀 和一个 名称。
前缀:
- 如果指定了前缀,必须 是一系列由点(
.)分隔的标签,后跟一个斜杠(/)。- 每个标签 必须 以字母开头,以字母或数字结尾;中间字符可以是字母、数字或连字符(
-)。
- 每个标签 必须 以字母开头,以字母或数字结尾;中间字符可以是字母、数字或连字符(
- 以零个或多个有效标签开头,后跟
modelcontextprotocol或mcp,再后跟任意有效标签的任何前缀均被 保留供 MCP 使用。- 例如:
modelcontextprotocol.io/、mcp.dev/、api.modelcontextprotocol.org/和tools.mcp.com/均为保留前缀。
- 例如:
- 除非为空,必须 以字母数字字符(
[a-z0-9A-Z])开头和结尾。 - 中间 可以 包含连字符(
-)、下划线(_)、点(.)和字母数字字符。