Claude Code MCP Tasks 怎么用?长任务后台跑、Elicitations 中途确认,2.1.304 起支持(第三方 API Key 实测)

Claude Code v2.1.304 起公测 MCP Tasks:MCP 服务器把长任务接过去自己跑,Claude 不用干等,远程任务退出后还在。本文按官方文档讲清开启条件、/tasks 用法、等待结果的两个变量、和「超 2 分钟自动转后台」的区别,并用第三方 API Key 在 v2.1.309 实测了自动后台、/tasks 和 Elicitation 中途确认。

8 分钟阅读
Claude Code MCP Tasks 怎么用?长任务后台跑、Elicitations 中途确认,2.1.304 起支持(第三方 API Key 实测)

据 @ClaudeDevs 10 月 24 日发布的主帖,Claude Code 开始支持 MCP Tasks:MCP 服务器可以把一个耗时很长的工具调用变成「任务」,自己在服务器上跑,Claude 拿到任务 ID 后继续干别的。跟帖介绍了 Elicitations,也就是任务跑到一半弹窗问你要输入;另一条跟帖说明 CLI 已经可用。

先说结论:

  • MCP Tasks 目前是公测,官方原文是 MCP tasks are in public beta in the Claude Code CLI and require Claude Code v2.1.304 or later。
  • 要同时满足服务器支持 tasks、连上 2026-07-28 协议、会话能拉取 feature flags、调用来自主对话等条件,才会变成 MCP task。
  • 我们用本站 API Key 在 Claude Code v2.1.309 上实测:协议能协商到 2026-07-28,超过 2 分钟的 MCP 调用会自动转后台、能在 /tasks 里看进度,Elicitation 中途确认弹窗正常;但服务器端 MCP task 没有开启,原因和 feature flags 有关,下文细说。
  • 我们的老教程没有让你设 DISABLE_TELEMETRY 或 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC,实测设与不设,以上表现一致。

创建 API Key →

它解决什么问题

以前一个 MCP 工具调用要跑很久,比如导出报表、跑构建,Claude 只能卡着等。官方文档对 MCP task 的定义是:

An MCP task is a long job, such as a report export or a build, that an MCP server runs itself using the MCP tasks extension. Claude's tool call returns once the server accepts the job, so Claude keeps working unless you make Claude wait.

也就是:服务器一接单,工具调用就返回了,Claude 继续干活;任务结束时对话里出现一行提示,Claude 拿到结果。底部状态栏会显示类似 1 MCP task 的计数。远程服务器上的任务在你退出 Claude Code 后还会继续跑,之后恢复同一个会话就能接着跟。

Elicitations 解决的是另一件事:任务跑到一半需要你拍板,比如「现在部署到 staging 吗」,服务器可以弹一个表单问你,而不是只能失败或乱猜。

和「超 2 分钟自动转后台」不是一回事

这一点最容易混。Claude Code 还有一个更早的机制:主对话里的普通 MCP 调用跑超过两分钟,会自动挪到后台,不再阻塞会话。文档原文:

An MCP tool call in the main conversation that is still running after two minutes moves to a background task instead of blocking the session.

两者的区别:

普通调用自动转后台MCP task(服务器端任务)
谁在跑还是那次工具调用,Claude Code 在后台等它MCP 服务器自己跑,Claude Code 按间隔查状态
何时转后台跑满 2 分钟后服务器一接单就返回
退出 Claude Code 后文档原文:it doesn't survive exiting the session远程服务器上的任务继续跑,claude --resume 回来取结果
/tasks 详情无 runs on the server 字样显示 runs on the server; survives exiting this session
需要的条件无特殊要求版本、协议、feature flags、服务器支持等,见下节

文档也给了判断方法:如果 /tasks 里一个后台调用的详情显示 runs on the server; survives exiting this session,它才是服务器端的 MCP task。

版本和前提

官方文档「What a call needs to become an MCP task」一节列了全部条件,一个工具调用要同时满足才会变成 MCP task:

  • 服务器支持 tasks。
  • 服务器是 HTTP、stdio 或 claude.ai connector,并且连在 2026-07-28 协议上。原文:Setting MCP_SDK_GENERATION=v1 or MCP_PROTOCOL_NEGOTIATION=legacy rules that out。
  • 会话会拉取 feature flags。原文:so not on a third-party provider such as Amazon Bedrock, and not with telemetry or flag fetching turned off。
  • Anthropic 为你这类会话开启了 MCP tasks。v2.1.304 起覆盖终端 CLI、Agent SDK 和 GitHub Actions;原文:Other surfaces, such as the VS Code extension and the desktop app, don't have MCP tasks。
  • 调用来自主对话,不是子 Agent。
  • 会话是交互式的;或者是 Agent SDK、读 --input-format stream-json 的 claude -p,并且 CLAUDE_AUTO_BACKGROUND_TASKS 为 1、CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUND 不是 1、CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS 不是 0。

注意最后一条:普通的一次性 claude -p "..." 拿不到 MCP task,原文是 A one-shot claude -p "" run doesn't get MCP tasks。

