8月1日、Simon Willisonが「Stateless MCP has recaptured my interest (and inspired mcp-explorer and datasette-mcp)」と題した記事を公開した。この記事では、MCP 2.0(ステートレスMCP)の仕様変更の概要と、それを活用して著者が実際に開発した3つのツールについて詳しく紹介されている。
ステートレスMCPとは何か
2026年7月28日、Model Context Protocol(MCP)の新仕様が正式にリリースされた。通称「MCP 2.0」あるいは「ステートレスMCP」と呼ばれるこのアップデートは、2024年11月のプロトコル初公開以来、最大の仕様変更だ。新仕様の詳細は公式仕様ページ(modelcontextprotocol.io)で確認できる。
MCP(Model Context Protocol)は、LLMを使ったエージェントフレームワークに外部ツールを標準的な方法で公開するためのプロトコルである。Anthropicが開発し、2025年に大きな注目を集めたが、その後は「エージェントにターミナルとcurlを与えれば同じことができる」として、やや影が薄くなっていた。
Simon Willisonがここで再注目を促す理由のひとつは、セキュリティの観点だ。エージェントにシェル環境とネットワークアクセスを与える手法は攻撃リスクが高く、制御も難しい。一方、MCPツールは監査・制御がしやすく、ノートPCで動く小型モデルでも十分に扱える。著者は2025年4月にMCPのプロンプトインジェクション問題を指摘する記事を書いており、当時はMCPのセキュリティに懐疑的だったが、今はむしろ「シェルとcurlへの任意アクセスを持つ汎用エージェント」よりMCPの方がずっと安全に扱えるという立場に変わっている。エージェントが何をできるかを把握し、何が起きうるかを事前に推論できる点がMCPの強みだ。任意コマンド実行ができる環境と比べて、能力の境界が明確に定義される。今回のステートレス化は、そのセキュリティ上の見通しやすさをWebアプリケーション構成においても維持しやすくした点で、著者の再評価を後押しした。
最大の変更点:リクエストが2回から1回に
ステートレスMCPの最も大きな変更は、HTTPリクエストの回数だ。
旧仕様(レガシーMCP)では、ツールを呼び出すまでに2つのリクエストが必要だった。まずセッションIDを取得するためのinitializeリクエストを送り、返ってきたMcp-Session-Idを使って2回目のリクエストでようやくツールを呼び出す。
POST /mcp HTTP/1.1
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
...
}
POST /mcp HTTP/1.1
Mcp-Session-Id: 1868a90c-3a3f-4f5b
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
...
}
新仕様ではこれが1回のリクエストに集約される。セッション管理が不要になり、クライアント情報はリクエストのメタデータに含めればよい。
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"
}
}
}
}
サーバー側もセッションIDを保持・追跡する必要がなくなるため、スケーラブルなWebアプリケーションとの相性が格段に向上する。同一セッションを同一バックエンドにルーティングする、といった設計上の制約も消える。
今週リリースした3つのツール
仕様変更を受けて、Simon Willisonは今週だけで3つの実装を公開した。
mcp-explorer:CLIでMCPサーバーを手軽に叩く
**mcp-explorer**は、MCPサーバーをインタラクティブに操作するためのPython製CLIツールだ。uvxでインストール不要で試せる。
uvx mcp-explorer list https://agentic-mermaid.dev/mcp
Ade OshinyeのデモMCPサーバー(agentic-mermaid.dev)に接続すると、利用可能なツール一覧が返ってくる。ツールの詳細確認や引数を指定した実際の呼び出しも可能だ。
uvx mcp-explorer call \
https://agentic-mermaid.dev/mcp \
render_svg \
-a source 'graph TD; A-->B' \
-a options '{"padding":24}'
上記コマンドを実行すると、MermaidダイアグラムのSVGがJSONで返ってくる。| jq .svg -rを付ければSVGそのものを取り出せる。
datasette-mcp:DatasetteインスタンスをMCPで公開
**datasette-mcp**は、Datasetteインスタンスに/-/mcpエンドポイントを追加するプラグインだ。提供するツールは3つに絞っている:list_databases()、get_database_schema(database_name)、execute_sql(database_name, sql)。
これをChatGPTやClaudeに接続すると、エージェントがDatasetteに対してSQLクエリを実行できるようになる。実際に自身のブログのDatasetteミラー(datasette.simonwillison.net/-/mcp)で動かしており、「Simon Willisonは最近MCPについて何を書いたか?」という質問に対してClaudeが7本のSQLクエリを自律的に発行して回答した例が共有セッションとして公開されている。
同プラグインのビルドは今回で4度目の試みだという。過去3回はうまくいかなかったが、ステートレス仕様になってようやく「リリースできる品質」に仕上がったと述べている。
llm-mcp-client:LLMコマンドラインツールとのMCP統合
**llm-mcp-client**は、既存のLLM CLIツールとMCPを統合するアルファ版プラグインだ。
llm install llm-mcp-client
llm -T 'MCP("https://datasette.simonwillison.net/-/mcp")' 'count the notes'
上記を実行すると「151 notes」という回答が返ってきた。十分に成熟した段階でLLMコア本体への取り込みも検討しているとのことだ。
詳細はStateless MCP has recaptured my interest (and inspired mcp-explorer and datasette-mcp)を参照していただきたい。