Salta ai contenuti

Python Strands Agent a MCP

Il generatore connection può connettere il tuo Python Strands Agent a un server MCP (sia TypeScript che Python).

Il generatore configura tutti i collegamenti necessari in modo che il tuo agente possa scoprire e invocare gli strumenti del server MCP, sia quando viene distribuito su AWS (tramite Bedrock AgentCore) che quando viene eseguito localmente.

Prima di utilizzare questo generatore, assicurati di avere:

  1. Un progetto Python con un componente Strands Agent
  2. Un progetto con un componente server MCP (sia ts#mcp-server che py#mcp-server)
  3. Entrambi i componenti creati con computeType: BedrockAgentCoreRuntime
  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - connection
  5. Compila i parametri richiesti
    • Clicca su Generate

    Seleziona il tuo progetto agente come sorgente e il tuo progetto server MCP come destinazione. Se i tuoi progetti contengono più componenti, specifica le opzioni sourceComponent e targetComponent per disambiguare.

    Parametro Tipo Predefinito Descrizione
    sourceProject Obbligatorio string - Il progetto sorgente
    targetProject Obbligatorio string - Il progetto di destinazione a cui connettersi
    sourceComponent string - Il componente sorgente da cui connettersi (nome del componente, percorso relativo alla radice del progetto sorgente, o id del generatore). Usare '.' per selezionare esplicitamente il progetto come sorgente.
    targetComponent string - Il componente di destinazione a cui connettersi (nome del componente, percorso relativo alla radice del progetto di destinazione, o id del generatore). Usare '.' per selezionare esplicitamente il progetto come destinazione.

    Il generatore crea un progetto Python condiviso agent_connection in packages/common/agent_connection/ (se non esiste già). I moduli client per-connessione vengono generati in questo progetto condiviso:

    • Directorypackages/common/agent_connection
      • Directory<scope>_agent_connection
        • __init__.py Ri-esporta i client per-connessione
        • Directorycore
          • agentcore_mcp_client.py Client MCP AgentCore di base
        • Directoryapp
          • <mcp_server_name>_client.py Client per-connessione per ogni server MCP

    Inoltre, il generatore:

    • Trasforma il file agent.py del tuo agente per importare e utilizzare gli strumenti del server MCP tramite un client basato su classi
    • Aggiunge il progetto agent_connection come dipendenza del workspace del tuo progetto agente
    • Aggiorna il target serve-local dell’agente per dipendere dal target serve del server MCP

    Il generatore trasforma il file agent.py del tuo agente per utilizzare gli strumenti del server 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()],
    )

    Il parametro session_id viene passato dal chiamante, garantendo la coerenza per Bedrock AgentCore Observability.

    Dopo aver eseguito il generatore di connessione, devi concedere all’agente il permesso di invocare il server 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);

    L’ARN del runtime AgentCore del server MCP viene registrato automaticamente nel namespace connection della Runtime Configuration dal costrutto CDK generato, in modo che l’agente possa scoprirlo a runtime.

    Il generatore configura il target serve-local dell’agente per:

    1. Avviare automaticamente i server MCP connessi
    2. Impostare SERVE_LOCAL=true in modo che il client generato utilizzi il trasporto HTTP diretto invece di AgentCore

    Esegui l’agente localmente con:

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

    Questo avvierà sia l’agente che tutti i server MCP connessi, con l’agente che si connette ai server MCP direttamente tramite HTTP sulle loro porte locali assegnate.