Stateless MCP: The 2026-07-28 Spec Cuts the Session Overhead

The Model Context Protocol (MCP) just got its most significant update since launch. The 2026-07-28 specification, dubbed "Stateless MCP," eliminates the need for session IDs and two-step handshakes. Simon Willison, who had grown lukewarm on MCP after the rise of agent Skills, built three tools in a week and says the spec "reignited his personal interest."

The Old Way: Two Requests, Server-Side State

Legacy MCP (e.g., the 2025-11-25 spec) required two HTTP requests: first an initialize call to get a Mcp-Session-Id, then a second request to actually invoke a tool. That meant servers had to track session state, complicating scaling and routing.

Here's the old pattern:

POST /mcp HTTP/1.1
Content-Type: application/json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-11-25",
    "capabilities": {},
    "clientInfo": { "name": "my-app", "version": "1.0" }
  }
}

Then:

POST /mcp HTTP/1.1
Mcp-Session-Id: 1868a90c-3a3f-4f5b
Content-Type: application/json
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": { "name": "search", "arguments": { "q": "otters" } }
}

The New Way: One Request, No Session

Stateless MCP collapses this into a single HTTP request. You skip the initialize round-trip and pass the protocol version and method as headers:

POST /mcp HTTP/1.1
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: search
Content-Type: application/json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search",
    "arguments": { "q": "otters" },
    "_meta": {
      "io.modelcontextprotocol/clientInfo": { "name": "my-app", "version": "1.0" }
    }
  }
}

This is cleaner for both clients and servers. No server-side state means you can route requests to any backend instance without sticky sessions. For scalable web apps, that's a huge win.

Willison's Three Proof-of-Concept Tools

1. mcp-explorer: A CLI for Probing MCP Servers

Willison couldn't find a good CLI tool to interactively inspect MCP servers, so he had Codex build mcp-explorer. It's a stateless Python CLI that runs via uvx — no install needed.

List tools on a remote server:

uvx mcp-explorer list https://agentic-mermaid.dev/mcp

That returns a list like:

execute(code: string, timeoutMs?: integer) - Execute Mermaid SDK code
render_svg(source: string, options?: object) - Render Mermaid as SVG
render_png(source: string, scale?: number, background?: string, fitTo?: object, options?: object) - Render Mermaid as PNG
...

Inspect a tool's input/output schema:

uvx mcp-explorer inspect render_svg

Call a tool with arguments:

uvx mcp-explorer call https://agentic-mermaid.dev/mcp render_svg -a source 'graph TD; A-->B' -a options '{"padding":24}'

Pipe to jq .svg -r to get the raw SVG.

2. datasette-mcp: SQL Access for Datasette Instances

Willison's fourth attempt at a Datasette MCP plugin finally shipped thanks to stateless MCP. datasette-mcp adds a /-/mcp endpoint to any Datasette instance. It exposes three tools:

  • list_databases()
  • get_database_schema(database_name)
  • execute_sql(database_name, sql) — read-only for now

He's running it on the Datasette mirror of his blog at datasette.simonwillison.net/-/mcp. He shared a Claude session where he asked "list tables in simonwillison.net" and then "what has Simon said recently about MCP?" — the agent ran 7 separate SQL queries to answer.

3. llm-mcp-client: Official MCP Plugin for LLM

Willison's llm tool finally has an MCP integration. The alpha plugin llm-mcp-client lets you invoke MCP tools directly:

llm install llm-mcp-client
llm -T 'MCP("https://datasette.simonwillison.net/-/mcp")' 'count the notes'

The output included a reasoning trace and the answer: "There are 151 notes." Willison plans to fold this into LLM core once it's stable.

Why Stateless MCP Is a Safety Win

Willison previously flagged MCP's prompt injection risks. But he now argues that giving agents arbitrary shell and curl access is far more dangerous. MCP tools are easier to audit and control, and simple enough that smaller local models can drive them.

> "Giving an agent a shell environment with the ability to access the internet is fraught with risk... MCP tools are easier to audit and control, and simple enough that smaller models that run on a laptop can still drive them reasonably well."

He plans to lean on MCP for sensitive applications going forward.

What to Do Now

If you're building agent tooling, try the new stateless MCP. The spec simplifies client and server implementation. Start with mcp-explorer to probe existing servers, then wire up your own. If you run Datasette, install datasette-mcp and point an agent at it. The barrier to entry just dropped significantly.