top of page

MCP 為什麼改成無狀態?2026-07-28 規格逐項拆解,以及它和 A2A 的分工

9月9日
讀畢需時 9 分鐘

Model Context Protocol(MCP)在 2026 年 7 月 28 日發布的規格版本,做了一件範圍很大的事:把整個協定改成無狀態。initialize 握手被移除,協定層的 session 與 Mcp-Session-Id 標頭一起被拿掉,每一個請求從此自我完備、彼此獨立。

這不是一次相容性修補,是協定核心的置換。官方版本頁把 2026-07-28 標為目前的 current,並註明帶握手的舊版是 2025-11-25 以前的版本。本文逐項整理這一版改了什麼、代價落在哪裡,以及它在整個 Agent 協定版圖(含 A2A)裡的位置。

規格細節我們已回查 MCP 官方的 Versioning 與 2026-07-28 Key Changes 兩頁核對;實務觀察與踩坑經驗來自六支公開技術影片,出處與證據強度見文末。

一、被移除的是什麼:兩個提案,一個結構性改變

官方 changelog 的兩項主要變更如下:

  • SEP-2575:移除 initialize / notifications/initialized 握手。協定版本與客戶端能力改由每一個請求自己攜帶。同一提案還新增 server/discover,伺服器必須實作,用來公告支援的協定版本、能力與身分。

  • SEP-2567:移除協定層 session 與 Mcp-Session-Id 標頭。tools/list、resources/list、prompts/list 這些清單端點不再隨連線而異;伺服器若需要跨呼叫的狀態,改用「伺服器發出的明確 handle」,當成一般的工具參數傳遞。

為什麼要改:舊設計在水平擴充下會結構性失敗。 舊流程是客戶端先送 initialize,伺服器產生一組 session ID 回傳,後續每個請求都要帶著它。問題在於那組 session 存在某一台機器的記憶體裡——一旦前面掛了負載平衡器、後面跑兩個以上的實例,下一個請求輪到另一台,那台沒聽過這個 session,直接回 400 session not found。同樣的失敗也發生在 pod 被回收、autoscaler 縮容的時候。

業界既有的兩種解法——sticky session、或拉一個共用 Redis 存 session——都有效,但兩者本質上都是基礎設施在替一個協定決策做補償:多一層黏著、多一次網路往返、多一筆帳單。新規格的做法是不再要求補償。

改完之後:負載平衡器回到最普通的輪詢,任何實例都能回答任何請求;某台掛了換下一台,客戶端不會察覺。在 Cloudflare Workers、Google Cloud Run 這類環境裡,伺服器不需要撐著連線 24 小時不睡,沒有流量時可以縮到零。Better Stack 引述 Cloudflare 的說法是「MCP 不再需要 Durable Objects 才能講這個協定」——此句為轉述,要引用請回查 Cloudflare 官方公告。

二、最常見的誤讀:無狀態協定不等於無狀態應用

這一版最容易被讀錯的地方,是把「拿掉 session」讀成「不需要儲存」。

被移除的是協定層的 session,不是狀態本身。 一個要查訂單、跑部署的 MCP server 本來就有應用狀態,那些不會消失。新規格的處理方式是:伺服器發一個明確的 handle(例如 project_id),存進共用儲存,由模型在每一次呼叫時把它當成一般工具參數帶回來。

差別在於誰在記、記得明不明講:以前是傳輸層隱式地幫你記,換一台機器就沒了;現在是應用層顯式地存、顯式地傳。照字面把共用儲存也一起刪掉,會刪到還需要的東西。

三、代價:相容性,以及斷掉就沒了的串流

無狀態不是免費的,這一版有兩筆明確的成本。

第一筆是串流可恢復性。 SSE 串流的 Last-Event-ID 與 event ID 被整組移除,訊息重送機制不再存在。以前串流斷掉還能接回去,現在斷了就是掉了——客戶端必須用一個新的 request ID 重送整個請求。續傳的責任從協定推回給客戶端。

