【MCP协议】进度通知

138 阅读1分钟

模型上下文协议(MCP)支持通过通知消息对长时间运行的操作进行可选的进度跟踪。任何一方均可发送进度通知来提供操作状态的更新。

进度流程

当某方需要获取请求的进度更新时,应在请求元数据中包含progressToken:

进度令牌要求:

  • 必须为字符串或整数值
  • 发送方可自主选择生成方式,但在所有活跃请求中必须保持唯一

请求示例:

{
  "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": "正在处理..."
  }
}
  • 进度值必须随每次通知递增(即使总量未知)
  • 进度值和总值可为浮点数
  • message字段应提供人类可读的进度说明

行为规范要求

进度通知必须仅引用符合以下条件的令牌:

  • 来自当前活跃请求
  • 关联正在执行的操作

进度请求的接收方可:

  • 选择不发送任何进度通知
  • 按自定频率发送通知
  • 在总量未知时省略total字段

mcp_progress.png

实现说明

  • 发送方和接收方应追踪活跃的进度令牌
  • 双方应实施速率限制防止消息洪泛
  • 进度通知必须在操作完成后停止发送