进度
社区译文;来源: 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提供相关且便于人阅读的进度信息。
行为要求
进度通知MUST只能引用符合以下条件的令牌:
- 由某个活动请求提供
- 与正在进行的操作关联
服务器收到带进度令牌的请求后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在操作完成后停止