MCP 伺服器傳輸
MCP 支援 Bob 和 MCP 伺服器之間通訊的傳輸機制。
概述
MCP 提供三種傳輸選項,每種都適合不同的部署場景:
- STDIO 傳輸(本地伺服器)
- Streamable HTTP 傳輸(遠端伺服器的現代標準)
- SSE 傳輸(已移除)
每種傳輸都有不同的特性、優勢和使用案例。
STDIO 傳輸
STDIO 傳輸在您的機器上本地執行,並透過標準輸入/輸出串流進行通訊。
STDIO 傳輸如何運作
- Bob 將 MCP 伺服器作為子程序生成
- 通訊透過程序串流進行:Bob 寫入伺服器的 STDIN,伺服器回應到 STDOUT
- 每個訊息由換行字元分隔
- 訊息格式為 JSON-RPC 2.0
Client Server
| |
|---- JSON message ------>| (via STDIN)
| | (processes request)
|<---- JSON message ------| (via STDOUT)
| |STDIO 特性
- 本地性:在與 Bob 相同的機器上執行
- 效能:非常低的延遲和開銷(不涉及網路堆疊)
- 簡單性:直接程序通訊,無需網路配置
- 關係:客戶端和伺服器之間的一對一關係
- 安全性:本質上更安全,無網路暴露
何時使用 STDIO
STDIO 傳輸非常適合:
- 在同一機器上執行的本地整合和工具
- 安全敏感操作
- 低延遲需求
- 單客戶端場景(每個伺服器一個 Bob 實例)
- 命令列工具或 IDE 擴充功能
STDIO 實作範例
const server = new Server({name: 'local-server', version: '1.0.0'});
// Register tools...
// Use STDIO transport
const transport = new StdioServerTransport(server);
transport.listen();Streamable HTTP 傳輸
Streamable HTTP 傳輸是遠端 MCP 伺服器通訊的現代標準,取代了較舊的 HTTP+SSE 傳輸。它透過 HTTP/HTTPS 運作,並允許更靈活的伺服器實作。
Streamable HTTP 傳輸如何運作
- 伺服器提供單一 HTTP 端點(MCP 端點),支援 POST 和 GET 方法
- Bob 使用 HTTP POST 向此 MCP 端點發送請求
- 伺服器處理請求並發送回回應
- 可選地,伺服器可以透過相同連接使用伺服器發送事件(SSE)向 Bob 串流多個訊息或通知
這允許基本的請求-回應互動以及更進階的串流和伺服器發起的通訊。
Client Server
| |
|---- HTTP POST /mcp_endpoint ---->| (client request)
| | (processes request)
|<--- HTTP Response / SSE Stream --| (server response / stream)
| |Streamable HTTP 特性
- 現代標準:新遠端 MCP 伺服器實作的首選方法
- 遠端存取:可以託管在與 Bob 不同的機器上
- 可擴展性:可以同時處理多個客戶端連接
- 協定:透過標準 HTTP/HTTPS 運作
- 靈活性:支援簡單的請求-回應和進階串流
- 單一端點:對所有 MCP 通訊使用單一 URL 路徑
- 驗證:可以使用標準 HTTP 驗證機制
- 向後相容性:伺服器可以維持與較舊 HTTP+SSE 客戶端的相容性
何時使用 Streamable HTTP
Streamable HTTP 傳輸非常適合:
- 所有新的遠端 MCP 伺服器開發
- 需要強大、可擴展和靈活通訊的伺服器
- 可能涉及串流資料或伺服器發送通知的整合
- 公共服務或集中式工具
- 取代舊版 SSE 傳輸實作
協定協商
當 Bob 連接到 Streamable HTTP 伺服器時,它使用 protocolNegotiation 選項來確定如何協商協定版本。HTTP 伺服器預設為 "auto"。
| 值 | 說明 |
|---|---|
"auto" | Bob 在 initialize 之前發送 server/discover 探測,以協商雙方支援的最高協定版本。HTTP 伺服器的預設值。 |
"legacy" | Bob 跳過探測,直接使用 initialize 握手連接,與所有 MCP 伺服器相容。 |
{ "pin": "<version>" } | Bob 使用特定協定版本連接(例如,{ "pin": "2024-11-05" })。 |
如果 HTTP 伺服器以 MCP connection timed out after 10000ms 逾時,伺服器可能未回應 server/discover 探測。設定 "protocolNegotiation": "legacy" 以跳過探測:
{
"mcpServers": {
"my-server": {
"url": "https://your-server-url.com/mcp",
"protocolNegotiation": "legacy"
}
}
}如需更多詳細資訊,請參閱「在 Bob 中使用 MCP」中的協定協商。
Streamable HTTP 實作範例
在 ~/.bob/settings/mcp.json(全域)或 .bob/mcp.json(專案)中的配置:
{
"mcpServers": {
"StreamableHTTPMCPName": {
"type": "streamable-http",
"url": "http://localhost:8080/mcp"
}
}
}對於伺服器端實作,請參閱 MCP SDK 文件中的 StreamableHTTPClientTransport。
與 HTTP+SSE 的向後相容性
Bob 的 MCP 客戶端不會回退到 HTTP+SSE 傳輸。以下指引是針對希望讓其 Streamable HTTP 伺服器能讓尚不支援 Streamable HTTP 的舊版客戶端存取的_伺服器作者_。
需要支援舊版客戶端的伺服器應繼續同時託管舊傳輸的 SSE(/events)和 POST(/message)端點,以及為 Streamable HTTP 傳輸定義的新 MCP 端點。
SSE 傳輸(已移除)
Bob 的 MCP 客戶端不再支援獨立的 HTTP+SSE 傳輸(MCP 規格 2024-11-05)。僅使用 HTTP+SSE 傳輸的伺服器無法連接至 Bob。
Streamable HTTP 連線中作為回應通道的 SSE 仍受支援。Bob 可以接收來自 Streamable HTTP 伺服器的 SSE 串流。僅獨立的 HTTP+SSE 傳輸(具有個別 /events 和 /message 端點)已被移除。
從 SSE 傳輸遷移
如果你有使用 HTTP+SSE 傳輸的現有伺服器,請將其遷移至 Streamable HTTP 傳輸或 STDIO 傳輸:
- Streamable HTTP:公開一個接受 HTTP POST 請求的單一 MCP 端點。這是遠端伺服器的推薦路徑。請參閱 Streamable HTTP 傳輸。
- STDIO:如果伺服器在與 Bob 相同的機器上本地執行,請將其轉換為 STDIO 伺服器。請參閱 STDIO 傳輸。
部署考量
STDIO 和 Streamable HTTP 傳輸之間的選擇直接影響您如何部署和管理 MCP 伺服器。
STDIO:本地部署
STDIO 伺服器在與 Bob 相同的機器上本地執行:
- 安裝:伺服器可執行檔必須安裝在每個使用者的機器上
- 分發:您需要為不同的作業系統提供安裝套件
- 更新:每個實例必須單獨更新
- 資源:使用本地機器的 CPU、記憶體和磁碟
- 存取控制:依賴本地機器的檔案系統權限
- 整合:輕鬆與本地系統資源(檔案、程序)整合
- 執行:隨 Bob 啟動和停止(子程序生命週期)
- 相依性:任何相依性都必須安裝在使用者的機器上
使用案例範例:
使用 STDIO 的本地檔案搜尋工具將:
- 在使用者的機器上執行
- 直接存取本地檔案系統
- 在 Bob 需要時啟動
- 不需要網路配置
- 需要與 Bob 一起安裝或透過套件管理器安裝
遠端:託管部署
遠端伺服器(Streamable HTTP)可以部署到遠端伺服器並透過網路存取:
- 安裝:在伺服器上安裝一次,由許多使用者存取
- 分發:單一部署服務多個客戶端
- 更新:集中更新立即影響所有使用者
- 資源:使用伺服器資源,而不是本地機器資源
- 存取控制:透過驗證和授權系統管理
- 整合:與使用者特定資源的整合更複雜
- 執行:作為獨立服務執行(通常持續執行)
- 相依性:在伺服器上管理,而不是在使用者機器上
使用案例範例:
使用遠端傳輸的資料庫查詢工具將:
- 在中央伺服器上執行
- 使用伺服器端憑證連接到資料庫
- 持續可供多個使用者使用
- 需要適當的網路安全配置
- 使用容器或雲端技術部署
混合方法
某些場景受益於混合方法:
- 具有網路存取的 STDIO:作為遠端服務代理的本地 STDIO 伺服器
- 具有本地命令的遠端:可以透過回呼在客戶端機器上觸發操作的遠端伺服器
- 閘道模式:用於本地操作的 STDIO 伺服器,連接到遠端伺服器以獲得專門功能
傳輸比較
| 考量 | STDIO | Streamable HTTP |
|---|---|---|
| 位置 | 僅本地機器 | 本地或遠端 |
| 客戶端 | 單一客戶端 | 多個客戶端 |
| 效能 | 較低延遲 | 較高延遲(網路開銷) |
| 設定複雜性 | 較簡單 | 較複雜(需要 HTTP 伺服器) |
| 安全性 | 本質上安全 | 需要明確的安全措施 |
| 網路存取 | 不需要 | 必需 |
| 可擴展性 | 限於本地機器 | 可以跨網路分發 |
| 部署 | 每個使用者安裝 | 集中安裝 |
| 更新 | 分散式更新 | 集中式更新 |
| 資源使用 | 使用客戶端資源 | 使用伺服器資源 |
| 相依性 | 客戶端相依性 | 伺服器端相依性 |
在 Bob 中配置傳輸
如需在 Bob 中配置傳輸的詳細資訊,包括範例配置,請參閱 Bob 中的 MCP。