---
schema_version: "newruntime-agent-readable-v0.2"
type: "post"
stable_id: "post:simon-stateless-mcp-practitioner-reset"
slug: "simon-stateless-mcp-practitioner-reset"
title: "Stateless MCP Makes Small, Auditable Agent Tools Practical Again"
description: "Simon Willison's mcp-explorer, datasette-mcp, and llm-mcp-client show how the stateless specification lowers implementation cost and narrows agent capabilities."
retrieval_nugget: "Simon Willison's mcp-explorer, datasette-mcp, and llm-mcp-client show how the stateless specification lowers implementation cost and narrows agent capabilities. The MCP specification explains what changed. Simon Willison's response shows what the change enables for an individual builder. The old HTTP flow needed an initialization request, a server-issued session ID, and a later tool call tied to that session."
status: "published"
published_at: "2026-08-01"
updated_at: "2026-08-01"
record_date: "2026-08-01"
date_kind: "published_at"
topics: ["mcp","developer-tools","security","local-agents"]
source_urls: ["https://simonwillison.net/2026/Jul/31/stateless-mcp/","https://github.com/simonw/mcp-explorer","https://github.com/simonw/datasette-mcp"]
visuals: [{"id":"simon-stateless-mcp-practitioner-reset","kind":"editorial-diagram","role":"hero","src":"https://newruntime.com/images/posts/simon-stateless-mcp-practitioner-reset.webp","alt":"Hand-drawn practitioner workbench where one stateless request powers an MCP explorer, a read-only Datasette endpoint, and a small-model client inside a capability boundary.","caption":"A smaller protocol surface makes MCP easier to inspect, implement, and constrain than a general shell with open network access.","credit":"New Runtime synthesis from Simon Willison","source_url":"https://simonwillison.net/2026/Jul/31/stateless-mcp/","generated_with":"gemini-3.1-flash-image","width":1600,"height":900,"legend":[{"label":"Probe","description":"mcp-explorer lists, inspects, and calls tools without installing a persistent client."},{"label":"Expose","description":"datasette-mcp publishes three narrow, read-only database tools through one endpoint."},{"label":"Constrain","description":"Explicit tool capabilities are easier to audit than arbitrary shell and network access."}]}]
telegram_message_id: 2896
telegram_url: "https://t.me/qwgai/2896"
telegram_message_ids: [2896,2897]
telegram_delivery_mode: "text_then_media"
telegram_media_url: "https://t.me/qwgai/2897"
routes: {"html":"https://newruntime.com/posts/simon-stateless-mcp-practitioner-reset/","markdown":"https://newruntime.com/posts/simon-stateless-mcp-practitioner-reset.md","json":"https://newruntime.com/posts/simon-stateless-mcp-practitioner-reset.json"}
source_format: "markdown"
---

# Stateless MCP Makes Small, Auditable Agent Tools Practical Again

## Retrieval answer

Simon Willison's mcp-explorer, datasette-mcp, and llm-mcp-client show how the stateless specification lowers implementation cost and narrows agent capabilities. The MCP specification explains what changed. Simon Willison's response shows what the change enables for an individual builder. The old HTTP flow needed an initialization request, a server-issued session ID, and a later tool call tied to that session.

The MCP specification explains what changed. Simon Willison's response shows what the change enables for an individual builder.

The old HTTP flow needed an initialization request, a server-issued session ID, and a later tool call tied to that session. The stateless form collapses the common case into one request. There is no sticky backend, no session table, and less client machinery to get wrong.

Willison built three projects in a week around that smaller surface. `mcp-explorer` is a Python CLI for listing, inspecting, and calling tools. It can run directly with `uvx mcp-explorer`, which makes it useful as a protocol probe before an MCP server is connected to a larger agent.

`datasette-mcp` adds an MCP endpoint to Datasette with three tools: list databases, read a schema, and execute read-only SQL. `llm-mcp-client` connects those servers to the LLM CLI. Together they form a compact path from inspectable data to a constrained model-facing capability.

The security argument is more important than the convenience. General agents with shell and unrestricted network access are flexible, but their possible actions are difficult to enumerate. A narrow MCP server presents explicit tools and schemas that smaller local models can use and operators can audit.

The practical move is to probe a server before trusting it. List its tools, inspect schemas, call them with harmless inputs, and verify authorization and read/write boundaries. Stateless MCP makes that routine cheap enough to belong in CI and operator workflows.
