Skip to content

TypeScript Agent から MCP へ

connection ジェネレーターは、TypeScript Agent を MCP サーバー(TypeScript または Python)に接続できます。

このジェネレーターは、エージェントが MCP サーバーのツールを検出して呼び出すために必要なすべての配線を設定します。これは、AWS にデプロイされた場合(Bedrock AgentCore 経由)とローカルで実行される場合の両方で機能します。

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

  1. Strands Agent コンポーネントを持つ TypeScript プロジェクト
  2. MCP サーバーコンポーネント(ts#mcp-server または py#mcp-server)を持つプロジェクト
  3. 両方のコンポーネントが infra: agentcore で作成されていること
Terminal window
pnpm nx g @aws/nx-plugin:connection
変更されるファイルを確認するためにドライランを実行することもできます
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

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

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

ジェネレーターは共有の 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-mcp-transport.ts フレームワークに依存しない MCP トランスポート
        • agentcore-mcp-client-strands.ts トランスポートをラップする Strands MCP クライアント
      • index.ts すべてのクライアントをエクスポート
    • project.json
    • tsconfig.json

さらに、以下を行います:

  • エージェントの agent.ts を変換して、MCP サーバーのツールをインポートして使用する
  • エージェントの dev ターゲットを更新して、MCP サーバーの serve ターゲットに依存させる
  • 必要な依存関係をインストールする

ジェネレーターは、エージェントの agent.ts を変換して MCP サーバーのツールを使用します:

packages/example/src/my-agent/agent.ts
import { Agent, tool } from '@strands-agents/sdk';
import { MyMcpServerClientStrands } from '@my-scope/agent-connection';
export const getAgent = async (sessionId: string) => {
const myMcpServerClient = await MyMcpServerClientStrands.create(sessionId);
return new Agent({
systemPrompt: '...',
tools: [myMcpServerClient],
});
};

sessionId パラメーターは呼び出し元から渡され、Bedrock AgentCore Observability の一貫性を確保します。

接続ジェネレーターを実行した後、エージェントに MCP サーバーを呼び出す権限を付与する必要があります:

packages/infra/src/stacks/application-stack.ts
const mcpServer = new MyMcpServer(this, 'MyMcpServer');
const myAgent = new MyAgent(this, 'MyAgent');
// Grant the agent permissions to invoke the MCP server
mcpServer.grantInvokeAccess(myAgent);

MCP サーバーの AgentCore ランタイム ARN は、生成された CDK コンストラクトによって Runtime Configurationagentcore 名前空間に自動的に登録されるため、エージェントは実行時にそれを検出できます。

ジェネレーターは、エージェントの dev ターゲットを次のように設定します:

  1. 接続された MCP サーバーを自動的に起動する
  2. LOCAL_DEV=true を設定して、生成されたクライアントが AgentCore の代わりに直接 HTTP トランスポートを使用するようにする

エージェントをローカルで実行するには:

Terminal window
pnpm nx <agent-name>-dev <project-name>

これにより、エージェントとすべての接続された MCP サーバーが起動し、エージェントは割り当てられたローカルポートで HTTP 経由で MCP サーバーに直接接続します。