MCP server for EasyBuilder Pro 6.10.02.421 projects: read, edit, copy, render windows (Windows/Linux, no EasyBuilder GUI)
  • Python 76.9%
  • JavaScript 23.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-11-04 19:38:29 +03:00
.gitignore ebpro-mcp v0.2.0 2026-11-02 20:16:44 +03:00
cmtp_payload.py ebpro-mcp v0.3.0 2026-11-04 19:38:29 +03:00
library.py ebpro-mcp v0.2.0 2026-11-02 20:16:44 +03:00
mcp_server.cjs ebpro-mcp v0.3.0 2026-11-04 19:38:29 +03:00
package-lock.json ebpro-mcp v0.2.0 2026-11-02 20:16:44 +03:00
package.json ebpro-mcp v0.3.0 2026-11-04 19:38:29 +03:00
project_catalog.py ebpro-mcp v0.3.0 2026-11-04 19:38:29 +03:00
project_document.py ebpro-mcp v0.3.0 2026-11-04 19:38:29 +03:00
project_render.py ebpro-mcp v0.3.0 2026-11-04 19:38:29 +03:00
README.md ebpro-mcp v0.3.0 2026-11-04 19:38:29 +03:00
semantic_text.py ebpro-mcp v0.3.0 2026-11-04 19:38:29 +03:00
smoke_mcp.cjs ebpro-mcp v0.2.0 2026-11-02 20:16:44 +03:00
SOURCE_COMMIT ebpro-mcp v0.3.0 2026-11-04 19:38:29 +03:00

EasyBuilder Pro MCP

MCP-сервер для работы с проектами EasyBuilder Pro (.cmtp, библиотеки .flbx) из ИИ-агентов (Claude Desktop, Claude Code, pi и любые MCP-клиенты): читать окна, объекты, адреса PLC, аварии, теги, макросы, метки; править их; копировать объекты и окна; получать картинку окна в PNG. EasyBuilder при этом не запускается и окна не открываются — нужен только файл EasyBuilder Pro.exe (из него берётся ключ шифрования проекта).

Все правки пишутся в новый файл и требуют SHA исходника из свежего чтения; исходник не перезаписывается. Правки выбранного окна требуют полного разбора этого окна; последующие байты сохраняются как есть. Операции документа требуют разбора всего проекта до конца файла. Проверяйте результат компиляцией в EasyBuilder.

Версии проектов пробуются по умолчанию, без списка разрешённых версий; версия/схема исходного файла сохраняется при правке. Отличие от базовой 6.10.02.421/schema493 явно отмечается в warnings как unverified_version, даже при успешном чтении. Проверены 6.10.02.421 и чтение проектов 6.10.02.470, включая цифровые часы (0x4a). Неизвестные записи с явной длиной (действия, элементы условий) исключаются из результата с warnings и diagnostics, после них разбор продолжается. Отчёт помечен partial: true, complete: false, read_only: true; windows_complete показывает, удалось ли пройти все окна. Распознанные объекты текущего окна сохраняются. У обычного MFC-объекта общей длины нет: неизвестный тип исключается из вида, но дальше разбор останавливается с предупреждением о непрочитанном остатке. Непрочитанные окна не считаются пустыми, исходный файл не меняется. Размер неизвестного не угадывается; правки, требующие его разбора, блокируются, частичный отчёт не разрешает редактирование. Повреждённые заголовки, длины и неподдержанные схемы остаются ошибками.

Установка

Нужны Node.js ≥ 22, Python 3 (только стандартная библиотека), OpenSSL (на Windows есть в Git for Windows) и EasyBuilder Pro.exe именно 6.10.02.421 для ключа шифрования (проверяется SHA-256). Это требование к EXE, а не ограничение версии проекта.

# распаковать релиз (или git clone), затем в папке:
npm ci --ignore-scripts

Проверка (копия проекта, чтение, одна правка, картинка окна):

node smoke_mcp.cjs --project "путь/к/проекту.cmtp" --window 10 --ebpro "путь/EasyBuilder Pro.exe" --openssl "путь/openssl"

Подключение к MCP-клиенту

