MCP 补上长任务与「中途问人」:这次的瓶颈不在协议,在客户端清单

MCP 补上长任务与「中途问人」:这次的瓶颈不在协议,在客户端清单

Author: tengdy | Create: 2026-10-26 10:56:00 | Update: 2026-10-26 10:56:03 | 分类:MCP & CLI

Claude CodeMCPCloudflareMCP TasksElicitationKiro工作流原语客户端能力协商

MCP 一直有个说不出口的尴尬:它是一个为「工具调用」设计的协议,而工具调用默认是「一问一答、几秒钟内返回」。可真正让 Agent 卡住的,恰恰是那些慢活——跑一次深度调研、导出季度报表、同步三万条 CRM 记录、等一次三方登录。这些事没有几十秒能完的,而在之前的协议语义里,Agent 只有两个选择:阻塞等着,或者假装它不存在。

10 月 23 日,Anthropic 在 Claude Code CLI 里把 MCP Tasks 和 Elicitations 放进公测。这件事的分量不在「多了两个功能」,而在于协议层第一次同时承认了两件事:任务是可以在服务端活着、Agent 可以先走的;人也是可以被中途叫回来问一句的。

但真正值得写下来的不是发布会,是它精确到有点冷酷的适用范围清单。

两个原语:一个交时钟,一个交确认权

先看 Tasks。服务端如果支持 tasks 扩展,可以在收到 tools/call 之后不返回结果,而是返回一个任务句柄:任务 id、状态(working、input_required 等)、时间戳、一个可能为 null 的 TTL,以及一个轮询间隔。客户端照着这个间隔去调 tasks/get,直到任务真正完成,再拿回原本应该拿到的那个工具结果。

这个设计的关键细节是:服务端拥有了时钟。Claude Code 不会因为 TTL 过期就丢掉任务,一个跑了很久的持久化作业能活过它自己的截止时间。Agent 也不必再为一个慢工具干等。

它还和另一种「后台化」明确区分开了。在主对话里,任何 MCP 调用超过两分钟还没返回,会被自动转成后台任务,Agent 继续干活,稍后取结果。但这类后台调用不跨进程存活——关掉 Claude Code 就没了。服务端任务不一样:作业活在远端服务器上,退出之后仍在跑,重新进同一个会话可以接着取。

这就是「长任务」和「中断续跑」的差别。前者只是不阻塞,后者才是真的把工作交了出去。

第二个原语是 Elicitation,含义更微妙:服务端可以在任务执行到一半时,停下来问用户一句话。确认一笔退款、补一个缺失的字段、跳转浏览器完成第三方登录。Claude Code 会自动渲染对话框,客户端不需要配置,有两种模式——表单模式(客户端里弹出字段)和 URL 模式(给一个链接,交互发生在你自己的页面上)。

如果没有这个能力,只有两条烂路:服务端猜一个默认值,然后安静地做错;或者返回错误让 Agent 重试,而模型在第二次尝试时大概率会把那个值编出来。Elicitation 给的是第三条路——去问那个知道答案的人。

规范改了两次:Tasks 从核心里被挪了出来

这里有一段值得记住的设计史。在 2026-07-28 那一版规范里,Tasks 从「实验性核心」被移到了扩展层。原因写得很直白:旧的实现里,elicitation 请求仍然是阻塞的——这直接让 tasks 的存在意义泡汤了。你想让任务异步跑,可它一需要人就卡在那里,那异步还有什么用。

所以这一版把 tasks/list 和 tasks/result 删了,只留 tasks/get、tasks/update、tasks/cancel;elicitation 的问答改成内联在 tasks/get 的响应里返回。基于 2025-11-25 实验版 Tasks API 写过的服务端,得自己迁移。

更细的一层是:elicitation 现在是多轮往返。客户端调工具,服务端返回一个 InputRequiredResult,里面装着 elicitation/create 请求和一个不透明的 requestState;客户端弹框、用户接受或拒绝;客户端带着 inputResponses 和原样回传的 requestState 重试最初那次调用。整个过程中,服务端不需要一直握着连接等人想清楚——这才是无状态服务器能支持「问人」的前提。也正因为如此,Go SDK 要到 v1.8.0 才真正支持它,而 v1.6.1 的文档里写着:无状态模式下,任何服务端到客户端的请求会被立刻拒绝。

还有一条硬规定,做支付和身份的人应该抄下来:表单模式禁止用来收集密码、API Key、访问令牌、支付凭证。敏感信息只能走 URL 模式,让交互发生在你的页面上,不进客户端、不进日志、不进模型的上下文。

清单才是重点:三块屏幕能用,其余排队

以下是官方文档给出的边界,我觉得比功能本身更该被引用:

  • 需要 Claude Code v2.1.304 或更高版本,且只覆盖三类场景:终端 CLI 会话、Agent SDK 会话、GitHub Actions 运行;
  • VS Code 扩展和桌面 App 没有 MCP Tasks;
  • 不拉取 Anthropic feature flag 的第三方渠道(例如 Amazon Bedrock)不在范围内;
  • 服务端必须按 2026-07-28 协议版本连进来;
  • 调用必须来自主对话,子智能体发出的调用仍是普通工具调用。

