Skip to content

MCP Specification · 2026-07-28 · zh-TW

傳輸機制

Transports · Overview

MCP message 如何在 stdio、Streamable HTTP 與自訂 transport 上 framing、傳遞與取消。

本頁定義 MCP transport 必須提供哪些能力、標準 transport bindings,以及定義新 transport 時應遵循的要求。

所有 transport 上的協定語意都完全相同。Transport 是一種 binding(綁定):它定義訊息如何 framing 與傳遞、request metadata 如何攜帶,以及取消與終止如何表示;它不定義訊息本身的意義。訊息模式屬於核心協定,在所有 binding 上都相同。

2026-07-28 定義兩種標準 transport:

  1. stdio:用戶端啟動子程序,透過標準串流傳遞以換行分隔的訊息。
  2. Streamable HTTP:每個訊息都是送往單一 MCP endpoint 的 HTTP POST;回覆為單一 JSON object 或限定於該 request 的 SSE stream。

用戶端與伺服器也可以實作自訂 transport。

訊息(Messages)

MCP 使用 JSON-RPC 編碼訊息。JSON-RPC 訊息 MUST(必須)使用 UTF-8 編碼。

Transport binding MUST(必須)把用戶端送出的 requestsnotifications 傳給伺服器,並把伺服器送出的 responsesnotifications 傳給用戶端。不存在其他訊息方向:依 2026-07-28 的訊息模式,伺服器不會主動建立 JSON-RPC request,用戶端也不會送出 JSON-RPC response。

請求中繼資料(Request metadata)

所有協定 metadata 都放在 message body 中。每個 request 都會透過 _meta.io.modelcontextprotocol/* 欄位帶上協定版本與用戶端 capabilities。

Transport binding MAY(可以)另外把 body 中選定的欄位鏡射到 envelope metadata。Streamable HTTP 就會把這些資訊鏡射到 HTTP headers,讓 load balancer、gateway 或 observability tooling 不需要解析 body 就能進行 routing 與 inspection。

但 message body 仍然是 source of truth。任何鏡射 metadata 的 binding 都必須明確定義 header 與 body 不一致時如何拒絕請求。

取消(Cancellation)

每一種 binding 都要定義用戶端如何放棄進行中的 request:

  • stdio:送出 notifications/cancelled
  • Streamable HTTP:關閉該 request 的 response stream。

傳輸層的表示方式不同,但協定層的取消規則相同。

自訂傳輸機制(Custom transports)

用戶端與伺服器 MAY(可以)實作額外的自訂 transport,以符合特定需求。MCP 本身與 transport 無關,可以實作在任何支援雙向訊息交換的 communication channel 上。

實作者若支援自訂 transport,MUST(必須)保留 JSON-RPC message format、MCP message patterns,以及 per-request metadata model。自訂 transport SHOULD(應該)記錄連線建立、message framing 與 cancellation 的方式,以提升互通性。

若自訂 transport 建立在可靠的雙向 byte stream 上,例如 Unix domain socket 或 TCP,SHOULD(應該)重用 stdio 的 framing,而不是再定義一套新的格式。stdio binding 本質上就是在 byte stream 上傳遞 newline-delimited JSON-RPC;只有 process lifecycle 的部分才是標準輸入輸出特有的。

向後相容(Backward Compatibility)

較早的 MCP revision 會用 initialize handshake 建立 connection-scoped session,並允許伺服器主動建立 JSON-RPC request。需要與這些 revision 互通的用戶端與伺服器,應依「版本與相容性」頁面的 era detection 與 compatibility matrix 決定 fallback 行為。

各 transport 頁面也會另外說明它們自己的 legacy detection mechanics。