进阶 MCP server 不只要回最终结果,也要让 client 知道它正在做什么、卡在哪里、有没有异常。
| 类型 | 是否有 id | 是否期待回应 |
|---|---|---|
| Request | 有 | 是 |
| Response | 有同一个 id | 否 |
| Notification | 无 | 否 |
{
"jsonrpc": "2.0",
"method": "notifications/progress",
"params": {
"progressToken": "job-123",
"progress": 50,
"total": 100
}
}
progressToken 必须对应 active request,进度通知结束后要停止,频率也要限制。
Server 若发送结构化日志,需声明 logging capability。Client 可用 logging/setLevel 设置最低等级。
{
"jsonrpc": "2.0",
"id": 1,
"method": "logging/setLevel",
"params": { "level": "info" }
}
{
"jsonrpc": "2.0",
"method": "notifications/message",
"params": {
"level": "error",
"logger": "database",
"data": { "error": "Connection failed" }
}
}
progressToken 必须唯一并对应 active request。logging/setLevel 是 client 控制 server 日志量的方式。练习:为「重建全文索引」tool 设计 progress 与 logging 行为。