Aller au contenu

Serveur MCP Python vers Base de Données Relationnelle

Le générateur connection connecte un serveur MCP Python à un projet de base de données relationnelle Python, rendant la session de base de données disponible pour tous les outils enregistrés dans le serveur.

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

  1. Un projet py#mcp-server
  2. Un projet py#rdb
Terminal window
pnpm nx g @aws/nx-plugin:connection
Vous pouvez également effectuer une simulation pour voir quels fichiers seraient modifiés
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

Sélectionnez votre projet de serveur MCP comme source et votre projet de base de données relationnelle comme cible. Si le projet contient plusieurs composants de serveur MCP, spécifiez sourceComponent pour lever l’ambiguïté.

ParamètreTypePar défautDescription
sourceProject Requisstring-Le projet source
targetProject Requisstring-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 booleantrueIndique 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.
  • Répertoirepackages/my_service
    • project.json Ajoute une dépendance de my_mcp_server-dev sur la cible dev de la base de données
    • pyproject.toml Ajoute le package de base de données comme dépendance de workspace
    • Répertoiremy_service
      • Répertoiremy_mcp_server
        • Dockerfile Ajoute le bundle CA RDS utilisé pour les connexions directes à Aurora

Importez session_context depuis votre package de base de données et utilisez-le dans vos outils de serveur MCP :

packages/my_service/my_service/my_mcp_server/server.py
from sqlmodel import select
from my_scope.my_db import session_context
from my_scope.my_db.models.example import ExampleModel
@mcp.tool()
async def list_examples() -> str:
"""List all example records."""
async with session_context() as session:
items = (await session.execute(select(ExampleModel))).all()
return str([item.model_dump() for item in items])

Exécuter à nouveau le générateur avec une cible différente ajoute la deuxième base de données à côté de la première. Les deux contextes de session sont disponibles pour tous les outils :

packages/my_service/my_service/my_mcp_server/server.py
from my_scope.my_db import session_context as my_db_session_context
from my_scope.other_db import session_context as other_db_session_context

Le construct de serveur MCP généré implémente IGrantable et IConnectable, vous pouvez donc accorder l’accès réseau et IAM à la base de données directement sur le construct.

packages/infra/src/stacks/application-stack.ts
import { SecurityGroup } from 'aws-cdk-lib/aws-ec2';
import { RuntimeNetworkConfiguration } from 'aws-cdk-lib/aws-bedrockagentcore';
import { MyDatabase } from '@my-scope/common-constructs';
const db = new MyDatabase(this, 'Db', { vpc, ... });
const myMcpServer = new MyMcpServer(this, 'MyMcpServer', {
networkConfiguration: RuntimeNetworkConfiguration.usingVpc(this, {
vpc,
vpcSubnets: { subnetType: SubnetType.PRIVATE_WITH_EGRESS },
securityGroups: [
new SecurityGroup(this, 'MyMcpServerSecurityGroup', { vpc, allowAllOutbound: true }),
],
}),
});
db.allowDefaultPortFrom(myMcpServer);
db.grantConnect(myMcpServer);

allowDefaultPortFrom ouvre la règle de groupe de sécurité pour que le runtime du serveur MCP puisse atteindre le port de la base de données. grantConnect accorde la permission IAM rds-db:connect au rôle d’exécution du serveur.

Lorsque le serveur MCP se connecte directement au cluster Aurora (sans RDS Proxy), le générateur de connexion met à jour le Dockerfile du serveur MCP généré pour installer le bundle CA Amazon RDS dans le magasin de confiance du système :

ADD https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem /usr/local/share/ca-certificates/rds-global-bundle.crt
RUN update-ca-certificates

Lors de l’utilisation de RDS Proxy, vous n’avez pas besoin de configurer le bundle CA RDS dans le runtime du serveur MCP.

Terminal window
pnpm nx <mcp-server-name>-dev <project-name>

Cela démarre le serveur MCP et toutes les bases de données connectées. La variable d’environnement LOCAL_DEV=true fait en sorte que le client de base de données se connecte à sa base de données Docker locale au lieu d’Aurora.