On 2026-07-28 the Model Context Protocol (MCP) specification was updated to a stateless format — commonly referred to as MCP 2.0. MCP was first introduced by Anthropic in November 2024 and drew substantial interest through 2025. While other approaches such as Anthropic's Skills and more general agent harnesses later appeared more flexible, this latest specification has renewed the author's interest.
The main motivation for the change is simplification: stateless MCP reduces implementation complexity for both clients and servers by eliminating server-side session tracking. That makes it easier to build scalable web applications because you no longer need to maintain Mcp-Session-Id values or route a session to the same backend machine.
What changed in practice?
The legacy, stateful MCP required two HTTP requests: an initialize call that returned a Mcp-Session-Id, followed by a tools/call request that included that session id in the headers. The article showed example payloads for both calls.
Stateless MCP replaces that pattern with a single HTTP request. Clients include MCP-Protocol-Version, Mcp-Method and Mcp-Name in request headers, while client info is passed in the request body under _meta.io.modelcontextprotocol/clientInfo. The article illustrated this with a single POST /mcp invocation for a "search" tool.
According to the author, this single-request design is much cleaner for client and server implementations and better suited to scalable deployments.
Three new tools and implementations
The author built three MCP-related projects to explore the stateless spec:
mcp-explorer (Python CLI)
mcp-explorer is a stateless Python command-line tool for interactively probing MCP servers. It can be run without installation via uvx, for example:
uvx mcp-explorer list https://agentic-mermaid.dev/mcp
That command queried Ade Oshineye's agentic-mermaid.dev demo MCP and returned a list of available tools (execute, describe_sdk, render_svg, render_ascii, render_png, etc.) with short descriptions and parameter schemas.
Inspecting a tool (uvx mcp-explorer inspect render_svg) returns detailed metadata and JSON schemas. Calling a tool (uvx mcp-explorer call ...) lets you pass arguments; in the example a Mermaid diagram source was sent and the server returned an SVG. The author notes building a CLI like this is an effective way to learn a specification, even if an agent generates much of the code.
datasette-mcp (Datasette plugin)
datasette-mcp is a Datasette plugin that adds a /-/mcp endpoint to any Datasette instance. After multiple attempts, the author finally produced a release-worthy version thanks to the stateless MCP changes.
It exposes three tools: list_databases(), get_database_schema(database_name) and execute_sql(database_name, sql). execute_sql() is read-only for now. Wiring these tools into an agent or chat model (e.g., ChatGPT or Claude) lets those clients run SQL queries against a hosted Datasette instance.
The author runs it on the Datasette mirror of his blog at datasette.simonwillison.net/-/mcp and documented how to connect it to ChatGPT and Claude. In a shared Claude session the agent executed seven separate SQL queries to answer the question "what has Simon said recently about MCP?".
llm-mcp-client (alpha)
llm-mcp-client is an alpha MCP integration for the author's LLM tooling. The article shows how it can be installed and used (e.g., llm install llm-mcp-client and MCP("https://datasette.simonwillison.net/-/mcp")).
In a demonstration, the prompt "count the notes" led the client to run the necessary queries and return that there are 151 notes; the output included a reasoning trace (the author used LLM 0.32rc2 for the example). The author plans further integration work, potentially bringing this into LLM core and experimenting with Datasette Agent and llm-coding-agent.
Security and practical benefits
The author previously wrote about MCP security risks such as prompt injection and data exfiltration, noting that letting end users assemble arbitrary tools can push responsibility for preventing leaks onto users. General agents with shell and curl access are even harder to secure.
MCP — and particularly the stateless variant — is easier to reason about in terms of agent capabilities and potential failure modes. Well-defined, auditable tools are simpler to control than granting arbitrary command or network access, so the author plans to favor MCP for sensitive applications built on top of LLMs.
Summary
The 2026-07-28 stateless MCP specification substantially simplifies MCP implementations and operational concerns. The author's three projects (mcp-explorer, datasette-mcp, llm-mcp-client) demonstrate practical benefits: easier inspection and invocation of tools, improved scalability, and clearer auditability — qualities that matter for secure and maintainable agent integrations.



