MCP App Serviceの2026年仕様変更|ステートレス化の影響と確認ポイント

Azure App ServiceでMCPサーバーを運用している場合、今回まず確認すべきなのは「App Serviceのスケール設定」よりも「MCPサーバー実装がセッション前提になっていないか」です。2026年6月下旬にApps on Azure Blogで公開された「MCP Just Went Stateless — What the 2026 Spec Changes About Scaling on App Service」は、MCPの2026-07-28リリース候補でプロトコルレベルのセッションがなくなり、App Service上のMCPサーバーを水平スケールしやすくなる、という内容です。(TECHCOMMUNITY.MICROSOFT.COM)

分類はNoticeとして捉えるのが適切です。つまり、Azure App Serviceの既存環境が即座に強制変更される話ではなく、MCP仕様の変更に備えて、SDK、セッション管理、ロードバランシング、監視設定を点検するための情報です。特に、既存のMCPサーバーでinitialize、Mcp-Session-Id、ARR Affinity、Redisなどを使っている場合は、早めに棚卸ししておく必要があります。

目次

Azure App Service上のMCPサーバーで何が変わるのか

今回の中心は、MCPがプロトコルレベルでステートレスになることです。従来のMCPでは、クライアントが最初にinitializeを呼び出し、サーバーからMcp-Session-Idを受け取り、その後のリクエストでも同じセッションIDを送る流れがありました。2026-07-28仕様では、この初期化ハンドシェイクとプロトコル上のセッションIDが削除され、各リクエストが自己完結する形になります。(TECHCOMMUNITY.MICROSOFT.COM)

Azure App Serviceの観点では、これはかなり大きな意味を持ちます。複数インスタンスにスケールアウトしたとき、どのMCPリクエストがどのインスタンスに届いても処理できる設計に近づくためです。以前は、セッションIDを発行したインスタンスに後続リクエストを寄せる必要があり、スティッキールーティングや共有セッションストアを検討する必要がありました。

確認ポイントこれまでの考え方2026仕様での見方
初期化処理initializeで接続時に情報交換するリクエストごとに_metaで必要情報を渡す
セッションMcp-Session-Idを後続リクエストで利用するプロトコルレベルのセッションはなくなる
App Serviceのスケールアウトセッション維持や共有ストアを意識する任意のインスタンスで処理しやすくなる
Redisなどの外部ストアプロトコルセッション共有に使う場合があるアプリ状態、キャッシュ、レート制限などに使う
監視インスタンスごとのばらつきを見るApplication Insightsで分散状況を確認する

影響を受けるAzure利用者

今回の影響が大きいのは、Azure App ServiceでリモートMCPサーバーをホストしているチームです。特に、AIエージェント向けにMCPエンドポイントを公開し、App Service Planで複数インスタンスにスケールアウトしている場合は、実装と運用設計の見直し対象になります。

一方、通常のWebアプリをApp Serviceで動かしているだけで、MCPサーバーを公開していない環境には直接の影響はほぼありません。また、単一インスタンスの検証環境では問題が表面化しにくいため、本番でスケールアウトしているか、今後スケールアウト予定があるかを基準に優先度を決めるとよいでしょう。

影響度の目安は次の通りです。

利用状況優先度確認すべきこと
App ServiceでMCPサーバーを本番運用している高SDK対応、セッション依存、ARR Affinity、監視
App ServiceでMCPサーバーを検証中中2026仕様前提で設計し直せるか
API ManagementやFront Door越しにMCPを公開している中Mcp-Method、Mcp-Nameなどのヘッダー保持
MCPを使っていない通常のWebアプリ低直接対応は基本不要
既存アプリ内にMCPエンドポイントを追加予定中既存WebセッションとMCPの状態管理を分離

すぐ確認したいApp Service設定

まず確認したいのは、App ServiceのARR Affinityです。Apps on Azure Blogでは、App ServiceでMCPサーバーをスケールさせる場合、clientAffinityEnabled: falseを維持する考え方が示されています。2026仕様ではプロトコル側のセッションがなくなるため、App Serviceのロードバランサーが複数インスタンスへリクエストを分散しやすくなります。(TECHCOMMUNITY.MICROSOFT.COM)

