Skip to content

AgentCore Gateway から MCP サーバーへ

connection ジェネレーターは、MCP サーバー(TypeScript または Python)を AgentCore Gateway のターゲットとして登録できます。

接続されると、Gateway は MCP サーバーのツールを単一の MCP エンドポイントに集約し、Cedar ポリシーエンジンに対して呼び出しを評価し、MCP サーバーへの送信トラフィックに IAM SigV4 で署名します。

このジェネレーターを使用する前に、以下を確認してください:

  1. agentcore-gateway プロジェクト
  2. infra: agentcoreauth: iam で作成された MCP サーバーコンポーネント(ts#mcp-server または py#mcp-server

Gateway は protocol: mcp を持ち、MCP サーバーは auth: iam を持つ必要があります — ジェネレーターは両方を検証します。非 IAM の MCP サーバーは、Gateway が送信トラフィックに SigV4 で署名するため、接続できません。

Terminal window
pnpm nx g @aws/nx-plugin:connection
変更されるファイルを確認するためにドライランを実行することもできます
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

Gateway プロジェクトをソースとして、MCP サーバープロジェクトをターゲットとして選択します。MCP サーバープロジェクトに複数のコンポーネントが含まれている場合は、targetComponent を指定して明確にします。

パラメータデフォルト説明
sourceProject 必須string-ソース プロジェクト
targetProject 必須string-接続先のターゲット プロジェクト
sourceComponent string-接続元のソース コンポーネント (コンポーネント名、ソース プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをソースとして明示的に選択するには '.' を使用します。
targetComponent string-接続先のターゲット コンポーネント (コンポーネント名、ターゲット プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをターゲットとして明示的に選択するには '.' を使用します。
preferInstallDependencies booleantrueジェネレーター実行後に依存関係のインストールを優先するかどうか。複数のジェネレーターをバッチ処理する際にインストールを延期する場合はfalseに設定します(後続のジェネレーターがNxプロジェクトグラフを計算できるよう、必要に応じてインストールは実行されます)。最後に一度だけインストールします。

ジェネレーターは、新しいソースファイルを生成するのではなく、既存のプロジェクトを接続します。以下のファイルが変更されます:

  • Directorypackages/<gateway>
    • project.json Gateway の dev ターゲットが MCP サーバーの <mcp>-dev への依存関係を取得
    • local-dev.ts ATTACHED_MCP_SERVERS が更新され、ローカル gateway が MCP サーバーを集約

Gateway プロジェクトの dev ターゲットは MCP サーバーの <mcp>-dev ターゲットへの依存関係を取得するため、Gateway をローカルで実行すると MCP サーバーも起動します。MCP サーバーは Gateway プロジェクトの local-dev.ts にも登録され、ローカル gateway がそのツールを集約します。

MCP サーバーターゲットをスタックに追加する

Section titled “MCP サーバーターゲットをスタックに追加する”

ジェネレーターは、Gateway をインスタンス化するスタックやモジュールがどれかわからないため、MCP サーバーターゲットをインフラストラクチャに自動的に接続できませんgateway.addMcpServer(server) の呼び出しを自分で追加してください。

Gateway をインスタンス化するスタックで、MCP サーバーをターゲットとして登録します:

packages/infra/src/stacks/application-stack.ts
const myMcpServer = new MyMcpServer(this, 'MyMcpServer');
const myGateway = new MyGateway(this, 'MyGateway');
// Register the MCP server as a target of the Gateway. The target name
// defaults to the MCP server's `mcpServerName` (its class name in
// kebab-case, e.g. `MyMcpServer` -> `my-mcp-server`).
myGateway.addMcpServer(myMcpServer);

Gateway ターゲット名(デフォルトでは MCP サーバーの mcpServerName)は、Cedar アクション名のプレフィックスとして使用されます — アクション形式は AgentCore::Action::"<targetName>___<toolName>" です。ポリシーの記述セクションを参照してください。ターゲット名は短く安定したものにしてください。後で変更すると、古い名前を参照する Cedar ポリシーが無効になります。

デフォルトのターゲット名を上書きするには、gatewayTargetName を渡します:

myGateway.addMcpServer(myMcpServer, { gatewayTargetName: 'my-mcp' });

コンストラクトは iamCredentialProvider.service = 'bedrock-agentcore' でターゲットを構成するため、Gateway は自身の実行ロールを使用して送信呼び出しに署名します。

Gateway をローカルで実行するには:

Terminal window
pnpm nx dev <gateway-name>

ローカル gateway と、割り当てられたローカルポート上のすべての接続された MCP サーバーが起動します。ローカル gateway は、接続されたサーバーのツールを集約する単一の MCP エンドポイントを公開します。TypeScript または Python の gateway-connection ジェネレーターを介して Gateway に接続されたエージェントは、LOCAL_DEV=true で実行すると、それを指します。