> 九號工具站
返回列表

MCP 2026-07-28 規格大改:我讀完 stateless 新版後,手上這幾個 server 要動什麼

Model Context Protocol 2026-07-28 丟出上線以來最大改版:協定層轉 stateless、Mcp-Session-Id 消失、Tasks 移出核心變擴充、授權全面收緊。我把規格讀完對照自己掛的 server,整理哪些會壞、哪些其實不用動,還有我一開始讀錯的四件事。

MCP Model Context Protocol Claude Code AI Agent 2026
· 最後更新 2026-08-30 · 最後審閱 2026-08-30

💡 這篇不是「我自己寫 MCP server 上 production」的心得,是我把 2026-07-28 官方規格讀完,對照自己 Claude Code 裡掛著的那幾個 server 做的整理。給有在用 MCP、但還沒空讀規格的人。

1. 先講結論:會痛的是自己寫 server 的人

「MCP 改版了,我是不是要全部重弄?」 —— 這個問題我看到很多次,答案分兩半。只掛現成 server 的人(GitHub、Playwright、Notion、Chrome 那種),你要做的事就是等上游更新、然後升版,規格改動被 SDK 吃掉了。自己寫 server、而且是遠端 HTTP server 的人,這次要動的地方不少,因為協定層的狀態被整個拔掉了。這篇把 2026-07-28 版的改動拆成「一定要動」「可以慢慢動」「其實沒你想的嚴重」三堆,順便講我讀規格時先誤會的幾件事。

