概述

社区译文;来源: MCP 80041ab0

本页定义传输必须为承载 MCP 消息提供哪些能力、标准传输绑定,以及定义新传输时应满足的要求。

所有传输上的协议语义完全相同。传输是一种绑定:它定义消息如何分帧和传递、如何携带请求元数据, 以及如何发出取消和终止信号。传输不定义消息的含义:消息模式 属于核心协议,并且在所有绑定上都相同。各绑定页面规定了以下标准传输:

  1. stdio :通过客户端启动的子进程标准流传输以换行符分隔的消息。
  2. 可流式 HTTP :每条消息都是发送到单个 MCP 端点的 HTTP POST;回复以 JSON 对象或限定于该请求的 SSE 流形式到达。

客户端和服务器也可以实现自定义传输 。

消息

MCP 使用 JSON-RPC 编码消息。JSON-RPC 消息 MUST 使用 UTF-8 编码。

绑定 MUST 将客户端发送的_请求_和_通知_传递给服务器,并将服务器发送的_响应_和_通知_传递给客户端。 不存在其他消息方向:根据消息模式 ,服务器不会发起 JSON-RPC 请求, 客户端也不会发送 JSON-RPC 响应。

请求元数据

所有协议元数据都在消息正文中传输:每个请求都通过 _meta.io.modelcontextprotocol/* 字段携带协议版本和客户端能力。

绑定还 MAY 将选定的正文字段镜像到信封元数据中。可流式 HTTP 传输将这些字段镜像到 HTTP Header , 使中间组件无需解析正文即可路由和检查请求。正文仍是真相源;镜像元数据的绑定需定义如何拒绝不匹配情况。

取消

每种绑定都定义客户端如何放弃进行中的请求:在 stdio 上,客户端发送 notifications/cancelled 通知; 在可流式 HTTP 上,客户端关闭该请求的响应流。协议层规则在所有传输上相同;参见 取消 。

自定义传输

客户端和服务器 MAY 实现其他自定义传输机制,以满足各自的特定需求。协议与传输无关, 可在任何支持双向消息交换的通信通道上实现。

选择支持自定义传输的实现者 MUST 保留 JSON-RPC 消息格式、 消息模式 和逐请求元数据模型。 自定义传输 SHOULD 记录其连接建立、消息分帧和取消模式,以促进互操作性。

在可靠双向字节流(例如 Unix 域套接字或 TCP)上运行的自定义传输 SHOULD 复用 stdio 分帧 ,而不是定义新的分帧方式: stdio 绑定本质上只是字节流上以换行符分隔的 JSON-RPC,只有其进程生命周期规则专用于标准流。

向后兼容

早期协议修订版通过 initialize 握手建立连接范围的会话,并允许服务器发起 JSON-RPC 请求。 与这些修订版互操作的客户端和服务器会识别对端所处的协议时代,并按 版本控制:向后兼容 所述方式回退,其中包含供实现者参考的兼容性矩阵。每个绑定页面都说明其传输特定的检测机制。