先查版本:

bash
claude --version
# 低于 2.1.304 就先升级
claude update

开启和使用步骤

1. 接一个支持 tasks 的 MCP 服务器

添加方式和普通 MCP 服务器一样,没有额外开关:

bash
# 远程 HTTP 服务器
claude mcp add --transport http my-server https://mcp.example.com/mcp
# 本地 stdio 服务器
claude mcp add --transport stdio my-server -- python3 /path/to/server.py

服务器那边要实现 MCP tasks 扩展。文档写明,在 2026-07-28 连接上,Claude Code 每个请求的 params._meta["io.modelcontextprotocol/clientCapabilities"] 里会带 extensions 下的 "io.modelcontextprotocol/tasks": {};不能变成任务的 tools/call 不带这个扩展。服务器只有看到它,才能用 "resultType": "task" 回复。没看到还硬回 task,Claude 会收到 Unsupported result type 'task' for tools/call。

如果还没接过 MCP,可以先看 Codex 侧的MCP 配置教程理解服务器的增删查,或者看Claude Code 控制 Unreal Engine这种完整的 MCP 接入实例。

2. 用 /tasks 看进度、按 x 停止

任务跑起来后,输入 /tasks 打开列表。停止方法原文:

To stop a running task, select it in /tasks and press x, or ask Claude to.

几个细节:

  • 按 Esc 不会停掉后台任务。
  • 停止后 Claude Code 会请服务器取消,但服务器可能仍然跑完。
  • 服务器断开了要先在 /mcp 里重连,否则取消请求发不出去,Claude Code 也就不再跟这个任务。

任务结束时对话里出现这样一行:

text
MCP task <server task id> (<server>/<tool>) completed.

结果交给 Claude,不直接打印到对话里,要看就问 Claude。Claude 空闲时收到结果会自己接着处理。

3. 退出后用 claude --resume 取结果

远程服务器上的任务退出后继续跑。回来时恢复任务所在的那个会话:

bash
claude --resume

要求是服务器名称和连接设置不变。新开会话或用 --fork-session 都不会跟原来的任务;一次性 claude -p 里 --resume 也不跟。另外,stdio 服务器的进程会随 Claude Code 退出而停止,虽然 /tasks 里同样显示 survives exiting this session,文档建议除非服务器文档写明工作能活过进程,否则先跑完或先停掉再退出。

4. 想让 Claude 等结果再继续

默认 Claude 不等。要让它等,在 settings.json 的 env 里设二选一:

  • CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS 设为 0:Claude 等每一个 MCP 调用结束,同时也关掉了普通调用的 2 分钟自动后台。
  • CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUND 设为 1:Claude 等任务结果,但普通调用的自动后台还在,所以超过 2 分钟的仍会被挪到后台,只是挪过去的是普通后台调用,不是 MCP task,退出就没了。
json
{
  "env": {
    "CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS": "0"
  }
}

单独设 CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1 或用 bare 模式,并不会让 Claude 等 MCP task。

5. Elicitation:任务中途要你确认

任务运行中可以弹出 elicitation 对话框。两点要注意:

  • /tasks 打开时对话框是隐藏的,要先关掉 /tasks 才能回答。
  • 选 Decline 或按 Esc 也算一种回答,服务器自己决定任务是否继续。

非交互会话里,任务一旦要求输入就会被取消。原文:In a non-interactive session, Claude Code asks the server to cancel a task that requests input, without running your Elicitation hooks or calling the Agent SDK's onElicitation callback。

第三方 API 下要注意什么

我们按Claude Code 第三方 API 配置教程的写法,在全局 ~/.claude/settings.json 里配好本站 Key(ANTHROPIC_BASE_URL 不带 /v1):

json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.aicodewith.ai",
    "ANTHROPIC_AUTH_TOKEN": "你的 API Key"
  }
}

然后用 Claude Code v2.1.309 接了一个自己写的最小 stdio MCP 服务器。它实现了 tasks 扩展,提供两个工具:一个慢构建,一个中途要确认的部署。下面是实测结果。

实测 1:协议和 MCP task

  • 连接正常,调试日志里记录 negotiatedProtocolVersion":"2026-07-28",说明走的是新协议。
  • 调试日志同时记录 mcp runtime arm: v2 (source: default)。按文档,没拉 feature flags 的会话会默认用 v2 运行时,这行的 source 是 default 而不是 flags。
  • 服务器收到的 tools/call 里,clientCapabilities 只有 roots 和 elicitation,没有 io.modelcontextprotocol/tasks。所以服务器不能回 task,调用按普通 MCP 调用执行。

结论:用本站 Key 时,服务器端 MCP task 在我们这次测试里没有开启,这和文档里「会话要能拉取 feature flags」这一条对得上。官方帖子和文档都还写着公测,后续开放范围变了我们再更新本文。

实测 2:普通长调用自动转后台、/tasks

