- stdio:通过客户端启动的子进程的标准流传输以换行分隔的消息。
- Streamable HTTP:每条消息都是发往单个 MCP 端点的 HTTP POST;回复以 JSON 对象或请求作用域的 SSE 流形式到达。
Messages
MCP 使用 JSON-RPC 对消息进行编码。JSON-RPC 消息 MUST 使用 UTF-8 编码。 绑定 MUST 将客户端发送的 请求 和 通知 投递给服务器,并将服务器发送的 响应 和 通知 投递给客户端。不存在其他消息方向:根据消息模式,服务器不会发起 JSON-RPC 请求,客户端也不会发送 JSON-RPC 响应。Request Metadata
所有协议元数据都在消息体中传输:每个请求都在_meta.io.modelcontextprotocol/* 字段中携带协议版本、客户端身份和客户端能力。
绑定 MAY 另外将选定的消息体字段镜像到信封元数据中。Streamable HTTP 传输会将这些字段镜像到 HTTP 标头,以便中介组件无需解析消息体即可路由和检查请求。消息体仍然是真实来源;镜像元数据的绑定会定义如何拒绝不匹配的情况。
Cancellation
每种绑定都会定义客户端如何放弃正在进行的请求:在 stdio 上,客户端发送notifications/cancelled 通知;在 Streamable HTTP 上,客户端关闭该请求的响应流。协议层规则在所有传输上都相同;请参见取消。
Custom Transports
客户端和服务器 MAY 实现额外的自定义传输机制,以满足其特定需求。协议与传输无关,可以在任何支持双向消息交换的通信通道上实现。 选择支持自定义传输的实现者 MUST 保留 JSON-RPC 消息格式、消息模式 和按请求提供元数据的模型。自定义传输 SHOULD 记录其连接建立、消息成帧和取消模式,以帮助实现互操作。 运行在可靠双向字节流(例如 Unix domain socket 或 TCP)之上的自定义传输 SHOULD 复用 stdio 成帧,而不是定义新的成帧方式:stdio 绑定只是字节流上的换行分隔 JSON-RPC,只有它的进程生命周期规则是标准流特有的。Backward Compatibility
更早的协议修订通过initialize 握手建立连接作用域的会话,并允许服务器发起 JSON-RPC 请求。与这些修订互操作的客户端和服务器会检测对端所属的时代,并按照版本控制:向后兼容性中的说明回退;该页面还包含面向实现者的兼容性矩阵。每个绑定页面都会描述其特定于传输的检测机制。