ClaudeのMCP対応が変わる2026-07-28仕様、検証してみた

記事タイトルとURLをコピーする

今月誕生日の人、おめでとうございます🎉 エデュケーショナルサービス課の森純子です。

AWSまわりの記事が中心でしたが、AIエージェントやMCPなど、Claude側の技術も触れる機会が増えてきました。キャッチアップも兼ねて、Claudeの情報も少しずつ記事にしていきます。

記念すべき第1弾は、2026年7月28日に公開されたMCPの最新仕様2026-07-28について、です。

今回のアップデートでは、プロトコルのコアが「ステートレス」なリクエスト/レスポンス型に移行し、これまで必要だったセッション維持の考慮が不要になったとのこと。

公式発表では「セッション管理が不要になり、サーバーレスやエッジ環境にデプロイしやすくなる」と説明されていますが、実際どの程度セッション管理が不要になるのか公開されたベータ版SDKを使って手元で検証しました。

本記事の登場サービス

略称・用語 説明
MCP Model Context Protocol
SDK Software Development Kit
stateless_http MCPServerの起動オプション。ステートレスモードの有効/無効を切り替える
session ID クライアントとサーバー間の状態を紐づけるための識別子
JSON-RPC MCPが通信フォーマットとして採用しているリクエスト/レスポンス形式の規格

対象読者

  • Claude Code、Claude Agent SDKなどでMCPサーバーを構築・運用している方
  • MCP 2026-07-28仕様の変更点を、公式発表の文章だけでなく実際の挙動で確認したい方
  • これからMCPサーバーをステートレス化したいと考えている方

本記事で分かること

  • MCP 2026-07-28仕様の概要(ステートレス化・拡張機能・認可強化)
  • ベータ版SDKを使ったローカル検証環境の構築手順
  • ステートレスモードがデフォルトでは無効であるという、公式ブログだけでは気づけない挙動
  • 検証時のハマりどころ

MCP 2026-07-28の概要

MCPは2024年11月の登場以来、最も大きな仕様改定を迎えました。ポイントは3つです。

ステートレスコア。 双方向でセッション状態を保持する従来のプロトコルから、リクエスト/レスポンス型のモデルに移行しました。これにより、サーバーレスやエッジ環境へのデプロイが可能になります。

拡張機能の標準化。 MCP AppsとTasksが、バージョン管理された拡張フレームワークの下で正式に提供されるようになりました。

認可の強化。 OAuth 2.0やOIDCの本番運用に沿った形に認可周りが強化され、EntraやOktaといった企業向けID基盤との連携がしやすくなりました。

今回は、この中でも「ステートレスコア」が実際どう動くのかを、Pythonのベータ版SDKで検証しました。

前提条件

No 条件 説明
1 Python 3.10以上 MCP SDKの動作要件
2 pip / venv パッケージ管理・仮想環境作成用
3 curl HTTPリクエストの送信確認用

検証環境

項目 設定
OS Windows 11 + WSL2(Ubuntu)
Python 3.14
MCP SDK mcp 2.0.0b1(2026-07-28仕様対応ベータ版)
起動トランスポート streamable-http

検証手順

手順1: 仮想環境の準備

mkdir mcp-2026-test && cd mcp-2026-test
python3 -m venv venv
source venv/bin/activate

注意点: Ubuntu環境でPython 3.14系を使っている場合、ensurepip is not available というエラーで仮想環境の作成に失敗することがあります。その場合は事前に以下を実行します。

sudo apt install python3.14-venv -y

手順2: MCP SDKのベータ版インストール

pip install "mcp==2.0.0b1"

インストール確認はpip show mcpで行います(import mcp; mcp.__version__は本SDKには実装されていないため使えません)。

手順3: 最小限のMCPサーバーを作成

from mcp.server.mcpserver import MCPServer

app = MCPServer(name="test-server")

@app.tool()
def add(a: int, b: int) -> int:
    """2つの数を足し算するツール"""
    return a + b

if __name__ == "__main__":
    app.run(transport="streamable-http")

注意点: 旧仕様の解説記事でよく見るFastMCPというクラス名は、このベータ版ではMCPServerに変わっています。

手順4: サーバーを起動し、初回リクエストを送る

python3 server.py

別ターミナルから、セッション確立の手続き(initialize)を行わずに、いきなりツール一覧を取得するリクエストを送ってみます。

curl -i -X POST http://127.0.0.1:8000/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

結果は400 Bad Request、"message":"Bad Request: Missing session ID"でした。つまりデフォルトでは、依然としてセッションIDが必須でした。

手順5: ステートレスモードを明示的に有効化

サーバー側のコードにstateless_http=Trueを追加します。

    app.run(transport="streamable-http", stateless_http=True)

サーバーを再起動し、同じリクエストを再送すると、200 OKで応答が返り、mcp-session-idヘッダーも付与されませんでした。続けてツール呼び出し(add(3, 5))を試したところ、{"result": 8}が正しく返ってきました。

検証結果

検証項目 stateless_http未指定(デフォルト) stateless_http=True
initializeなしでのtools/list 400 Bad Request(Missing session ID) 200 OK
mcp-session-idヘッダー 付与される 付与されない
tools/callの実行結果 未検証(400で弾かれるため) 正常に計算結果を返す

気づいた点

公式ブログでは「MCPはステートレスになった」と説明されていますが、ベータ版SDKの実装ではステートレス動作はデフォルトで無効(stateless_http=False)であることが、実際に手を動かしてみて分かりました。

既存のMCPサーバーをこのSDKでそのまま起動しても、明示的にオプションを指定しない限り、従来通りセッションIDを要求する挙動のままです。移行する際は、この設定変更を意識する必要がありそうです。

検証時のハマりどころ

No 事象 原因 対処
1 python3 -m venv venvでensurepip is not availableエラー Ubuntu環境でPython 3.14系のvenvパッケージが未インストール sudo apt install python3.14-venv -y
2 mcp.__version__でAttributeError 本SDKに__version__属性が実装されていない pip show mcpでバージョン確認する
3 curlでいきなりtools/listを送ると400エラー stateless_httpがデフォルトでFalse サーバー起動時にstateless_http=Trueを明示的に指定する

クリーンアップ

検証が終わったら、サーバーを停止し仮想環境を抜けます。

# サーバー起動中のターミナルで
Ctrl+C

# 仮想環境を抜ける
deactivate

まとめ

  • MCP 2026-07-28仕様は、ステートレスコア・拡張機能の標準化・認可強化の3点が柱
  • ベータ版SDK(mcp==2.0.0b1)で実際に検証したところ、ステートレス動作はデフォルトでは無効で、stateless_http=Trueを明示的に指定する必要があった
  • この挙動は公式ブログの説明だけでは分からず、実際に手を動かして初めて確認できた
  • 既存のMCPサーバーをこの仕様に移行する際は、起動オプションの見直しが必要になりそう

参考