← Back
FeaturedTechIndustry#Anthropic#datasette-mcp#llm-mcp-client#mcp-explorer#Model Context Protocol

Stateless MCP 2.0 Arrives: Simon Willison Builds Three Tools, Rekindling Interest in the Protocol

Simon Willison 博客(Atom)T2
07:1308/01, 07:13 AMCommunityRead the original ↗Export MD ↓

Score

77
Information gain8 ×0.3

无状态 MCP 的规范细节、前后对比以及三个新工具均为首次系统性呈现,信息增量高。

Content quality9 ×0.2

作者提供了可直接运行的命令、HTTP 示例与真实会话,技术内容严谨清晰。

Practical value9 ×0.2

mcp-explorer 等工具和 TIL 教程可被开发者立即采用,降低接入 MCP 的门槛。

Timeliness8 ×0.15

针对 2026-07-28 新规范发布后的及时实践反馈,时效性强。

Source reliability9 ×0.15

Simon Willison 是 MCP 生态重要参与者和 Datasette 作者,信源具有高可信度。

Base 85.5 × T2 Source weight ×0.9 = 77

Curation line 70Selected

Why selected

A hands-on report from a leading MCP practitioner, combining protocol analysis, working code, and a security argument.

AI commentary

「As an early MCP evangelist and the creator of Datasette, Simon Willison's renewed enthusiasm is a signal: the stateless spec lowers the integration barrier and could push MCP back into the mainstream of agent tooling. Anyone building agent infrastructure or security-sensitive LLM apps should look at his three tools and his safety argument closely.」

Quick overview

The MCP 2.0 release (2026-07-28 specification) introduces a stateless protocol: instead of two HTTP requests and a server-side session ID, a single request with MCP-Protocol-Version and Mcp-Method headers is enough. Simon Willison was inspired to build three projects: mcp-explorer, a CLI tool for probing MCP servers; datasette-mcp, a Datasette plugin exposing a read-only SQL endpoint for agents; and llm-mcp-client, an alpha plugin adding MCP support to his LLM tool. He argues that MCP tools are easier to audit and control than giving agents arbitrary terminal and curl access, making MCP a safer foundation for sensitive applications.

  • Stateless MCP 2.0 (2026-07-28 spec) lets clients call tools in a single HTTP request, eliminating session IDs and server-side state.
  • Simon Willison built mcp-explorer, datasette-mcp, and llm-mcp-client to validate the new spec.
  • datasette-mcp lets ChatGPT/Claude run read-only SQL queries on a Datasette instance.
  • He sees MCP as easier to audit and safer than giving agents arbitrary shell/curl access.

Full text

Showing the source text; the full translation is being generated.

Tuesday was Stateless MCP day - the rollout of MCP 2.0, or the 2026-07-28 Model Context Protocol specification to use the more formal but less memorable name. This is the most significant change to the MCP spec since it first launched, and has also served to reignite my personal interest in the protocol.

For background: MCP is the Model Context Protocol, which describes a standard way to expose new tools to LLM-powered agent frameworks. It was introduced by Anthropic back in November 2024, had a huge spike of interest through much of 2025, and then became somewhat eclipsed by Skills (another Anthropic invention) when it became apparent that an agent harness with access to a terminal and curl could do most of what MCP did in a more flexible way. I wrote about that in my review of 2025.

I'm coming back around to MCP now. Giving an agent a shell environment with the ability to access the internet is fraught with risk, and requires a strong model that is capable of effectively driving such an environment. 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.

The new stateless MCP specification also greatly decreases the complexity of implementing both clients and servers for the protocol. I built three of those this week!

What's easier with stateless MCP

The best demonstration of the difference between stateful and stateless MCP is in this May 21st blog post that introduced the RC for the new specification. It included a clear before-and-after example.

The older stateful MCP (I'm going to call it "legacy MCP") required two HTTP requests - the first to initialize a session and obtain a Mcp-Session-Id, and the second to actually call the tool:

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"
    }
  }
}

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 stateless way uses a single HTTP request which looks like this:

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 so much cleaner from both a client- and server-side implementation perspective. It's also a better fit for building scalable web applications, since now you don't need to maintain server-side state to keep track of those session IDs, or worry about routing the same session to the same backend machine.

mcp-explorer

I couldn't find a great CLI tool for interactively probing an MCP server, so I had Codex help build my own.

mcp-explorer is the result. It's a stateless Python CLI tool, so you don't even need to install it to try it out - it works with uvx like this:

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

