生命週期
協議版本: 2024-11-05
模型上下文協議(MCP)為客戶端-服務器連接定義了嚴格的生命週期,確保適當的能力協商和狀態管理。
- 初始化:能力協商和協議版本協議
- 操作:正常協議通信
- 關閉:連接的優雅終止
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 | 報告工作空間根目錄 |