Azure CLIで現在値を確認する場合は、次のように確認できます。

az webapp show \
  --resource-group <resource-group-name> \
  --name <app-name> \
  --query clientAffinityEnabled \
  -o tsv

ただし、clientAffinityEnabledを単純にfalseへ変えればよい、という話ではありません。同じApp Service上で通常のWeb画面やログインセッションも扱っている場合、MCP以外の処理がスティッキーセッションに依存している可能性があります。その場合は、MCPエンドポイントを別アプリに分ける、アプリ状態を外部ストアへ逃がす、ステージングスロットで負荷試験する、といった順序で確認するのが安全です。

MCPサーバー実装で確認すべきポイント

プロトコル変更の本丸は、アプリケーションコードとSDKです。既存実装でinitializeやMcp-Session-Idを前提にしている場合、2026-07-28仕様対応のSDKへ更新しただけでは済まない箇所が出る可能性があります。

特に確認したいのは次の点です。

確認項目見る場所対応の考え方
initialize処理MCPサーバーの接続初期化コード2026仕様では前提にしない
Mcp-Session-Idヘッダー処理、Redisキー、ログセッションID依存を削除または置換
_metaリクエスト処理プロトコルバージョン、クライアント情報を毎回読む
server/discoverサーバー能力の取得処理必要時に能力情報を取得できるようにする
Mcp-Method / Mcp-Nameゲートウェイ、WAF、アプリ側検証ヘッダーと本文の不一致を拒否する
ttlMs / cacheScopetools/list、リソース読み取りキャッシュ可能なレスポンスを明示する

MCP 2026-07-28リリース候補では、Mcp-MethodやMcp-Nameを使ってルーティングやレート制限をしやすくする変更、tools/listなどでttlMsやcacheScopeを使う変更、W3C Trace Contextを_metaで伝搬する変更も説明されています。(TECHCOMMUNITY.MICROSOFT.COM)

「ステートレス化」してもRedisやDBが不要になるわけではない

ここで誤解しやすいのが、「MCPがステートレスになるならRedisやデータベースは不要になるのでは」という点です。不要になる可能性があるのは、プロトコルセッションを共有するためだけの仕組みです。アプリケーションとして状態を持つ必要があるなら、Redis、Cosmos DB、SQL Databaseなどの外部ストアは引き続き必要です。

たとえば、買い物かごを扱うMCPツールなら、セッションに隠して状態を持つのではなく、basket_idのような明示的なハンドルを返し、次回以降のツール呼び出しでそのIDを引数として受け取る設計にします。Microsoftのブログでも、こうした明示的ハンドルの考え方が紹介されています。(TECHCOMMUNITY.MICROSOFT.COM)

実務では、次のように整理すると判断しやすくなります。

用途外部ストアを残すべきか理由
プロトコルセッションIDの共有原則見直し2026仕様ではプロトコルセッションがなくなるため
ユーザー別の作業状態必要明示的ハンドルで参照する状態を保存するため
高コストな検索結果のキャッシュ必要な場合ありレイテンシとコスト削減に有効
レート制限カウンター必要な場合あり複数インスタンスで一貫した制御が必要
会話メモリやエージェント状態必要な場合ありアプリ要件として状態を持つため

監視ではインスタンス分散とトレースのつながりを見る

App ServiceでMCPサーバーをスケールアウトする場合、Application Insightsでインスタンスごとのリクエスト分散を確認することが重要です。ブログでは、cloud_RoleInstanceを使ってMCPリクエストが各インスタンスに分散しているかを見る例が示されています。(TECHCOMMUNITY.MICROSOFT.COM)

requests
| where timestamp > ago(15m)
| where name contains "/mcp"
| summarize count() by cloud_RoleInstance

