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 dentro de createServer y sus puntos de entrada de transporte.

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

  1. Un proyecto ts#mcp-server
  2. Un proyecto ts#rdb
  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - connection
  5. Complete los parámetros requeridos
    • Haga clic en Generate

    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.

    Parámetro Tipo Predeterminado Descripción
    sourceProject Requerido string - El proyecto de origen
    targetProject Requerido string - El proyecto de destino al que conectar
    sourceComponent string - El componente de origen desde el que conectar (nombre del componente, ruta relativa a la raíz del proyecto de origen, o id del generador). Use '.' para seleccionar explícitamente el proyecto como origen.
    targetComponent string - El componente de destino al que conectar (nombre del componente, ruta relativa a la raíz del proyecto de destino, o id del generador). Use '.' para seleccionar explícitamente el proyecto como destino.

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

    • Directoriopackages/my-service/src/my-mcp
      • server.ts createServer actualizado para aceptar el parámetro { db }
      • http.ts Cliente Prisma creado antes de const server = createServer({ db })
      • stdio.ts Cliente Prisma creado antes de await createServer({ db }).connect(transport)

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

    createServer recibe el cliente Prisma como parámetro para que permanezca síncrono y pueda pasar el cliente a herramientas y 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;
    };

    El cliente Prisma se crea dentro del manejador de solicitudes, antes de la llamada a 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 });
    // ...
    }
    });

    El mismo patrón se aplica al punto de entrada del 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);
    };

    Ejecutar el generador nuevamente con un destino diferente agrega la segunda base de datos junto a la primera. Ambas se pasan a createServer juntas:

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

    El constructo del 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 { 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 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.

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

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