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 para todas as ferramentas registradas dentro de createServer.

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

  1. Um projeto ts#mcp-server
  2. Um projeto ts#rdb
Terminal window
pnpm nx g @aws/nx-plugin:connection
Você também pode realizar uma execução simulada para ver quais arquivos seriam alterados
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

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âmetroTipoPadrãoDescrição
sourceProject Obrigatóriostring-O projeto de origem
targetProject Obrigatóriostring-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.
preferInstallDependencies booleantrueSe deve preferir instalar dependências após a execução do gerador. Defina como false para adiar a instalação ao executar múltiplos geradores em lote (uma instalação ainda é executada se necessário para que os geradores subsequentes possam calcular o grafo de projetos Nx); instale uma vez no final.

O gerador modifica dois arquivos no diretório de origem do seu servidor MCP:

  • Directorypackages/my-service/src/my-mcp
    • server.ts Cliente Prisma obtido e disponível para todas as ferramentas registradas dentro de createServer
    • Dockerfile Pacote CA do RDS instalado para conexões SSL com Aurora

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

O cliente Prisma é obtido dentro de createServer e está disponível para todas as ferramentas e recursos registrados lá:

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

Executar o gerador novamente com um destino diferente adiciona o segundo banco de dados ao lado do primeiro. Ambos são obtidos dentro de createServer:

packages/my-service/src/my-mcp/server.ts
export const createServer = async () => {
const postgresDb = await getPostgresDb();
const mysqlDb = await getMysqlDb();
const server = new McpServer({ ... });
// register tools using both clients
return server;
};

O construct do servidor MCP gerado implementa IGrantable e IConnectable, então você pode conceder acesso de rede e IAM ao banco de dados diretamente no 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 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 à função de execução do servidor.

O gerador de conexão atualiza o Dockerfile para instalar o pacote de CA do Amazon RDS em /usr/local/share/ca-certificates/rds-bundle.crt. Defina NODE_EXTRA_CA_CERTS para esse caminho para que o Node.js confie no certificado ao conectar sem RDS Proxy:

packages/infra/src/stacks/application-stack.ts
new MyMcpServer(this, 'MyMcpServer', {
...
environmentVariables: {
NODE_EXTRA_CA_CERTS: '/usr/local/share/ca-certificates/rds-bundle.crt',
},
});

Para mais detalhes, consulte a documentação SSL/TLS do Amazon RDS. Ao usar RDS Proxy, você não precisa configurar NODE_EXTRA_CA_CERTS.

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

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