This queries Ade Oshineye's agentic-mermaid.dev demo MCP. The above command returns the following list of tools:

execute(code: string, timeoutMs?: integer) - Execute Mermaid SDK code
  Run JavaScript in an isolated sandbox; return a value.

describe_sdk(family: string, detail?: string) - Describe Mermaid SDK operations
  Return version-matched mutation operations for one diagram family.

render_svg(source: string, options?: object) - Render Mermaid as SVG
  Render a Mermaid source string to themeable SVG. Returns { ok, svg }.

render_ascii(source: string, useAscii?: boolean, targetWidth?: integer, options?: object) - Render Mermaid as text
  Render a Mermaid source string to text. Returns { ok, text }.

render_png(source: string, scale?: number, background?: string, fitTo?: object, options?: object) - Render Mermaid as PNG
  Rasterize a Mermaid source string to PNG. Returns { ok, png_base64 }.
...

Then to inspect a tool:

uvx mcp-explorer inspect render_svg

This outputs a whole bunch of information, including the JSON schema of the inputs and outputs.

To call that tool and pass arguments to it:

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

Which returns:

{"ok":true,"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" width=...

To get just the raw SVG try adding | jq .svg -r to that command. I got back this image:

SVG of as A box on top of a B box with an arrow from A to B

There are a few more commands in the README, but you get the general idea. I find building CLI tools like this to be a really productive way to get familiar with a specification, even if an agent writes most of the actual code.

datasette-mcp

The second project is datasette-mcp, a Datasette plugin which adds a /-/mcp endpoint to any Datasette instance.

This is probably the fourth time I've tried building this plugin, but thanks to the new stateless MCP specification I finally have a version that feels good to release.

It provides just three tools: list_databases(), get_database_schema(database_name), and execute_sql(database_name, sql). They do exactly what you would expect them to do - though execute_sql() is read-only for the moment.

Wire these into an agent, or a chat tool like ChatGPT or Claude, and they'll gain the ability to run SQL queries against your hosted Datasette instance.

So far I'm running it on the Datasette mirror of my blog, at datasette.simonwillison.net/-/mcp. It took a bit of fiddling to figure out how to attach that to ChatGPT and Claude, but I got there in the end. Here's a new TIL showing exactly how to do that.

Here's a shared Claude session where I asked it:

list tables in simonwillison.net

And then:

what has Simon said recently about MCP?

It ran 7 separate SQL queries to figure out the answer.

llm-mcp-client

My LLM tool is long overdue for an official MCP integration. The new alpha llm-mcp-client plugin is my attempt at exactly that:

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

Here's the output (including reasoning trace, I'm using LLM 0.32rc2):

Considering note count

I see the question "count the notes" is probably asking me to tally up blog notes. It could also mean published notes or drafts, so there's some ambiguity there. I'll need to figure out the total number of notes, likely by querying the count for both published notes and drafts to get a clear answer. Let's execute that count!

There are 151 notes.

And the output of llm logs for that prompt.

Once this is fully baked, I'm considering bringing it directly into LLM core. I'm excited to experiment with MCP in Datasette Agent and llm-coding-agent as well.

MCP is a safer way to build with agents

A few months after MCP was first released, I wrote Model Context Protocol has prompt injection security problems, where I noted that the pattern of having end users mix and match tools pushed responsibility for avoiding data exfiltration attacks out to the users themselves. I hadn't coined the Lethal Trifecta yet, but that was absolutely what I had in mind.

Then general agents with arbitrary shell and curl access came along, and that's so much harder to keep secure!

Something I've come to appreciate about MCP is that it's much easier to reason about agent capabilities and what might go wrong than with arbitrary command execution in an open network environment - the default for most of today's general and coding agent tools.

I plan to lean into MCP a whole lot more when I'm building sensitive applications on top of LLMs.

Tags: projects, ai, datasette, mermaid, generative-ai, llms, llm, anthropic, model-context-protocol

Related items

89

Five-dimension score

Information gain9 ×0.3

基于真实用户行为数据的研究成果,提供了关于AI如何改变工作内容的新定量证据。

Content quality8 ×0.2

结构清晰,关键发现明确,但可进一步深入细分行业差异。

Practical value8 ×0.2

为企业管理层、HR和组织设计者提供了直接可参考的数据洞察。

Timeliness10 ×0.15

研究刚于近日发布,紧贴当前AI应用热潮。

