Ir al contenido

Servidor MCP a Base de Datos Relacional

El generador connection conecta un Servidor MCP de TypeScript a un proyecto de Base de Datos Relacional, haciendo que un cliente Prisma esté disponible para todas las herramientas registradas dentro de createServer.

Antes de usar este generador, asegúrate de tener:

  1. Un proyecto ts#mcp-server
  2. Un proyecto ts#rdb

Ejecute este generador@aws/nx-plugin:connection

pnpm nx g @aws/nx-plugin:connection
Construya su comando5

Requerido

Requerido

Selecciona tu proyecto de servidor MCP como origen y tu proyecto de base de datos relacional como destino. Si el proyecto contiene múltiples componentes de servidor MCP, especifica sourceComponent para desambiguar.

Opciones del generador5 opciones
sourceProjectRequeridostring

El proyecto de origen

targetProjectRequeridostring

El proyecto de destino al que conectar

sourceComponentstring

El componente de origen desde el cual conectar (nombre del componente, ruta relativa a la raíz del proyecto de origen, o id del generador). Usa '.' para seleccionar explícitamente el proyecto como origen.

targetComponentstring

El componente de destino al cual conectar (nombre del componente, ruta relativa a la raíz del proyecto de destino, o id del generador). Usa '.' para seleccionar explícitamente el proyecto como destino.

preferInstallDependenciesbooleanPredeterminado: true

Si se prefiere instalar las dependencias después de que se ejecute el generador. Establecer en false para diferir la instalación al ejecutar múltiples generadores en lote (la instalación aún se ejecuta si es necesario para que los generadores subsiguientes puedan calcular el grafo de proyectos de Nx); instalar una vez al final.

El generador modifica los siguientes archivos en el directorio de origen de tu servidor MCP:

  • Directoriopackages/my-service/src/my-mcp
    • server.ts Cliente Prisma obtenido y disponible para todas las herramientas registradas dentro de createServer
    • Dockerfile Paquete CA de RDS instalado para conexiones SSL a Aurora (solo cuando el infra del servidor MCP es agentcore-ecr)

Además, el objetivo <mcp-server-name>-dev se actualiza para depender del objetivo dev de la base de datos.

El cliente Prisma se obtiene dentro de createServer y está disponible para todas las herramientas y recursos registrados allí:

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();
myDb.$on('error', console.error);
const server = new McpServer({ name: 'my-service', version: '1.0.0' });
// register tools/resources that use myDb
return server;
};

Ejecutar el generador nuevamente con un destino diferente agrega la segunda base de datos junto a la primera. Ambas se obtienen 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;
};

El constructo de servidor MCP generado implementa IGrantable e IConnectable, por lo que puedes otorgar acceso de red e IAM a la base de datos directamente en el constructo.

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 la regla del grupo de seguridad para que el tiempo de ejecución del servidor MCP pueda alcanzar el puerto de la base de datos. grantConnect otorga el permiso IAM rds-db:connect al rol de ejecución del servidor.

El generador de conexión actualiza el Dockerfile para instalar el paquete de CA de Amazon RDS en /usr/local/share/ca-certificates/rds-bundle.crt. Establece NODE_EXTRA_CA_CERTS a esa ruta para que Node.js confíe en el certificado al conectarse sin 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 más detalles, consulta la documentación de SSL/TLS de Amazon RDS. Al usar RDS Proxy, no necesitas configurar NODE_EXTRA_CA_CERTS.

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

Esto inicia el servidor MCP y todas las bases de datos conectadas. La variable de entorno LOCAL_DEV=true hace que cada cliente Prisma se conecte a su base de datos Docker local en lugar de Aurora.