Passerelle AgentCore vers serveur MCP
Le générateur connection peut enregistrer un serveur MCP (soit TypeScript soit Python) comme cible d’une passerelle AgentCore.
Une fois connectée, la passerelle agrège les outils du serveur MCP dans son point de terminaison MCP unique, évalue les appels par rapport à son moteur de politique Cedar, et signe le trafic sortant vers le serveur MCP avec IAM SigV4.
Prérequis
Section intitulée « Prérequis »Avant d’utiliser ce générateur, assurez-vous d’avoir :
- Un projet
agentcore-gateway - Un composant serveur MCP (
ts#mcp-serveroupy#mcp-server) créé avecinfra: agentcoreetauth: iam
La passerelle doit avoir protocol: mcp et le serveur MCP doit avoir auth: iam — le générateur valide les deux. Les serveurs MCP non-IAM ne peuvent pas être attachés car la passerelle signe le trafic sortant avec SigV4.
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 le projet de passerelle comme source et le projet de serveur MCP comme cible. Si le projet de serveur MCP contient plusieurs composants, spécifiez 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 relie les projets existants ensemble plutôt que d’émettre de nouveaux fichiers source. Les fichiers suivants sont modifiés :
Répertoirepackages/<gateway>
- project.json
<gateway>-devgagne une dépendance sur le<mcp>-devdu serveur MCP - local-dev.ts
ATTACHED_MCP_SERVERSmis à jour pour que la passerelle locale agrège le serveur MCP
- project.json
La cible dev du projet de passerelle gagne une dépendance sur la cible <mcp>-dev du serveur MCP, donc l’exécution de la passerelle localement démarre également le serveur MCP. Le serveur MCP est également enregistré dans le local-dev.ts du projet de passerelle afin que la passerelle locale agrège ses outils.
Ajouter la cible du serveur MCP à votre stack
Section intitulée « Ajouter la cible du serveur MCP à votre stack »Le générateur ne peut pas câbler automatiquement la cible du serveur MCP dans votre infrastructure car il ne sait pas quelle stack ou quel module instancie la passerelle. Ajoutez vous-même un seul appel à gateway.addMcpServer(server).
Dans la stack où vous instanciez la passerelle, enregistrez le serveur MCP comme cible :
const myMcpServer = new MyMcpServer(this, 'MyMcpServer');const myGateway = new MyGateway(this, 'MyGateway');
// Register the MCP server as a target of the Gateway. The target name// defaults to the MCP server's `mcpServerName` (its class name in// kebab-case, e.g. `MyMcpServer` -> `my-mcp-server`).myGateway.addMcpServer(myMcpServer);Le nom de cible de la passerelle (l’id de la construction en kebab-case par défaut) est utilisé comme préfixe pour les noms d’action Cedar — le format d’action est AgentCore::Action::"<targetName>___<toolName>". Voir la section Rédaction de politiques. Gardez le nom de cible court et stable ; le changer ultérieurement invalide toutes les politiques Cedar qui référencent l’ancien nom.
Pour remplacer le nom de cible par défaut, passez gatewayTargetName :
myGateway.addMcpServer(myMcpServer, { gatewayTargetName: 'my-mcp' });La construction configure la cible avec iamCredentialProvider.service = 'bedrock-agentcore' afin que la passerelle signe les appels sortants en utilisant son propre rôle d’exécution.
Dans le fichier Terraform où vous instanciez la passerelle, câblez la cible du serveur MCP :
module "my_mcp_server" { source = "../../common/terraform/src/app/mcp-servers/my-mcp-server"}
module "my_gateway" { source = "../../common/terraform/src/app/gateways/my-gateway" policy_dependencies = [aws_bedrockagentcore_gateway_target.my_mcp_server.target_id]}
# Register the MCP server as a target of the Gatewayresource "aws_bedrockagentcore_gateway_target" "my_mcp_server" { gateway_identifier = module.my_gateway.gateway_id name = "my-mcp-server"
target_configuration { mcp { mcp_server { endpoint = "https://bedrock-agentcore.${local.aws_region}.amazonaws.com/runtimes/${urlencode(module.my_mcp_server.agent_core_runtime_arn)}/invocations?qualifier=DEFAULT" } } }
credential_provider_configuration { gateway_iam_role { service = "bedrock-agentcore" } }}Le name de la cible (my-mcp-server ci-dessus) est utilisé comme préfixe pour les noms d’action Cedar — voir la section Rédaction de politiques. policy_dependencies garantit que les politiques Cedar référençant les actions de cette cible sont créées après que la cible a enregistré ces actions.
Développement local
Section intitulée « Développement local »L’exécution de la passerelle localement avec :
pnpm nx dev <gateway-name>yarn nx dev <gateway-name>npx nx dev <gateway-name>bunx nx dev <gateway-name>démarre une passerelle locale plus chaque serveur MCP attaché sur son port local assigné. La passerelle locale expose un point de terminaison MCP unique qui agrège les outils des serveurs attachés. Les agents connectés à la passerelle via les générateurs de connexion de passerelle TypeScript ou Python pointent vers elle lors de l’exécution avec LOCAL_DEV=true.
les exécutions locales et déployées. :::