Aller au contenu

Serveur MCP vers Base de Données Relationnelle

Le générateur connection relie un serveur MCP TypeScript à un projet de base de données relationnelle, rendant un client Prisma disponible à l’intérieur de createServer et de ses points d’entrée de transport.

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

  1. Un projet ts#mcp-server
  2. Un projet ts#rdb
  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 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è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 modifie trois fichiers dans le répertoire source de votre serveur MCP :

    • Répertoirepackages/my-service/src/my-mcp
      • server.ts createServer mis à jour pour accepter le paramètre { db }
      • http.ts Client Prisma créé au-dessus de const server = createServer({ db })
      • stdio.ts Client Prisma créé avant await createServer({ db }).connect(transport)

    De plus, la cible <mcp-server-name>-serve-local est mise à jour pour dépendre de la cible serve-local de la base de données.

    createServer reçoit le client Prisma en tant que paramètre afin qu’il reste synchrone et puisse transmettre le client aux outils et ressources :

    packages/my-service/src/my-mcp/server.ts
    import { getPrisma as getMyDb } from ':my-scope/my-db';
    export const createServer = ({
    myDb,
    }: {
    myDb: Awaited<ReturnType<typeof getMyDb>>;
    }) => {
    const server = new McpServer({ name: 'my-service', version: '1.0.0' });
    // register tools/resources that use myDb
    return server;
    };

    Le client Prisma est créé à l’intérieur du gestionnaire de requêtes, au-dessus de l’appel à createServer :

    packages/my-service/src/my-mcp/http.ts
    import { getPrisma as getMyDb } from ':my-scope/my-db';
    app.post('/mcp', async (req, res) => {
    try {
    const myDb = await getMyDb();
    const server = createServer({ myDb });
    // ...
    }
    });

    Le même modèle s’applique au point d’entrée du transport stdio :

    packages/my-service/src/my-mcp/stdio.ts
    import { getPrisma as getMyDb } from ':my-scope/my-db';
    export const startMcpServer = async () => {
    const transport = new StdioServerTransport();
    const myDb = await getMyDb();
    await createServer({ myDb }).connect(transport);
    };

    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 sont transmises ensemble à createServer :

    packages/my-service/src/my-mcp/http.ts
    const postgresDb = await getPostgresDb();
    const mySqlDb = await getMySqlDb();
    const server = createServer({ postgresDb, mysqlDb });

    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 { MyDatabase } from ':my-scope/common-constructs';
    const db = new MyDatabase(this, 'Db', { vpc, ... });
    const myMcpServer = new MyMcpServer(this, 'MyMcpServer', { vpc, ... });
    db.allowDefaultPortFrom(myMcpServer);
    db.grantConnect(myMcpServer);

    allowDefaultPortFrom ouvre la règle du groupe de sécurité afin 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.

    Terminal window
    pnpm nx <mcp-server-name>-serve-local <project-name>

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