进度
协议修订: 2025-03-26
Model Context Protocol(MCP)支持通过通知消息对长时间运行的操作进行可选的进度跟踪。任意一方都可以发送进度通知来提供操作状态的更新。
进度流程
当一方希望为请求接收进度更新时,它需要在请求的元数据中包含一个 progressToken。
- 进度令牌(Progress Token)必须是字符串或整数类型。
 - 进度令牌可以由发送方通过任意方式选择,但必须在所有活跃请求中唯一。
 
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "some_method",
  "params": {
    "_meta": {
      "progressToken": "abc123"
    }
  }
}
接收方可以发送进度通知,通知中应包含以下内容:
- 原始的进度令牌
 - 当前已完成的进度值
 - 可选的 
total(总进度)值 - 可选的 
message(消息)值 
{
  "jsonrpc": "2.0",
  "method": "notifications/progress",
  "params": {
    "progressToken": "abc123",
    "progress": 50,
    "total": 100,
    "message": "正在拉伸样条曲线..."
  }
}
progress值必须在每次通知中递增,即使total值未知。progress和total值可以为浮点数。message字段应提供相关的、可读的人类进度信息。
行为要求
- 
进度通知 必须 仅引用以下令牌:
- 在活跃请求中提供的令牌
 - 与当前正在进行的操作相关联的令牌
 
 - 
接收进度请求的一方可以:
- 选择不发送任何进度通知
 - 以其认为适当的频率发送通知
 - 如果总进度未知,可以省略 
total值 
 
sequenceDiagram
    participant 发送方
    participant 接收方
    Note over 发送方,接收方: 包含进度令牌的请求
    发送方->>接收方: 方法请求 (携带 progressToken)
    Note over 发送方,接收方: 进度更新
    loop 进度更新
        接收方-->>发送方: 进度通知 (0.2/1.0)
        接收方-->>发送方: 进度通知 (0.6/1.0)
        接收方-->>发送方: 进度通知 (1.0/1.0)
    end
    Note over 发送方,接收方: 操作完成
    接收方->>发送方: 方法响应
实现注意事项
- 发送方和接收方应跟踪活跃的进度令牌。
 - 双方应实现速率限制,以防止消息泛滥。
 - 操作完成后,进度通知必须停止。