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.
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 três arquivos no diretório de origem do seu servidor MCP:
Directorypackages/my-service/src/my-mcp
- server.ts
createServeratualizado 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)
- server.ts
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”Definição do Servidor
Seção intitulada “Definição do Servidor”createServer recebe o cliente Prisma como parâmetro para que permaneça síncrono e possa passar o cliente para ferramentas e recursos:
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;};Transporte HTTP
Seção intitulada “Transporte HTTP”O cliente Prisma é criado dentro do manipulador de requisição, acima da chamada createServer:
import { getPrisma as getMyDb } from ':my-scope/my-db';
app.post('/mcp', async (req, res) => { try { const myDb = await getMyDb(); const server = createServer({ myDb }); // ... }});Transporte Stdio
Seção intitulada “Transporte Stdio”O mesmo padrão se aplica ao ponto de entrada do transporte stdio:
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);};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 passados para createServer juntos:
const postgresDb = await getPostgresDb();const mySqlDb = await getMySqlDb();const server = createServer({ postgresDb, mysqlDb });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.
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.