第二筆是向後相容性,而這一筆比較貴。 Theo(t3.gg)在影片中指出,新規格不向後相容:舊的客戶端實作預期的是一條綁定的有狀態連線,新規格正好相反。他的判斷是,MCP 原本的價值就在於「一個簡單、大家都支援的標準」,而現在兩個都宣稱「支援 MCP」的東西,可能完全接不起來

Atef Ataya 撞到的是同一件事的實務版:新版 SDK 的客戶端預設仍走舊方言,必須自己加一行設定才會走新規格。他說這是刻意的——生態正在轉換期,SDK 不想弄壞舊伺服器。代價是他第一次執行就失敗,花了一小時才定位。

實務上的順序建議:先確認客戶端在哪一版,再處理伺服器。 伺服器有棄用窗口保護,客戶端沒有。

四、人類確認的機制被重寫:從長連線改成多回合請求

舊規格裡,一個危險工具(例如「部署到正式環境」)要向使用者取得確認時,伺服器得撐著一條線去問。這個設計有一個明確的失效模式:線斷掉的時候,等於沒有人否決

在 Atef Ataya 的示範裡,斷線的結果是那次部署在沒有任何人確認的情況下執行了,記錄上寫著 confirmed_by_user: false。一條死掉的連線被讀成了一聲「好」。

新規格以 MRTR(Multi Round-Trip Requests,SEP-2322) 取代:伺服器回傳一個 resultType 為 input_required 的結果,把需要補的東西放在 inputRequests 裡,然後關閉連線;客戶端取得答案後,帶著 inputResponses 重送同一個請求。沒有連線需要一直開著,也沒有問題會在斷線時消失。

舊版由伺服器主動發起的 roots/list、sampling/createMessage、elicitation/create,全部被這一個模式收掉。

這一項的意義不在效能,在於把「沉默等於同意」這個預設從架構裡拔掉

五、棄用時程:哪些有窗口,哪些直接消失

官方在這一版同時採用了「功能生命週期與棄用政策」,明訂棄用窗口至少十二個月

  • Deprecated,有十二個月以上窗口:Roots、Sampling、Logging(SEP-2577)

  • Deprecated,重新歸類:HTTP+SSE 傳輸(SEP-2596)

  • 直接移除,沒有窗口:ping、logging/setLevel、notifications/roots/list_changed(SEP-2575)

注意最後一項與第一項的差別:被棄用的是 Logging 這個能力,被直接拿掉的是 logging/setLevel 這個方法,兩者分屬不同提案。日誌層級改為每個請求以 _meta 的 io.modelcontextprotocol/logLevel 指定。

其餘變更中,兩項對維運與閘道層有直接影響:Streamable HTTP 的 POST 請求現在必須帶 Mcp-Method 與 Mcp-Name 標頭(SEP-2243),閘道、rate limiter 與防火牆不必再拆開整包 JSON 才知道這是什麼請求;清單型回應則必須帶 ttlMs 與 cacheScope(SEP-2549),前者是新鮮度提示,後者標明 public 或 private,決定共用中介是否可以快取。

六、MCP 只是三類協定的其中一類:A2A 在哪個位置

把視野拉大一層。Google AI/ML 總監 Saurabh 在 GleanGo 2026 受訪時,把目前幾乎每週都在冒出來的 Agent 協定分成三類:

  • 連接工具與其他 Agent — A2A 與 MCP。他的說法是,這兩個是「活下來的那兩個」。

  • 內容層/程序知識 — OpenAI 的 AGENTS.md、Anthropic 的 Skills 這一類,負責把「該怎麼做」餵給 Agent。

  • Agent 連接外部系統 — 支付、商務、UI 等,這一類最雜也最大。

他的結構性判斷是這些協定會收斂。他舉的例子是——依他的說法——IBM 原本有一個與 A2A 對等的協定,後來兩邊合併並捐給了 Linux Foundation(此節屬受訪者口述,我們未獨立查證)。他預期這種合併會愈來愈多,但「協定版圖穩定下來還要一段時間」。

