Agent Python vers MCP
Le générateur connection peut connecter votre Python Agent à un serveur MCP (soit TypeScript soit Python).
Le générateur configure tout le câblage nécessaire pour que votre agent puisse découvrir et invoquer les outils du serveur MCP, à la fois lors du déploiement sur AWS (via Bedrock AgentCore) et lors de l’exécution locale.
Prérequis
Section intitulée « Prérequis »Avant d’utiliser ce générateur, assurez-vous d’avoir :
- Un projet Python avec un composant Python Agent (Strands ou LangChain)
- Un projet avec un composant serveur MCP (soit
ts#mcp-serversoitpy#mcp-server) - Les deux composants créés avec
infra: agentcore
Utilisation
Section intitulée « Utilisation »Exécuter le générateur
Section intitulée « Exécuter le générateur »- Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
- Ouvrez la console Nx dans VSCode
- Cliquez sur
Generate (UI)dans la section "Common Nx Commands" - Recherchez
@aws/nx-plugin - connection - Remplissez les paramètres requis
- Cliquez sur
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionVous pouvez également effectuer une simulation pour voir quels fichiers seraient modifiés
pnpm nx g @aws/nx-plugin:connection --dry-runyarn nx g @aws/nx-plugin:connection --dry-runnpx nx g @aws/nx-plugin:connection --dry-runbunx nx g @aws/nx-plugin:connection --dry-runSélectionnez votre projet d’agent comme source et votre projet de serveur MCP comme cible. Si vos projets contiennent plusieurs composants, spécifiez les options sourceComponent et targetComponent pour lever l’ambiguïté.
| Paramètre | Type | Par défaut | Description |
|---|---|---|---|
| sourceProject Requis | string | - | Le projet source |
| targetProject Requis | string | - | Le projet cible auquel se connecter |
| sourceComponent | string | - | Le composant source depuis lequel se connecter (nom du composant, chemin relatif à la racine du projet source, ou identifiant du générateur). Utilisez '.' pour sélectionner explicitement le projet comme source. |
| targetComponent | string | - | Le composant cible auquel se connecter (nom du composant, chemin relatif à la racine du projet cible, ou identifiant du générateur). Utilisez '.' pour sélectionner explicitement le projet comme cible. |
| preferInstallDependencies | boolean | true | Indique s'il faut privilégier l'installation des dépendances après l'exécution du générateur. Définir à false pour différer l'installation lors de l'exécution de plusieurs générateurs en lot (une installation s'exécute quand même si nécessaire pour que les générateurs suivants puissent calculer le graphe de projet Nx) ; installer une seule fois à la fin. |
Sortie du générateur
Section intitulée « Sortie du générateur »Le générateur crée un projet Python partagé agent_connection dans packages/common/agent_connection/ (s’il n’existe pas déjà). Les modules clients par connexion sont générés dans ce projet partagé :
Répertoirepackages/common/agent_connection
Répertoire<scope>_agent_connection
- __init__.py Ré-exporte les clients par connexion
Répertoirecore
- agentcore_endpoints.py Résolution ARN/URL indépendante du framework
- agentcore_mcp_transport.py Transport MCP indépendant du framework
- agentcore_mcp_client_<framework>.py Client MCP encapsulant le transport pour le framework de votre agent
Répertoireauth/
httpx.Authindépendant du framework pour SigV4 / transfert de session- …
Répertoireapp
- <mcp_server_name>_client_<framework>.py Client par connexion pour chaque serveur MCP
Le suffixe du client correspond au framework de votre agent (_strands ou _langchain).
De plus, le générateur :
- Transforme le fichier
agent.pyde votre agent pour importer et utiliser les outils du serveur MCP via un client basé sur une classe - Ajoute le projet
agent_connectioncomme dépendance d’espace de travail de votre projet d’agent - Met à jour la cible
devde l’agent pour dépendre de la cible serve du serveur MCP
Utilisation du serveur MCP connecté
Section intitulée « Utilisation du serveur MCP connecté »Le générateur transforme le fichier agent.py de votre agent pour utiliser les outils du serveur 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()], )Le client Strands est un gestionnaire de contexte, entré dans un bloc with autour de l’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], )Le client LangChain retourne une liste d’outils chargés via langchain-mcp-adapters. Chaque outil ouvre une nouvelle session MCP par appel, de sorte que les outils restent utilisables pendant toute la durée de vie de l’agent — aucun bloc with n’est nécessaire.
L’ID de session AgentCore est propagé automatiquement au serveur MCP via l’en-tête X-Amzn-Bedrock-AgentCore-Runtime-Session-Id pour les deux frameworks, garantissant la cohérence pour Bedrock AgentCore Observability.
Infrastructure
Section intitulée « Infrastructure »Après avoir exécuté le générateur de connexion, vous devez accorder à l’agent la permission d’invoquer le serveur MCP :
const mcpServer = new MyMcpServer(this, 'MyMcpServer');const myAgent = new MyAgent(this, 'MyAgent');
// Grant the agent permissions to invoke the MCP servermcpServer.grantInvokeAccess(myAgent);L’ARN du runtime AgentCore du serveur MCP est automatiquement enregistré dans l’espace de noms agentcore de la Configuration d’exécution par la construction CDK générée, afin que l’agent puisse le découvrir lors de l’exécution.
Après avoir exécuté le générateur de connexion, vous devez accorder à l’agent la permission d’invoquer le serveur MCP dans votre configuration 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:InvokeAgent" Resource = 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 du runtime AgentCore du serveur MCP est automatiquement enregistré dans l’espace de noms agentcore de la Configuration d’exécution par le module Terraform généré, afin que l’agent puisse le découvrir lors de l’exécution.
Développement local
Section intitulée « Développement local »Le générateur configure la cible serve-local de l’agent pour :
- Démarrer automatiquement le(s) serveur(s) MCP connecté(s)
- Définir
SERVE_LOCAL=trueafin que le client généré utilise le transport HTTP direct au lieu d’AgentCore
Exécutez l’agent localement avec :
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>Cela démarrera à la fois l’agent et tous les serveurs MCP connectés, l’agent se connectant aux serveurs MCP directement via HTTP sur leurs ports locaux assignés.