はじめに:MCPサーバーをまた作るのかという課題
AIエージェントを実務に組み込んでいると、最終的には社内のREST APIをツールとして公開する必要が出てきます。しかし従来の方法は手間がかかります。エージェントから呼び出せるようにするために別のMCPサーバーを構築し、ゲートウェイがすでに処理していたルーティング・認証・クォータのロジックをそのサーバーに再実装しなければなりませんでした。管理対象が増えるだけです。
Google Cloud API Gatewayはこの部分を整理しました。すでにデプロイしているOpenAPIスペックにMCP関連のアノテーションを付けるだけで、ゲートウェイ自体がリモートMCPサーバーとして動作します。新たにホスティングするサーバーも、保守するコードも不要です。現在はPublic Preview段階で、RESTおよびOpenAPI 3.xバックエンドを既存の認証体系のままサポートしています。
本記事では、実際にスペックを修正し、デプロイし、ADKエージェントに接続する流れを順を追って解説します。
この機能の公式発表内容は根拠資料で確認できます。

実装の核心:OpenAPIスペックにMCPアノテーションを付与する
ステップ1. スペックでMCPを有効化
既存のOpenAPIスペックの上部にx-google-api-management.mcp: trueを追加すると、そのスペックの全オペレーションがMCPツールの候補になります。バックエンドのアドレスも併せて指定してください。
openapi: 3.0.4
info:
title: Order Service
version: 1.0.0
x-google-api-management:
mcp: true # このスペックのオペレーションをMCPツールとして公開
backends:
orders-backend:
address: https://orders-a1b2c3-uc.a.run.app
paths:
/orders/{orderId}:
get:
operationId: getOrderStatus
description: Returns the current status, carrier, and ETA for an order.
x-google-backend: orders-backend
x-google-mcp-tool:
name: get_order_status
description: "Look up the delivery status and ETA of a customer order.
Use this when the user asks where an order is or when it will arrive."
parameters:
- name: orderId
in: path
required: true
schema:
type: string
ここで重要なのは**descriptionの書き方**です。LLMはツールの説明を見て呼び出すかどうかを判断するため、「何を返すか」よりも「いつ、なぜこのツールを使うべきか」を書く必要があります。上記の例のように、ユーザーの質問シナリオをそのまま含めるのが効果的です。
ステップ2. ゲートウェイのデプロイ
通常どおりAPI configをデプロイするだけです。API GatewayがMCP対応の設定を自動生成し、/mcpベースパスで配信を開始します。追加のインフラプロビジョニングはありません。
ステップ3. ツール検索の権限制御
デフォルトではtools/listは認証なしで公開されています。開発中は便利ですが、本番ではツール名と入力スキーマがそのまま公開される点に注意が必要です。本番環境ではJWTを要求してください。APIキーではこのメソッドを保護できません。
x-google-api-management:
mcp:
tools-list:
security:
orderServiceJwt: [] # オブジェクト形式にするとMCP全体が有効化される
tools/callは設定に関わらず、常に既存RESTオペレーションの認証を強制します。検索はブロックし、呼び出しは許可する構造がデフォルトというわけです。
ステップ4. ADKエージェントへの接続
MCPクライアントをゲートウェイの/mcpエンドポイントに向けるだけです。ADKではMcpToolsetにゲートウェイが期待する資格情報を渡せば完了します。
from google.adk.agents import Agent
from google.adk.tools.mcp_tool import McpToolset, StreamableHTTPConnectionParams
order_tools = McpToolset(
connection_params=StreamableHTTPConnectionParams(
url="https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/mcp",
headers={"x-api-key": API_KEY},
)
)
agent = Agent(
model="gemini-2.5-flash",
name="order_support_agent",
instruction="Help the user check on their orders.",
tools=[order_tools],
)
ゲートウェイはツールの引数をRESTのpath・query・body・headerにマッピングし、既存ポリシーを通したうえでレスポンスをMCP結果に変換します。実際のワイヤ上でどう見えるかは、次のように呼び出して確認できます。
curl -X POST "https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/mcp" \
-H "content-type: application/json" \
-H "MCP-Protocol-Version: 2025-11-25" \
-H "x-api-key: $API_KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"get_order_status","arguments":{"orderId":"A-1042"}}}'
レスポンスはJSON-RPC形式で返ります。
{"jsonrpc":"2.0","id":1,"result":{"content":[{"type":"text",
"text":"{\"orderId\":\"A-1042\",\"status\":\"IN_TRANSIT\",\"eta\":\"2026-09-24\"}"}],
"isError":false}}
MCPトラフィックとRESTトラフィックが同一のポリシーパスを共有する点がこの構造の要点です。認証・クォータ・ログをMCP用に別途作る必要はありません。

