AgentCore GatewayでAPIをAIエージェント対応ツールに変換してみた
はじめに
最近AIエージェント開発基盤の構築プロジェクトに関わっており、MCP Gatewayの導入に向けた最上流工程からリードとして入っています。
AWSのマネージドサービスであるAgentCore Gatewayでどのようなことができるか気になったので、実際に自分で動かしてみたいと思いそのアウトプットとして本記事を作成しました。
AI エージェントに「外部のAPIを使わせたい」と思ったとき、最初に悩むのが どうやって既存の API をエージェントから呼べるようにするか です。
従来であれば MCP サーバーをゼロから実装したり、認証周りのコードを書いたりと、それなりな実装が必要でした。
Amazon Bedrock AgentCore Gateway を使うと、既にAPI Gatewayなどにデプロイ済みのAPIサーバや、OpenAPI の YAML ファイルを用意するだけで、既存の API を MCP 対応ツールとして公開できます!
この記事では、AWS 関連用語を返すモック API をバックエンドとして用意し、AgentCore Gateway に登録したうえでAIエージェントからツールを利用して回答生成するまでの手順を解説します。バックエンドには Amazon API Gateway のモック統合 を使うため、Lambda も EC2 も一切不要です!
全体の構成
AIエージェント(MCP クライアント)
↓ MCP リクエスト
AgentCore Gateway ← ① 今回設定する
↓ HTTP リクエスト
Amazon API Gateway ← ② モック統合で静的レスポンスを返す
今回作成する API のエンドポイントは以下の 2 つです。
サンプル用なので、AWSサービスについての説明を静的に返すモックAPIをAPI Gatewayにデプロイして、そこと接続します。
| エンドポイント | 説明 |
|---|---|
GET /terms |
AWS 用語の一覧を返す |
GET /terms/{id} |
指定した ID の AWS 用語を 1 件返す |
AgentCore Gateway とは(概要)
AgentCore Gateway は、既存の API を MCP(Model Context Protocol)互換のツール に変換するフルマネージドサービスです。
MCP(Model Context Protocol)とは?
Anthropic が公開したオープン標準で、AI エージェントが外部のデータソースやツールを安全に呼び出すための通信仕様です。
| 機能 | 内容 |
|---|---|
| プロトコル変換 | MCP リクエスト → REST API 呼び出しに自動変換 |
| ツール統合 | 複数の API を単一の MCP エンドポイントにまとめる |
| 認証管理 | 受信(エージェント認証)と送信(API 認証)を一括管理 |
| フルマネージド | インフラ管理不要・スケーリング自動 |
手順の全体像
- API Gateway でモック API を作成する
- AgentCore Gateway を作成する
- ターゲットを登録する
- Cognitoから認証情報を取得
- ローカル上でAIエージェントを構築し動かしてみる
Step 1:API Gateway でモック API を作成する
バックエンドとなる API を Amazon API Gateway のモック統合で作成します。コードを一切書かずに静的な JSON を返せます。
モック統合とは?
API Gateway に「バックエンドがないふりをさせる」機能です。Lambda や外部サーバーへリクエストを転送せず、API Gateway 自身が定義したレスポンスを直接返します。
1-1. REST API を新規作成
- AWS マネジメントコンソールで API Gateway を開く
- 「REST API」→「構築」 をクリック
- 「新しい API」 を選択し、以下を設定して 「API を作成」
| 項目 | 値 |
|---|---|
| API 名 | aws-service-description-api |
| エンドポイントタイプ | リージョン |
1-2. /terms リソースを作成する
- 左メニューで 「リソース」 を選択
- 「リソースを作成」 をクリック
- 以下を入力して 「リソースを作成」
| 項目 | 値 |
|---|---|
| リソースパス | / |
| リソース名 | terms |
1-3. /terms/{id} リソースを作成する
-
/termsリソースを選択した状態で 「リソースを作成」 をクリック - 以下を入力して 「リソースを作成」
| 項目 | 値 |
|---|---|
| リソースパス | /terms |
| リソース名 | {id} |
ツリーが /terms/{id} になっていれば OK です。

