edt-bridge
edt-bridge
MCP-сервер, который переносит функционал Unica на проекты в формате 1C:EDT. Unica жёстко привязана к XML-формату конфигуратора (DESIGNER); edt-bridge реализует аналогичные возможности для EDT-формата как прослойку над EDT-MCP плюс аккуратные файловые операции с resync обратно в EDT.
Это не форк Unica — кодовая база новая, LGPL-лицензия и runtime Unica не используются.
Инструменты (18)
Инструмент | Что делает | Аналог в Unica |
| Валидация пакета мутаций, dryRun-план, planHash, confirmToken для удалений | пакетные операции |
| Атомарное применение пакета: backup → apply → rollback при ошибке → resync | typed packages + dryRun |
| Компиляция формы из JSON-DSL (create/patch, dryRun, пресеты dialog/list-with-filter/wizard) | form-compile |
| Headless-разбор Form.form → элементы/команды/параметры/события | form-info |
| Двухфазное удаление формы с пре-чеком BSL-ссылок через | form-remove |
| MXL (табличный документ) → JSON-DSL | mxl-decompile |
| JSON-DSL → MXL | mxl-compile |
| Сводка по макету MXL | — |
| Скаффолдинг внешней обработки/отчёта по БСП (БСП-API, подсистемы) | epf-bsp-init |
| Добавление раздела справки в BSP-объект | help-add |
| Заимствование метода в расширение (CFE) с корректной обёрткой | cfe-borrow |
| Роль расширения: добавление прав в роль CFE | role-compile (CFE) |
| Правка командного интерфейса подсистемы (CommandInterface.xml) | command-interface |
| Чтение командного интерфейса | — |
| Панели конфигурации / начальная страница (Configuration.mdo) | config-panels |
| Чтение панелей и home page | — |
| Обёртка | designer-check |
| Сборка cf/epf артефактов через внешние CLI | build-artifact |
Архитектура
OpenCode / любой MCP-клиент
│ stdio
▼
edt-bridge (этот сервер)
├─ стратегия «edt-mcp»: JSON-RPC → EDT-MCP (http://localhost:8765/mcp)
│ create_metadata / modify_metadata / delete_metadata /
│ write_module_source / search_in_code / resync_to_disk /
│ revalidate_objects / get_server_status
└─ стратегия «file»: точечные lxml-патчи файлов EDT-проекта
(только при EDTB_ALLOW_FILE_MUTATIONS=1, backup + resync)Тонкие свойства форм (inputHint, titleLocation, pagesRepresentation, условное оформление, ChangeAndValidate) EDT-MCP не умеет — они идут файловой стратегией; остальное проходит через живую модель EDT.
Установка
pip install -e .
# зависимости: fastmcp, httpx, lxml, pydanticПодключение в OpenCode (opencode.json):
{
"mcp": {
"edt-bridge": {
"type": "local",
"command": ["edt-bridge"],
"environment": {
"EDTB_EDT_MCP_URL": "http://localhost:8765/mcp"
}
}
}
}Переменные окружения
Переменная | Назначение |
| Корень EDT-проекта (если не передан |
| URL EDT-MCP (по умолчанию |
|
|
Безопасность
Файловые мутации только при
EDTB_ALLOW_FILE_MUTATIONS=1.Перед правкой — backup в
.edtb-backup/<timestamp>/, ошибка середины пакета откатывает изменения.Удаления двухфазные: сначала план с
confirmToken, затем применение по токену.При недоступности EDT-MCP сервер не падает: операции деградируют с warning «выполните resync вручную».
Warning при незакоммиченных изменениях в git-дереве проекта.
Разработка
pip install -e ".[dev]"
python -m pytest tests -q # 133 тестаСпецификация: SPEC.md. Гэпы Unica→EDT, которые закрывает проект: ../gaps.md (в репозитории см. SPEC).
Ограничения
Схема
EventHandlerExtensionи условного оформления восстановлена по докам/коду EDT — проверяйте на живом EDT перед продом.Точные свойства форм-элементов в
create_metadataстоит сверять черезget_metadata_details(assignable).MXL-парсер покрывает основную модель табличного документа; экзотика (вложенные объекты рисунков) — в TODO.
TODO (требуют живого EDT-MCP для верификации): MCP-хендшейк
initialize/notifications.initializedпередtools/call; семантикаresync_to_disk— проверить, что вызов после файловых правок не затирает их.Rollback при ошибке середины пакета гарантирован для
edtb_apply_mutations; в одиночных операциях bsp/extensions/interface при частичном применении смотрите warnings и backup в.edtb-backup/.
Лицензия
LGPL-3.0 (по аналогии с Unica).