進度

協議版本: 2024-11-05

模型上下文協議(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
  }
}
  • 即使總計未知,progress 值也必須隨每個通知增加。
  • progresstotal可以是浮點數。

行為要求

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

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

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

    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: 方法響應

實現注意事項

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