1-4. GET /terms にモック統合を設定する
① メソッドを作成
-
/termsリソースを選択し 「メソッドを作成」 - 以下を設定して 「メソッドを作成」
| 項目 | 値 |
|---|---|
| メソッドタイプ | GET |
| 統合タイプ | Mock |
② 統合リクエストを設定する
- 「統合リクエスト」タブ を開く
- 「編集」 を開く
- 「マッピングテンプレート」→「マッピングテンプレートを追加」
- コンテンツタイプ:
application/json、テンプレートに以下を入力して 「保存」
{"statusCode": 200}
※デフォルトで設定されていればそのままでOK
③ 統合レスポンスを設定する(返す JSON を定義)
- 「統合レスポンス」タブ を開く
- ステータスコード
200のところで「編集」を選択 -
「マッピングテンプレート」→ コンテンツタイプ
application/jsonを追加 - 以下を入力して 「保存」
[
{
"id": 1,
"term": "Amazon S3",
"description": "スケーラブルなオブジェクトストレージサービス。静的ファイルやバックアップの保存に使われる。",
"category": "ストレージ"
},
{
"id": 2,
"term": "AWS Lambda",
"description": "サーバーレスのコンピューティングサービス。コードをアップロードするだけで実行環境が整う。",
"category": "コンピューティング"
},
{
"id": 3,
"term": "Amazon VPC",
"description": "AWS 上に構築できる仮想プライベートネットワーク。リソースのネットワーク環境を論理的に隔離できる。",
"category": "ネットワーキング"
},
{
"id": 4,
"term": "Amazon RDS",
"description": "マネージド型のリレーショナルデータベースサービス。MySQL・PostgreSQL・Aurora などに対応。",
"category": "データベース"
},
{
"id": 5,
"term": "Amazon Bedrock",
"description": "フルマネージドの生成 AI サービス。複数の基盤モデルを API 経由で利用できる。",
"category": "AI/ML"
}
]
④ メソッドレスポンスを確認する
- 「メソッドレスポンス」タブ を開く
- ステータスコード
200が存在することを確認する(なければ追加)
⚠️ 注意:メソッドレスポンスに
200が存在しないと、AgentCore Gateway がターゲット登録時にエラーになります。
1-5. GET /terms/{id} にモック統合を設定する
手順は 1-4 と同様です。統合レスポンスのテンプレートには、1 件分のレスポンスを設定します。
統合リクエストのテンプレート(1-4 と同じ)
{"statusCode": 200}
統合レスポンスのテンプレート
{
"id": 1,
"term": "Amazon S3",
"description": "スケーラブルなオブジェクトストレージサービス。静的ファイルやバックアップの保存に使われる。",
"category": "ストレージ"
}
💡 モック統合のため、どの
{id}を指定しても同じレスポンスが返ります。今回はあくまで Gateway の動作確認用のサンプルです。
メソッドレスポンスへの 200 の追加も忘れずに。
1-6. デプロイ
- 「API をデプロイ」 をクリック
- 以下を設定して 「デプロイ」
| 項目 | 値 |
|---|---|
| ステージ | 新しいステージ |
| ステージ名 | prod |
- デプロイ後に表示される ステージの URL を控えておく
https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod
1-7. 動作確認
今回はAPIキーなどでの認証は設定していないため、ブラウザでAPIエンドポイントへアクセスするとJSONが返されることを確認できます!