小提示

  • 先確認你的 server 是 stdio 還是 Streamable HTTP —— 這次的痛點幾乎都集中在後者
  • SDK 已經跟上(TypeScript / Python / Go / C# 都是 Tier 1),Rust 還在 beta,選型時要算進去

2. stateless 到底改了什麼:三個消失、三個新增

這次的頭條是「協定層變成無狀態」。過去每條連線要先跑一輪握手、拿一個 session id,之後每個請求都得帶著它回到同一台機器。新版把這件事整個拿掉:
  • 消失:initialize / initialized 握手

    改成每個請求自己在 _meta 裡帶協定版本、client 身分與 client capabilities

  • 消失:Mcp-Session-Id header

    同一個請求可以被負載平衡後面任何一台 server 實例接走,不用做 sticky session

  • 消失:強制的能力協商

    改成可選的 server/discover RPC,想查再查,不查也能動

  • 新增:Mcp-Method

    把 RPC 方法名放進 HTTP header

  • 新增:Mcp-Name

    把 tool 或 resource 的名字放進 header

  • 新增:MCP-Protocol-Version

    值就是規格日期,例如 2026-07-28

小提示

  • 三個新 header 的意義是:gateway 可以直接照 header 做路由與授權,不用把 JSON body 拆開看
  • 這也代表你的 WAF / API gateway 終於能對 MCP 流量寫像樣的規則

3. MRTR 與可快取的 list:兩個容易被跳過但很實際的改動

拿掉 session 之後有個現實問題:server 想反問 client 一句話怎麼辦?舊做法是靠一直開著的串流做 server 發起的請求,這在無狀態世界行不通。新版給的答案叫 Multi Round-Trip Requests:
情境 舊版做法 2026-07-28 做法
server 需要補資料 server 主動發請求,需要開著的串流 回一個 resultType: input_required,列出要問的東西
client 回答 在同一條串流回覆 client 把答案放進 inputResponses,重打一次原本的呼叫
tools/list 這類清單 每次都重問 回應帶 ttlMs 與 cacheScope,client 自己決定快取策略
resources/read 每次都重讀 同上,也能快取

小提示

  • ttlMs 與 cacheScope 對「掛很多 server」的人影響最大 —— 每開一個 session 都重拉全部 tool 清單本來就很浪費
  • MRTR 本質上是把互動拆成兩次無狀態呼叫,設計 server 時要想清楚哪些欄位可以晚一點才要

4. 授權:這塊動最兇

如果只挑一個地方值得你花時間看,我會選授權。這次是往 OAuth 與 OpenID Connect 的實務靠攏,而且有硬性要求:
  • RFC 9207 的 iss 驗證

    server 必須回傳 iss 參數,client 必須驗它,這是擋 mix-up 攻擊的標準做法

  • 動態註冊時要帶 application_type

    為了讓 localhost 這種 redirect 不再被一律拒絕

  • 憑證綁定發證 server

    同一組 client 憑證不能跨 issuer 重複用

  • Dynamic Client Registration 被棄用

    官方改推 Client ID Metadata Documents(CIMD)

注意事項

棄用不等於馬上失效,官方訂了 12 個月的最短窗口。但授權相關的東西拖著不動,通常是拖到出事那天才動 —— 這塊的優先序建議放在快取、header 那些改動前面。

5. Tasks 與 MCP Apps 變成正式擴充:對一般人影響比 stateless 更大

規格核心瘦身,功能改用擴充框架長出來。這次一起被扶正的有 Tasks(長時間工作,新增 tasks/update,配合輪詢式的 tasks/get)、MCP Apps,還有企業端的 Enterprise Managed Authorization。其中 MCP Apps 是最有感的一個:
  • 它讓 server 直接回一段互動 UI

    在沙箱化的 iframe 裡渲染,訊息走 postMessage 上的 JSON-RPC

  • 是 Anthropic 跟 OpenAI 一起做的

    編號 SEP-1865,把社群的 MCP-UI 專案與 OpenAI 的 Apps SDK 收攏成一份規格

  • 跨 client 通用

    Claude、ChatGPT、Goose、VS Code 都吃得下同一份 UI

  • 首波夥伴九家

    Amplitude、Asana、Box、Canva、Clay、Figma、Hex、monday.com、Slack

小提示

  • 「模板要事先宣告、UI 想呼叫 tool 要使用者同意」是 MCP Apps 的安全設計,寫 server 時別想繞過去
  • Tasks 的重試語意與結果保留期限還在 2026 路線圖上,現在就把長時間工作全押上去要留退路

6. 安全:這一年真的出事的案例

MCP 生態的規模已經不小 —— 官方 registry 有將近 2,000 筆 server、光 Python 與 TypeScript 兩個 SDK 每月下載量就約 9,700 萬次。規模大了,事故也就一路排隊出現。下面這幾件都是有公開紀錄的:
時間 事件 類型
2025-04 Asana AI 功能多租戶隔離缺陷,可能把 A 組織的資料露給其他使用者 隔離失效
2025-05 GitHub MCP:public issue 裡的惡意指令讓 agent 把私有 repo 內容寫進 PR 間接提示注入
2025-09 postmark-mcp 套件被植入後門,偷偷幫外寄信件加密件副本 供應鏈
2025-11 WhatsApp 整合被有毒的 tool description 誘導,整份訊息紀錄外流 Tool Poisoning
2026-04 Comment and Control:PR 標題與 issue 留言裡的注入,讓 Claude Code、Gemini CLI、GitHub Copilot Agent 把自己的金鑰吐回留言區,CVSS 9.4 間接提示注入

注意事項

這五件事沒有一件是靠「換一個更強的模型」能解決的。tool 的說明文字與回傳內容都要當成不可信輸入處理:權限最小化、不可逆操作一律加人工確認、token 短期且綁定用途、安裝任何 server 前先看過它的原始碼與版本雜湊。

7. 我讀規格時先誤會的 4 件事,還有設定上踩過的坑

公開記一下我自己讀錯的地方,你可以直接跳過這幾個彎路。
  • ❌ 以為 stateless 表示 server 不能有狀態

    被拿掉的是「協定層」的狀態。你的 server 當然可以有資料庫、有 session,只是這件事不再由 MCP 幫你維持,要自己用 token 或請求裡帶的識別去接。我第一次讀完的結論是錯的,回頭看第二遍才發現差別在哪

  • ❌ 以為 Tasks 被移出核心等於被砍掉

    它是升格成正式擴充、還多了 tasks/update,不是消失。擴充框架這次才第一次被正式定義,看到「移出核心」四個字很容易反射性誤讀

  • ❌ 以為棄用就是馬上不能用

    官方明講最短 12 個月,Roots / Sampling / Logging 與舊的 HTTP+SSE transport 都在這條線上。真正要排時程的是授權那塊,不是 transport

  • ❌ 一開始把「掛越多 server 越好」當成設定原則

    每多掛一個 server,它的 tool 清單就要進 context,佔掉的是本來可以拿來讀你 code 的空間。我現在的做法是按專案只留當下用得到的那幾個,其餘關掉 —— 新版的可快取 list 幫得到延遲,但幫不到 context 佔用

  • ❌ 把遠端 server 的權限開好開滿

    看完上面那張事故表就知道為什麼。能唯讀就唯讀,寫入類的分開一個 server 放,要用的時候才開

小提示

  • 讀規格的順序建議是:先看授權那節,再看 transport,最後才看擴充 —— 前面兩節決定你會不會出事,最後一節決定你能玩多少花樣
  • 自己寫 server 的話,先把 MCP-Protocol-Version 這個 header 記起來,之後排查相容性問題八成從它開始查

8. 最後

這次改版真正的意思不是「MCP 變快了」,是 MCP 從一個「連本機工具」的協定,正式承認自己要跑在一般 HTTP 基礎設施上。無狀態、header 路由、可快取的清單、12 個月棄用窗口,全都是為了這件事鋪路。明天可以做的第一件事很小:打開你的 MCP 設定,把當下專案用不到的 server 關掉,只留三到五個。這件事花不到十分鐘,省下來的 context 立刻有感,而且順便逼你把「這個 server 到底有什麼權限」想過一遍。規格與生態的數字變得很快,這篇我會隨版本回來更新。

小提示

  • 接下來值得盯的是 2026 路線圖上的企業端項目:稽核軌跡、SSO 整合、gateway 行為、設定可攜性

9. 資料來源與擷取日期

這篇的版本號、日期與數字都來自下面幾個來源,擷取日期都標了,你可以自己去對:

規格日期就是版本號,之後官方再出新版時這篇會回來更新,不會讓舊數字掛在上面。

重點整理

  • 1 2026-07-28 版是 MCP 上線以來最大改版:協定層改成 stateless,initialize/initialized 握手與 Mcp-Session-Id header 一起拿掉,同一個請求可以被任何一台 server 實例接
  • 2 新增 Mcp-Method、Mcp-Name、MCP-Protocol-Version 三個 header,gateway 不用拆 JSON body 就能做路由與授權
  • 3 Tasks 從實驗性核心功能移出去變成正式擴充,MCP Apps(伺服器端算好的互動 UI)跟 EMA 一起進擴充框架
  • 4 授權那塊動最兇:RFC 9207 的 iss 驗證變強制、Dynamic Client Registration 被正式棄用改推 CIMD,client 憑證綁定發證 server
  • 5 官方同時定下 12 個月最短棄用窗口,Roots / Sampling / Logging 與舊的 HTTP+SSE transport 都在這條時間線上
ℹ️

一般聲明

本站提供之資訊僅供參考,不保證其完整性與正確性。使用者應自行判斷資訊之適用性。

意見反饋