Aller au contenu

Agent Python Strands vers MCP

Le générateur connection peut connecter votre Python Strands 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.

Avant d’utiliser ce générateur, assurez-vous d’avoir :

  1. Un projet Python avec un composant Strands Agent
  2. Un projet avec un composant serveur MCP (soit ts#mcp-server soit py#mcp-server)
  3. Les deux composants créés avec computeType: BedrockAgentCoreRuntime
  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - connection
  5. Remplissez les paramètres requis
    • Cliquez sur Generate

    Sé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.

    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_mcp_client.py Client MCP AgentCore principal
        • Répertoireapp
          • <mcp_server_name>_client.py Client par connexion pour chaque serveur MCP

    De plus, le générateur :

    • Transforme le fichier agent.py de votre agent pour importer et utiliser les outils du serveur MCP via un client basé sur une classe
    • Ajoute le projet agent_connection comme dépendance d’espace de travail de votre projet d’agent
    • Met à jour la cible serve-local de l’agent pour dépendre de la cible serve du serveur MCP

    Le générateur transforme le fichier agent.py de votre agent pour utiliser les outils du serveur 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()],
    )

    Le paramètre session_id est transmis depuis l’appelant, garantissant la cohérence pour Bedrock AgentCore Observability.

    Après avoir exécuté le générateur de connexion, vous devez accorder à l’agent la permission d’invoquer le serveur 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 du runtime AgentCore du serveur MCP est automatiquement enregistré dans l’espace de noms connection 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.

    Le générateur configure la cible serve-local de l’agent pour :

    1. Démarrer automatiquement le(s) serveur(s) MCP connecté(s)
    2. Définir SERVE_LOCAL=true afin que le client généré utilise le transport HTTP direct au lieu d’AgentCore

    Exécutez l’agent localement avec :

    Terminal window
    pnpm nx <agent-name>-serve-local <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.