--root — папка с вашими проектами; все пути в инструментах указываются относительно неё. Связанные .flbx-библиотеки держите рядом с проектом — тогда их картинки видны в ebpro_render_window.

Windows (например claude_desktop_config.json):

{
  "mcpServers": {
    "ebpro": {
      "command": "node",
      "args": ["C:\\tools\\ebpro_mcp\\mcp_server.cjs",
        "--root", "C:\\work\\hmi",
        "--ebpro", "C:\\Program Files\\EasyBuilder Pro\\EasyBuilder Pro.exe",
        "--openssl", "C:\\Program Files\\Git\\usr\\bin\\openssl.exe"]
    }
  }
}

Linux: то же с путями Linux (python3 и openssl из PATH подхватываются по умолчанию).

Инструменты (46)

Что Инструменты
Картинка окна (без EasyBuilder/Wine/окон) ebpro_render_window → PNG: рамки объектов, тексты своим шрифтом/размером/цветом, подписи кнопок Combo, картинки состояния 0 из проекта и из связанных .flbx-библиотек (ищутся по имени файла рядом с проектом и в --root; GUID картинки = SHA-1 name_generator EasyBuilder от сохранённого пути библиотеки + номера группы); Combo/Grid/BarGraph/Scale — синие контуры. annotate подписывает слой/объект, вид и адреса. Картинки встроенных библиотек EasyBuilder (в основном клавиатурные окна) — пунктирные рамки. Каркас, не скриншот: цвета фигур, значения, содержимое трендов/таблиц не рисуются
Окна, слои, объекты (чтение) ebpro_inspect_project_windows, ebpro_inspect_project_objects, ebpro_inspect_text, ebpro_inspect_project_catalog
Ссылки ebpro_inspect_project_references (popup-окна в Combo), ebpro_retarget_popups (from → to, фильтр window), ebpro_inspect_project_object_references (Grid)
Тексты и геометрия ebpro_inspect_state_texts (тексты по состояниям: Text/Comment, лампы, кнопки), ebpro_set_state_text (текст одного состояния), ebpro_replace_texts (подстрока во всех редактируемых текстах окна, все состояния), ebpro_set_text, ebpro_set_text_bounds, ebpro_set_object_bounds Также: ebpro_replace_texts (подстрока во всех редактируемых текстах окна), ebpro_set_text, ebpro_set_text_bounds, ebpro_set_object_bounds
Стиль текста по состояниям ebpro_inspect_object_styles (окно: текст, шрифт, размер, цвет #RRGGBB, выравнивание, позиция текста для каждого состояния объекта), ebpro_set_text_style (размер 8..255 и/или цвет; Text/Comment и двухсостоянийный kind 0x17, state 0/1)
Окна и слои ebpro_copy_project_window (копия окна в пустой слот с новым именем; окна 5/10/70 — только в слот после исходного), ebpro_copy_project_object (копия объекта в конец слоя, номер по правилу EasyBuilder, смещение dx/dy; фон окна не копируется; первый экземпляр класса — только в позицию после него), ebpro_rename_project_window, ebpro_rename_project_layer, ebpro_move_project_layer, ebpro_move_project_object, ebpro_transfer_project_object, ebpro_transfer_project_object_window, ebpro_delete_empty_project_layer, ebpro_delete_empty_project_window
Документ: порты, метки, теги, журналы, аварии, макросы ebpro_inspect_project_document, ebpro_set_document_text (сообщение/адрес аварии, адрес тега, код макроса, текст/описание метки, колонка журнала)
Аварии и теги: добавить/удалить ebpro_add_document_item, ebpro_delete_document_item
Макросы ebpro_add_macro (копия настроек, следующий id, новое имя и код), ebpro_delete_macro, ebpro_rename_macro, ebpro_inspect_macro_triggers (какие кнопки запускают какой макрос), ebpro_retarget_macro_triggers (id from → to, фильтр window)
Адреса PLC/HMI в объектах ebpro_inspect_project_addresses, ebpro_set_object_address, ebpro_replace_addresses (массово, exact/prefix, фильтры device/window, по объектам, авариям и тегам)
Библиотеки .flbx ebpro_inspect_library, ebpro_create_library, ebpro_create_library_group, ebpro_rename_library_group, ebpro_copy_library_group, ebpro_delete_library_group, ebpro_copy_library_state, ebpro_delete_library_state

Подробности параметров — в описаниях инструментов (tools/list). У Python-частей есть CLI: semantic_text.py (тексты, окна, слои), project_catalog.py (каталог/окна/объекты/ссылки), project_document.py (документ, аварии, теги, адреса), project_render.py (картинка окна), library.py.

ebpro_compile / ebpro_native_save (компиляция и пересохранение настоящим EasyBuilder в Wine-песочнице на Linux) в этот пакет не входят — проверяйте результат компиляцией в своём EasyBuilder.

Типовой цикл

  1. Прочитать: ebpro_inspect_project_document / ebpro_inspect_project_addresses → взять source_sha256.
  2. Править в новый файл, цепочкой (каждый шаг — SHA предыдущего результата).
  3. Открыть результат в EasyBuilder и скомпилировать: компилятор ловит, например, несуществующие переменные PLC и висящие ссылки на удалённые теги. ebpro_render_window — быстро посмотреть окно без EasyBuilder.

Пример генерации страницы (проверен компиляцией и пересохранением в EasyBuilder): ebpro_copy_project_window (окно 12 → пустой слот 18, новое имя), копия всплывающего окна (20 → 23) → ebpro_replace_addresses с window: 18 → ebpro_retarget_popups (20 → 23, window: 18) → ebpro_replace_texts (window: 18) → компиляция. Замена текстов меняет все состояния многосостоянийных объектов; read-only совпадения (Text mode3, пустые) пропускает и перечисляет.

Ограничения

  • Проверено на одном реальном проекте (драйверы встроенный HMI + CODESYS V3) и производных от него. Другие PLC-драйверы, рецепты с данными, неизученные варианты объектов (например legacy19/1b flags1 в тестовых fixture-проектах) — честный отказ, не догадка.
  • Имена тегов и меток не меняются; тег, имя которого используется объектами, не удаляется.
  • Макросы: кнопки (MacroTrigger в Combo) ссылаются на id макроса (проверено в EasyBuilder: ссылка на несуществующий id — ошибка компиляции). Удаление отказывает, если id запускается кнопкой, имя встречается где-либо ещё в проекте или любой другой макрос вызывает TRIG_MACRO; макрос 0 (определяет MFC-класс) не удаляется. Переименование отказывает, если старое имя встречается где-либо ещё. Ссылки на макросы из неразобранных мест (например, макрос при запуске в настройках проекта) не видны — после удаления обязательно скомпилируйте проект.
  • Окна и объекты с первым определением MFC-класса (окна 5/10/70, их первые объекты) копируются только в позицию ПОСЛЕ исходного (в копии определение заменяется ссылкой на оригинал); копия раньше исходного (например 70 → 23) отклоняется — перенос определений не реализован.
  • Нет создания объектов с нуля, нового проекта, перестановки устройства или типа адреса.
  • Стиль: правятся только размер шрифта и цвет текста (Text/Comment с литеральным текстом и kind 0x17). Имя шрифта, выравнивание, курсив/подчёркивание/мигание, цвета фигур/рамок/заливки и картинки состояний не правятся; рамка объекта при увеличении шрифта не пересчитывается. Размер/чёрный цвет/выравнивание Center сверены с окном свойств EasyBuilder; порядок каналов цвета (COLORREF 0x00BBGGRR) выведен из совпадений с именованными цветами в проекте; два байта стиля не названы. Код макросов массовой заменой не трогается (только отчёт).
  • Тексты состояний: только kind_wire 21 (Text/Comment mode0/mode2), 23, 24, 25, 26, 28, 33 и только непустые собственные тексты. Пустые (объект берёт текст из библиотеки меток или подписи нет), Text mode3 (текст из адреса) и kind 27 (текст не попадает в компиляцию) не редактируются; шрифт/цвет не меняются.
  • Ничего не исполняется: ни макросы, ни действия, ни связь с PLC/HMI, ни загрузка на устройство.