Salta ai contenuti

Python Agent a MCP

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

Il generatore configura tutto il cablaggio necessario affinché il tuo agent possa scoprire e invocare gli strumenti del server MCP, sia quando distribuito su AWS (tramite Bedrock AgentCore) sia quando eseguito localmente.

Prima di utilizzare questo generatore, assicurati di avere:

  1. Un progetto Python con un componente Python Agent (Strands o LangChain)
  2. Un progetto con un componente server MCP (sia ts#mcp-server che py#mcp-server)
  3. Entrambi i componenti creati con infra: agentcore
Terminal window
pnpm nx g @aws/nx-plugin:connection
Puoi anche eseguire una prova per vedere quali file verrebbero modificati
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

Seleziona il tuo progetto agent 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.

ParametroTipoPredefinitoDescrizione
sourceProject Obbligatoriostring-Il progetto sorgente
targetProject Obbligatoriostring-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.
preferInstallDependencies booleantrueSe preferire l'installazione delle dipendenze dopo l'esecuzione del generatore. Impostare su false per rimandare l'installazione quando si eseguono più generatori in batch (l'installazione viene comunque eseguita se necessaria affinché i generatori successivi possano calcolare il grafo dei progetti Nx); installare una volta alla fine.

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_endpoints.py Risoluzione ARN/URL indipendente dal framework
        • agentcore_mcp_transport.py Trasporto MCP indipendente dal framework
        • agentcore_mcp_client_<framework>.py Client MCP che avvolge il trasporto per il framework del tuo agent
        • Directoryauth/ httpx.Auth SigV4 / session-forwarding indipendente dal framework
      • Directoryapp
        • <mcp_server_name>_client_<framework>.py Client per-connessione per ogni server MCP

Il suffisso del client corrisponde al framework del tuo agent (_strands o _langchain).

Inoltre, il generatore:

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

Il generatore trasforma il file agent.py del tuo agent 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 MyMcpServerClientStrands
@contextmanager
def get_agent():
my_mcp_server = MyMcpServerClientStrands.create()
with (
my_mcp_server,
):
yield Agent(
system_prompt="...",
tools=[*my_mcp_server.list_tools_sync()],
)

Il client Strands è un context manager, inserito in un blocco with attorno all’agent.

L’ID di sessione AgentCore viene propagato automaticamente al server MCP tramite l’header X-Amzn-Bedrock-AgentCore-Runtime-Session-Id per entrambi i framework, garantendo coerenza per Bedrock AgentCore Observability.

Dopo aver eseguito il generatore di connessione, devi concedere all’agent 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 permissions to invoke the MCP server
mcpServer.grantInvokeAccess(myAgent);

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

Il generatore configura il target dev dell’agent per:

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

Esegui l’agent localmente con:

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

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