传输机制

MCP 目前定义了两种标准传输机制用于客户端-服务器通信:

  1. 标准输入输出,通过标准输入和标准输出进行通信
  2. 带服务器发送事件的 HTTP(SSE)

客户端应该尽可能支持标准输入输出传输。

客户端和服务器也可以以可插拔的方式实现自定义传输机制

标准输入输出

标准输入输出传输中:

  • 客户端将 MCP 服务器作为子进程启动
  • 服务器通过其标准输入(stdin)接收 JSON-RPC 消息,并将响应写入其标准输出(stdout
  • 消息以换行符分隔,并且不得包含嵌入的换行符
  • 服务器可以将 UTF-8 字符串写入其标准错误(stderr)用于日志记录。客户端可以捕获、转发或忽略这些日志
  • 服务器不得向其 stdout 写入任何非有效 MCP 消息的内容
  • 客户端不得向服务器的 stdin 写入任何非有效 MCP 消息的内容
Server Process Client Server Process Client loop [消息交换] 启动子进程写入 stdin写入 stdout可选的 stderr 日志关闭 stdin,终止子进程

带 SSE 的 HTTP

SSE传输中,服务器作为一个独立的进程运行,可以处理多个客户端连接。

服务器必须提供两个端点:

  1. 一个 SSE 端点,供客户端建立连接并接收来自服务器的消息
  2. 一个常规的 HTTP POST 端点,供客户端向服务器发送消息

当客户端连接时,服务器必须发送一个包含 URI 的 endpoint 事件,客户端将使用该 URI 发送消息。所有后续的客户端消息必须作为 HTTP POST 请求发送到此端点。

服务器消息作为 SSE message 事件发送,消息内容以 JSON 格式编码在事件数据中。

Server Client Server Client loop [消息交换] 打开 SSE 连接endpoint 事件HTTP POST 消息SSE message 事件关闭 SSE 连接

自定义传输

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

选择支持自定义传输的实现者必须确保它们保持 MCP 定义的 JSON-RPC 消息格式和生命周期要求。自定义传输应该记录其特定的连接建立和消息交换模式,以帮助实现互操作性。