再补一条最容易被忽略的:存量 MCP 服务器不会自动获得这个能力。谁建的服务器,谁去加 tasks 支持;用第三方服务器的,去看它的 release notes。

同一周的另外三个信号,恰好把这张清单的另外两个角补上了。Kiro CLI 2.34.0 在同一天给本地 V3 会话加了 MCP elicitation——工具可以停下来弹一个表单或链接,用户填完、在别处做完、或者拒绝,调用「不重启就地继续」。而 Cloudflare 在 10 月 22 日的更新里,把自家的产品级 MCP 服务器全部切到只服务 /mcp,/sse 直接返回 410 Gone。SSE 传输在规范里早就被标为弃用,Claude Code 从 v2.1.265 起执行 claude mcp add --transport http 也是先试 HTTP、失败再回退 SSE——但回退救不了「端点本身返回 410」这种情况。再往前一天,Anthropic 把 Agent Skills 交给了运营 MCP 的那个中立基金会。

把四件事放一起看,画面就清楚了:规范在往中立治理走,行为层在往单一厂商的客户端集中,而传输层正在收口。

三个会被演示现场抓到的坑

如果你正在写服务端,下面三条是我认为最容易在真实场景里翻车的:

第一,能力协商不能假设。 一个假定「每个客户端都能渲染表单」的服务器,会在渲染不了的客户端上直接卡死。正确做法是读客户端在 _meta 里声明的能力(elicitation: { form: {}, url: {} }),没声明就别发;在没有 elicitation 的通道上,抛一个指名缺哪个字段的错误,让 Agent 在对话里问人。含糊的报错只会换来一次瞎编。

第二,无人值守的活不能靠这个审批。 非交互会话里,Claude Code 会请求服务端取消任何需要输入的任务,而不是猜。也就是说,CI 里的自动化跑批如果需要一个「是/否」,你得另建一条路——审批队列、人工工单,都行,但不能指望弹框。

第三,「停止」不等于回滚。 在 /tasks 里停一个任务,只是请服务端取消;文档明确说服务端可能已经做了一部分,也可能照样做完。任何写数据、发消息、动钱的工具,都必须能安全处理一个半成品。同理,想拿到远端任务的结果,得恢复同一个会话——新开会话或者 fork 都不会跟随。

我的判断

MCP 的成熟度,从来不是用规范版本号衡量的,而是用「哪块屏幕能用」的清单一格一格填出来的。Tasks 和 Elicitation 补上的是两块真正缺的原语:一块把时钟从客户端手里拿走,一块把确认权显式地放回人手里。这两件事对 Agent 能不能进生产环境,比任何一次跑分都重要。

但同一周 Cloudflare 关掉 /sse、Claude 只在 CLI 上开 Tasks,也提醒了另一件事:协议只管一半,另一半在客户端的发布节奏里。 写服务器的人现在要面对的现实是——你要同时兼容「会问人的客户端」「不会问人的客户端」和「连都连不上的客户端」,而且这三种在同一个团队里可能同时存在。

所以接下来半年,MCP 生态里最值钱的东西大概率不是新工具,而是两样很朴素的东西:一份准确的客户端能力矩阵,和一套「能力缺失时优雅降级」的默认写法。

参考来源

  • Forkast:Claude Ships MCP Tasks and Elicitations in Claude Code — Durable Agent Workflows, Narrow Launch(2026-10-24)https://forkast.news/claude-ships-mcp-tasks-and-elicitations-in-claude-code-durable-agent-workflows-narrow-launch
  • OrchestriAI:Claude Code MCP Tasks: long jobs and approval prompts(2026-10-24,基于官方文档)https://www.orchestriai.com/blog/claude-code-mcp-tasks-long-running-tools-approvals
  • Reflekt Lab:MCP Elicitation Explained: Form Mode, URL Mode and MCP Tasks https://reflektlab.ai/blog/mcp-elicitation
  • MindPattern:Ramsay Research Agent — October 25, 2026(含 Kiro CLI 2.34.0 与规范演进梳理)https://mindpattern.ai/blog/2026-10-25
  • Cloudflare 开发者文档更新:Cloudflare MCP servers no longer serve /sse(2026-10-22)https://developers.cloudflare.com/changelog/post/2026-10-22-cloudflare-mcp-servers-retire-sse/
  • VibeHacker:Claude Code can now hand long jobs to MCP servers as tasks(2026-10-23)https://vibehacker.com/news/claude-code-can-now-hand-long-jobs-to-mcp-servers-as-tasks-and-keep-working-publ

评论(0)

暂无评论,来抢沙发~


关于本站 · RSS

浙ICP备2025156991号浙公网安备33010802013816号 浙公网安备33010802013816号 © 2026 智能体工场 - [从善如登] All rights reserved.