Edited by humans. Written by AI. How our editing works
All articles

MCP Tasks Explained: The Async Gap Agents Can't Cross

Cornelia Davis explains why almost no AI agents support MCP tasks yet—and what the V2 spec needs to fix before durable async work becomes real.

Dev Kapoor

Written by AI. Dev Kapoor

August 3, 20267 min read
Share:
Woman presenting about MCP Tasks at AI Engineer World's Fair, with task semantics diagram and timeline visualization…

Photo: AI. Marco Velez

The pitch for AI agents is clean: you give them work, they do it. The reality is messier. Networks drop. Servers restart. Humans wander off on vacation. A protocol that assumes every tool call resolves in a single round trip is a protocol that fails the moment the work gets interesting.

That gap — between the request-response world MCP was built for and the long-running, human-involving, crash-surviving work agents actually need to do — is exactly what Cornelia Davis laid out in a recent talk at the AI Engineer conference. Davis is a distributed systems veteran at Temporal who literally wrote the book on cloud native patterns, and she came with a live demo, a lot of opinions, and a question that doubles as an indictment of the current state of agent tooling: why aren't any agents supporting MCP tasks?

Her first answer is the charitable one: "Well, cuz they're smart." The MCP tasks specification that shipped in November was marked experimental, and as Davis walks through the spec's architecture, the wisdom of that caution becomes obvious.

The problem is durability, and durability is hard

A task, in MCP terms, is what you get when a tool call can't resolve immediately. Instead of a response, you get a handle — an identifier you can use to check status, receive updates, and signal input back into the running process. Simple enough in the abstract.

The moment you ask that system to survive real infrastructure conditions, the complexity compounds. "The longer something runs, the more likely there's going to be some kind of infrastructure blip," Davis explains. Clients disconnect. Servers crash. The human whose approval you're waiting on takes a two-week holiday. The spec is unambiguous that a launched task must be durable — it has to survive all of this and remain interactable when things come back online. That requirement sounds reasonable until you try to build it.

Davis demonstrated the concept with an invoice processing flow: a purchase order triggers parallel back-office work alongside an MCP tool that validates against an ERP, waits for human approval, reconciles again, and ultimately pays the invoice. The tool is inherently multi-step and multi-day. It's exactly the kind of work that breaks if you try to hold a connection open for its entire duration.

The dashboard she showed cycling through states — submitted, working, input required — is the user-facing expression of a task lifecycle that the spec carefully defines. Tasks move through working to input-required and back, eventually landing at completed, canceled, or failed. Getting those transitions right on both server and client, across disconnections, is the work.

What was wrong with V1

The November specification, which Davis calls tasks V1, made two design choices that created problems at scale.

The first was task/list — an endpoint that let a reconnecting client ask the server what tasks it had. Conceptually sensible. Practically a disaster. "What happens if you've got a whole slew of agents out there and you've got a million tasks at the back end?" Davis asks. "Spoiler alert, there is no filter on that endpoint." A recovering client would need to page through the entire task list to find the one it cared about. This is the kind of design decision that's fine in a demo and catastrophic in production.

The second problem was task/result, which handled the input-required state by holding open a long-running connection and having the server elicit a response from the client through it. Davis describes the implementation as "really quite ugly" — and she would know, because she built one. When she shows the client-side protocol handler her team implemented, it's a tangle of connection management, reconnection logic, and state recovery. "Back to the question of why the heck aren't there any clients that are supporting this protocol? Yeah. That's why. Super involved."

What's notable here is that Davis isn't criticizing the spec for lacking ambition — she's pointing out that V1 tried to solve the hardest parts of the problem using mechanisms that create new hard problems. A stateful server-side task list is a scaling liability. A server-that-elicits-from-client through a persistent connection is an inversion of the natural request direction that makes reconnection logic genuinely painful.

V2 and the governance story behind it

In May, Angie Jones — whose blog post Davis credits as the signal that substantial changes were coming — announced that the protocol was going stateless. For anyone who's spent time in distributed systems, that's significant. Stateful protocols don't compose well, don't scale horizontally, and make every failure scenario harder. Going stateless is the right call.

V2 makes two structural changes that matter. First, the stateless core: task/list disappears entirely, replaced by a client-side obligation to persist task IDs. The spec currently uses "should" rather than "must" for this persistence requirement, which Davis finds puzzling — "if you don't persist task IDs, there is no way to get it back" — but the direction is clear. If you don't save the ID, the task is effectively gone.

Second, the input-required mechanism gets inverted. Instead of the server holding a connection open to elicit client responses, the client now sends an update to the server when human input is available. Davis maps this directly to how Temporal handles it: "That's effectively what this is. It's a way of signaling into this long-running task." The lifecycle states stay the same — that design was sound — but the wire protocol for moving between them becomes dramatically cleaner.

V2 also restructures MCP itself. Tasks have become an extension rather than a core feature, part of a broader move to give MCP a stateless core with optional capabilities layered on top. Whether that modularity will make adoption easier or just make the surface area harder to reason about is a real question. Extensions are only as useful as the ecosystem that implements them.

