快速结论:这个报错通常出现在把 MCP Python SDK v2 当作客户端,去调用启用了 SEP-2663 任务扩展(io.modelcontextprotocol/tasks)的服务端时:服务端在 tools/call 返回 resultType: "task",而当前 SDK 客户端没有内置对该结果类型的 claim,于是结果校验失败。优先排查你使用的 SDK 版本是否已包含客户端 tasks 扩展支持,以及调用方是否被迫手写 ResultClaim。
适用环境:Issue 仅确认涉及 MCP Python SDK(v2)、SEP-2663 / io.modelcontextprotocol/tasks 扩展、spec-2026-07-28 服务端,以及 mcp_types / MCPModel 相关线协议模型。Issue 未提供操作系统、Python、CUDA、显卡或具体依赖版本信息。
最快修复方案:暂无确认的一步修复方案。该 Issue 被维护者以“与 #2806 重复”为由关闭,并指向 #2806 统一跟踪;Issue 讨论中提出的实现方案(引入 mcp/client/extensions/tasks.py、advertise tasks capability、claim resultType: "task"、通过 tasks/get 轮询等)尚属提案,未在本 Issue 内验证合并。
注意事项:Issue 中提到的 ~120 行实现与测试是提交者自述的工作实现,并非已合并代码;API 设计(透明轮询 vs 暴露原始 task handle、input_required 是否复用 elicitation 回调)仍存在未决讨论。不要据此在生产环境假定行为或接口已固定,应以 #2806 的最终结论为准。
问题场景
用户在 MCP Python SDK v2 中作为客户端调用一个符合 SEP-2663(2026-07-28 spec)的任务增强型服务端。服务端针对 tools/call 返回 resultType: "task",表示这是一个任务型结果而非直接结果。由于 SDK 客户端当时没有内置消费该扩展的能力,调用会走到结果校验并报错,除非每个调用方自己手写一个 ResultClaim 来认领该结果类型。Issue 正文同时指出 v2 已移除了旧的实验性 tasks API,改为 SEP-2663 扩展,但 SDK 没有同步提供客户端侧消费能力。
报错原文
Client-side support for the tasks extension (io.modelcontextprotocol/tasks, SEP-2663)
a `tools/call` that returns `resultType: "task"` fails result validation unless every consumer hand-writes a `ResultClaim`.
原因分析
最可能的原因是客户端缺少对 io.modelcontextprotocol/tasks 扩展的默认 claim 与能力声明:SDK 没有在请求能力中 advertise 该扩展,也没有在 tools/call 上认领 resultType: "task",因此返回的任务型结果无法通过结果验证。另一种可能原因是线协议模型基类问题——提交者指出自然基类应为 MCPModel(camelCase alias generator),而 mcp_types 当时并未重新导出该类,导致上游化时需要额外处理。以上均属 Issue 讨论中的分析,非最终定论。
环境排查
- 确认所使用的 MCP Python SDK 版本是否为 v2,以及是否已包含客户端 tasks 扩展支持。
- 确认服务端是否开启了 SEP-2663 /
io.modelcontextprotocol/tasks扩展,并会返回resultType: "task"。 - 确认调用方是否被迫手写
ResultClaim才能消费结果。 - 确认
mcp_types是否已重新导出MCPModel作为线协议模型基类。 - 关注 #2806 的跟踪进展,确认该能力是否已合入以及合入的版本。
解决步骤
- 先确认报错根因是否为“客户端未认领 tasks 扩展”,可通过检查 SDK 是否在 per-request capabilities 中 advertise
io.modelcontextprotocol/tasks判断。 - 如 SDK 尚未提供内置支持,可优先尝试在调用侧通过
ClientExtension.claims()自行认领resultType: "task",并按tasks/get轮询处理,作为临时绕行方案(Issue 正文明确提到扩展面ClientExtension.claims()可以干净地支持这一点)。 - 轮询时需遵守服务端返回的
pollIntervalMs,并处理任务执行中途该值发生变更的情况。 - 对应任务状态:
failed应映射为携带服务端 JSON-RPC 错误的异常,cancelled应映射为另一种明确区分的错误。 - 在调用方 scope 被取消时,按规范的协作式取消模型发送尽力而为的
tasks/cancel(shielded)。 - 对
tasks/*请求,通过name_param将Mcp-Name设为 taskId,以满足 SEP-2663 的路由头要求。 - 跟踪 #2806,等待维护者确定最终 API 形态(透明轮询默认值、是否暴露原始 task handle、
input_required是否复用 elicitation 回调)后再决定是否升级到内置实现。
验证方法
在符合 SEP-2663 的服务端(server-directed task creation)上发起一次会返回 resultType: "task" 的 tools/call:若客户端能够 advertise tasks capability、正确认领并解析任务、按 pollIntervalMs 轮询 tasks/get、正确映射 completed / failed / cancelled 三种状态,并在取消场景下尽力发送 tasks/cancel,则说明该问题已被覆盖。Issue 本身未提供合并后的验证记录,最终验证请以 #2806 的结论为准。
参考来源
modelcontextprotocol/python-sdk #3226
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug] Codex heterogeneous agent loses session continuity every turn (sessionId missing from stream_start, regression of #16855)](https://www.chat-gpts.plus/wp-content/uploads/2026/10/20231-3455eac7-768x403.jpg)

