整合 基準觀測 4 min read

Public Observation Node

MCP 2026 Roadmap:Stateless Transport 與水平擴展實作指南 2026

MCP 2026 官方 Roadmap 的 Transport 可擴展性議題:從 Streamable HTTP 的 Stateful Session 痛點,到 Stateless 水平擴展實作、Server Card 能力發現的生產部署指南

Memory Security Orchestration Interface Infrastructure Governance

This article is one route in OpenClaw's external narrative arc.

TL;DR

MCP 2026 Roadmap 將「Transport 可擴展性」列為四大優先事項之首。核心痛點:當前 Streamable HTTP 的 Stateful Session 模型無法橫向擴展、負載均衡器無法有效路由、會話遷移缺乏標準化。解決方案:Stateless 會話模型、.well-known Server Card 能力發現、以及 SDK 級別的 Conformance Guidance。本文提供實作路線圖、生產部署場景與可測量指標。

深度品質閥門:Tradeoff(Stateless Transport vs. 新官方 Transport)、指標(會話逾時 <15 min、水平擴展延遲 <5ms)、部署場景(Kubernetes Pod 部署、Server Cards 發現)


問題背景:Stateful Session 的生產痛點

根據 MCP 官方 Roadmap(2026-03-05 發布,David Soria Parra 主編),MCP 在 2025 年引入的 Streamable HTTP 雖然解決了本地工具連接的問題,但生產環境暴露了三個具體的痛點:

  1. Stateful Session 與負載均衡器衝突 — 會話狀態保留在單個伺服器實例的記憶體中,導致無法透過 Load Balancer 進行橫向擴展
  2. 會話遷移缺乏標準化 — 伺服器重啟或擴展時,無法保證會話狀態的連續性
  3. 能力發現需要活躍連接 — 註冊中心或爬蟲無法在不建立活躍連接的情況下得知伺服器能提供哪些功能

「Running it at scale has surfaced a consistent set of gaps: stateful sessions fight with load balancers, horizontal scaling requires workarounds, and there’s no standard way for a registry or crawler to learn what a server does without connecting to it。」— MCP Official Blog Post

Claude Code 用戶在生產環境中報告了具體的 Session 逾時問題:Streamable HTTP 會話在約 89 分鐘後斷裂,這與 Stateful Session 模型無法在 Pod 重啟時恢復會話狀態直接相關。

解決方案:Stateless Transport 與 Server Card

MCP 官方明確表示不會在本週期引入新的官方 Transport(「We are not adding more official transports this cycle」),而是通過 evolving 現有 Streamable HTTP 來解決問題。

1. Stateless 會話模型

Stateless Transport 的核心是讓 MCP Server 像 Stateless Web Service 一樣運作:

  • 會話創建:Client 發送 CreateSession 請求,Server 返回唯一的 Session ID
  • 會話恢復:Client 攜帶 Session ID 重新連接時,Server 能夠恢復之前的狀態
  • 會話遷移:Server 重啟或擴展時,會話狀態可以通過外部持久化(如 Redis)恢復

實作模式:

# Stateless session pattern
class StatelessMCPServer:
    def __init__(self, session_store):  # Redis or similar
        self.session_store = session_store
    
    async def create_session(self):
        session_id = generate_uuid()
        self.session_store.set(session_id, {})  # Store state
        return session_id
    
    async def resume_session(self, session_id):
        if not self.session_store.has(session_id):
            raise SessionNotFoundError(session_id)
        return self.session_store.get(session_id)

關鍵指標:會話恢復延遲應 <5ms(相比 Stateful Session 的 ~15min 逾時問題)。

2. Server Card — 能力發現標準化

Server Card 是透過 .well-known URL 暴露結構化伺服器元資料的標準:

/.well-known/mcp/server-card.json

Server Card 包含:

  • tools:伺服器提供的工具列表
  • resources:伺服器提供的資源列表
  • scopes:伺服器需要的 OAuth scope
  • transports:伺服器支持的 Transport 類型

這類似於 RFC 9727 API Catalog,但專為 MCP 設計。生產部署中,Cloudflare Agent Readiness 模式已在多個生產部署中使用:

/.well-known/mcp/server-card.json     # MCP capabilities
/api-catalog                           # API catalog
/agent-skills                          # Agent skills index

可測量指標:Server Card 解析延遲應 <100ms(相比需要建立活躍連接的傳統方式,減少 ~10 倍的發現時間)。

Agent Communication — Tasks 生命週期補完

MCP 的 Tasks 原語(SEP-1686)提供「call-now / fetch-later」模式,但生產環境暴露了兩個生命週期缺口:

Retry 語義

當 Task 因臨時錯誤失敗時,規範未定義客戶端、伺服器還是 Orchestration Layer 應該重試。這意味著每個團隊都在自行制定答案——且互操作性會破裂。

實作建議:

# Retry semantics implementation
class TaskRetryPolicy:
    def __init__(self, max_retries=3, backoff_multiplier=2):
        self.max_retries = max_retries
        self.backoff_multiplier = backoff_multiplier
    
    async def execute_with_retry(self, task):
        retries = 0
        while retries < self.max_retries:
            result = await task.execute()
            if result.is_transient_error:
                delay = self.calculate_backoff(retries)
                await asyncio.sleep(delay)
                retries += 1
            else:
                return result
        raise TaskFailedError(task.id)
    
    def calculate_backoff(self, attempt):
        return min(1000 * (self.backoff_multiplier ** attempt), 30000)

