Skip to main content
本页定义传输为承载 MCP 消息必须提供的能力、标准传输绑定,以及定义新传输时的要求。 协议语义在每种传输上都是相同的。传输是一种 绑定:它定义消息如何成帧和投递、请求元数据如何携带,以及如何发出取消和终止信号。它不定义消息的含义:消息模式 是核心协议的一部分,并且在每种绑定上都相同。各绑定页面规定了标准传输:
  1. stdio:通过客户端启动的子进程的标准流传输以换行分隔的消息。
  2. 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 请求。与这些修订互操作的客户端和服务器会检测对端所属的时代,并按照版本控制:向后兼容性中的说明回退;该页面还包含面向实现者的兼容性矩阵。每个绑定页面都会描述其特定于传输的检测机制。