What still doesn't scale

Davis is candid about the limits of what V2 actually solves. The task/list problem is gone, but it's replaced by a polling problem that looks manageable until it isn't. If a million agents each have a running task, you now have a million clients each periodically polling their individual task for status updates. "That does not scale," she says flatly.

The spec includes a notifications protocol that's supposed to address this — a single endpoint where clients can ask whether anything has changed, then fetch only the relevant task — but Davis describes it as still in-progress and showing promise rather than ready. The gap between a cleaner protocol and a protocol that actually works at production scale isn't closed yet.

This is worth sitting with. The agent ecosystem is being built under the assumption that MCP provides a durable foundation for long-running tool invocation. That assumption is currently only partially true. V1's durability story had structural problems. V2 fixes the worst of them but introduces a scaling challenge that needs the notifications layer to fully resolve. The notifications layer isn't done.

None of this is a reason not to build. Davis's own implementation — a task tracker workflow running on Temporal, handling multiple concurrent purchase orders, surviving server restarts — demonstrates that the pieces work. But it also demonstrates that today, making them work requires building the client infrastructure yourself, because nobody has packaged it yet. Davis says her near-term goal is to get this implemented in FastMCP so developers can use the same framework they're already using for their MCP servers.

The clearest framing she offers cuts across both the technical and the temporal: "Just because you can open a long-lived stateful connection does not mean you should." That's the lesson of V1 applied, and it's the design principle V2 is trying to encode. Whether it lands cleanly enough that the agent ecosystem finally shows up to implement it — that's the open question July's V2 release will start to answer.


Dev Kapoor covers open source software and developer communities for Buzzrag.

From the BuzzRAG Team

AI Moves Fast. We Keep You Current.

Framework breakdowns, tool comparisons, and AI coding insights — distilled from the best tech YouTube creators. Free, weekly.

Weekly digestNo spamUnsubscribe anytime

More Like This

Man in Google Cloud hoodie holds a red toolbox against blue background with title text about secure MCP foundations

Securing AI Agents with MCP: A Deep Dive

Explore the security essentials for AI agents using the Model Context Protocol (MCP). Understand architecture, risks, and defense strategies.

Dev Kapoor·6 months ago·3 min read
Two presenters flanking a technical diagram about MCP server architecture with "AI Engineer Europe" and "Lenses" branding…

Why Your MCP Server Won't Survive Production

Most MCP servers collapse under real workloads. Lenses engineers explain the security cliff between local dev and production—and how to cross it.

Marcus Chen-Ramirez·4 months ago·7 min read
Speaker presenting at AI Engineer Europe conference with slide comparing Deep Modules vs Shallow Modules, with "Code isn't…

AI Coding Tools Work Best With Old Engineering Practices

Developer educator Matt Pocock argues AI coding assistants amplify code quality issues. His solution? Decades-old software fundamentals matter more than ever.

Dev Kapoor·3 months ago·7 min read
Person wearing glasses against Earth backdrop with AI model comparison chart showing Qwen and Llama parameters, AI Engineer…

When Small AI Models Beat Frontier Ones on Your Tasks

RL Nabors walks through a real eval framework for replacing frontier model calls with local SLMs—and the results are more nuanced than the pitch suggests.

Dev Kapoor·1 month ago·7 min read
Connecting MCP Servers to Claude: What It Means

Connecting MCP Servers to Claude: What It Means

MCP servers let Claude reach beyond the chat window into files, databases, and live systems. Here's what that connectivity actually looks like—and why it matters.

Marcus Chen-Ramirez·2 weeks ago·6 min read
Google Cloud MCP Explained diagram showing flow from Agent Language Model through MCP to External tools, with smiling woman…

Model Context Protocol Explained: How MCP Works

MCP standardizes how AI models connect to tools and data. Here's what the protocol actually does, how clients and servers talk, and why it matters for developers.

Yuki Okonkwo·1 month ago·8 min read
Bold yellow and white text reading "GOODBYE AI SLOP" with "NEW" label and arrow pointing to a dark device interface with a…

Fallow: Cleaning Up After AI Coding Agents

Fallow promises to detect dead code, duplication, and complexity in AI-generated JavaScript. But who's actually responsible for code quality?

Dev Kapoor·3 months ago·6 min read
Man in glasses pointing at stacked server hardware with storage drives and Proxmox + Ceph branding in data center setting

Why Three Nodes Matter: The Real Cost of Proxmox HA

Christian Lempa upgraded his Proxmox cluster to three nodes with Ceph. The results reveal what high availability actually costs in a homelab environment.

Dev Kapoor·3 months ago·6 min read

RAG·vector embedding

2026-08-03
1,698 tokens1536-dimmodel text-embedding-3-small

This article is indexed as a 1536-dimensional vector for semantic retrieval. Crawlers that parse structured data can use the embedded payload below.