Source reliability10 ×0.15

来源为OpenAI官方研究,数据可靠且权威。

Base 89 × T1 Source weight ×1 = 89

Curation line 60Selected

11:30OpenAI:News(RSS)T1RSS

FeaturedOpenAI Research: AI Is Redefining Job Boundaries

OpenAI研究:AI正在重新定义工作边界

If you care about the real impact of AI on work, this research is a must-read. Instead of theory, it uses data to show how ChatGPT users expand their task scope, offering direct insights for HR, managers, and every professional looking to upgrade their skills.

AIIndustry#ChatGPT#OpenAI#Labor Market Impact
87

Five-dimension score

Information gain8 ×0.3

提供了来自 AI 原生企业内部 CFO 的一手经验,信息增量较高。

Content quality9 ×0.2

内容结构清晰,来自权威高管,质量上乘。

Practical value8 ×0.2

为财务高管提供了可落地的经验与注意事项,实用价值强。

Timeliness9 ×0.15

刚发布的官方内容,时效性高。

Source reliability10 ×0.15

信源为 OpenAI 官方博客,可靠性极高。

Base 86.5 × T1 Source weight ×1 = 87

Curation line 60Selected

01:00OpenAI:News(RSS)T1RSS

FeaturedOpenAI CFO Shares Five Lessons for Building an AI-Native Finance Function

OpenAI CFO 分享构建 AI 原生财务职能的五大经验

As an editor, I find this article uniquely valuable because it comes from a finance chief at an AI leader, not an external consultancy, making it highly practical. I recommend it to finance digitalization leads, CFOs, and anyone interested in AI-driven transformation.

FinanceIndustry#AI-native finance#AI ROI#OpenAI
87

Five-dimension score

Information gain8 ×0.3

首次系统性报告智能体AI在科学计算中的具体应用案例,信息增量较高。

Content quality9 ×0.2

来自权威机构OpenAI,内容结构清晰,案例详实,质量上乘。

Practical value8 ×0.2

为科研人员和决策者提供了可操作的参考和路线图,实用价值显著。

Timeliness9 ×0.15

报告发布日期为近期,紧贴AI agent热门趋势,时效性强。

Source reliability10 ×0.15

OpenAI作为AI领域头部机构,其官方报告可信度极高。

Base 86.5 × T1 Source weight ×1 = 87

Curation line 60Selected

01:00OpenAI:News(RSS)T1RSS

FeaturedScientific Computing in the Age of Agentic AI: OpenAI Releases New Field Report

智能体AI时代下的科学计算:OpenAI发布新领域报告

This report is one of the most practical analyses in the current AI agent wave, especially suitable for practitioners in computational biology and drug discovery. It answers the key question 'What can AI agents do besides writing code?' and directly demonstrates productivity gains in complex scientific computing.

AIIndustry#AI Coding Agent#OpenAI#Genomics
87

Five-dimension score

Information gain8 ×0.3

语音人类自然度评估标准新工具,信息增量高,此前缺乏同类开源基准。

Content quality9 ×0.2

内容详实,技术细节清晰,附带使用说明与开源代码,质量高。

Practical value9 ×0.2

直接可用于模型开发与对比,实用价值极高,尤其对语音相关团队。

Timeliness8 ×0.15

语音AI快速发展期,评测需求强烈,发布时机恰逢其时。

Source reliability10 ×0.15

Hugging Face官方博客,权威信源,工具已开源可验证。

Base 87 × T1 Source weight ×1 = 87

Curation line 60Selected

08:00Hugging Face:Blog(RSS)T1RSS

FeaturedReal World VoiceEQ: Measuring the Human Quality of Voice AI

Real World VoiceEQ:量化语音AI的人类自然度

What's noteworthy is that this benchmark truly focuses on the soft metric of 'human-likeness', not traditional speech recognition rate or MOS scores. For teams working on speech synthesis, voice cloning, or voice interaction, this is a highly practical reference tool that quickly identifies model deficiencies in emotion, prosody, etc. However, language support is currently limited; looking forward to future expansion.

TechIndustry#Hugging Face#Real World VoiceEQ#Naturalness Evaluation
85

Five-dimension score

Information gain8 ×0.3

提出新颖的AI ROI量化框架,对当前缺乏标准化评估方法的企业具有较高的信息增量。

Content quality7 ×0.2

框架逻辑清晰,但缺乏具体案例或数据支撑,偏概念性介绍。

Practical value9 ×0.2

