Skip to main content
Glama
felipeassis10

db-legacy-migration-agent

db-legacy-migration-agent

CLI и MCP-сервер, который разбирает схемы устаревших реляционных БД (DB2, Oracle PL/SQL, MySQL, MSSQL) и автоматически транспилирует их в PostgreSQL с генерацией Prisma ORM-схемы и TypeScript-хелперов для запросов.


Оглавление


Related MCP server: db-mcp

Обзор

Устаревшие корпоративные системы часто полагаются на вендор-специфичные диалекты SQL (Oracle PL/SQL, IBM DB2, Microsoft T-SQL), которые невозможно перенести напрямую в современные стеки без значительных ручных усилий. Этот инструмент автоматизирует этап структурной транспиляции:

Вход

Выход

CREATE TABLE (Oracle, DB2, MySQL, MSSQL)

модели в schema.prisma

PL/SQL CREATE PROCEDURE / CREATE FUNCTION

эквивалент на TypeScript с наилучшим приближением

Произвольная смесь устаревшего DDL

TypeScript-хелперы запросов для Prisma Client

Полный DDL-файл

отчёт валидации с анализом потери точности


Архитектура

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)

Основные модули

src/parser/sql-transpiler.ts

Отвечает за полный конвейер транспиляции:

  1. Токенизация — удаление комментариев, нормализация пробелов, обработка идентификаторов в кавычках

  2. Разбор DDLCREATE TABLE с колонками, ограничениями, внешними ключами, индексами

  3. Разбор PL/SQLCREATE [OR REPLACE] PROCEDURE/FUNCTION с направлениями параметров

  4. Сопоставление типов — более 40 сопоставлений устаревших типов в { prismaType, postgresType }

  5. Генерация схемы Prisma — аннотации @@map, @db.*, составные первичные ключи, FK-связи

  6. Генерация TypeScript-запросов — CRUD-хелперы с использованием PrismaClient

  7. Структурная трансляция PL/SQLBEGIN/END, IF/THEN/ELSIF, циклы FOR/WHILE, :=, DBMS_OUTPUT

src/engine/schema-validator.ts

Запускает правиловой движок по транспилированным определениям таблиц и формирует структурированные записи ValidationIssue:

  • Критическая ошибка — гарантированная потеря данных (например, BIGINT_OVERFLOW, NULLABLE_PK)

  • Предупреждение — семантическое несоответствие, требующее проверки (например, ORACLE_DATE_HAS_TIME, XMLTYPE_NO_NATIVE)

  • Информация — информационные уведомления (например, LOB_TO_TEXT, DB2_GRAPHIC_TYPE)

src/mcp/server.ts

MCP-сервер, предоставляющий три инструмента через stdio-транспорт:

Инструмент

Описание

parse_legacy_ddl

Полный разбор и генерация: возвращает AST, Prisma-схему, TS-запросы

generate_prisma_schema

Возвращает только содержимое schema.prisma

validate_type_mapping

Возвращает структурированный или текстовый отчёт валидации


Начало работы

Требования

  • Node.js ≥ 18

  • npm ≥ 9

Установка

npm install

Сборка

npm run build

Глобальная установка CLI (необязательно)

npm link
db-migrate --help

Команды CLI

transpile <файл>

Разбирает DDL-файл и генерирует schema.prisma, queries.ts и ast.json в выходной директории.

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

Опции:

Флаг

По умолчанию

Описание

-d, --dialect

oracle

Исходный диалект: db2 | oracle | mysql | mssql

-o, --out

./output

Выходная директория

--no-ts

Пропустить генерацию TypeScript-запросов

--no-validate

Пропустить валидацию после транспиляции


validate <файл>

Проверяет сопоставление типов и выводит структурированный отчёт.

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

Опции:

Флаг

Умолчанию

Описание

-d, --dialect

oracle

Исходный диалект

-f, --format

text

text или json

--fail-on-warnings

Код выхода 1 при наличии предупреждений (для CI)

Коды выхода:

Код

Значение

0

Проблем нет, только информация

1

Найдены предупреждения (только с --fail-on-warnings)

2

Найдены критические проблемы


