Skip to main content
Glama
felipeassis10

db-legacy-migration-agent

db-legacy-migration-agent

CLI y servidor MCP que analiza esquemas heredados de bases de datos relacionales (DB2, Oracle PL/SQL, MySQL, MSSQL) y los transpila automáticamente a PostgreSQL con un esquema de Prisma ORM generado y utilidades de consulta en TypeScript.


Tabla de contenidos


Related MCP server: db-mcp

Visión general

Los sistemas empresariales heredados suelen depender de dialectos SQL específicos del proveedor (Oracle PL/SQL, IBM DB2, Microsoft T-SQL) que no pueden migrarse directamente a pilas tecnológicas modernas sin un esfuerzo manual significativo. Esta herramienta automatiza la fase de traducción estructural:

Entrada

Salida

CREATE TABLE (Oracle, DB2, MySQL, MSSQL)

Definiciones de modelos schema.prisma

PL/SQL CREATE PROCEDURE / CREATE FUNCTION

Equivalente en TypeScript de mejor esfuerzo

Cualquier combinación de DDL heredado

Utilidades de consulta de Prisma Client en TypeScript

Archivo DDL completo

Informe de validación con análisis de pérdida de precisión


Arquitectura

src/
├── parser/
│   └── sql-transpiler.ts     # DDL lexer/parser + Prisma/TS code generator
├── engine/
│   └── schema-validator.ts   # Precision-loss & semantic mismatch validator
├── mcp/
│   └── server.ts             # MCP server (stdio transport)
└── cli.ts                    # Commander.js interactive CLI
tests/
└── transpiler.test.ts        # Jest unit tests (40+ assertions)

Módulos principales

src/parser/sql-transpiler.ts

Responsable de todo el proceso de transpilación:

  1. Tokenización — elimina comentarios, normaliza los espacios en blanco y gestiona los identificadores entre comillas.

  2. Análisis de DDLCREATE TABLE con columnas, restricciones, claves externas (FK) e índices.

  3. Análisis de PL/SQLCREATE [OR REPLACE] PROCEDURE/FUNCTION con direcciones de parámetros.

  4. Mapeo de tipos — más de 40 mapeos de tipos heredados a { prismaType, postgresType }.

  5. Generación del esquema Prisma — anotaciones @@map, @db.*, claves primarias compuestas y relaciones FK.

  6. Generación de consultas TypeScript — funciones auxiliares CRUD que usan PrismaClient.

  7. Traducción estructural de PL/SQLBEGIN/END, IF/THEN/ELSIF, FOR/WHILE LOOP, :=, DBMS_OUTPUT.

src/engine/schema-validator.ts

Ejecuta un motor de reglas sobre las definiciones de tablas transpiladas y emite registros estructurados ValidationIssue:

  • Crítico — pérdida de datos garantizada (p. ej., BIGINT_OVERFLOW, NULLABLE_PK)

  • Advertencia — discrepancia semántica que requiere revisión (p. ej., ORACLE_DATE_HAS_TIME, XMLTYPE_NO_NATIVE)

  • Información — notas informativas (p. ej., LOB_TO_TEXT, DB2_GRAPHIC_TYPE)

src/mcp/server.ts

Servidor MCP que expone tres herramientas mediante transporte stdio:

Herramienta

Descripción

parse_legacy_ddl

Análisis completo + generación: devuelve AST, esquema Prisma y consultas TS

generate_prisma_schema

Devuelve solo el contenido de schema.prisma

validate_type_mapping

Devuelve un informe de validación estructurado o en texto


Primeros pasos

Requisitos previos

  • Node.js ≥ 18

  • npm ≥ 9

Instalación

npm install

Compilación

npm run build

Enlazar la CLI globalmente (opcional)

npm link
db-migrate --help

Comandos CLI

transpile <file>

Analiza un archivo DDL y genera schema.prisma, queries.ts y ast.json en el directorio de salida.

npx ts-node src/cli.ts transpile ./examples/oracle_hr.sql \
  --dialect oracle \
  --out ./output

Opciones:

Opción

Por defecto

Descripción

-d, --dialect

