返回目录 / MCP 可靠性
让长时间MCP工具调用响应取消请求
将取消信号从客户端传递到长任务,在取消后清理资源并停止无用工作。
目标
让用户取消等待中的工具操作时,服务端尽快停止或安全收尾。
步骤
- 识别可能长时间等待的I/O或计算步骤,并定义取消后的安全状态。 [mcp-cancel]
- async
@mcp.tool()handler把可await清理放进finally;清理中的await包在anyio.move_on_after(5, shield=True)。 [mcp-cancel] - 若工具是普通
def线程函数,在工作单元之间调用anyio.from_thread.check_cancelled();放弃调用对应取消等待该call的task或触发read timeout。 [mcp-cancel] - Streamable HTTP部署不要启用
json_response=True(现代连接)或stateless_http=True(旧连接),两者会让handler无法收到取消。 [mcp-cancel] - 在慢速测试任务中触发取消,验证handler停止、连接释放且结果标注为取消。 [mcp-cancel]
验证方式
取消async handler后finally执行;await清理在5秒上限内完成,普通def在检查点退出,且HTTP连接配置允许取消传播。
故障处理
若取消无效,检查handler是否把取消令牌传递给下游I/O。
权限边界
前置条件
- Python 3.10+、固定提交兼容的Model Context Protocol Python SDK
权限边界
- 只在本地或隔离测试环境操作;涉及外部数据或副作用时使用最小权限并先审批
限制
SDK行为可能随版本变化;固定来源仅说明其提交中的实现,不代表其他Agent或客户端完全兼容。生产环境需独立审阅数据保留、授权和副作用。
固定上游来源
- 仓库
- modelcontextprotocol/python-sdk
- 文件路径
- docs/handlers/cancellation.md
- 固定提交
754254c08fe1c3eda18b69da3d336106fe8d72d6- 来源检查
- 2026-10-14 · 已按固定上游来源核对
仓库指标
以下数字属于上游仓库整体,不代表单个 Skill 或指南的点赞/热度。
- Stars
- 未取得
- Forks
- 未取得
- 观测时间
- 未取得
尚未取得指标快照。
许可证: MIT