进度

社区译文;来源: MCP 80041ab0

模型上下文协议(MCP)支持通过通知消息选择性地跟踪长时间运行操作的进度。服务器MAY发送进度通知,报告客户端所发请求的状态。

进度流程

客户端要为某个请求_接收_进度更新时,需要在请求元数据中包含 progressToken。

  • 进度令牌MUST是字符串或整数值
  • 客户端可以用任意方式选择进度令牌,但该令牌在所有活动请求中MUST唯一。
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "some_method",
  "params": {
    "_meta": {
      "progressToken": "abc123"
    }
  }
}

随后,服务器MAY发送包含以下内容的进度通知:

  • 原始进度令牌
  • 当前进度值
  • 可选的 total 值
  • 可选的 message 值
{
  "jsonrpc": "2.0",
  "method": "notifications/progress",
  "params": {
    "progressToken": "abc123",
    "progress": 50,
    "total": 100,
    "message": "Reticulating splines..."
  }
}
  • 即使总量未知,progress 值也MUST在每次通知中递增。
  • progress 和 total 值MAY是浮点数。
  • message 字段SHOULD提供相关且便于人阅读的进度信息。

行为要求

  1. 进度通知MUST只能引用符合以下条件的令牌:

    • 由某个活动请求提供
    • 与正在进行的操作关联
  2. 服务器收到带进度令牌的请求后MAY:

    • 选择不发送任何进度通知
    • 以其认为合适的任意频率发送通知
    • 在总量未知时省略 total 值
  sequenceDiagram
    participant Client
    participant Server

    Note over Client,Server: 带进度令牌的请求
    Client->>Server: 带 progressToken 的方法请求

    Note over Client,Server: 进度更新
    Server-->>Client: 进度通知(0.2/1.0)
    Server-->>Client: 进度通知(0.6/1.0)
    Server-->>Client: 进度通知(1.0/1.0)

    Note over Client,Server: 操作完成
    Server->>Client: 方法响应

实现说明

  • 客户端和服务器SHOULD跟踪活动的进度令牌
  • 双方都SHOULD实现速率限制,以防止消息泛滥
  • 进度通知MUST在操作完成后停止