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