Solutions Choose your path
For individuals Build, learn, and create with simple usage-based access. For business Scale teams, billing, governance, and model workflows. More English 繁體中文 日本語 한국어 Français Deutsch Español Italiano Português Русский العربية ไทย Tiếng Việt Bahasa Indonesia Bahasa Melayu Türkçe Polski Nederlands Danish Norsk Қазақ اردو
免費開始 免費開始
500+ AI Model API, All In One API.
Just In CometAPI © 2026 CometAPI · All rights reserved
technology / CometAPI 研究
MCP 2026-07-28 遷移指南:無狀態伺服器 了解如何遷移至 MCP 2026-07-28,包括無狀態傳輸、MRTR、路由標頭、快取、OAuth 變更與 SDK 升級。
了解如何遷移至 MCP 2026-07-28,包括無狀態傳輸、MRTR、路由標頭、快取、OAuth 變更與 SDK 升級。
先用這個摘要快速掌握答案,再閱讀指南取得背景、範例與實作細節。
複製from openai import OpenAI
client = OpenAI(
api_key="YOUR_COMETAPI_KEY",
base_url="https://api.cometapi.com/v1",
)
response = client.chat.completions.create(
model="gpt-5-mini",
messages=[{"role": "user", "content": "Build this workflow."}],
)
print(response.choices[0].message.content)TL;DR: MCP 2026-07-28 移除了協議層面的會話與強制的初始化握手。生產團隊應找出隱藏的會話相依性,改用每請求協議中繼資料,實作 Multi Round-Trip Requests,更新網關策略,並在淘汰舊行為前以金絲雀方式導入新協議。
2026 年 7 月 28 日發布的 Model Context Protocol 規範,帶來自新增遠端傳輸以來對 MCP 最大的架構變更。
協議核心改為無狀態的請求-回應模式。必需的 initialize 與 notifications/initialized 交換已移除,Mcp-Session-Id 被刪除,每個請求都攜帶處理所需的協議資訊。
此次發布還引入了 Multi Round-Trip Requests、HTTP 路由標頭、可快取的列表回應、更嚴格的授權行為、擴充框架,以及正式的汰除生命週期。協議層細節請見 與 。
這些變更讓遠端 MCP 伺服器更容易在標準 HTTP 基礎設施後方擴展。但它們不會自動讓現有應用變為無狀態。
生產伺服器仍可能依賴記憶體內工作區、黏性路由、與會話綁定的憑證、長壽命串流,或伺服器主動發起的互動。本指南聚焦於識別並替換這些相依性。
誰需要遷移? 使用單次工具的一個本地 stdio 伺服器 低 升級 SDK 並測試協議協商 無跨請求狀態的遠端 HTTP 伺服器 中 新增現代中繼資料、探索與 HTTP 標頭 使用 Mcp-Session-Id 進行業務狀態 高 以顯式控制代碼或共享儲存取代隱藏狀態 由網關解析 JSON-RPC 本文以進行路由 中到高 新增並驗證 MCP 路由標頭 工具在呼叫中途請求資訊或核准 高 將互動遷移至 MRTR 使用 Dynamic Client Registration 的客戶端 高 強化簽發者處理並為 CIMD 做準備 使用舊版 HTTP+SSE 的伺服器 高 遷移到 Streamable HTTP 使用實驗性 Tasks 的工作流程 高 採用正式的 Tasks 擴充
不跨請求保留狀態的本地伺服器,可能只需升級 SDK 與相容性測試。
使用會話、OAuth、串流或伺服器主動請求的遠端部署,則需要分階段遷移。
MCP 2026-07-28 有哪些變更? 初始化 需要初始化握手 不再需要握手 移除現代請求的初始化閘門 會話 Mcp-Session-Id 無協議層會話 將必要狀態顯式化 探索 在初始化期間協商 可選的 server/discover 呼叫 實作探索與版本協商 請求脈絡 儲存在連線上 包含於請求的 _meta 每個請求都傳送協議中繼資料 HTTP 路由 網關解析 JSON 本文 Mcp-Method 與 Mcp-Name 標頭 更新路由、策略與可觀測性 呼叫中互動 伺服器主動發送 JSON-RPC 請求 Multi Round-Trip Requests 處理 input_required 與重試 列表快取 反覆抓取目錄 ttlMs、cacheScope、決定性排序 新增授權感知的快取 通知 GET 串流與資源訂閱 subscriptions/listen 將變更通知移至新串流 授權 以 DCR 為中心的註冊 更強的簽發者規則與 CIMD 方向 稽核 OAuth 客戶端與憑證儲存 長時間工作 核心中的實驗性 Tasks io.modelcontextprotocol/tasks 擴充 移至擴充合約 舊功能 Roots、Sampling、Logging、HTTP+SSE
1. 稽核現有實作 升級前,請在客戶端、伺服器、網關與部署設定中搜尋舊協議假設。
Mcp-Session-Id
initialize
notifications/initialized
sessionId
ctx.sessionId
extra.sessionId
sticky_session
sticky-session
elicitation/create
sampling/createMessage
roots/list
resources/subscribe
resources/unsubscribe
logging/setLevel
tasks/result
tasks/list
Last-Event-ID
伺服器是否在初始化完成前拒絕呼叫?
會話 ID 是否用於選擇使用者、憑證、工作區或對話?
另一台伺服器個體能否延續由第一台啟動的工作流程?
負載平衡器是否需要會話親和性?
工具是否在請求確認前就執行副作用?
網關是否解析本文以識別方法或工具?
OAuth 憑證是否在未記錄簽發授權伺服器的情況下儲存?
客戶端是否依賴 SSE 重新連線或訊息重新投遞?
工具或資源清單是否因連線而異?
哪些已棄用功能仍接收生產流量?
在了解應用在其後保存了哪些內容前,請勿移除 Mcp-Session-Id。
僅移除標頭但仍把狀態保留於本機記憶體的伺服器,可能在開發時正常,當請求分散至多個個體後會間歇性失敗。
2. 取代隱藏會話狀態 MCP 2026-07-28 移除的是協議層會話,而非應用狀態。
顯式控制代碼 從一個工具回傳由伺服器簽發的控制代碼,並要求在後續呼叫中提供。
{
"resultType" : "complete" ,
"content" : [
{
"type" : "text" ,
"text" : "Workspace created."
}
] ,
"structuredContent" : {
"workspaceHandle" : "ws_7f93a2"
}
}
{
"name" : "update_workspace" ,
"arguments" : {
"workspaceHandle" : "ws_7f93a2" ,
"status" : "approved"
}
}
此舉讓相依性在工具合約中可見,也允許任何相容的伺服器個體處理該請求。
共享儲存 在以下情況使用資料庫、分散式快取、物件儲存或可久存的工作系統:
多個工作者需要相同狀態;
工作流程需在重啟後存續;
狀態太大不適合以控制代碼承載;
工作流程超過單一請求;
需要交易性或一次性行為。
受保護的 requestState MRTR 可回傳一個不透明的 requestState 值,客戶端在重試原始請求時回送它。
由於該值會經由客戶端傳遞,請以 HMAC 或具驗證的加密保護。當需要重放防護時,將其繫結至已驗證主體、原始操作、重要參數、到期時間與 nonce。
切勿僅因客戶端未改動就信任未簽名的 requestState。
3. 採用自含式請求與探索 現代 MCP 請求於 _meta 中包含協議脈絡。
一個 Streamable HTTP 工具呼叫可能如下:
POST /mcp HTTP/1.1
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: search
Content-Type: application/json
Authorization: Bearer <token>
{
"jsonrpc": "2.0",
"id": "req-101",
"method": "tools/call",
"params": {
"name": "search",
"arguments": {
"query": "stateless MCP migration"
},
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientInfo": {
"name": "example-client",
"version": "2.0.0"
},
"io.modelcontextprotocol/clientCapabilities": {
"elicitation": {}
}
}
}
}
目標為新協議的伺服器必須實作 server/discover,用以宣告支援的版本、能力與伺服器身分。客戶端可在其他操作前呼叫,或用於判斷是否需要傳統回退。
請閱讀官方的 server/discover documentation 以了解回應合約。
TypeScript SDK 版本協商 僅升級 TypeScript SDK 並不會自動讓客戶端切換至新協議。
const client = new Client (
{
name : "my-client" ,
version : "1.0.0"
},
{
versionNegotiation : {
mode : "auto"
}
}
);
await client.connect (transport);
在自動模式下,SDK 會以 server/discover 探測,並在遇到舊伺服器時回退至舊初始化流程。
4. 以 MRTR 取代伺服器主動請求 早期 MCP 可由伺服器向客戶端發送 elicitation/create、sampling/createMessage 或 roots/list 等請求。
新協議以 Multi Round-Trip Requests 取代此模型。
客戶端送出原始請求。
伺服器回傳 resultType: "input_required"。
客戶端收集所需資訊或核准。
客戶端以新的 JSON-RPC ID 重試原始操作。
重試包含 inputResponses 與原始的 requestState。
伺服器完成請求,或開始下一輪。
{
"jsonrpc" : "2.0" ,
"id" : "delete-1" ,
"result" : {
"resultType" : "input_required" ,
"inputRequests" : {
"confirm_delete" : {
"method" : "elicitation/create" ,
"params" : {
"mode" : "form" ,
"message" : "Delete project project_123?" ,
"requestedSchema" : {
"type" : "object" ,
"properties" : {
"confirmed" : {
"type" : "boolean"
}
} ,
"required" : [ "confirmed" ]
}
}
}
} ,
"requestState" : "protected-expiring-state"
}
}
{
"jsonrpc" : "2.0" ,
"id" : "delete-2" ,
"method" : "tools/call" ,
"params" : {
"name" : "delete_project" ,
"arguments" : {
"projectId" : "project_123"
} ,
"inputResponses" : {
"confirm_delete" : {
"action" : "accept" ,
"content" : {
"confirmed" : true
}
}
} ,
"requestState" : "protected-expiring-state"
}
}
最大輪數;
請求狀態到期時間;
取消與拒絕行為;
回應結構驗證;
每次重試的授權檢查;
重放防護;
具副作用操作的冪等性;
當客戶端不支援所需能力時的行為。
避免在返回 input_required 前完成購買、刪除、扣點或外部寫入。
使用分段操作或冪等鍵,以避免重試造成重複動作。完整互動模型請見官方 MRTR 規範 。
5. 更新網關、快取與授權
驗證 MCP 路由標頭 Streamable HTTP POST 請求現在包含:
MCP-Protocol-Version
Mcp-Method
Mcp-Name
這些標頭讓網關無需解析每個 JSON 本文即可進行路由、計量、授權與速率限制。
針對特定工具的速率限制;
將列表與執行方法分開的策略;
為昂貴工具配置專屬工作池;
限制高風險操作的存取;
依工具的延遲與錯誤指標;
基礎設施成本歸因。
這些值仍由客戶端提供。於套用策略前,請將其與 JSON-RPC 本文比對。
請求不應能在 Mcp-Name 中宣稱低風險工具卻在本文呼叫其他工具。標頭與本文不一致時應拒絕並記錄。
使用具授權意識的快取鍵 新協議為可快取結果新增 ttlMs 與 cacheScope,涵蓋:
tools/list
prompts/list
resources/list
resources/templates/list
resources/read
protocol version
server identity
method
request parameters
authenticated principal or tenant
authorization scope
cacheScope
server configuration version
切勿僅因 TTL 未過期,就在不同使用者或租戶間共用私人快取項目。
決定性工具排序也很重要。穩定的目錄可避免不必要的快取失誤,並在將工具定義插入提示時,提升模型提示快取的再利用率。
強化 OAuth 簽發者處理
針對流程記錄的簽發者驗證返回的 iss 值;
以簽發者為鍵儲存客戶端憑證;
切勿在另一個授權伺服器上重用憑證;
在 DCR 期間設定合適的 application_type;
為 Client ID Metadata Documents 做好新整合準備。
Dynamic Client Registration 仍為相容性而保留,但已不再是首選註冊方式。
6. 遷移通知、任務與已棄用功能 舊的 HTTP GET 通知路徑與 resources/subscribe、resources/unsubscribe 流程已由 subscriptions/listen 取代。
客戶端開啟長時間 POST 回應串流,並選擇加入所需通知類別。請求層級的進度與日誌通知仍附加於其所描述請求的回應串流上。
對多個體部署而言,當在一個伺服器個體上產生的通知必須送達連線到另一個個體的訂閱時,請使用共享事件匯流排。
Tasks 擴充 io.modelcontextprotocol/tasks
tasks/get 以輪詢;
tasks/update 進行客戶端到伺服器更新;
可久存的任務控制代碼;
subscriptions/listen 以接收選擇加入的更新。
舊的 tasks/result 與 tasks/list 模式不應帶入新實作。
已棄用功能 Roots 透過工具參數、資源 URI 或設定傳遞目錄 不再需要握手 移除現代請求的初始化閘門 Sampling 直接整合模型供應商 API 無協議層會話 將必要狀態顯式化 Logging 在 stdio 使用 stderr,生產環境使用 OpenTelemetry 可選的 server/discover 呼叫 實作探索與版本協商 Dynamic Client Registration 移向 Client ID Metadata Documents 包含於請求 _meta 每請求傳送協議中繼資料 舊版 HTTP+SSE 遷移至 Streamable HTTP Mcp-Method 與 Mcp-Name 標頭 更新路由、策略與可觀測性 已棄用的 includeContext 值 省略該欄位或使用 "none" Multi Round-Trip Requests 處理 input_required 與重試 列表快取 反覆抓取目錄 ttlMs、cacheScope、決定性排序 新增授權感知的快取 通知 GET 串流與資源訂閱 subscriptions/listen 將變更通知移至新串流 授權 以 DCR 為中心的註冊 更強的簽發者規則與 CIMD 方向 稽核 OAuth 客戶端與憑證儲存 長時間工作 核心中的實驗性 Tasks io.modelcontextprotocol/tasks 擴充 移至擴充合約
在汰除視窗期間,已棄用功能仍可使用,但新實作不應採用。MCP 生命週期政策提供至少 12 個月的棄用期;這不代表每個功能都具有相同且已確定的移除日期。
7. 安全地推出遷移 請勿在一次無監控的發布中同時變更客戶端、伺服器、網關、快取與授權。
建議的遷移順序
盤點協議版本、SDK、會話、SSE 流量、DCR 客戶端與已棄用方法。
先升級非生產環境 SDK。
新增 server/discover 與版本協商。
取代隱藏的會話相依性。
實作並加固 MRTR。
新增已驗證的路由標頭與具範圍的快取。
測試授權簽發者邊界。
在舊路徑旁以金絲雀方式導入現代協議。
僅在檢視遙測後退休舊行為。
金絲雀期間的相容性 Modern client + modern server
→ Use MCP 2026-07-28
Modern client + legacy server
→ Probe and fall back when supported
Legacy client + dual-version server
→ Continue on the legacy path
Unsupported combination
→ Return a clear protocol-version error
新 MCP 規範的發布並非整個生態系的即時切換。客戶端、伺服器、SDK 與託管平台將以不同速度遷移。
建議記錄的遙測 每請求的協議版本 採用情況與不相容組合 探索成功與回退比率 版本協商行為 缺少或無效的 MCP 標頭 舊客戶端或網關錯誤 標頭/本文不一致 客戶端錯誤或嘗試繞過策略 MRTR 的請求與完成 互動式工作流程的可靠性 MRTR 被拒絕或逾時 使用者與客戶端的失敗路徑 請求狀態驗證失敗 竄改、重放或到期 重複操作防護 冪等控管的有效性 依範圍的快取命中率 安全的流量降低 簽發者驗證失敗 OAuth 設定問題 HTTP+SSE 流量 剩餘的傳輸遷移工作 已棄用方法的流量 退休規劃的依據 工具延遲與已接受任務比率 使用者可感知的可靠性
僅有單次 tools/call 的成功並不足以衡量遷移。反覆逾時、要求不必要輸入或重複外部寫入的工作流程,仍屬生產失敗。
MCP 並不取代模型 API。兩者解決不同的整合問題。
MCP 連接代理至工具、資源、提示詞、核准與任務 統一模型 API 連接應用至模型、憑證、用量與計費 應用協調 決定何時、如何呼叫模型與工具
Application or agent
↓
MCP clients and servers
Tools, resources, approvals, tasks
↓
Unified model API
GPT, Claude, Gemini, DeepSeek, and other models
MCP 標準化代理與工具與脈絡的互動方式。它不標準化模型定價、供應商憑證、推理端點或供應商切換。
當從已棄用的 Sampling 能力遷移時,這種分離特別實用。若 MCP 伺服器或其消費的代理仍需模型推理,應用可以直接呼叫模型 API,而非依賴過去的 MCP Sampling 流程。
何時需要統一模型閘道
多個 MCP 伺服器需要存取不同模型供應商;
不同工具需要不同模型;
團隊希望在不重寫供應商特定整合的情況下切換模型;
需要集中管理憑證、用量與計費;
模型存取應與 MCP 傳輸變更保持獨立。
CometAPI 提供相容 OpenAI 的端點,可作為 MCP 應用背後的模型存取層。此舉將模型供應商邏輯與 MCP 工具、資源與任務協調分離。
例如,MCP 工具可透過應用其他部分已使用的相容 OpenAI 客戶端呼叫模型:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.COMETAPI_KEY,
baseURL: "https://api.cometapi.com/v1"
});
export async function summarizeResource(content: string) {
const response = await client.chat.completions.create({
model: "your-selected-model",
messages: [
{
role: "system",
content: "Summarize the supplied resource clearly and concisely."
},
{
role: "user",
content
}
]
});
return response.choices[0]?.message?.content ?? "";
}
MCP 伺服器仍負責工具合約、授權、狀態與結果處理。模型閘道負責模型選擇、供應商存取與推理回應。
MCP 客戶端與伺服器可在不變更模型整合層的情況下遷移至新協議。
可在不重新設計 MCP 工具或傳輸行為的情況下更換模型供應商。
MCP 2026-07-28 遷移清單
客戶端
升級至相容的 SDK。
啟用現代版本協商。
支援 server/discover。
在每個請求包含協議中繼資料。
處理 resultType。
支援或明確拒絕 MRTR。
為重試使用新的 JSON-RPC ID。
保存並回傳 requestState。
驗證 OAuth 簽發者。
依簽發者儲存憑證。
遵循快取提示。
需要時支援 subscriptions/listen。
伺服器
移除現代請求的初始化閘門。
移除對 Mcp-Session-Id 的相依。
實作 server/discover。
以控制代碼或共享儲存取代隱藏狀態。
回傳 resultType。
以 MRTR 取代伺服器主動請求。
保護 requestState。
驗證所有 inputResponses。
為具副作用操作加入冪等性。
回傳決定性的列表。
發布保守的快取提示。
將長時間工作遷移至 Tasks 擴充。
網關與基礎設施
驗證 MCP 請求標頭。
比對標頭與請求本文。
移除不必要的黏性路由。
在多個個體間測試請求。
依授權邊界分割快取。
必要時新增共享通知匯流排。
追蹤舊版與已棄用流量。
在金絲雀期間保留回滾路徑。
常見問題
什麼是 MCP 2026-07-28? MCP 2026-07-28 是於 2026 年 7 月 28 日發布的 Model Context Protocol 規範。它引入無狀態協議核心、Multi Round-Trip Requests、HTTP 路由標頭、可快取結果、授權變更、擴充與正式的汰除生命週期。
Mcp-Session-Id 是否被移除?是。新的 Streamable HTTP 協議不再使用 Mcp-Session-Id。
應用仍可透過顯式控制代碼、共享儲存、可久存任務或受保護的請求狀態值保存狀態。
MCP 初始化握手是否被移除? 是。現代請求不再需要 initialize 與 notifications/initialized 交換。
伺服器必須實作 server/discover,但客戶端不必在每次操作前都呼叫。
無狀態 MCP 是否代表工具不能保存狀態? 工具仍可保存狀態,但請求處理不應依賴隱藏的傳輸親和性,或某一特定伺服器行程。
什麼是 MRTR? Multi Round-Trip Requests 讓伺服器在不依賴持續開啟的雙向連線發送主動請求的情況下,向客戶端或使用者索取額外輸入。
伺服器回傳 input_required,客戶端以所需回應重試原始操作。
HTTP+SSE 是否立即移除? 新伺服器應使用 Streamable HTTP,現有系統則應衡量並遷移剩餘 HTTP+SSE 流量。
TypeScript SDK v2 客戶端會自動使用 MCP 2026-07-28 嗎? 不會。TypeScript v2 SDK 需要明確的版本協商設定才能使用現代協議。
當客戶端必須同時支援現代與舊伺服器時,請使用自動協商。
最終建議 MCP 2026-07-28 讓遠端 MCP 基礎設施更易擴展、路由、快取與觀測。主要遷移風險不僅是移除標頭或握手,而是仍依賴它們的隱藏應用狀態與互動邏輯。
找出所有對初始化與 Mcp-Session-Id 的相依。
將必要狀態移入顯式控制代碼或共享儲存。
實作具到期、重放防護與冪等性的 MRTR。
驗證 MCP 標頭與 JSON-RPC 本文一致。
依租戶與授權範圍分割快取。
加固 OAuth 簽發者驗證。
衡量已棄用方法與舊傳輸流量。
在退休前,以金絲雀方式並行現代與舊協議路徑。
將此次遷移視為基礎設施變更,而非例行 SDK 升級。
當 MCP 層無狀態且可觀測後,請將模型存取維持在獨立介面背後。這可讓工具協議與模型供應商層得以各自演進。
Roots、Sampling、Logging、HTTP+SSE