{
  "video": {
    "id": "s4r6nk5WsZw",
    "title": "MCP Tasks (async): Why Aren't Any Agents Supporting Them? — Cornelia Davis, Temporal",
    "duration": 1434,
    "upload_date": null,
    "channel": "AI Engineer",
    "source": "AI Engineer"
  },
  "analysis": {
    "video_id": "s4r6nk5WsZw",
    "title": "MCP Tasks (async): Why Aren't Any Agents Supporting Them? — Cornelia Davis, Temporal",
    "one_liner": "Cornelia Davis of Temporal explains why no MCP client has shipped support for MCP tasks (async, long-running tools) — the November V1 spec was experimental, stateful and painful to implement — and demos a working client plus what the stateless V2 spec coming in July changes.",
    "summary": "Davis grounds MCP tasks in a concrete purchase-order agent whose invoice-paying step is a long-running MCP tool with ERP validation, human-in-the-loop approvals and retries. She argues the V1 tasks spec (November, marked experimental) is why no clients implemented it: it's stateful via tasks/list, and it tunnels 'input required' over a long-lived connection where the server elicits a response from the client, which is brutal to make durable. She live-demos her own MCP client implementation (built as a workflow, with FastMCP on the client side) surviving servers being down mid-flight, then walks through the V2 changes announced in May — stateless core, MCP restructured into core plus extensions with tasks as an extension, tasks/list removed, and a new client-to-task update/signal endpoint — while the task lifecycle stays unchanged.",
    "key_points": [
      "MCP tasks let you invoke a tool and get back a handle instead of a response; the spec requires that once launched, a task must be durable — surviving client crashes, server crashes, dropped connections, and humans who go on vacation mid-approval.",
      "The demo use case: a purchase order records goods received, then in parallel runs back-office work (update inventory, send notifications) and pays invoices; invoicing is the MCP tool, itself a multi-step flow of ERP validation → human approval → ERP reconciliation → more human-in-the-loop.",
      "Live demo accidentally proved the point — she submitted a PO before starting the MCP server and client, and the submission still went through and completed, cycling through submitted → working → input required, then retrying several times against the ERP before paying.",
      "V1's two flaws: tasks/list makes the protocol stateful (used to recover tasks after a client disconnects) with no filter on the endpoint, so recovering one task among a million means paging through a million; and tasks/result keeps a long-running connection open over which the server elicits input from the client.",
      "V2 (blog by Angie Jones, developer experience at the Agoric AI Foundation, where MCP now lives, posted in May; spec due in July): stateless core, MCP restructured into core plus extensions with tasks becoming an extension, tasks/list removed, and a new client-side update endpoint that is effectively Temporal's 'signal' into a long-running task.",
      "The task lifecycle (working → input required → back to working → completed/cancelled/failed) is unchanged in V2 and she calls it sound; server-side implementation means mapping task lifecycle states onto your own domain state machine.",
      "With tasks/list gone, the spec says clients 'should' persist task IDs while also stating that without the ID there is no way to get the task back — she questions why that isn't an all-caps MUST.",
      "The V1 reference implementation handled 'input required' FIFO on the client side, so with many tasks in flight you could only respond to the first one; her own client protocol implementation works around that gap.",
      "Even V2 doesn't scale to millions: a million clients polling gets against a million tasks doesn't work. The spec's notifications protocol — one endpoint answering 'has something changed, and which one?' so clients only then pull that task — is the promising fix she hasn't finished exploring."
    ],
    "takeaways": [
      "Don't wait for V1 task support in clients — the November spec is experimental and being materially replaced; build against the V2 shape (stateless, no tasks/list, update endpoint for input) instead.",
      "Persist task IDs on the client side and treat it as mandatory, not optional: once tasks/list is gone, an unpersisted task ID is an unrecoverable task.",
      "Back your long-running MCP tool with a durable execution engine so the task survives server, client and network failures — and map the MCP task lifecycle states onto your own domain state machine on the server side.",
      "If you implement an MCP client for tasks, don't inherit the reference implementation's FIFO handling of 'input required' — handle multiple concurrent tasks awaiting human input.",
      "Plan for scale beyond per-task polling: watch the notifications protocol so clients ask 'what changed?' at one endpoint rather than each polling its own task."
    ],
    "topics": [
      "mcp",
      "agents",
      "async",
      "durable-execution",
      "human-in-the-loop",
      "distributed-systems",
      "protocols"
    ],
    "tools": [
      "MCP (Model Context Protocol)",
      "MCP tasks",
      "Temporal",
      "FastMCP",
      "Agoric AI Foundation",
      "Cloud Foundry",
      "Kubernetes",
      "GitOps",
      "Weave Works",
      "MCP UI"
    ],
    "quotes": [
      {
        "text": "the first answer to that question is, well, cuz they're smart. The people who are building those clients are smart.",
        "at": "00:30",
        "url": "https://www.youtube.com/watch?v=s4r6nk5WsZw&t=30s"
      },
      {
        "text": "So remember I said it has to work even when the servers aren't running. I forgot to show you here that what I'm doing in this these two windows...",
        "at": "07:40",
        "url": "https://www.youtube.com/watch?v=s4r6nk5WsZw&t=460s"
      },
      {
        "text": "Spoiler alert, there is no filter on that endpoint. So, you would have to go through a million tasks to find the one that you're looking for that you want to interact with.",
        "at": "13:52",
        "url": "https://www.youtube.com/watch?v=s4r6nk5WsZw&t=832s"
      },
      {
        "text": "as somebody who's been working in the microservices world for a long time, stateful protocols are the absolute worst thing in large-scale distributed systems.",
        "at": "16:21",
        "url": "https://www.youtube.com/watch?v=s4r6nk5WsZw&t=981s"
      }
    ],
    "words": 4585
  },
  "summary_url": "/#s4r6nk5WsZw",
  "transcript": {
    "html": "/transcripts/s4r6nk5WsZw.html",
    "txt": "/transcripts/s4r6nk5WsZw.txt",
    "vtt": "/transcripts/s4r6nk5WsZw.vtt"
  }
}