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