让慢构建工具跑 150 秒:

  • 跑到约 2 分钟时,调用被挪到后台,Claude 回复任务已转后台,底部显示 1 MCP task。
  • 打开 /tasks 能看到进度和服务器上报的进度消息,底部提示 Esc to go back · x to stop。
  • 150 秒时出现完成提示,Claude 随即报出结果。

claude-code-mcp-tasks-tasks

claude-code-mcp-tasks-done

注意:这是普通调用的自动后台,/tasks 里虽然也标着 MCP task,但详情里没有 runs on the server 字样,退出会话就没了。长任务要退出前跑完,或者用 CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS 调整阈值。

实测 3:Elicitation 中途确认

调用部署工具,服务器在 2026-07-28 协议下返回需要输入的结果,Claude Code 弹出表单:

claude-code-mcp-tasks-elicitation

勾选确认并选 Accept 后,服务器拿到 confirm: true,工具返回结果。从提问到出结果约 7 秒。也就是说,普通 MCP 调用中途确认在第三方 Key 下可以用。

遥测变量怎么取舍

有些读者为了少发请求,会设下面两个变量之一:

bash
export DISABLE_TELEMETRY=1
# 或
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1

我们分别设了这两个变量重跑:运行时同样是 v2 (source: default),服务器同样收不到 tasks 扩展,Elicitation 弹窗照常可用。所以对第三方 Key 用户来说,这两个变量设不设,MCP 部分的表现没有差别。

取舍建议:

  • 用官方账号、想要服务器端 MCP task 的:按文档,不要关遥测或 flag 拉取。
  • 用第三方 API Key 的:这两个变量不影响本文测到的功能,按自己的隐私和网络需求决定。我们的 Claude Code 教程本来就没有要求设它们。
  • 不要为了「兼容」去设 MCP_SDK_GENERATION=v1 或 MCP_PROTOCOL_NEGOTIATION=legacy,那会直接排除 MCP task。

如果遇到的是响应慢、卡顿而不是任务问题,可以看Claude Code 响应慢排查。

常见状态和报错

下面这些消息出现在 /tasks 条目或任务结束那一行,含义取自官方文档的状态表。消息显示期间任务可能仍在跑,Claude Code 会继续查状态。

消息含义怎么办
reconnecting…恢复后服务器还没回应,或状态查询没回音一直不消失就去 /mcp 重连
needs a sign-in to …服务器拒绝了状态查询在 /mcp 登录
status requests come back with errors; retrying…服务器或它前面的代理返回错误等 Claude Code 重试
server '…' did not reconnect within 300s5 分钟内没有一次成功查询去 /mcp 重连
server '…' is not configured in this session; the task may still be running on it会话里没有这个名字的服务器用原名称恢复服务器,再恢复会话
server '…' was reconfigured to a different transport since this task was created 开头的消息服务器的 URL、命令、参数、环境变量、请求头或超时改过改回原设置,再恢复会话
the server rejected this task's id; asking again…服务器说不认识这个任务 ID,最多再问 5 分钟等待
以 outcome unknown. 结尾的一行Claude Code 已停止跟踪先问清服务器做了什么,再决定要不要重新调用,避免重复执行

服务器作者常见的两类工具错误,文档原文:

  • 客户端没带 tasks 扩展却回了 task:Unsupported result type 'task' for tools/call。
  • 任务 ID 不合规(最多 128 个可打印 ASCII 字符、不能有空格):报错以 MCP server 开头,包含 returned a malformed task handle for tool。

常见问题

Claude Code MCP Tasks 需要什么版本?

v2.1.304 或更高,目前在 CLI 里公测。Agent SDK 和 GitHub Actions 也覆盖;VS Code 扩展和桌面 App 暂时没有。

用第三方 API Key 能用 MCP Tasks 吗?

我们用本站 Key 在 v2.1.309 测试时,服务器端 MCP task 没有开启,客户端没有向服务器声明 tasks 扩展。超过 2 分钟自动转后台、/tasks 查看和停止、Elicitation 中途确认都能正常用。

设了 DISABLE_TELEMETRY 还能用吗?

按文档,关了遥测或 flag 拉取的会话不会有 MCP task。第三方 Key 下我们实测设与不设表现一致,Elicitation 仍可用。

子 Agent 和 claude -p 里会变成任务吗?

子 Agent 发起的调用不会。一次性 claude -p "" 也不会;Agent SDK 或读 --input-format stream-json 的 claude -p 在满足 CLAUDE_AUTO_BACKGROUND_TASKS=1 等条件时才可以,并且要保持输入不关闭。

退出 Claude Code 后任务还在吗?

远程服务器上的 MCP task 还在,用 claude --resume 恢复同一个会话取结果,服务器名称和连接设置不能改。普通调用的自动后台退出即消失。stdio 服务器的进程会随退出停止。

怎么让 Claude 等任务结果再继续?

设 CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS=0(等所有 MCP 调用),或 CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUND=1(等任务结果,但超过 2 分钟的仍会转成普通后台调用)。

Elicitation 弹窗没出现怎么办?

先确认没开着 /tasks,它打开时对话框是隐藏的。非交互会话里任务要求输入会直接被取消。

创建 API Key →