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), которые невозможно перенести напрямую в современные стеки без значительных ручных усилий. Этот инструмент автоматизирует этап структурной транспиляции:
Вход | Выход |
| модели в |
PL/SQL | эквивалент на 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
Отвечает за полный конвейер транспиляции:
Токенизация — удаление комментариев, нормализация пробелов, обработка идентификаторов в кавычках
Разбор DDL —
CREATE TABLEс колонками, ограничениями, внешними ключами, индексамиРазбор PL/SQL —
CREATE [OR REPLACE] PROCEDURE/FUNCTIONс направлениями параметровСопоставление типов — более 40 сопоставлений устаревших типов в
{ prismaType, postgresType }Генерация схемы Prisma — аннотации
@@map,@db.*, составные первичные ключи, FK-связиГенерация TypeScript-запросов — CRUD-хелперы с использованием
PrismaClientСтруктурная трансляция PL/SQL —
BEGIN/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-транспорт:
Инструмент | Описание |
| Полный разбор и генерация: возвращает AST, Prisma-схему, TS-запросы |
| Возвращает только содержимое |
| Возвращает структурированный или текстовый отчёт валидации |
Начало работы
Требования
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Опции:
Флаг | По умолчанию | Описание |
|
| Исходный диалект: |
|
| Выходная директория |
| — | Пропустить генерацию TypeScript-запросов |
| — | Пропустить валидацию после транспиляции |
validate <файл>
Проверяет сопоставление типов и выводит структурированный отчёт.
npx ts-node src/cli.ts validate ./examples/oracle_hr.sql \
--dialect oracle \
--format textОпции:
Флаг | Умолчанию | Описание |
|
| Исходный диалект |
|
|
|
| — | Код выхода 1 при наличии предупреждений (для CI) |
Коды выхода:
Код | Значение |
| Проблем нет, только информация |
| Найдены предупреждения (только с |
| Найдены критические проблемы |
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 mcpMCP 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 | Вприм. |
|
|
| Точность сохранена |
|
|
| Масштаб сохранён |
|
|
| Умещается в 32 бита |
|
|
| Умещается в 64 бита |
|
|
| ⚠ BigInt переполнится |
|
|
| |
|
|
| Дополнение до фиксированной длины |
|
|
| ℹ Отдельный LOB-сегмент отсутствует |
|
|
| ℹ Встроенное хранение |
|
|
| ⚠ Oracle DATE включает время |
|
|
| |
|
|
| |
|
|
| ⚠ Одинарная точность |
|
|
| |
|
|
| ⚠ В Prisma нет нативного XML |
|
|
| |
|
|
| |
|
|
| |
| читывается |
|
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.
Правила валидации
Код | Серьёзность | Условие | Рекомендация |
| warning |
| Укажите масштаб явно |
| critical |
| Используйте |
| warning |
| Используйте |
| info |
| Обновите LOB-стриминговые API |
| info |
| Используйте |
| warning | Oracle | Используйте |
| warning |
| Проверьте логикуконвертации часовых поясов |
| warning |
| Замените на |
| info |
| Используйте |
| warning |
| Используйте |
| info | DB2 | Проверьте перекодировку UTF-8 |
| warning | В таблице не указан первичный ключ | Добавьте |
| 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 и правилам валидатора.
Внесение вклада
Сделайте fork и клонируйте репозиторий
Выполните
npm installдля установки зависимостейДобавьте свою новую функцию/исправление в
src/Добавьте или обновите тесты в
tests/Запустите
npm testиnpm run typecheckперед подачей PR
Лицензия
MIT
This server cannot be installed
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
- AlicenseNot gradedqualityCmaintenanceAn 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.222MIT
- AlicenseAqualityCmaintenanceA lightweight MCP server for relational databases, enabling dynamic connections to PostgreSQL and MySQL, SQL execution, and transaction control.7511MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that analyzes TypeScript/Prisma projects, builds dependency graphs, and protects against dangerous modifications and silent regressions.141MIT
- AlicenseAqualityAmaintenanceMCP 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.51MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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