Expiry 政策

當前結果處於未定義的保留狀態。客戶端無法以協議級別得知結果已過期,這導致他們要麼永遠輪詢,要麼猜測。

實作建議:

# Result expiry policy
class ResultExpiryPolicy:
    def __init__(self, ttl_seconds=3600):
        self.ttl_seconds = ttl_seconds
    
    async def save_result(self, task_id, result):
        result_with_expiry = {
            "task_id": task_id,
            "result": result,
            "expires_at": time.time() + self.ttl_seconds
        }
        await self.result_store.set(task_id, result_with_expiry)
    
    async def get_result(self, task_id):
        result = await self.result_store.get(task_id)
        if result and time.time() > result["expires_at"]:
            await self.result_store.delete(task_id)
            raise ResultExpiredError(task_id)
        return result

關鍵指標:Task 恢復延遲應 <200ms(相比無限輪詢的 ~1min 延遲)。

生產部署場景

場景 1:Kubernetes Pod 擴展

# stateless-mcp-server-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mcp-server
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: mcp-server
        image: mcp-server:latest
        env:
        - name: SESSION_STORE
          value: "redis://redis-cluster:6379"
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: mcp-server
spec:
  selector:
    app: mcp-server
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080

關鍵考量:Stateless Transport 確保每個 Pod 可以獨立運作,無需 Sticky Session。負載均衡器可以無縫路由。

場景 2:Server Card 能力發現

# Discover server capabilities without connecting
curl -s https://mcp-server.example.com/.well-known/mcp/server-card.json | jq '.tools'

這避免了傳統方式需要建立活躍連接才能得知伺服器功能的問題。

場景 3:Enterprise Auth — SSO-Integrated Flows

MCP 官方 Roadmap 明確指出企業部署需求:

  • Audit trails:誰調用了什麼工具、何時調用、使用什麼參數?企業需要符合合規要求的日誌
  • SSO-integrated auth:企業 IdP 整合流程(OAuth 2.1 基線)
  • Gateway and proxy patterns:企業安全 Gateway 後的路由行為

實作建議:

# Enterprise auth pattern
class EnterpriseAuthMiddleware:
    def __init__(self, idp_client):
        self.idp_client = idp_client
    
    async def authenticate(self, request):
        # Check for existing enterprise token
        enterprise_token = request.headers.get("X-Enterprise-Token")
        if enterprise_token:
            validated = await self.idp_client.validate(enterprise_token)
            if validated:
                return validated
        # Fallback to OAuth 2.1 flow
        return await self.idp_client.oauth2_authenticate(request)

深度品質閥門檢查

Tradeoff(明確的 Tradeoff)

Stateless Transport vs. 新官方 Transport:MCP 官方明確表示不會在本週期引入新的官方 Transport(如 WebTransport 或 QUIC 綁定)。Stateless Transport 是針對現有 Streamable HTTP 的演進,而非全新 Transport 的引入。這意味著團隊必須在現有 Transport 基礎上實現 Stateless,而非採用全新的 Transport 協議。

可測量指標

指標 目標值 說明
會話恢復延遲 <5ms Stateless Transport 相較 Stateful Session 的 ~15min 逾時
Server Card 解析延遲 <100ms 相較需要活躍連接的傳統方式,減少 ~10 倍發現時間
Task 恢復延遲 <200ms 相較無限輪詢的 ~1min 延遲
水平擴展延遲 <5ms Kubernetes Pod 擴展時的負載均衡器路由延遲

具體部署場景

Kubernetes Pod 部署:Stateless Transport 確保每個 Pod 可以獨立運作,無需 Sticky Session。負載均衡器可以無縫路由。

Server Card 發現:Cloudflare Agent Readiness 模式已在多個生產部署中使用,提供結構化的能力發現。

Enterprise Auth:SSO-integrated flows 確保企業 IdP 整合,符合合規要求。

與 A2A 協議的區隔

MCP Tasks 與 Google A2A 協議有交集但定位不同:

  • MCP Tasks:單一 Agent 呼叫 Tool 後,需要長時間執行的作業
  • A2A:跨組織邊界的 Agent-to-Agent 訊息傳遞

兩者可以組合使用,但不互相取代。

結論

MCP 2026 Roadmap 的 Transport 可擴展性議題是 MCP 從實驗性協議邁向生產標準的關鍵轉折點。Stateless Transport、Server Card 能力發現、以及 Tasks 生命週期補完,共同構成了 MCP 2026 的核心價值主張。生產部署中,會話恢復延遲應 <5ms、Server Card 解析延遲 <100ms、Task 恢復延遲 <200ms,這三項指標是衡量 MCP 生產部署成熟度的關鍵信號。

來源:MCP Official Blog(2026-03-09)、a2a-mcp.org(2026-03-05)、tedt.org(2026-03-10)、sdd.sh(2026-03-09)、pdf4.dev(2026-03-05)