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.
Prerequisiti
Sezione intitolata “Prerequisiti”Prima di utilizzare questo generatore, assicurati di avere:
- Un progetto Python con un componente Python Agent (Strands o LangChain)
- Un progetto con un componente server MCP (sia
ts#mcp-serverchepy#mcp-server) - Entrambi i componenti creati con
infra: agentcore
Utilizzo
Sezione intitolata “Utilizzo”Esegui il Generatore
Sezione intitolata “Esegui il Generatore”Esegui questo generatore@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- Installa il Nx Console VSCode Plugin se non l'hai già fatto
- Apri la console Nx in VSCode
- Clicca su
Generate (UI)nella sezione "Common Nx Commands" - Cerca
@aws/nx-plugin - connection - Compila i parametri richiesti
- Clicca su
Generate
Componi il tuo comando5
Obbligatorio
Obbligatorio
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.
Opzioni
Sezione intitolata “Opzioni”sourceProjectObbligatoriostringIl progetto sorgente
targetProjectObbligatoriostringIl progetto di destinazione a cui connettersi
sourceComponentstringIl componente sorgente da cui connettersi (nome del componente, percorso relativo alla radice del progetto sorgente, o id del generatore). Usa '.' per selezionare esplicitamente il progetto come sorgente.
targetComponentstringIl componente destinazione a cui connettersi (nome del componente, percorso relativo alla radice del progetto destinazione, o id del generatore). Usa '.' per selezionare esplicitamente il progetto come destinazione.
preferInstallDependenciesbooleanPredefinito:trueSe 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.
Output del Generatore
Sezione intitolata “Output del Generatore”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
- __init__.py Inizializzazione del pacchetto Python
- agentcore_endpoints.py Risoluzione ARN/URL indipendente dal framework
- agentcore_transport.py Plumbing di trasporto AgentCore condiviso
- 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.AuthSigV4 / session-forwarding indipendente dal framework- …
Directoryapp
- __init__.py Inizializzazione del pacchetto Python
- <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.pydel tuo agent per importare e utilizzare gli strumenti del server MCP tramite un client basato su classi - Aggiunge il progetto
agent_connectioncome dipendenza workspace del tuo progetto agent - Aggiorna il target
devdell’agent per dipendere dal target serve del server MCP
Utilizzo del Server MCP Connesso
Sezione intitolata “Utilizzo del Server MCP Connesso”Il generatore trasforma il file agent.py del tuo agent per utilizzare gli strumenti del server MCP:
from contextlib import contextmanagerfrom strands import Agent
from my_scope_agent_connection import MyMcpServerClientStrands
@contextmanagerdef 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.
from langchain.agents import create_agentfrom langchain_aws import ChatBedrockConverse
from my_scope_agent_connection import MyMcpServerClientLangChain
def get_agent(): my_mcp_server = MyMcpServerClientLangChain.create() return create_agent( model=ChatBedrockConverse(model=MODEL_ID, region_name=REGION), system_prompt="...", tools=[*my_mcp_server], )Il client LangChain restituisce un elenco di strumenti caricati tramite langchain-mcp-adapters. Ogni strumento apre una nuova sessione MCP per chiamata, quindi gli strumenti rimangono utilizzabili per la durata dell’agent — non è necessario un blocco with.
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.
Infrastruttura
Sezione intitolata “Infrastruttura”Dopo aver eseguito il generatore di connessione, devi concedere all’agent il permesso di invocare il server 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 collega le azioni di invocazione AgentCore (InvokeAgentRuntime, InvokeAgentRuntimeForUser e InvokeAgentRuntimeWithWebSocketStream) sull’ARN del runtime del server MCP.
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.
Dopo aver eseguito il generatore di connessione, devi concedere all’agent il permesso di invocare il server MCP nella tua configurazione Terraform:
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}L’ARN del runtime AgentCore del server MCP viene automaticamente registrato nel namespace agentcore della Runtime Configuration dal modulo Terraform generato, in modo che l’agent possa scoprirlo a runtime.
Sviluppo Locale
Sezione intitolata “Sviluppo Locale”Il generatore configura il target dev dell’agent per:
- Avviare automaticamente i server MCP connessi
- Impostare
LOCAL_DEV=truein modo che il client generato utilizzi il trasporto HTTP diretto invece di AgentCore
Esegui l’agent localmente con:
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>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.