同一場訪談裡他點出的落地瓶頸更值得記:傳輸層其實已經解決得差不多了,卡住多 Agent 落地的是語意層。 你的 Agent 對「客戶」的定義,可能和另一個 Agent 不一樣;兩邊認證正常、API 互通、對話順暢,最後答案還是錯的。這需要各自的本體論(ontology)能對得起來,不是換一個協定能解決的問題。

MCP 與周邊機制怎麼分工,IBM Technology 在 9 月初的影片用一個網頁噴 500 錯誤的情境切得很清楚:

  • Skill 給步驟與判斷:先看錯誤率、再看最近的部署、什麼時候該停手交給人。

  • MCP 給對外的手:讓 Agent 真的連得到日誌與儀表板,把錯誤率讀出來。

  • RAG 給查得到的知識:這個系統平常長什麼樣、依賴哪些服務。

  • 記憶給累積的經驗:以前出過什麼事。

Skill 會叫 Agent 去看錯誤率,但沒有 MCP,它碰不到那個儀表板。四者不互相取代。

七、分析:協定變簡單了,成本歸因沒有

以上都是協定層的進展。但對實際在付帳單的團隊來說,這一版沒有碰到另一個更急的問題。

KliqueAI 在一支討論 LLM Gateway 的影片裡做了一個值得記的區分:閘道不是控制平面。 在模型呼叫前面放一個 gateway,解決的是「六個端點變一個」「金鑰集中管理」——這些都是真實的價值。但它留下三個問題沒解:

  • gateway 自己又發了一套 API key,於是有兩套身分要管;

  • 預算只算得到「租」來的模型,算不到自己買的機器;

  • 而且沒有任何機制強迫大家一定要走它

該片對現況的歸納是:每一種公司資源都有天花板——運算有配額,儲存有配額,雲端帳號有預算和告警;Token 有的是一張信用卡和一個希望。 它描述的失效場景是:一個自主 Agent 在週六進了迴圈,每一輪都在燒 token,燒了兩天沒有人看;帳單三十天後才到,財務問「誰花了什麼」而沒有人答得出來——因為架構裡從來沒有一個地方,是設計來回答這個問題的。

一句話總結該片的判斷:大家都在做路由,幾乎沒有人在做決定。

這兩件事的時間尺度不同,值得分開處理。 無狀態化把 MCP 變回一個普通的 HTTP 服務,是工程債的清償,有至少十二個月的窗口;A2A 與三類協定如何收斂,是未來一兩年的事。但「誰在花錢、花在哪個模型上」是今天就會寄帳單過來的問題,而它不會因為協定變簡單而自己變透明——前者是別人幫你修好的,後者要自己在架構裡留一個位置。

FAQ

Q1:MCP 改成無狀態之後,既有的 server 會馬上壞掉嗎?

不會馬上。官方功能生命週期政策訂的是「至少十二個月」的棄用窗口。但 ping、logging/setLevel、notifications/roots/list_changed 是直接移除,不在窗口保護範圍內。另外要注意順序:依 Atef Ataya 的實測,新版 SDK 的客戶端預設仍走舊方言,要自己加一行設定;Theo(t3.gg)則指出新規格不向後相容,兩個都宣稱「支援 MCP」的工具可能完全接不起來。真正該先確認的是客戶端在哪一版。

Q2:A2A 和 MCP 是競爭關係嗎?該選哪一個?

依 Saurabh 在 GleanGo 2026 的說法,兩者同屬「連接工具與其他 Agent」這一類,有重疊但回答的問題不同,而且他預期協定版圖會逐步收斂。務實的做法是不要為了押寶單一協定把系統寫死,把對外整合抽成可替換的一層。

Q3:多 Agent 架構最大的坑是什麼?

同一場訪談指出是語意層,不是傳輸層。兩邊認證正常、API 互通,但對同一個名詞的定義不同,最後答案仍然是錯的。這需要各自的本體論能對得起來。

Q4:已經有 LLM Gateway 了,還需要別的東西嗎?

