导航菜单

  • 1.什么是MCP
  • 2.架构概览
  • 3.理解MCP服务器
  • 4.理解MCP客户端
  • 5.版本控制
  • 6.连接本地MCP服务器
  • 7.连接远程MCP服务器
  • 8.构建MCP服务器
  • 9.构建MCP客户端
  • 10.SDKs
  • 11.理解MCP中的授权
  • 12.安全最佳实践
  • 13.MCP Inspector
  • 14.规范
  • 15.关键变更
  • 16.架构
  • 17.基础协议概述
  • 18.生命周期
  • 19.传输
  • 20.授权
  • 21.取消
  • 22.Ping
  • 23.进度
  • 24.任务
  • 25.根
  • 26.采样
  • 27.引导
  • 29.提示
  • 30.资源
  • 31.工具
  • 32.补全
  • 33.日志
  • 34.分页
  • 35.模式参考
  • Keycloak
  • 28.服务器功能
  • 1. 什么是取消?
  • 2. 本章你将学到
  • 3. 取消流程
  • 4. 行为要求
    • 4.1 发送方
    • 4.2 接收方
  • 5. 时序与竞态
  • 6. 实现建议
  • 7. 错误处理
  • 8. 延伸阅读

1. 什么是取消? #

取消允许任一方中止正在进行的请求。例如用户点击「停止」按钮,或客户端/服务器发现请求已超时、不再需要结果时,可发送取消通知。

协议版本:2025-11-25

通俗理解 说明
可选能力 取消是可选功能,双方协商支持后可用
双向 客户端可取消发给服务器的请求,服务器也可取消发给客户端的请求
通知 通过 notifications/cancelled 通知实现,无需等待响应

2. 本章你将学到 #

  • 如何发送取消通知
  • 取消的规则与限制
  • 时序与竞态条件的处理
  • 错误处理与实现建议

3. 取消流程 #

当一方希望取消进行中的请求时,发送 notifications/cancelled 通知:

{
  "jsonrpc": "2.0",
  "method": "notifications/cancelled",
  "params": {
    "requestId": "123",
    "reason": "User requested cancellation"
  }
}
字段 说明
requestId 要取消的请求 ID(必须与先前发出的请求 ID 一致)
reason 可选,取消原因,便于调试或展示给用户

4. 行为要求 #

4.1 发送方 #

规则 说明
仅引用有效请求 只能取消同一方向发出且仍在进行中的请求
不得取消 initialize 客户端不得取消 initialize 请求
任务用专用接口 对于任务增强请求,必须使用 tasks/cancel 请求,而非 notifications/cancelled
忽略后续响应 发送取消后,应当忽略该请求之后到达的任何响应

4.2 接收方 #

规则 说明
停止处理 应当停止处理已取消的请求,释放相关资源
不发送响应 不得为已取消的请求发送响应
可忽略的情况 请求 ID 未知、处理已完成、请求无法取消时,可以忽略取消通知

5. 时序与竞态 #

由于网络延迟,取消通知可能在请求已处理完甚至响应已发出之后才到达。双方必须妥善处理这类竞态:

sequenceDiagram participant Client as 客户端 participant Server as 服务器 Client->>Server: 请求 (ID: 123) Note over Server: 开始处理 Client->>Server: notifications/cancelled (requestId: 123) Note over Server: 可能已处理完、已发响应 Note over Server: 若未完成,则停止处理
情况 接收方行为
取消先于完成 停止处理,不发送响应
取消晚于完成 可忽略取消(响应已发出)
请求 ID 未知 可忽略

6. 实现建议 #

建议 说明
记录原因 双方应当记录取消原因,便于调试
用户提示 应用应当在请求被取消时向用户提示

7. 错误处理 #

无效的取消通知应当被忽略,保持「发出即忘」特性:

情况 处理
未知的请求 ID 忽略
已完成的请求 忽略
格式错误的通知 忽略

8. 延伸阅读 #

主题 文档
任务取消 任务
生命周期 生命周期
基础协议 基础协议概述
← 上一节 20.授权 下一节 22.Ping →

访问验证

请输入访问令牌

Token不正确,请重新输入