この結果が特定インスタンスに偏っている場合は、ARR Affinity、フロントエンドのルーティング、クライアント側の接続再利用、ゲートウェイ設定を確認します。2026仕様ではリクエスト自体は任意のインスタンスで処理しやすくなりますが、実際の通信経路でヘッダーが落ちていたり、上流のリバースプロキシが意図せず固定ルーティングしていたりすると、期待通りに分散しません。

また、OpenTelemetryやApplication Insightsを使っている場合は、traceparent、tracestate、baggageの扱いも確認しておくとよいでしょう。2026仕様ではW3C Trace Contextの伝搬が整理されているため、ホストアプリ、MCPクライアント、MCPサーバー、下流APIまでを一つのトレースとして追いやすくなります。(TECHCOMMUNITY.MICROSOFT.COM)

破壊的変更として注意したい点

今回の2026-07-28仕様はリリース候補であり、最終仕様は2026年7月28日に公開予定とされています。また、破壊的変更を含むため、既存の本番環境でいきなり置き換えるのではなく、SDK対応状況を確認しながらステージング環境で検証するのが前提です。(TECHCOMMUNITY.MICROSOFT.COM)

特に次の点は、コード検索で早めに確認しておきたい項目です。

変更点影響
initialize / initializedの削除初期化処理に依存した実装は修正が必要
Mcp-Session-Idの削除セッションIDをキーにした状態管理は移行が必要
tasks/listの削除実験的Tasks APIを使っている場合は見直し
Roots / Sampling / Loggingの非推奨化すぐ削除ではないが代替設計を検討
リソース未検出エラーコードの変更-32002を直書き判定しているクライアントは注意

非推奨化は「即時利用不可」を意味しません。ただし、将来の削除や仕様変更に備える必要があります。特にエラーコードを文字通り比較しているクライアントや、古いSDKの挙動に依存したテストコードは、仕様変更時に壊れやすいポイントです。

Azure利用者向けの実務チェックリスト

既存環境では、次の順番で確認すると無駄が少なくなります。

| 順番 | 作業 | 判断基準 |
| -: | ————— | —————————————————– |
| 1 | MCPサーバーの有無を確認 | App Service上で/mcpなどのエンドポイントを公開しているか |
| 2 | SDKと仕様バージョンを確認 | 2025-11-25前提か、2026-07-28対応予定があるか |
| 3 | コード検索 | initialize、Mcp-Session-Id、tasks/listを検索 |
| 4 | App Service設定確認 | clientAffinityEnabledとインスタンス数を確認 |
| 5 | 状態管理の棚卸し | プロトコル状態とアプリ状態を分ける |
| 6 | ゲートウェイ確認 | Mcp-Method、Mcp-Name、MCP-Protocol-Versionが保持されるか |
| 7 | ステージング検証 | 複数インスタンスで負荷をかけ、状態と分散を確認 |
| 8 | 監視更新 | Application Insights、OpenTelemetry、アラート条件を見直す |

新規にMCPサーバーを作る場合は、最初から「セッションに隠して状態を持たない」設計にするのが安全です。既存環境では、RedisやDBを削除することを目的にせず、「何の状態を保存しているのか」を分類することから始めてください。プロトコル都合のセッション共有は減らせますが、アプリケーションに必要な状態まで消してはいけません。

まとめ:App Serviceの設定変更より先に、MCP実装の状態管理を確認する

「MCP Just Went Stateless」の重要点は、Azure App ServiceでMCPサーバーを普通のWebアプリに近い感覚で水平スケールしやすくなることです。ただし、これはAzure側の設定だけで完結する話ではありません。MCP SDK、プロトコルバージョン、セッションID依存、明示的ハンドル設計、ゲートウェイのヘッダー保持、Application Insightsでの監視まで含めて確認する必要があります。

すぐにやるべきことは、App Serviceで動いているMCPサーバーを洗い出し、initializeとMcp-Session-Idへの依存を検索し、ステージング環境で複数インスタンスの分散と状態保持を検証することです。2026-07-28仕様の最終化を待つだけではなく、今のうちに「プロトコル状態」と「アプリ状態」を分けておくと、移行時の手戻りを大きく減らせます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次