閘道是必要的第一步,這一步不能跳——先把多個端點收成一個、把用量與交易明細變成查得到的東西。跳過它直接談治理,會發現連要治理的那個數字都還沒生出來。第二步才是控制平面:要能回答「誰花了多少」,關鍵是每一次模型呼叫都帶著公司原本就在用的身分,而不是 gateway 自己另外發的一把 key。差別在於歸因是架構的副產品,還是一個要另外做的專案。

Q5:這篇的資訊可以直接當成規格依據嗎?

規格細節(版本編號、SEP 編號、新增與棄用清單)我們已回查 MCP 官方規格的 Versioning 與 2026-07-28 Key Changes 兩頁,內容一致。但影片作者的示範情境、實作細節與 Cloudflare 相關轉述,我們未獨立重現。要動到正式架構決策前,請直接讀官方規格與各雲端供應商自己的公告。

資料來源聲明

本文為官方規格文件與多支公開影片的綜合整理與重新論述,非任一支影片的逐字翻譯。

官方規格(2026-09-08 查閱):

  • MCP 規格版本頁(確認 2026-07-28 為 current、2025-11-25 以前為握手版):https://modelcontextprotocol.io/specification/versioning

  • MCP 2026-07-28 Key Changes(SEP-2575/2567/2322/2549/2577/2596/2243、Mcp-Method 與 Mcp-Name 標頭、ttlMs 與 cacheScope、至少十二個月棄用窗口):https://modelcontextprotocol.io/specification/2026-07-28/changelog

影片素材(觀看數為 2026-09-08 素材篩選當下的擷取值,同日稍後重抓略有增減,以下一律採篩選當下的數字,並取小數點後一位、無條件捨去):

  • 《MCP Was Wrong From The Start (They Just Fixed It)》— Better Stack,2026-08-08,約 17.2 萬次觀看。https://www.youtube.com/watch?v=f4mI3d-nTrI

  • 《MCP Just Went Stateless. Your Server Is Now Legacy.》— Atef Ataya,2026-08-16,約 16.6 萬次觀看。https://www.youtube.com/watch?v=8UC0C-IJZ7U

  • 《Did Anthropic finally fix MCP?》— Theo - t3․gg,2026-08-08,約 10.3 萬次觀看。https://www.youtube.com/watch?v=gVfEtktkvnE

  • 《Agentic AI Stack: Where Google, Glean, MCP and A2A Are Heading》— The Ravit Show,2026-08-29,約 4.5 萬次觀看。受訪者為 Google AI/ML 總監 Saurabh。https://www.youtube.com/watch?v=CPrQutbsqGc

  • 《Skills vs MCP vs RAG vs Memory: What AI Agents Need to Know》— IBM Technology,2026-09-03,約 9.8 萬次觀看。https://www.youtube.com/watch?v=X4FVEEegCbk

  • 《LLM Gateway vs AI Control Plane (Explained)》— KliqueAI,2026-08-16,約 3.2 萬次觀看。https://www.youtube.com/watch?v=0tVweBmCgkc

聲明: 規格細節已回查上列官方文件;影片作者的示範、實作細節與轉述內容(含 Cloudflare 相關說法)我們未獨立重現,A2A 與協定收斂的判斷屬受訪者個人觀點。本文為技術趨勢整理,不構成採購建議或效能承諾。

延伸閱讀

立即行動

想先把第一步做完?到 AI Token King 看方案——用同一把 key 接多家模型,用量、餘額與交易明細三者皆可查詢與匯出。

最新文章

查看全部
AGENTS.md 是什麼?一份給 AI 看的 README,為什麼 Codex、Claude Code、Copilot 都在用

AGENTS.md 是一個開放、極簡的 Markdown 檔案格式,作用是把「怎麼在這個專案裡正確工作」的細節——像是建置指令、測試指令、程式碼風格、PR 規範——集中寫在一個固定位置,讓 AI 程式碼代理(coding agent)在動手改程式碼之前,能自己讀到這些脈絡,而不需要你在每次對話裡重新交代一遍。它由 OpenAI 於 2025 年 8 月釋出,2025 年 12 月 9 日與 Ant

 
 
 

留言


bottom of page