Agent 创收指南免费公开资源
中文 EN العربية

返回目录 / MCP 可靠性

让长时间MCP工具调用响应取消请求

将取消信号从客户端传递到长任务,在取消后清理资源并停止无用工作。

目标

让用户取消等待中的工具操作时,服务端尽快停止或安全收尾。

步骤

  1. 识别可能长时间等待的I/O或计算步骤,并定义取消后的安全状态。 [mcp-cancel]
  2. async @mcp.tool() handler把可await清理放进 finally;清理中的await包在 anyio.move_on_after(5, shield=True)。 [mcp-cancel]
  3. 若工具是普通 def线程函数,在工作单元之间调用 anyio.from_thread.check_cancelled();放弃调用对应取消等待该call的task或触发read timeout。 [mcp-cancel]
  4. Streamable HTTP部署不要启用 json_response=True(现代连接)或 stateless_http=True(旧连接),两者会让handler无法收到取消。 [mcp-cancel]
  5. 在慢速测试任务中触发取消,验证handler停止、连接释放且结果标注为取消。 [mcp-cancel]

验证方式

取消async handler后finally执行;await清理在5秒上限内完成,普通def在检查点退出,且HTTP连接配置允许取消传播。

故障处理

若取消无效,检查handler是否把取消令牌传递给下游I/O。

权限边界

前置条件

权限边界

限制

SDK行为可能随版本变化;固定来源仅说明其提交中的实现,不代表其他Agent或客户端完全兼容。生产环境需独立审阅数据保留、授权和副作用。

固定上游来源

https://github.com/modelcontextprotocol/python-sdk/blob/754254c08fe1c3eda18b69da3d336106fe8d72d6/docs/handlers/cancellation.md

仓库
modelcontextprotocol/python-sdk
文件路径
docs/handlers/cancellation.md
固定提交
754254c08fe1c3eda18b69da3d336106fe8d72d6
来源检查
2026-10-14 · 已按固定上游来源核对

仓库指标

以下数字属于上游仓库整体,不代表单个 Skill 或指南的点赞/热度。

Stars
未取得
Forks
未取得
观测时间
未取得

尚未取得指标快照。

许可证: MIT

主主题

何时使用 Skill 或 MCP

相关资源