drakon-mcp
v0.4.0
Published
MCP-сервер генерации ДРАКОН/ГОСТ 19.701-схем: запись .drakon (DrakonHub 1.5.7) и рендер .jpg настоящим движком DrakonHub в headless-Chromium.
Maintainers
Readme
drakon-mcp
MCP-сервер генерации схем алгоритмов в нотациях ДРАКОН и ГОСТ 19.701-90
(«Схема программы», символы «Данные»/«Решение»): запись .drakon (формат
DrakonHub 1.5.7) и рендер .jpg с белым фоном движком DrakonHub, переведённым
на TypeScript, в headless-Chromium.
Установка
npm install -g drakon-mcp # или как зависимость проектаТребуется Node.js ≥ 18 и Chromium (поиск: DRAKON_CHROME → каталоги
ms-playwright → PATH: chrome/chromium/msedge).
Шрифты Arimo (public domain) входят в пакет (assets/fonts) — рендер работает
сразу после установки.
Возможности
- tools:
generate_drakon(model|graph →.drakon+.jpg, docReady ≤190×250 мм),validate_drakon,render_drakon_file(переэкспорт JPG для существующего.drakon),generate_drakon_from_mermaid(Mermaid Flowchart → ДРАКОН/ГОСТ 19.701),render_sequence(Mermaid sequenceDiagram →.jpg+.mmd); - resources:
drakon://drakonhub-format,drakon://code-mapping,drakon://contract,drakon://sequence-format(правила сиквенс-диаграмм); - валидатор профиля (zod, строгий; while/repeat — вопросами,
DrakonGraph.loop→GRAPH_LOOP_UNSUPPORTED); - конвертер
DrakonGraph→DrakonModel(конвенция: заголовок «Начало программы»,note→content, стиль{"maxWidth":240,"headerFont":"15px Arimo"}); - транспилятор Mermaid → DrakonModel: слияние веток, циклы ДЛЯ (loopbegin/loopend), выборка select/case для 3+ выходов, иконки ввода-вывода;
- сиквенс-рендер в духе sequencediagram.org (
src/sequence/: parser → metrics → painter, canvas 2D): участники, стрелки всех типов, активации (колбы), фрагменты alt/else, opt, loop, par, critical, note, create/destroy, autonumber, title; - рендер: puppeteer-core (поиск Chromium:
DRAKON_CHROME→ ms-playwright → PATH), сеть запрещена (толькоfile:/data:), PNG→JPG: sharp flatten#FFFFFF, качество 92, 4:4:4, предел 4096 px.
CLI
drakon-render <файл.drakon|модель.json|сиквенс.mmd> [--scale 1|2|4] [--png] [--check]Движок (TypeScript)
Движок DrakonHub 1.5.7 полностью переведён на TypeScript — src/drakon-host/engine/
(1:1 относительно оригинала, поведение зафиксировано parity-тестами на 25 моделях):
engine/canvas/— ядро DrakonCanvas: раскладка skewer, рендер, виджеты, модели, редактирование, текстовый конвейер, все ГОСТ 19.701-патчи (gost.ts);engine/common/— dh2common: check-контур, подписи Да/Нет/Конец/Ветка (15 языков), UI;engine/pseudocode/— drakongen (toPseudocode ru/en/no);engine/svg/— canvas2svg (C2S);engine/geometry/,engine/dom/,engine/editing/,engine/utils.ts,engine/config.ts;host.ts— DI-сборка и API host-страницы (window.__drakon*).
Исходная поставка DrakonHub 1.5.7 зафиксирована в doc/vendor/vendor-manifest.json
(sha256 оригиналов; reference). Шрифты — корневой assets/fonts
(в пакете — dist/assets/fonts); host-страница получает их базовый URL
от render.ts (window.__drakonFontBase).
Сборка из исходников
bun install
bun run build:host # бандл движка → src/drakon-host/bundle/ (gitignored)
bun run check # tsc + тесты (e2e-рендеры требуют Chromium)Запуск
npx drakon-mcp # Node ≥ 18
bunx --bun drakon-mcp@latest # Bun (для машин с Node < 18)
drakon-render <файл.drakon|модель.json> [--scale 1|2|4] [--check]В opencode MCP настраивается командой ["bunx", "--bun", "-y", "drakon-mcp@latest"]
(если системный Node младше 18) либо ["npx", "-y", "drakon-mcp@latest"] (Node ≥ 18).
Окружение: DRAKON_CHROME (путь к Chromium), DRAKON_OUT_ROOT (корень записи,
по умолчанию корень проекта), DRAKON_OUT_DIR (подкаталог по умолчанию, doc),
DRAKON_BROWSER_IDLE_MS, DRAKON_LOG.
Разработка
bun test— unit (test/engine), parity против baseline (test/baseline), e2e рендеры;bun x tsc --noEmit— типы.bun run scripts/capture-baseline.ts— пересъём эталонов (при смене Chromium/платформы — отдельным коммитом).bun run scripts/reachability-map.ts— карта достижимости API движка.
Совместимость
Файлы .drakon открываются в DrakonHub Desktop 2026.06.05 (движок 1.5.7,
с патчами ГОСТ — поддержка data/decision). Оригинальный движок — public domain
(© Stepan Mitkin, DrakonHub), см. NOTICE и doc/vendor/vendor-manifest.json.
