Blog
Claude Code MCP Tasks: Long Jobs and Approvals for MCP Servers
Claude Code can now hand slow jobs to MCP servers and keep working, and those jobs can stop to ask you before they act. Here's what's new, what was already in the spec, and how I'd use it in PHP and WordPress work.
Caleb Dorris 24 October 2026, 10:45 AM 7 min

The short version
MCP servers can now take the slow jobs
- What's new: Claude Code now supports MCP Tasks. A server can answer a slow tool call with a task ID, keep working, and Claude Code checks back until the result is ready. Claude keeps working in the meantime.
- Where: the Claude Code CLI on v2.1.304 or later, as a public beta. The terminal, the Agent SDK and GitHub Actions get it. The VS Code extension and the desktop app don't yet.
- Elicitations aren't brand new: Claude Code has shown MCP elicitation dialogs since March. What's new is that a running task can stop and ask you a question, like "approve this?", and then carry on.
ClaudeDevs announced it at 1:24 PM Central on Friday: "We're adding support for MCP Tasks and Elicitations in Claude." A follow-up post says both are available today in the Claude Code CLI and are "rolling out to more Claude products soon." I went straight to the docs. This is the part of MCP I've been waiting on.
I build integrations for a living, and the useful jobs are always the slow ones: test suites, site crawls, exports. Until now, an MCP tool call was a phone call where both sides had to stay on the line.
What Claude Code actually shipped
The Claude Code MCP docs describe an MCP task as "a long job, such as a report export or a build, that an MCP server runs itself." Claude's tool call returns as soon as the server accepts the job. Claude Code then polls the server for status. The footer shows a count like 1 MCP task, and when the job ends, the transcript says so and the result goes to Claude.
The fine print, straight from the requirements list:
- Version: v2.1.304 or later. The docs call it a public beta in the CLI, and Anthropic turns it on for your session type. There's no separate beta build to install. Updating Claude Code is the whole setup.
- Protocol: your server has to support tasks and connect on MCP protocol revision 2026-07-28. Forcing the legacy client with
MCP_SDK_GENERATION=v1orMCP_PROTOCOL_NEGOTIATION=legacyturns it off. - Not everywhere: no tasks on Bedrock or other third-party providers, with telemetry turned off, in subagents, or in a one-shot
claude -prun. - Survival: a task on a remote server keeps running after you exit, and you get the result by resuming the same session. A local stdio server stops when Claude Code exits, and its tasks stop with it unless the server says otherwise.
Spec vs. Claude Code: what's actually new
Some of today's coverage blurs this part, so here's the timeline.
- Elicitation entered the MCP spec in the 2025-06-18 revision. URL mode, for things like sign-ins and payments, came in 2025-11-25.
- Tasks showed up as an experimental feature in 2025-11-25. In the current 2026-07-28 revision, they moved out of the core spec into an official extension,
io.modelcontextprotocol/tasks, defined in SEP-2663. That redesign replaced the blockingtasks/resultwith polling throughtasks/get, and addedtasks/updatefor sending input back. - Claude Code added elicitation dialogs in v2.1.76 back in March, URL-mode elicitation on 2026-07-28 connections in v2.1.281, and since July it has moved main-conversation MCP calls that run past two minutes into the background (per the changelog). What's new today is real server-side tasks, plus elicitations that come from inside a running task.
One correction to how this is being described: the result arrives like a notification, but under the hood Claude Code polls with tasks/get. The server author docs say it doesn't use notifications/tasks, tasks/list or tasks/result. Put the outcome in your tasks/get responses.
How I'd use this as a PHP and WordPress developer
I haven't built one yet, but the use cases jumped out.
A long PHPUnit run as a task. Picture an MCP tool called run_test_suite. As a task, the server hands back an ID right away, starts the run, and reports progress through statusMessage, which shows in /tasks. Claude keeps fixing the next thing, and when the suite finishes, the failures come back as the tool result.
A WordPress site audit with an approval gate. This is the one that gets me excited. A wp_site_audit tool crawls the site, checks plugin versions and flags problems. Partway through, it finds three outdated plugins. Instead of guessing, the task moves to input_required and asks. Here's roughly what the server returns from tasks/get, based on the docs:
{
"resultType": "complete",
"taskId": "wp-audit-9c41",
"status": "input_required",
"createdAt": "2026-10-23T20:00:00Z",
"lastUpdatedAt": "2026-10-23T20:06:12Z",
"ttlMs": null,
"inputRequests": {
"approve-staging-updates": {
"method": "elicitation/create",
"params": {
"mode": "form",
"message": "Audit found 3 outdated plugins. Update them on staging?",
"requestedSchema": {
"type": "object",
"properties": {
"apply": { "type": "boolean", "title": "Update on staging" }
},
"required": ["apply"]
}
}
}
}
}Claude Code shows that as a dialog. You answer, Claude Code sends your answer back with tasks/update, and the task carries on. Declining or pressing Esc is also an answer, and the server decides what happens next.
That's a human in the loop that lives in the server, not in a prompt asking the model nicely. ClaudeDevs uses "confirming a refund" as its example, and David Soria Parra, a co-creator of MCP, mentions making sure "a human is accepting an action." After the AI agent supply chain story I wrote up today, that's the kind of control I want baked in.
The gotchas I'd plan around
- Elicitations in tasks need a person. Per the server author docs,
elicitation/createinside a task is served only in interactive terminal sessions. In a non-interactive session, Claude Code asks your server to cancel the task, and your Elicitation hooks don't run. Design your tool so a cancel is safe. - Never ask for secrets in a form. The elicitation spec says servers must not use form mode for passwords, API keys or payment details. Use URL mode for those.
- Answer fast, then work. On HTTP servers, the task answer has to arrive within the normal per-request timer. Accept the job, return the task, then start the heavy lifting.
- Make task IDs durable. After a resume, Claude Code asks about the same ID on a new connection. Store task state in a database table, not PHP memory.
Why this matters for agent workflows
Earlier today I wrote about Cursor agents testing what they build. Same trend, different angle: agents are moving from "answer my question" to "go do the long job and check in when it matters," and MCP Tasks give that a standard shape.
I use Cursor every day (here's my current setup), so I'll be watching whether it and other clients pick up the tasks extension. If they do, a WordPress audit server built once could run in all of them.
If you want an MCP server or a custom integration built around your own systems, let's talk.
FAQ
What version of Claude Code supports MCP Tasks?
v2.1.304 or later, in the CLI. The docs list it as a public beta that Anthropic turns on for terminal CLI sessions, Agent SDK sessions and GitHub Actions runs.
Do I need a beta build?
No. There's no separate beta release on npm. Update Claude Code normally.
Does it work in VS Code or the Claude desktop app?
Not yet. Anthropic's docs say those surfaces don't have MCP tasks, and Anthropic says support is coming to more Claude products soon.
Are elicitations new?
Not entirely. Claude Code has supported MCP elicitation dialogs since v2.1.76 in March 2026. What's new is that a running task can ask for input mid-job.
What MCP spec version do I need?
Your server has to connect on protocol revision 2026-07-28 and support the official tasks extension, io.modelcontextprotocol/tasks.
Can I make Claude wait for the result instead?
Yes. Set CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS to 0 in your settings and Claude waits on every MCP call until it ends.
Does a task keep running if I close Claude Code?
On a remote server, yes. Resume the same session to get the result. A local stdio server stops when Claude Code exits, unless its documentation says the work outlives it.
Sources
- ClaudeDevs on X, "We're adding support for MCP Tasks and Elicitations in Claude" (Oct 23, 2026)
- ClaudeDevs on X, availability in the Claude Code CLI (Oct 23, 2026)
- ClaudeDevs on X, Elicitations example (Oct 23, 2026)
- David Soria Parra on X (Oct 23, 2026)
- Claude Code docs, MCP tasks that run on the server
- Claude Code docs, MCP tasks for server authors
- Claude Code docs, Respond to MCP elicitation requests
- Claude Code docs, Elicitation hook
- Claude Code docs, MCP work when a non-interactive run ends
- Claude Code CHANGELOG.md on GitHub
- npm, @anthropic-ai/claude-code version history
- Model Context Protocol, Tasks extension overview
- Model Context Protocol, SEP-2663: Tasks Extension
- MCP specification 2026-07-28, Key Changes
- MCP specification 2025-11-25, Key Changes
- MCP specification 2025-06-18, Key Changes
- MCP specification 2026-07-28, Elicitation
Need a web developer in Nashville?
PHP, WordPress and Next.js. Free quote, and I usually reply within a couple of hours.
caleb@calebdorris.com and call or text (615) 914-1073