oracle

Dialecto de origen: db2 | oracle | mysql | mssql

-o, --out

./output

Directorio de salida

--no-ts

Omitir la generación de consultas TypeScript

--no-validate

Omitir la validación posterior a la transpilación


validate <file>

Valida los mapeos de tipos y genera un informe estructurado.

npx ts-node src/cli.ts validate ./examples/oracle_hr.sql \
  --dialect oracle \
  --format text

Opciones:

Opción

Por defecto

Descripción

-d, --dialect

oracle

Dialecto de origen

-f, --format

text

text o json

--fail-on-warnings

Código de salida 1 si se encuentran advertencias (para pipelines de CI)

Códigos de salida:

Código

Significado

0

Sin problemas o solo información

1

Advertencias encontradas (solo con --fail-on-warnings)

2

Problemas críticos encontrados


parse-inline <ddl>

Prueba rápida — analiza una cadena DDL directamente desde la línea de comandos.

npx ts-node src/cli.ts parse-inline \
  "CREATE TABLE T (ID NUMBER(10) NOT NULL, NAME VARCHAR2(100), CONSTRAINT PK_T PRIMARY KEY (ID));"

mcp

Inicia el servidor MCP mediante stdio (para la integración con asistentes de IA).

npx ts-node src/cli.ts mcp

Servidor MCP

El servidor MCP puede registrarse con cualquier asistente de IA compatible con MCP (p. ej., Claude Desktop, IBM Bob).

Herramienta: parse_legacy_ddl

{
  "tool": "parse_legacy_ddl",
  "input": {
    "ddl": "CREATE TABLE EMPLOYEES (...);",
    "dialect": "oracle",
    "include_typescript": true
  }
}

Devuelve: AST completo, esquema Prisma, consultas TypeScript y advertencias.

Herramienta: generate_prisma_schema

{
  "tool": "generate_prisma_schema",
  "input": {
    "ddl": "CREATE TABLE EMPLOYEES (...);",
    "dialect": "oracle"
  }
}

Devuelve: el contenido de schema.prisma como una cadena de texto simple.

Herramienta: validate_type_mapping

{
  "tool": "validate_type_mapping",
  "input": {
    "ddl": "CREATE TABLE EMPLOYEES (...);",
    "dialect": "oracle",
    "format": "json"
  }
}

Devuelve: un JSON estructurado ValidationReport o texto legible por humanos.


Referencia de mapeo de tipos

Tipo heredado

Tipo Prisma

Tipo PostgreSQL

Notas

NUMBER(p) / NUMERIC

Decimal

DECIMAL(p)

Se preserva la precisión

NUMBER(p,s)

Decimal

DECIMAL(p,s)

Se preserva la escala

NUMBER(p) p≤9

Int

INTEGER

Cabe en 32 bits

NUMBER(p) 10≤p≤18

BigInt

BIGINT

Cabe en 64 bits

NUMBER(p) p>18

Decimal

DECIMAL(p)

⚠ BigInt se desbordaría

VARCHAR2(n)

String

VARCHAR(n)

CHAR(n)

String

CHAR(n)

Relleno de longitud fija

CLOB / NCLOB / LONG

String

TEXT

ℹ Sin segmento LOB separado

BLOB / RAW

Bytes

BYTEA

ℹ Almacenamiento en línea

DATE (Oracle)

DateTime

DATE

⚠ La fecha DATE de Oracle incluye hora

TIMESTAMP

DateTime

TIMESTAMP

TIMESTAMP WITH TIME ZONE

DateTime

TIMESTAMPTZ

BINARY_FLOAT

Float

REAL

⚠ Precisión simple

BINARY_DOUBLE

Float

DOUBLE PRECISION

XMLTYPE

String

XML

⚠ Sin XML nativo en Prisma

BIGINT

BigInt

BIGINT

DECIMAL(p,s)

Decimal

DECIMAL(p,s)

BOOLEAN

Boolean

BOOLEAN

JSON / JSONB

Json

JSON / JSONB


Reglas de validación

Código

Gravedad

Desencadenante

Recomendación

