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.
Pré-requisitos
Seção intitulada “Pré-requisitos”Antes de usar este gerador, certifique-se de ter:
- Um projeto
ts#mcp-server - Um projeto
ts#rdb
Executar o Gerador
Seção intitulada “Executar o Gerador”- Instale o Nx Console VSCode Plugin se ainda não o fez
- Abra o console Nx no VSCode
- Clique em
Generate (UI)na seção "Common Nx Commands" - Procure por
@aws/nx-plugin - connection - Preencha os parâmetros obrigatórios
- Clique em
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionVocê também pode realizar uma execução simulada para ver quais arquivos seriam alterados
pnpm nx g @aws/nx-plugin:connection --dry-runyarn nx g @aws/nx-plugin:connection --dry-runnpx nx g @aws/nx-plugin:connection --dry-runbunx nx g @aws/nx-plugin:connection --dry-runSelecione 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. |
Saída do Gerador
Seção intitulada “Saída do Gerador”O gerador modifica dois arquivos no diretório de origem do seu servidor MCP:
Directorypackages/my-service/src/my-mcp
- server.ts Cliente Prisma buscado e disponível para todas as ferramentas registradas dentro de
createServer - Dockerfile Pacote CA do RDS instalado para conexões SSL com Aurora
- server.ts Cliente Prisma buscado e disponível para todas as ferramentas registradas dentro de
Além disso, o target <mcp-server-name>-serve-local é atualizado para depender do target serve-local do banco de dados.
Como Funciona
Seção intitulada “Como Funciona”O cliente Prisma é buscado dentro de createServer e disponível para todas as ferramentas e recursos registrados lá:
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;};Múltiplos Bancos de Dados
Seção intitulada “Múltiplos Bancos de Dados”Executar o gerador novamente com um destino diferente adiciona o segundo banco de dados junto ao primeiro. Ambos são buscados dentro de createServer:
export const createServer = async () => { const postgresDb = await getPostgresDb(); const mysqlDb = await getMysqlDb(); const server = new McpServer({ ... }); // register tools using both clients return server;};Infraestrutura
Seção intitulada “Infraestrutura”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.
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.
Passe as saídas do módulo do banco de dados para o módulo do seu servidor MCP para que ele possa alcançar o banco de dados e ler sua configuração de runtime:
module "my_database" { source = "../../common/terraform/src/app/dbs/my-database" vpc_id = module.vpc.vpc_id database_subnet_ids = module.vpc.private_isolated_subnet_ids}
module "my_mcp_server" { source = "../../common/terraform/src/app/mcp-servers/my-mcp-server"
appconfig_application_id = module.my_database.appconfig_application_id database_cluster_resource_id = module.my_database.cluster_resource_id database_runtime_user = module.my_database.database_runtime_user database_security_group_id = module.my_database.security_group_id database_port = module.my_database.cluster_port}Certifique-se de que o papel de execução do servidor MCP tenha a permissão rds-db:connect e que seu grupo de segurança possa alcançar o grupo de segurança do banco de dados na porta do banco de dados.
Requisitos SSL ao Conectar Sem RDS Proxy
Seção intitulada “Requisitos SSL ao Conectar Sem RDS Proxy”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:
new MyMcpServer(this, 'MyMcpServer', { ... environmentVariables: { NODE_EXTRA_CA_CERTS: '/usr/local/share/ca-certificates/rds-bundle.crt', },});module "my_mcp_server" { ... environment_variables = { 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.
Desenvolvimento Local
Seção intitulada “Desenvolvimento Local”pnpm nx <mcp-server-name>-serve-local <project-name>yarn nx <mcp-server-name>-serve-local <project-name>npx nx <mcp-server-name>-serve-local <project-name>bunx 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.