Anthropic switched on MCP Tasks and Elicitations in Claude on Friday evening, giving the Model Context Protocol a way to survive jobs that take minutes or hours instead of seconds.
The mechanics live in the specification rather than in the launch note. A server that expects a long request returns a CreateTaskResult instead of a result, carrying a taskId, an initial status, a time to live and a suggested polling interval. The client then polls tasks/get, and when the task flips to input_required the response carries an inputRequests map that the client answers through tasks/update. Five states exist: working, input_required, completed, failed and cancelled, of which the last three are terminal.
Two design choices deserve more attention than the feature itself. Cancellation is cooperative: a client can send tasks/cancel at any time, and the specification says the server acknowledges the intent but is not obliged to stop, because the work may already be done or may still finish anyway.
The second is duplication. The documentation tells clients that if a task is lost, the transcript will read outcome unknown, followed by the warning that a second call may repeat the work and that the client should ask the server what happened before calling the tool again. That is the double-refund, double-deploy, double-email problem promoted to a protocol concern, and it lands on whoever wrote the server.
Claude Code's implementation is concrete enough to plan around. Tasks are in public beta in the CLI and require version 2.1.304 or later, covering terminal CLI sessions, Agent SDK sessions and GitHub Actions runs, but not the VS Code extension or the desktop app. The server must speak HTTP, stdio or the claude.ai connector on protocol revision 2026-07-28. Any main-conversation MCP call still running after two minutes is moved to a background task, a threshold set by CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS and disabled by setting it to zero. Background tasks do not survive exiting the session; resuming re-asks the server about the task on a new connection.
Anthropic also shipped a fix for the failure mode it just created. Version 2.1.310, released on Saturday, changed the timeout message so that Claude is told not to repeat a call after an elicitation went unanswered, and the extension adds a way to declare tools that are safe to call twice. Every tool that touches money, deploys or messages now needs an idempotency key and a status query, written before shipping rather than after the first duplicate charge.
The caveat is scope. This is vendor documentation and a specification, not an independent test of how often tasks are lost in practice, and client support varies enough that the spec points readers at a support matrix. Servers that never opt in simply return synchronous results.
The direction of travel is clear either way. Agent platforms are being built for jobs that outlive a session, and the boring parts, from durable handles to resumable polling and duplicate suppression, are now part of the contract rather than a quality-of-life feature each vendor invents alone.
Comments (0)
Log in to join the discussion
Log InNo comments yet