1. 协议修订信息 #
协议修订: 2025-06-18
2. 概述 #
Model Context Protocol由几个关键组件共同协作构成:
- 基础协议 - 核心JSON-RPC消息类型
- 生命周期管理 - 连接初始化、能力协商和会话控制
- 授权 - 基于HTTP传输的认证与授权框架
- 服务器特性 - 服务器暴露的资源、提示和工具
- 客户端特性 - 客户端提供的采样和根目录列表
- 实用工具 - 诸如日志记录和参数补全等横切关注点
重要说明:所有实现必须支持基础协议和生命周期管理组件。其他组件可以根据应用程序的具体需求来实现。
这些协议层确立了清晰的关注点分离,同时支持客户端与服务器之间的丰富交互。模块化设计让实现能够精准支持所需功能。
3. 消息类型 #
MCP客户端与服务器之间的所有消息必须遵循JSON-RPC 2.0规范。该协议定义了以下类型的消息:
3.1 请求 (Requests) #
请求从客户端发送到服务器或反之,以启动一项操作。
{
jsonrpc: "2.0";
id: string | number;
method: string;
params?: {
[key: string]: unknown;
};
}请求规则:
- 请求必须包含一个字符串或整数ID
- 与基础的JSON-RPC不同,ID不得是
null - 请求ID不得是请求者在同一会话中先前已使用过的
3.2 响应 (Responses) #
响应作为对请求的回复发送,包含操作的结果或错误信息。
{
jsonrpc: "2.0";
id: string | number;
result?: {
[key: string]: unknown;
}
error?: {
code: number;
message: string;
data?: unknown;
}
}响应规则:
- 响应必须包含与对应请求相同的ID
- 响应进一步细分为成功的结果或错误,要么是
result或者一个error必须已设置。回复不得两者都设置 - 结果可以遵循任何JSON对象结构,同时处理错误必须至少包含一个错误代码和消息
- 错误代码必须为整数
3.3 通知 (Notifications) #
通知从客户端发送到服务器或反之,作为单向消息。接收方不得发送响应。
{
jsonrpc: "2.0";
method: string;
params?: {
[key: string]: unknown;
};
}通知规则:
- 通知不得包含一个ID
4. 认证与授权 #
MCP提供了一种授权基于HTTP使用的框架。
4.1 认证策略 #
- 基于HTTP传输的实现:应该符合此规范
- 使用STDIO传输的实现:不应遵循此规范,并从环境中获取凭证
- 自定义认证:客户端与服务器可以协商他们自己的自定义认证与授权策略
4.2 参与讨论 #
如需进一步探讨并为MCP认证机制的演进贡献力量,欢迎加入我们的GitHub 讨论区帮助塑造该协议的未来!
5. 架构定义 #
该协议的完整规范被定义为一个TypeScript 架构,这是所有协议消息和结构的唯一真实来源。
还有一个JSON 模式,这是自动从TypeScript的单一可信源生成的,用于与各种自动化工具配合使用。
5.1 通用字段 #
5.1.1 _meta 字段 #
_meta属性/参数由MCP保留,以便客户端和服务器能在交互时附加额外的元数据。
MCP协议层元数据保留以下特定关键名称,具体如下;各实现方案不得对这些键值做出任何假设。
此外,架构中的定义可能会为特定目的保留特定名称,用于声明这些定义中的专用元数据。
键名格式:有效_meta键名有两个前缀,以及一个名称。
5.1.1.1 前缀规则 #
- 如指定,必须为由点号分隔的一系列标签(
.),后接一个斜杠(/)- 标签必须以字母开头并以字母或数字结尾;内部字符可以是字母、数字或连字符(
-)
- 标签必须以字母开头并以字母或数字结尾;内部字符可以是字母、数字或连字符(
- 任何以零个或多个有效标签开头的前缀,后接
modelcontextprotocol或mcp,后接任何有效标签,是保留供MCP使用- 例如:
modelcontextprotocol.io/、mcp.dev/、api.modelcontextprotocol.org/和tools.mcp.com/全部保留
- 例如:
5.1.1.2 名称规则 #
- 除非为空,否则必须以字母数字字符开头和结尾(
[a-z0-9A-Z]) - 可能包含连字符(
-)、下划线(_)、圆点(.)以及中间包含的字母数字字符
6. 总结 #
MCP基础协议提供了:
- 标准化消息格式 - 基于JSON-RPC 2.0的可靠通信
- 灵活的消息类型 - 支持请求、响应和通知
- 可扩展的元数据 - 通过
_meta字段支持扩展 - 模块化设计 - 清晰的组件分离和职责划分
- 向后兼容性 - 支持渐进式功能添加
这种设计使得MCP能够适应各种应用场景,同时保持协议的简洁性和可维护性。