Pular para o conteúdo

Servidor MCP para Banco de Dados Relacional

O gerador connection conecta um Servidor MCP TypeScript a um projeto de Banco de Dados Relacional, disponibilizando um cliente Prisma dentro de createServer e seus pontos de entrada de transporte.

Antes de usar este gerador, certifique-se de ter:

  1. Um projeto ts#mcp-server
  2. Um projeto ts#rdb
  1. Instale o Nx Console VSCode Plugin se ainda não o fez
  2. Abra o console Nx no VSCode
  3. Clique em Generate (UI) na seção "Common Nx Commands"
  4. Procure por @aws/nx-plugin - connection
  5. Preencha os parâmetros obrigatórios
    • Clique em Generate

    Selecione seu projeto de servidor MCP como origem e seu projeto de banco de dados relacional como destino. Se o projeto contiver múltiplos componentes de servidor MCP, especifique sourceComponent para desambiguar.

    Parâmetro Tipo Padrão Descrição
    sourceProject Obrigatório string - O projeto de origem
    targetProject Obrigatório string - O projeto de destino para conectar
    sourceComponent string - O componente de origem para conectar (nome do componente, caminho relativo à raiz do projeto de origem, ou id do gerador). Use '.' para selecionar explicitamente o projeto como origem.
    targetComponent string - O componente de destino para conectar (nome do componente, caminho relativo à raiz do projeto de destino, ou id do gerador). Use '.' para selecionar explicitamente o projeto como destino.

    O gerador modifica três arquivos no diretório de origem do seu servidor MCP:

    • Directorypackages/my-service/src/my-mcp
      • server.ts createServer atualizado para aceitar o parâmetro { db }
      • http.ts Cliente Prisma criado acima de const server = createServer({ db })
      • stdio.ts Cliente Prisma criado antes de await createServer({ db }).connect(transport)

    Além disso, o target <mcp-server-name>-serve-local é atualizado para depender do target serve-local do banco de dados.

    createServer recebe o cliente Prisma como parâmetro para que permaneça síncrono e possa passar o cliente para ferramentas e recursos:

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

    O cliente Prisma é criado dentro do manipulador de requisição, acima da chamada 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 });
    // ...
    }
    });

    O mesmo padrão se aplica ao ponto de entrada do transporte 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);
    };

    Executar o gerador novamente com um destino diferente adiciona o segundo banco de dados junto ao primeiro. Ambos são passados para createServer juntos:

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

    O construtor do servidor MCP gerado implementa IGrantable e IConnectable, então você pode conceder acesso de rede e IAM ao banco de dados diretamente no construtor.

    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 abre a regra do grupo de segurança para que o runtime do servidor MCP possa alcançar a porta do banco de dados. grantConnect concede a permissão IAM rds-db:connect ao papel de execução do servidor.

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

    Isso inicia o servidor MCP e todos os bancos de dados conectados. A variável de ambiente SERVE_LOCAL=true faz com que cada cliente Prisma se conecte ao seu banco de dados Docker local em vez do Aurora.