直接面向企业实际痛点,可操作性强,对投资决策有明确指导意义。

Timeliness10 ×0.15

在当前AI投资泡沫与理性化需求背景下,该内容极其及时。

Source reliability9 ×0.15

来自OpenAI官方渠道,由CFO署名,权威性高。

Base 84.5 × T1 Source weight ×1 = 85

Curation line 60Selected

18:00OpenAI:News(RSS)T1RSS

FeaturedOpenAI Introduces AI Age Scorecard: A New Way to Measure ROI

OpenAI 推出AI时代记分卡:衡量投资回报的新方法

This blog post hits a sore point in the current AI industry: how to quantify input-output. For enterprise decision-makers deploying or planning large-scale AI, it helps avoid herd mentality. My personal advice: try defining 'useful work' based on your own business scenario, and avoid designing metrics that are merely formality.

TechIndustry#AI Scorecard#AI Deployment Strategy#OpenAI
85

Five-dimension score

Information gain8 ×0.3

提出了新颖的'每美元有用功'指标,对AI投资评估有较高信息增量。

Content quality7 ×0.2

逻辑清晰、结构完整,但缺少实际案例分析,略偏抽象。

Practical value9 ×0.2

为企业提供了可落地的衡量框架与治理建议,实用性强。

Timeliness9 ×0.15

发表于代理时代兴起之际,贴合当前企业AI投资焦虑点。

Source reliability10 ×0.15

来源为OpenAI官方博客,权威性高。

Base 84.5 × T1 Source weight ×1 = 85

Curation line 60Selected

18:00OpenAI:News(RSS)T1RSS

FeaturedHow to Manage AI Investments in the Agentic Era: Focus on Useful Work per Dollar and High-Value Workflows

代理时代如何管理AI投资:聚焦每美元有用功与高价值工作流

This article is especially important for enterprises scaling AI agents. It reminds us that focusing solely on falling API prices is a trap; what really matters is the return per unit of work. I recommend CTOs and CFOs read it together and establish quantitative evaluation mechanisms internally.

AIIndustry#AI agents#OpenAI#ROI
85

Five-dimension score

Information gain8 ×0.3

提出组织延迟这一概念,对AI落地实践有增量启发。

Content quality8 ×0.2

观点明确,逻辑清晰,引用权威信源。

Practical value9 ×0.2

对企业和组织管理者具有直接指导意义。

Timeliness8 ×0.15

当前AI快速迭代期,组织滞后问题紧迫。

Source reliability10 ×0.15

来源为OpenAI官方新闻,权威性高。

Base 85 × T1 Source weight ×1 = 85

Curation line 60Selected

20:00OpenAI:News(RSS)T1RSS

FeaturedDesigning Organisations That Can Keep Up With AI: Organisational Latency as the Biggest Barrier

设计能跟上AI的组织:组织延迟成为最大障碍

What makes this article truly worth following is that it raises a neglected bottleneck: no matter how strong the technology is, if the organisation can't keep up, it's useless. For CTOs, CIOs, and transformation leaders, this is a more important framework than tech selection.

AIIndustry#AI#OpenAI#Organisational Change
84

Five-dimension score

Information gain9 ×0.3

本文披露 Ruff 默认规则的大幅扩展及具体迁移方法,对 Python 开发者有较高信息增量

Content quality9 ×0.2

结构清晰,包含具体统计数据、命令示例和 AI 集成案例,质量上乘

Practical value10 ×0.2

提供了可立即执行的一行命令和修复策略,对真实开发场景有直接帮助

Timeliness10 ×0.15

文章发布于版本发布后两天,非常及时

Source reliability9 ×0.15

来自知名技术博主 Simon Willison,长期维护多个 Python 项目,信源可靠

Base 93.5 × T2 Source weight ×0.9 = 84

Curation line 70Selected

06:44Simon Willison 博客(Atom)T2Community

FeaturedRuff v0.16.0 Released: Default Rules Jump from 59 to 413, CI Pipelines Need Attention

Ruff v0.16.0 发布:默认规则从59条激增至413条,CI工作流需关注

For Python developers, this is an unmissable update signal. The significant increase in Ruff's default rules means we can no longer ignore potential issues in our code, and AI fix tools can lower the upgrade cost. Notably, Astral (OpenAI) is deeply integrating AI coding capabilities with static analysis tools, which may become the norm in future engineering practices.

TechProducts#Astral#CI/CD#OpenAI

Verify against the original source before citing