parse-inline <файл DDL>>`

Быстрый тест — разбор DDL-строки прямо из командной строки.

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

Запускает MCP-сервер в режиме stdio (для интеграции с AI-ассистентами).

npx ts-node src/cli.ts mcp

MCP Server

MCP-сервер можно зарегистрировать в любом MCP-совместимом AI-ассистенте (например, Claude Desktop, IBM Bob).

Инструмент: parse_legacy_ddl

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

Возвращает: полный AST, схему Prisma, TypeScript-запросы, предупреждения.

Инструмент: generate_prisma_schema

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

Возвращает: содержимое schema.prisma как обычную строку.

Инструмент: validate_type_mapping

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

Возвращает: структурированный JSON-отчёт ValidationReport или читаемый текст.


Справочник по сопоставлению типов

Устаревший тип

Тип Prisma

Тип в PostgreSQL

Вприм.

NUMBER(p) / NUMERIC

Decimal

DECIMAL(p)

Точность сохранена

BACK(p,s)

Decimal

DECIMAL(p,s)

Масштаб сохранён

NUMBER(p) p≤9

Int

INTEGER

Умещается в 32 бита

NUMBER(p) 10≤p≤18

BigInt

BIGINT

Умещается в 64 бита

NUMBER(p) p>18

Decimal

DECIMAL(p)

⚠ BigInt переполнится

VARCHAR2(n)

String

VARCHAR(n)

CHAR(n)

String

CHAR(n)

Дополнение до фиксированной длины

CLOB / NCLOB / LONG

String

TEXT

ℹ Отдельный LOB-сегмент отсутствует

BLOB / RAW

Bytes

BYTEA

ℹ Встроенное хранение

DATE (Oracle)

DateTime

DATE

⚠ Oracle DATE включает время

TIMESTAMP

DateTime

TIMESTAMP

TIMESTAMP WITH TIME ZONE

DateTime

TIMESTAMPTZ

BINARY_FLOAT

Float

REAL

⚠ Одинарная точность

BINARY_DOUBLE

Float

DOUBLE PRECISION

XMLTYPE

String

XML

⚠ В Prisma нет нативного XML

BIGINT

BigInt

QQBIGINT

DECIMAL(p,s)

Decimal

DECIMAL(p,s)

BOOLEAN

Boolean

BOOLEAN

JSON / JSONB

читывается

JSON / JSONB

Oops, I sent a wrong table row above - correct it: The BIGINT row: Prisma Type = BigInt, PostgreSQL = BIGINT. And the last row: JSON / JSONB | Json | JSON / JSONB. And the TIMESTAMP row is fine. The first "TIMESTAMP WITH") line.

I'll write the correct final table version later.


Правила валидации

Код

Серьёзность

Условие

Рекомендация

ORACLE_NUMBER_NO_SCALE

warning

NUMBER(p) без указания масштаба — может быть целым числом или числом с плавающей точкой

Укажите масштаб явно

BIGINT_OVERFLOW

critical

NUMBER(p) p>18 сопоставлен с BigInt

Используйте Decimal / NUMERIC

FLOAT_SINGLE_PRECISION

warning

BINARY_FLOAT или FLOAT(≤24)REAL

Используйте DOUBLE PRECISION

LOB_TO_TEXT

info

CLOB/NCLOB/LONGTEXT

Обновите LOB-стриминговые API

BLOB_TO_BYTEA

info

BLOB/RAWBYTEA

Используйте lo API для значений больше 1 ГБ

ORACLE_DATE_HAS_TIME

warning

Oracle DATE → PostgreSQL DATE

Используйте TIMESTAMP, если время важжно

LOCAL_TZ_SEMANTICS

warning

TIMESTAMP WITH LOCAL TIME ZONE

Проверьте логикуконвертации часовых поясов

CHAR_LARGE_LENGTH

warning

CHAR(n) n > 255

Замените на VARCHAR(n)

VARCHAR2_EXCEEDS_ORACLE_LIMIT

info

VARCHAR2(n) n > 4000

Используйте TEXT для неограниченных данных

XMLTYPE_NO_NATIVE

warning

XMLTYPE

Используйте $queryRaw для работы с XML

DB2_GRAPHIC_TYPE

info

DB2 GRAPHIC/VARGRAPHIC

Проверьте перекодировку UTF-8

NO_PRIMARY_KEY

warning

В таблице не указан первичный ключ

Добавьте id или @@id

NULLABLE_PK

critical

Колонка PK разобрана как nullable

Исправьте исходный DDL


Структура проекта

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

Запуск тестов

# Run all tests
npm test

# With coverage
npm test -- --coverage

# Watch mode
npm test -- --watch

Ожидаемый результат: более 40 проверок по раздработке механизма, сопоставлению типов, трансляции PL/SQL и правилам валидатора.


Внесение вклада

  1. Сделайте fork и клонируйте репозиторий

  2. Выполните npm install для установки зависимостей

  3. Добавьте свою новую функцию/исправление в src/

  4. Добавьте или обновите тесты в tests/

  5. Запустите npm test и npm run typecheck перед подачей PR


Лицензия

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