進度

協議版本: 草案

模型上下文協議(MCP)通過通知消息支持對長時間運行的操作進行可選的進度跟蹤。雙方都可以發送進度通知以提供有關操作狀態的更新。

進度流程

當一方希望為請求_接收_進度更新時,它會在請求元數據中包含一個 progressToken

  • 進度令牌必須是字符串或整數值
  • 發送方可以使用任何方式選擇進度令牌,但必須在所有活動請求中是唯一的。
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "some_method",
  "params": {
    "_meta": {
      "progressToken": "abc123"
    }
  }
}

接收方可以發送包含以下內容的進度通知:

  • 原始進度令牌
  • 到目前為止的當前進度值
  • 可選的"總計"值
  • 可選的"消息"值
{
  "jsonrpc": "2.0",
  "method": "notifications/progress",
  "params": {
    "progressToken": "abc123",
    "progress": 50,
    "total": 100,
    "message": "正在重構樣條..."
  }
}
  • 即使總計未知,progress 值也必須隨著每個通知增加。
  • progresstotal可以是浮點數。
  • message 字段應該提供相關的人類可讀進度信息。

行為要求

  1. 進度通知必須只引用以下令牌:

    • 在活動請求中提供的
    • 與正在進行的操作相關聯的
  2. 進度請求的接收方可以

    • 選擇不發送任何進度通知
    • 以他們認為適當的頻率發送通知
    • 如果未知,則省略總計值
  sequenceDiagram
    participant Sender as 發送方
    participant Receiver as 接收方

    Note over Sender,Receiver: 帶有進度令牌的請求
    Sender->>Receiver: 帶有 progressToken 的方法請求

    Note over Sender,Receiver: 進度更新
    loop 進度更新
        Receiver-->>Sender: 進度通知 (0.2/1.0)
        Receiver-->>Sender: 進度通知 (0.6/1.0)
        Receiver-->>Sender: 進度通知 (1.0/1.0)
    end

    Note over Sender,Receiver: 操作完成
    Receiver->>Sender: 方法響應

實施說明

  • 發送方和接收方應該跟蹤活動的進度令牌
  • 雙方應該實施速率限制以防止氾濫
  • 完成後必須停止進度通知