Salta ai contenuti

Server MCP a Database Relazionale

Il generatore connection collega un Server MCP TypeScript a un progetto Database Relazionale, rendendo disponibile un client Prisma all’interno di createServer e dei suoi punti di ingresso di trasporto.

Prima di utilizzare questo generatore, assicurati di avere:

  1. Un progetto ts#mcp-server
  2. Un progetto ts#rdb
  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - connection
  5. Compila i parametri richiesti
    • Clicca su Generate

    Seleziona il tuo progetto server MCP come sorgente e il tuo progetto database relazionale come destinazione. Se il progetto contiene più componenti server MCP, specifica sourceComponent per disambiguare.

    Parametro Tipo Predefinito Descrizione
    sourceProject Obbligatorio string - Il progetto sorgente
    targetProject Obbligatorio string - Il progetto di destinazione a cui connettersi
    sourceComponent string - Il componente sorgente da cui connettersi (nome del componente, percorso relativo alla radice del progetto sorgente, o id del generatore). Usare '.' per selezionare esplicitamente il progetto come sorgente.
    targetComponent string - Il componente di destinazione a cui connettersi (nome del componente, percorso relativo alla radice del progetto di destinazione, o id del generatore). Usare '.' per selezionare esplicitamente il progetto come destinazione.

    Il generatore modifica tre file nella directory sorgente del tuo server MCP:

    • Directorypackages/my-service/src/my-mcp
      • server.ts createServer aggiornato per accettare il parametro { db }
      • http.ts Client Prisma creato sopra const server = createServer({ db })
      • stdio.ts Client Prisma creato prima di await createServer({ db }).connect(transport)

    Inoltre, il target <mcp-server-name>-serve-local viene aggiornato per dipendere dal target serve-local del database.

    createServer riceve il client Prisma come parametro in modo da rimanere sincrono e poter passare il client a strumenti e risorse:

    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;
    };

    Il client Prisma viene creato all’interno del gestore delle richieste, sopra la chiamata a 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 });
    // ...
    }
    });

    Lo stesso schema si applica al punto di ingresso del trasporto 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);
    };

    Eseguire nuovamente il generatore con una destinazione diversa aggiunge il secondo database accanto al primo. Entrambi vengono passati a createServer insieme:

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

    Il costrutto del server MCP generato implementa IGrantable e IConnectable, quindi puoi concedere l’accesso di rete e IAM al database direttamente sul costrutto.

    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 apre la regola del security group in modo che il runtime del server MCP possa raggiungere la porta del database. grantConnect concede il permesso IAM rds-db:connect al ruolo di esecuzione del server.

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

    Questo avvia il server MCP e tutti i database connessi. La variabile d’ambiente SERVE_LOCAL=true fa sì che ogni client Prisma si connetta al suo database Docker locale invece che ad Aurora.