Step 2:AgentCore Gateway を作成する
- AWS コンソールで Amazon Bedrock AgentCore を開く
- 左ナビの 「ゲートウェイ」 を選択
- 「Create gateway」 をクリック
- 以下を入力して 「ゲートウェイを作成」
| 項目 | 設定値 |
|---|---|
| ゲートウェイ名 | aws-terms-gateway |
| インバウンド認証設定 |
JSON Web Tokens (JWT) を使用(自動セットアップ) |
| JWT スキーマ設定 | Cognitoを利用した設定のクイック作成 - recommended |
作成完了後、MCP エンドポイント URL が発行されます。
https://<gateway-id>.gateway.bedrock-agentcore.ap-northeast-1.amazonaws.com/mcp
📋 この URL をエージェントの接続先として使います。
Step 3:ターゲットを登録する
Gateway にバックエンド API の定義を紐付けます。
- Gateway 詳細画面で 「ターゲット」>「追加」 をクリック
- 以下を設定
| 項目 | 設定値 |
|---|---|
| ターゲットタイプ | API Gateway |
| ターゲット名 | aws-terms-target |
| API | 先ほど作成したAPI |
| ステージ | prod |
| Select API operations | どちらも選択 |
| アウトバウンド認証設定 | No authorization |
※Name overrideには今回はそれぞれ「listTerms」、「getTermById」と設定(ツール名になる)

本番環境で利用する場合は、アウトバウンド認証設定を設けてください。
- 「ターゲットを追加」 をクリック
Step 4: Cognitoから認証情報を取得
Cognitoユーザープールから ドメイン 、 クライアントID 、 クライアントシークレットの3つの情報を事前に取得しておきます。
あとでGatewayとの疎通にて利用予定。
4-1. ドメイン
4-2. クライアントID、クライアントシークレット
Step 5:ローカル上でAIエージェントを構築し動かしてみる
Gateway が作成できCognitoの認証情報を取得できたら、AIエージェントから MCP プロトコルで接続できます。以下は Strands Agent SDKとBedrock提供のClaude LLM を使った接続イメージです。
import httpx
from strands import Agent
from strands.models import BedrockModel
from strands.tools.mcp import MCPClient
from mcp.client.streamable_http import streamablehttp_client
# --- 設定 ---
GATEWAY_URL = "https://xxxxxxxx.gateway.bedrock-agentcore.ap-northeast-1.amazonaws.com/mcp"
TOKEN_URL = "https://<your-domain>.auth.ap-northeast-1.amazoncognito.com/oauth2/token"
CLIENT_ID = "<アプリケーションクライアントのCLIENT_ID>"
CLIENT_SECRET = "<アプリケーションクライアントのCLIENT_SECRET>"
# --- トークン取得 ---
resp = httpx.post(
TOKEN_URL,
data={
"grant_type": "client_credentials",
"client_id": CLIENT_ID,
"client_secret": CLIENT_SECRET,
},
headers={"Content-Type": "application/x-www-form-urlencoded"},
)
resp.raise_for_status()
access_token = resp.json()["access_token"]
print("トークン取得成功")
# --- エージェント呼び出し ---
mcp_client = MCPClient(lambda: streamablehttp_client(
GATEWAY_URL,
headers={"Authorization": f"Bearer {access_token}"}
))
model = BedrockModel(model_id="apac.anthropic.claude-3-5-sonnet-20241022-v2:0")
with mcp_client:
tools = mcp_client.list_tools_sync()
print("利用可能なツール:", tools)
agent = Agent(model=model, tools=tools)
response = agent("AWS のストレージ関連のサービスを教えて")
print(response)
エージェントは Gateway に問い合わせてツール一覧を取得し、質問内容に応じて listTerms か getTermById を選んで API を呼び出します。
ローカル上で実行した結果、AgentCore Gatewayのターゲットに登録したMCPツールを利用してBedrockモデルが回答を生成してくれました!

まとめ
- AgentCore Gateway から API Gateway を指定するだけで MCP 対応ツールが完成する
-
operationIdとdescriptionの記述品質がエージェントのツール選択精度に影響する
AIエージェントを作るにあたり、独自のコンテキストや独自のツールへのアクセスをどれだけできるかが成功の鍵になります。
AgentCore Gateway は「既存 API を AI エージェントに使わせたい」というユースケースで非常に強力です。MCP サーバーをゼロから実装することなく、既存のAPI Gatewayの接続や、OpenAPI ファイルなどを利用して接続できるのは大きなメリットです。









