TypeScript Agent から MCP へ
connection ジェネレーターは、TypeScript Agent を MCP サーバー(TypeScript または Python)に接続できます。
このジェネレーターは、エージェントが MCP サーバーのツールを検出して呼び出すために必要なすべての配線を設定します。これは、AWS にデプロイされた場合(Bedrock AgentCore 経由)とローカルで実行される場合の両方で機能します。
このジェネレーターを使用する前に、以下を確認してください:
- Strands Agent コンポーネントを持つ TypeScript プロジェクト
- MCP サーバーコンポーネント(
ts#mcp-serverまたはpy#mcp-server)を持つプロジェクト - 両方のコンポーネントが
infra: agentcoreで作成されていること
ジェネレーターの実行
Section titled “ジェネレーターの実行”このジェネレーターを実行@aws/nx-plugin:connection
pnpm nx g @aws/nx-plugin:connection yarn nx g @aws/nx-plugin:connection npx nx g @aws/nx-plugin:connection bunx nx g @aws/nx-plugin:connection- インストール Nx Console VSCode Plugin まだインストールしていない場合
- VSCodeでNxコンソールを開く
- クリック
Generate (UI)"Common Nx Commands"セクションで - 検索
@aws/nx-plugin - connection - 必須パラメータを入力
- クリック
Generate
コマンドを組み立てる5
必須
必須
ソースとしてエージェントプロジェクトを選択し、ターゲットとして MCP サーバープロジェクトを選択します。プロジェクトに複数のコンポーネントが含まれている場合は、sourceComponent および targetComponent オプションを指定して明確にします。
sourceProject必須stringソース プロジェクト
targetProject必須string接続先のターゲット プロジェクト
sourceComponentstring接続元のソースコンポーネント(コンポーネント名、ソースプロジェクトルートからの相対パス、またはジェネレーターID)。プロジェクトをソースとして明示的に選択するには '.' を使用します。
targetComponentstring接続先のターゲットコンポーネント(コンポーネント名、ターゲットプロジェクトルートからの相対パス、またはジェネレーターID)。プロジェクトをターゲットとして明示的に選択するには '.' を使用します。
preferInstallDependenciesbooleanデフォルト:trueジェネレーター実行後に依存関係のインストールを優先するかどうか。複数のジェネレーターをバッチ処理する際にインストールを延期する場合はfalseに設定します(後続のジェネレーターがNxプロジェクトグラフを計算できるよう、必要に応じてインストールは実行されます)。最後に一度だけインストールします。
ジェネレーターの出力
Section titled “ジェネレーターの出力”ジェネレーターは共有の agent-connection パッケージを作成し、エージェントコードを変更します:
Directorypackages/common/agent-connection
Directorysrc
Directoryapp
- <mcp-server-name>-client-strands.ts 接続された MCP サーバー用の高レベル Strands クライアント
Directorycore
- agentcore-endpoints.ts フレームワークに依存しない ARN/URL 解決
- agentcore-fetch.ts フレームワークに依存しない SigV4 / JWT / セッション転送 fetch
- agentcore-transport.ts 共有 AgentCore トランスポート配管
- agentcore-mcp-transport.ts フレームワークに依存しない MCP トランスポート
- agentcore-mcp-client-strands.ts トランスポートをラップする Strands MCP クライアント
- index.ts すべてのクライアントをエクスポート
- project.json
- tsconfig.json
さらに、以下を行います:
- エージェントの
agent.tsを変換して、MCP サーバーのツールをインポートして使用する - エージェントの
devターゲットを更新して、MCP サーバーの serve ターゲットに依存させる - 必要な依存関係をインストールする
接続された MCP サーバーの使用
Section titled “接続された MCP サーバーの使用”ジェネレーターは、エージェントの agent.ts を変換して MCP サーバーのツールを使用します:
import { Agent, tool } from '@strands-agents/sdk';import { MyMcpServerClientStrands } from '@my-scope/agent-connection';
export const getAgent = async () => { const myMcpServerClient = await MyMcpServerClientStrands.create(); return new Agent({ systemPrompt: '...', tools: [myMcpServerClient], });};AgentCore セッション ID は、X-Amzn-Bedrock-AgentCore-Runtime-Session-Id ヘッダーを介して MCP サーバーに自動的に伝播されるため、create() は引数を取りません。エージェントサーバーは、受信リクエストのセッションを AsyncLocalStorage コンテキスト(生成された router.ts の enterSessionContext、または A2A/AG-UI セッションミドルウェアの runWithSessionId)にバインドし、agentcore-fetch.ts の接続クライアントの fetch がすべての送信呼び出しにそれをスタンプします。これにより、Bedrock AgentCore Observability の一貫性が確保されます。
インフラストラクチャ
Section titled “インフラストラクチャ”接続ジェネレーターを実行した後、エージェントに MCP サーバーを呼び出す権限を付与する必要があります:
const mcpServer = new MyMcpServer(this, 'MyMcpServer');const myAgent = new MyAgent(this, 'MyAgent');
// Grant the agent permissions to invoke the MCP servermcpServer.grantInvokeAccess(myAgent);grantInvokeAccess は、MCP サーバーのランタイム ARN に対して AgentCore の呼び出しアクション(InvokeAgentRuntime、InvokeAgentRuntimeForUser、InvokeAgentRuntimeWithWebSocketStream)を設定します。
MCP サーバーの AgentCore ランタイム ARN は、生成された CDK コンストラクトによって Runtime Configuration の agentcore 名前空間に自動的に登録されるため、エージェントは実行時にそれを検出できます。
接続ジェネレーターを実行した後、Terraform 設定でエージェントに MCP サーバーを呼び出す権限を付与する必要があります:
module "inventory_mcp_server" { source = "../../common/terraform/src/app/mcp-servers/inventory-mcp"}
module "story_agent" { source = "../../common/terraform/src/app/agents/story-agent"}
# Grant the agent permissions to invoke the MCP serverresource "aws_iam_policy" "agent_invoke_mcp" { name = "AgentInvokeMcpPolicy" policy = jsonencode({ Version = "2012-10-17" Statement = [{ Effect = "Allow" Action = [ "bedrock-agentcore:InvokeAgentRuntime", "bedrock-agentcore:InvokeAgentRuntimeWithWebSocketStream", ] Resource = [ module.inventory_mcp_server.agent_core_runtime_arn, "${module.inventory_mcp_server.agent_core_runtime_arn}/*", ] }] })}
resource "aws_iam_role_policy_attachment" "agent_invoke_mcp" { role = module.story_agent.agent_core_runtime_role_arn policy_arn = aws_iam_policy.agent_invoke_mcp.arn}MCP サーバーの AgentCore ランタイム ARN は、生成された Terraform モジュールによって Runtime Configuration の agentcore 名前空間に自動的に登録されるため、エージェントは実行時にそれを検出できます。
ローカル開発
Section titled “ローカル開発”ジェネレーターは、エージェントの dev ターゲットを次のように設定します:
- 接続された MCP サーバーを自動的に起動する
LOCAL_DEV=trueを設定して、生成されたクライアントが AgentCore の代わりに直接 HTTP トランスポートを使用するようにする
エージェントをローカルで実行するには:
pnpm nx <agent-name>-dev <project-name>yarn nx <agent-name>-dev <project-name>npx nx <agent-name>-dev <project-name>bunx nx <agent-name>-dev <project-name>これにより、エージェントとすべての接続された MCP サーバーが起動し、エージェントは割り当てられたローカルポートで HTTP 経由で MCP サーバーに直接接続します。