Anthropic今日宣佈對Model Context Protocol (MCP)進行重大更新,推出全新的"Streamable HTTP"傳輸方式,替代現有的HTTP+SSE方案。這一創新徹底解決了MCP遠程傳輸的關鍵限制,同時保留了其原有優勢。

這次更新本質上是對MCP數據傳輸機制的重構,使協議變得更靈活、更易用且更具兼容性。打個比方,原來的MCP傳輸方式就像與客服通話時必須保持持續在線(SSE需要長連接),而新方案則類似於隨時可以發送消息並等待回覆(普通HTTP請求,但可選流式傳輸)。

此次更新主要包括五大核心變更:首先,移除了專用的/sse端點,服務器不再單獨維護SSE(Server-Sent Events)端點;其次,所有客戶端到服務器的消息均通過統一的/message端點傳輸,不再依賴/sse;第三,服務器可根據需要動態將HTTP請求升級爲SSE流,用於發送通知或請求;第四,客戶端通過Header提供Mcp-Session-Id,服務器可自行決定是否存儲會話信息;最後,支持完全無狀態的服務器運行,不再需要維持長期連接。

推動此次變更的主要原因在於當前HTTP+SSE傳輸存在多項缺陷:不支持連接斷開後的恢復功能,迫使客戶端必須重新開始整個會話;服務器需要保持高可用性以支持持續的SSE連接;且SSE僅支持單向通信(服務器到客戶端),無法實現靈活的雙向通信。新的"Streamable HTTP"傳輸方式成功解決了這些問題,同時顯著提升了系統的可擴展性和靈活性。

對開發者而言,這一更新帶來諸多便利:實現MCP服務器變得更加簡單,只需普通HTTP服務器即可支持MCP,無需再搭建專門的SSE服務器;部署到Vercel、Cloudflare、AWS Lambda等不支持長連接的雲平臺變得更加容易;兼容性大幅提升,新方案作爲標準HTTP可與CDN、API網關、負載均衡無縫集成;擴展性顯著增強,支持無狀態模式運行,且可在需要時動態升級到SSE。

在基礎設施和服務器架構方面,新方案同樣帶來了革命性變化:無狀態服務器成爲可能,服務器不再需要持續存儲客戶端會話信息;更適合微服務架構,可輕鬆與REST API、GraphQL、負載均衡、CDN等系統集成;服務器資源利用率更高,處理完請求後即可釋放資源,適合高併發場景。

有趣的是,儘管SSE存在問題,Anthropic並未選擇WebSocket作爲替代方案。原因在於:WebSocket需要維持長連接,而MCP主要採用類似RPC的模式,每個請求獨立執行;WebSocket無法傳輸HTTP頭部信息,導致身份驗證過程變得複雜;WebSocket僅支持GET升級而非POST,與MCP主要使用的POST請求不兼容。因此,最終決定繼續使用HTTP,但賦予服務器根據需要升級到SSE的能力,而非強制使用SSE或WebSocket。

總體而言,此次更新使MCP變得更加輕量級且靈活,服務器可自主決定是否支持流式傳輸;部署流程顯著簡化,適用於Serverless架構;兼容性大幅提升,可與各種網絡基礎設施無縫協作;服務器資源利用率更高,支持更大規模的併發請求。

這一創新性變更使MCP服務器變得更簡單、更高效、更靈活,能夠支持更大規模的分佈式部署,徹底擺脫了SSE的限制,爲AI模型與應用間的通信開闢了新篇章。

項目地址:https://github.com/modelcontextprotocol/specification/pull/206