ORACLE_NUMBER_NO_SCALE

warning

NUMBER(p) sin escala: podría ser entero o flotante

Añadir escala explícita

BIGINT_OVERFLOW

critical

NUMBER(p) con p>18 mapeado a BigInt

Usar Decimal / NUMERIC

FLOAT_SINGLE_PRECISION

warning

BINARY_FLOAT o FLOAT(≤24) → REAL

Usar DOUBLE PRECISION

LOB_TO_TEXT

info

CLOB/NCLOB/LONG → TEXT

Actualizar las APIs de streaming LOB

BLOB_TO_BYTEA

info

BLOB/RAW → BYTEA

Usar la API lo para valores > 1 GB

ORACLE_DATE_HAS_TIME

warning

DATE de Oracle → DATE de PostgreSQL

Usar TIMESTAMP si se necesita la hora

LOCAL_TZ_SEMANTICS

warning

TIMESTAMP WITH LOCAL TIME ZONE

Verificar la lógica de conversión de zona horaria

CHAR_LARGE_LENGTH

warning

CHAR(n) con n>255

Reemplazar por VARCHAR(n)

VARCHAR2_EXCEEDS_ORACLE_LIMIT

info

VARCHAR2(n) con n>4000

Usar TEXT para datos sin límite

XMLTYPE_NO_NATIVE

warning

XMLTYPE

Usar $queryRaw para operaciones XML

DB2_GRAPHIC_TYPE

info

GRAPHIC/VARGRAPHIC de DB2

Verificar la transcodificación UTF-8

NO_PRIMARY_KEY

warning

La tabla no tiene PK

Añadir id o @@id

NULLABLE_PK

critical

La columna PK se analizó como anulable

Corregir el DDL de origen


Estructura del proyecto

db-legacy-migration-agent/
├── src/
│   ├── parser/
│   │   └── sql-transpiler.ts    # Type mappings, DDL parser, Prisma & TS generators
│   ├── engine/
│   │   └── schema-validator.ts  # Rule engine, ValidationReport, formatter
│   ├── mcp/
│   │   └── server.ts            # MCP server with 3 tools
│   └── cli.ts                   # Commander.js CLI entrypoint
├── tests/
│   └── transpiler.test.ts       # Jest unit tests
├── dist/                        # Compiled output (after `npm run build`)
├── output/                      # Generated files (schema.prisma, queries.ts, ast.json)
├── package.json
├── tsconfig.json
└── README.md

Ejecutar las pruebas

# Run all tests
npm test

# With coverage
npm test -- --coverage

# Watch mode
npm test -- --watch

Resultado esperado: más de 40 aserciones en el análisis del transpilador, el mapeo de tipos, la traducción de PL/SQL y las reglas del validador.


Contribuciones

  1. Haz un fork del repositorio y clónalo

  2. Ejecuta npm install para instalar las dependencias

  3. Añade tu funcionalidad o corrección en src/

  4. Añade o actualiza las pruebas en tests/

  5. Ejecuta npm test y npm run typecheck antes de enviar un PR


Licencia

MIT

F
license - not found
Not graded
quality - not tested
Not graded
maintenance - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An extensible MCP server for database operations that supports PostgreSQL for managing schemas, tables, data, and user permissions. It features automatic migration recording for DDL changes and integrates with various AI-powered editors like Cursor, Zed, and Claude Code.
    22
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A lightweight MCP server for relational databases, enabling dynamic connections to PostgreSQL and MySQL, SQL execution, and transaction control.
    7
    51
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that analyzes TypeScript/Prisma projects, builds dependency graphs, and protects against dangerous modifications and silent regressions.
    14
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server that reads your database schema from SQL DDL, Prisma, Drizzle, TypeORM, or SQLAlchemy, generates a Mermaid ER diagram, and writes it into your documentation, with drift detection to keep diagrams up-to-date.
    5
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • MCP server for managing Prisma Postgres.

  • MCP server for interacting with the Supabase platform

  • Butterbase MCP server — manage your backend: schemas, auth, functions, storage, RAG, deploys.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/felipeassis10/db-legacy-migration-agent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server