Morning Edition LIVE
Vol. I · No. 1
Est.
MMXXVI

The A.I. Beat

Dispatches from the frontier of machine intelligence
Three
Dollars
← Front page Code August 1, 2026 · 5 min read
Code

MCP 2.0 Goes Stateless, and It Actually Matters This Time

The Model Context Protocol's biggest overhaul since launch ditches persistent connections, and Simon Willison is suddenly interested again.
MCP 2.0 Goes Stateless, and It Actually Matters This Time

When Anthropic launched the Model Context Protocol last November, it had an adoption problem disguised as an architecture problem. The original spec required persistent server processes. You’d spin up an MCP server, keep it running, maintain state across requests. For simple tool integrations, this was overkill.

The 2026-07-28 specification changes that. MCP 2.0 is stateless by default.

This isn’t just a technical tweak. It’s the difference between “I need to set up infrastructure” and “I can write a Python function.” The new spec lets you expose tools to LLM agents without thinking about process management, connection pooling, or any of the stuff that makes simple ideas complicated.

Simon Willison, who’s been notably quiet about MCP since the initial launch, called this “the most significant change to the MCP spec since it first launched.” More telling: it got him building again. He shipped two new projects on the same day the spec dropped.

The first is mcp-explorer, which does what it sounds like. The second is datasette-mcp, which exposes Datasette’s capabilities through MCP tools. Both work because stateless MCP removed the friction that made building feel like a chore.

What actually changed

The original MCP required servers to maintain connections and state. If you wanted to expose three Python functions as tools, you needed to wrap them in server logic, handle lifecycle management, deal with reconnection scenarios. It wasn’t hard, exactly. It was just enough friction to make you think twice.

Stateless MCP treats each tool call as independent. The client sends a request, the server responds, nothing persists between calls. If you need state, you handle it yourself, the same way you would with any API.

This matters because most tool integrations don’t need persistent state. They need to execute a function and return a result. The old spec made you build infrastructure for capabilities you didn’t use.

The timing is interesting

MCP launched eight months ago. That’s enough time to see what people actually build, where they get stuck, what gets abandoned halfway through. Anthropic doesn’t publish adoption metrics, but the shift to stateless suggests the original model wasn’t working for the use cases people cared about.

The specification itself is more carefully versioned now. Instead of “MCP 2.0,” it’s “the 2026-07-28 Model Context Protocol specification.” That’s the kind of naming you use when you expect to iterate, when you’re planning for multiple revisions rather than hoping this one sticks.

DeepSeek also dropped V4 Flash this week, a 304B parameter model that costs $0.14 per million input tokens and apparently punches above its weight class. Artificial Analysis ranks it ahead of models twice its size. That’s relevant because cheap, capable models make agent frameworks more practical, and agent frameworks create demand for better tool protocols.

Meanwhile, Willison and Jesse Vincent’s Prime Radiant lab released smevals, a framework for running eval suites across different model configurations. You can install it with uvx smevals and start testing prompts and model combinations immediately. It’s another stateless tool, another example of infrastructure getting out of the way.

What this enables

The stateless shift makes MCP viable for the scenarios where it should have been easy from the start. Want to expose your database queries as tools? Write functions that take parameters and return results. Want to integrate a company API? Same thing. No server process, no connection management, just the logic that matters.

Willison also shipped a new capability in datasette-agent that lets tools run JavaScript directly in the user’s browser through await context.browser_task(). That’s the kind of thing you build when the underlying protocol isn’t fighting you.

This doesn’t suddenly make MCP the standard for LLM tool integration. It has competition from function calling APIs, from custom agent frameworks, from people who just write Python and call it a day. But it does make MCP competitive in situations where it previously wasn’t worth the setup cost.

The real test is what ships in the next few months. Stateless MCP makes it easier to build. Whether it makes it easier to build things people want is still open.

coding developer tools