注意点と制約:現時点で使えないもの
Public Preview段階のため、カバレッジに制約があります。実務投入前に必ず確認すべき項目です。
| 項目 | 現状 | 実務への影響 |
|---|---|---|
| REST / OpenAPI 3.xバックエンド | 対応 | 大半の社内APIをカバー |
| 既存認証体系(JWT、APIキー) | そのまま再利用 | マイグレーションコストなし |
| MCP resources / prompts | ロードマップ | まずはツール呼び出しのみ対応 |
| レスポンスストリーミング | ロードマップ | 長時間応答はポーリングが必要 |
| Model Armorペイロード検査 | ロードマップ | セキュリティポリシーは別途設計が必要 |
| HTTP 204など空ボディ応答 | 非公開 | 削除・状態変更APIはツール化不可 |
| 深いネストのオブジェクトスキーマ | tools/listで一部非表示 | 複雑なリクエストモデルは簡略化を推奨 |
| ゲートウェイあたりのツール数 | 最大1,000 | 大規模APIは分割デプロイを検討 |
| MCP + モデルルーティングの同時有効化 | 不可 | 同一API configで併用不可 |
特に空ボディ応答(204)が公開されない点は意外と影響が大きいです。「注文キャンセル」「状態変更」のようなアクション系APIはレスポンスボディを持たないことが多いからです。こうしたオペレーションは別途ラッパーを用意するか、レスポンスに確認メッセージを含める形で回避する必要があります。
もう一点、tools/listを認証なしで公開すると、ツール名と入力スキーマがそのまま露出します。内部API構造を外部に知らせることになるため、本番デプロイ時には必ずJWTセキュリティ設定を行ってください。
日本開発エコシステムでの適用文脈
日本のエンタープライズ環境では、APIゲートウェイがすでに社内標準として定着しているケースが多く見られます。この機能の真の利点は既存ゲートウェイポリシーをそのまま再利用できる点です。別途MCPサーバーを立てるとセキュリティ部門・インフラ部門と再協議が必要になりますが、この方式はすでに承認済みの認証・クォータ体系を通すため、社内承認プロセスが大幅に短縮されます。
ただし、Cloud Run以外のオンプレミスバックエンドや社内ファイアウォール内のサービスは別途検討が必要です。API Gatewayがパブリックエンドポイントに出る構造のため、内部網専用APIをそのまま公開してはいけません。VPCルーティング設計を先に確認してください。
次の学習ステップ
MCPの仕様そのものを理解したい場合は、Model Context Protocolの公式仕様(tools、resources、promptsの3プリミティブ)を読むことをおすすめします。QiitaではADKとMCPを組み合わせたエージェント構築の記事が増えているので、実装パターンの比較に役立ちます。

まとめ:今日から最初のツールを公開してみましょう
整理すると以下のとおりです。
- 既存OpenAPIスペックに
x-google-api-management.mcp: trueを1行追加 - オペレーションごとに
x-google-mcp-toolでツール名と説明を指定(説明は「いつ使うか」中心に) - 通常どおりデプロイ →
/mcpパスで自動配信 - 本番では
tools/listにJWTセキュリティを必須化 - ADKの
McpToolsetでエージェントに接続
別サーバーを運用しなくてよい点が最大の変化です。認証・クォータ・ログがMCPとRESTにまたがって単一のポリシーパスに統合されるため、セキュリティ監査の観点でも説明しやすい構造といえます。
次のステップとしては、MCP resourcesとpromptsがロードマップにありますので、ツール呼び出し以外にコンテキスト提供まで拡張されるタイミングを注視するとよいでしょう。それまではツール説明を精緻に磨くことに集中してください。LLMがツールを誤選択する問題の8割は、説明の不足に起因します。