觀點 · 資訊分享

MCP Python SDK 2.2 預設會關掉閒置 30 分鐘的連線:轉址也只跟同一個網址,升級前先看這幾項

MCP 官方的 Python SDK 發布 2.2.0:閒置 30 分鐘的連線會被關、轉址只跟隨同源網址、OAuth 客戶端多了發行者檢查。這些預設值的改變,會讓升級後的舊程式出現意想不到的錯誤。

發布
2026-09-07
篇幅
約 4 分鐘 · 1,766 字
結構
7 節 + 4 題常見問題
標籤
#MCP#Python SDK#OAuth#Streamable HTTP#AI 代理
MCP Python SDK 2.2 預設會關掉閒置 30 分鐘的連線:轉址也只跟同一個網址,升級前先看這幾項

一句話看懂:MCP 官方的 Python SDK 發布 2.2.0,改了好幾個預設行為,例如閒置 30 分鐘的連線會被關閉、轉址只跟同一個網址,升級前建議先看過行為變更清單。

MCP Python SDK 2.2 改了預設值資訊圖卡:閒置連線會過期、轉址只跟同源,升級前要先看行為變更

先用白話講:MCP 是什麼?

想像家裡的插座:不管是檯燈、風扇還是手機充電器,只要插頭規格一樣,就能插上去用。MCP(Model Context Protocol)就是 AI 世界的「標準插座」,讓 AI 代理可以用同一種方式連上各種工具與資料,而 Python SDK 是官方提供的工具包,幫開發者做出「插座」(伺服器)或「插頭」(客戶端)。

這次的 2.2.0 版本,不是加了什麼酷炫的新功能,而是把幾個預設行為調得更嚴格、更安全。如果你的程式沒有特別設定,升級之後的表現可能跟以前不一樣。

發生什麼事

SDK 在 9 月 7 日發布 2.2.0,官方在 release 說明最前面列出四項需要先看的行為變更:

變更 重點
轉址只跟同源 客戶端只會跟隨相同協定、主機、連接埠的轉址(或同主機從 http 升級到 https)
閒置連線會過期 有狀態的 Streamable HTTP 連線閒置 30 分鐘就被關閉;單一伺服器最多同時 10,000 個連線
OAuth 檢查發行者 舊流程也會檢查授權伺服器的 issuer,不一致就拒絕
兩項新警告 預先配置的 OAuth 客戶端沒傳 issuer、或 token 資源驗證設定沒填,會出現棄用警告

這會碰到什麼狀況?

  • 轉址被擋:如果你連的網址會跳轉到別的網域,呼叫會失敗並丟出 MCPError,但連線階段仍然可以繼續使用。解法是直接把最終的網址當成端點
  • 連線被關:舊版規格(2025-11-25 以前)的有狀態連線,閒置 30 分鐘後,客戶端下一次請求會收到 404,必須重新初始化
  • 哪些不受影響:持續開著 GET 串流的客戶端(SDK 的 Client 就是)、無狀態的伺服器,以及 2026-07-28 規格的連線
  • 授權被拒:如果授權伺服器回報的 issuer 跟伺服器自己的來源不一致,會丟出 OAuthFlowError

給開發者的技術細節

升級指令:pip install -U mcp。想關掉閒置逾時與連線上限,可以這樣設:

mcp.run(
    transport="streamable-http",
    session_idle_timeout=None,
    max_sessions=None,
)
  • 新增設定:AuthSettings.validate_token_resource(只接受 TokenVerifier 認定「為這個伺服器簽發」的 token)、issuer=(用在 ClientCredentialsOAuthProvider 與 PrivateKeyJWTOAuthProvider)
  • 傳入的 httpx 用戶端:你傳進去的 httpx2.AsyncClient 上的 follow_redirects 設定,不再用於 MCP 請求
  • 修正:客戶端送出 DELETE 會立刻釋放連線階段;工具 outputSchema 裡的 $ref 只會在該 schema 內解析
  • 官方列出的缺口:tasks 擴充(SEP-2663)、DPoP(SEP-1932)、jwt-bearer 授權方式都還沒實作

我的看法

這類版本的重點不在「多了什麼」,而在「預設值變了」。接案時最怕的就是升級套件後,某個平常不太會觸發的情境出狀況,例如一個放了半小時沒人用的連線,隔天第一次使用就失敗,而且錯誤訊息只是一個 404,很容易誤判成網路問題。

我的建議是:如果你有自己寫 MCP 伺服器,先確認它是無狀態還是有狀態,再決定要不要保留閒置逾時;升級前先在測試環境把警告打開(讓警告變成錯誤),先把 OAuth 相關的棄用警告清掉,3.0 來的時候才不會手忙腳亂。

名詞小辭典

  • MCP:讓 AI 代理連接工具與資料的通用規格。
  • Streamable HTTP:MCP 透過 HTTP 傳資料的一種方式,可以是有狀態(記住連線階段)或無狀態。
  • OAuth issuer(發行者):授權伺服器對外宣告的身分網址,用來確認 token 是誰簽發的。
  • 棄用警告(Deprecation Warning):提醒你這種用法以後會被移除或改變,現在還能用。

資料來源

常見問題

MCP 是什麼?
MCP(Model Context Protocol)是讓 AI 代理連接外部工具與資料的通用介面,像是 AI 世界的「萬用插座」。工具只要照規格做成 MCP 伺服器,各種 AI 應用程式就能用同一種方式連上去。
升級到 2.2 後,連線突然被關了怎麼辦?
如果你用的是舊版規格(2025-11-25 以前)的有狀態 Streamable HTTP 連線,閒置 30 分鐘會被關閉,客戶端下一次請求會收到 404 並需要重新初始化。可以在伺服器端把 session_idle_timeout 與 max_sessions 設為 None 來關掉這兩項限制。
哪些連線不會受到閒置逾時影響?
官方說明,會持續開著 GET 串流的客戶端(SDK 自己的 Client 就是)、無狀態的伺服器,以及 2026-07-28 規格的連線都不受影響。
3.0 會有什麼不同?
官方在這次 release 提到兩項:預先配置的 OAuth 客戶端將要求提供 issuer,AuthSettings 的 validate_token_resource 預設將是 True。現在用 2.x 會看到棄用警告,行為暫時不變。
LINE