Skip to content

Python Strands Agent から MCP へ

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

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

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

  1. Strands Agent コンポーネントを含む Python プロジェクト
  2. MCP サーバーコンポーネント(ts#mcp-server または py#mcp-server)を含むプロジェクト
  3. 両方のコンポーネントが computeType: BedrockAgentCoreRuntime で作成されていること
  1. インストール Nx Console VSCode Plugin まだインストールしていない場合
  2. VSCodeでNxコンソールを開く
  3. クリック Generate (UI) "Common Nx Commands"セクションで
  4. 検索 @aws/nx-plugin - connection
  5. 必須パラメータを入力
    • クリック Generate

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

    パラメータ デフォルト 説明
    sourceProject 必須 string - ソース プロジェクト
    targetProject 必須 string - 接続先のターゲット プロジェクト
    sourceComponent string - 接続元のソース コンポーネント (コンポーネント名、ソース プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをソースとして明示的に選択するには '.' を使用します。
    targetComponent string - 接続先のターゲット コンポーネント (コンポーネント名、ターゲット プロジェクト ルートからの相対パス、またはジェネレーター ID)。プロジェクトをターゲットとして明示的に選択するには '.' を使用します。

    ジェネレーターは、packages/common/agent_connection/ に共有の agent_connection Python プロジェクトを作成します(まだ存在しない場合)。接続ごとのクライアントモジュールがこの共有プロジェクトに生成されます:

    • Directorypackages/common/agent_connection
      • Directory<scope>_agent_connection
        • __init__.py 接続ごとのクライアントを再エクスポート
        • Directorycore
          • agentcore_mcp_client.py コア AgentCore MCP クライアント
        • Directoryapp
          • <mcp_server_name>_client.py 各 MCP サーバーの接続ごとのクライアント

    さらに、ジェネレーターは以下を行います:

    • エージェントの agent.py を変換して、クラスベースのクライアント経由で MCP サーバーのツールをインポートして使用
    • agent_connection プロジェクトをエージェントプロジェクトのワークスペース依存関係として追加
    • エージェントの serve-local ターゲットを更新して、MCP サーバーの serve ターゲットに依存するようにする

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

    packages/my-project/my_module/agent/agent.py
    from contextlib import contextmanager
    from strands import Agent
    from my_scope_agent_connection import MyMcpServerClient
    @contextmanager
    def get_agent(session_id: str):
    my_mcp_server = MyMcpServerClient.create(session_id=session_id)
    with (
    my_mcp_server,
    ):
    yield Agent(
    system_prompt="...",
    tools=[*my_mcp_server.list_tools_sync()],
    )

    session_id パラメーターは呼び出し元から渡され、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 access to bedrock models
    myAgent.agentCoreRuntime.addToRolePolicy(
    new PolicyStatement({
    actions: ['bedrock:InvokeModel', 'bedrock:InvokeModelWithResponseStream'],
    resources: ['arn:aws:bedrock:*:*:foundation-model/*', 'arn:aws:bedrock:*:*:inference-profile/*'],
    }),
    );
    // Grant the agent permissions to invoke the MCP server
    mcpServer.grantInvokeAccess(myAgent.agentCoreRuntime);

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

    ジェネレーターは、エージェントの serve-local ターゲットを以下のように設定します:

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

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

    Terminal window
    pnpm nx <agent-name>-serve-local <project-name>

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