生命週期

協議版本: 2024-11-05

模型上下文協議(MCP)為客戶端-服務器連接定義了嚴格的生命週期,確保適當的能力協商和狀態管理。

  1. 初始化:能力協商和協議版本協議
  2. 操作:正常協議通信
  3. 關閉:連接的優雅終止
  sequenceDiagram
    participant Client
    participant Server

    Note over Client,Server: 初始化階段
    activate Client
    Client->>+Server: 初始化請求
    Server-->>Client: 初始化響應
    Client--)Server: 已初始化通知

    Note over Client,Server: 操作階段
    rect rgb(200, 220, 250)
        note over Client,Server: 正常協議操作
    end

    Note over Client,Server: 關閉
    Client--)-Server: 斷開連接
    deactivate Server
    Note over Client,Server: 連接已關閉

生命週期階段

初始化

初始化階段必須是客戶端和服務器之間的第一次交互。在此階段,客戶端和服務器:

  • 建立協議版本兼容性
  • 交換和協商能力
  • 共享實現細節

客戶端必須通過發送一個包含以下內容的initialize請求來啟動此階段:

{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
        "protocolRevision": "2024-11-05",
        "capabilities": {
            "sampling": {
                "provider": true
            }
        }
    }
}

服務器必須使用以下結構響應initialize請求:

{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "capabilities": {
            "resources": {
                "provider": true,
                "subscription": true
            }
        }
    }
}

在接收到初始化響應後,客戶端必須發送initialized通知以完成初始化階段:

{
    "jsonrpc": "2.0",
    "method": "initialized",
    "params": {}
}

操作

初始化完成後,客戶端和服務器進入操作階段,在此階段可以進行以下活動:

  • 客戶端請求服務器公開的資源
  • 服務器向客戶端發送通知
  • 客戶端請求服務器執行工具操作
  • 服務器請求客戶端執行 LLM 採樣

操作階段的持續時間限制僅受傳輸層約束。

關閉

會話可以通過以下方式終止:

  • 客戶端發送shutdown請求,然後發送exit通知
  • 客戶端或服務器中斷傳輸層連接

良好行為的客戶端應該在關閉連接前發送shutdown請求:

{
    "jsonrpc": "2.0",
    "id": 42,
    "method": "shutdown"
}

服務器應該以空結果響應:

{
    "jsonrpc": "2.0",
    "id": 42,
    "result": null
}

收到關閉響應後,客戶端應該發送exit通知:

{
    "jsonrpc": "2.0",
    "method": "exit"
}

收到exit通知後,服務器必須結束其進程或關閉連接。

能力

MCP 使用能力系統在初始化期間協商功能支持。客戶端和服務器都聲明它們支持的功能,這些聲明構成了會話期間可用的功能集。

能力為協議提供以下好處:

  • 逐步採用新功能
  • 避免協議分支
  • 實現特定功能的清晰通信

每個能力的支持水平是靜態的,在會話期間不得更改。

初始化能力

客戶端在初始化請求中提供其能力,服務器在初始化響應中提供其能力。最終的功能集由這兩個能力聲明的交集確定,但客戶端能力主要用於指示其支持什麼,而服務器能力指示其提供什麼。

所有工具、資源處理程序和其他特性都是可選的。客戶端和服務器可以協商它們需要和支持的確切功能集。

以下能力類別可用:

服務器能力

能力描述
resources訪問和訂閱資源
prompts使用提示模板和上下文感知提示
tools調用定義的工具和操作
utilities日誌記錄和參數補全等輔助功能

客戶端能力

能力描述
sampling執行 LLM 採樣
workspaceRoot報告工作空間根目錄