Установка и сборка
Требования, установка вручную без обвязки и сборка плагина из исходников.
Чтобы пользоваться мостом
- 1C:EDT с открытым проектом – либо позвольте
edt-bridge-mcpподнять headless EDT. - Установленная локально платформа 1С:Предприятие, совместимая с версией проекта. Она нужна для
edt_dump_external_object(сборка.epfи.erf) и дляedt_update_infobase: EDT управляет этой платформой, когда компилирует бинарник и обновляет информационную базу.
Чтобы собрать плагин из исходников. Это для участников разработки; конечные пользователи ставят мост через pipx.
- JDK под бандлы EDT. EDT 2026.2 поставляется с class-файлами Java 25, поэтому для компиляции против них нужен JDK 25. Скрипт сборки определяет уровень по пулу и сам находит подходящий JDK, в том числе установленный рядом с EDT. Байткод jar по-прежнему нацелен на Java 17, поэтому одна сборка грузится и в версиях EDT, работающих на Java 17.
- Локальный пул бандлов EDT. На Windows это p2-пул
%USERPROFILE%\.p2\pool\plugins. На macOS он лежит внутри установленного компонента:.../1C/1CE/components/1c-edt-<ver>-x86_64/1cedt (<ver>).app/Contents/Eclipse/plugins, и shell-сборка находит его сама.
Установка вручную (без обвязки)
Обвязка pipx доставляет jar и запускает EDT за вас. Чтобы запускать плагин самому:
- Возьмите jar со страницы Releases – там же
лежит
SHA256SUMS.txt– или соберите его, как описано ниже. - Скопируйте jar в
dropins/EDT: на Windows.../installations/<EDT>/1cedt/dropins/, на macOS.../1c-edt-<ver>-x86_64/1cedt (<ver>).app/Contents/Eclipse/dropins/, создав папку, если её нет. Держите там только один jar EDT-Bridge: при двух Equinox возьмёт произвольный. - Перезапустите EDT. Плагин поднимает MCP-сервер на
http://127.0.0.1:8770/mcpили на следующем свободном порту, если 8770 занят.
Запустить EDT headless, без окна: scripts/run-headless.ps1 -Workspace <ws> на Windows либо
scripts/run-headless.sh --workspace <ws> на macOS и Linux. scripts/toggle-headless.ps1 включает
и выключает его одним действием, а запущенную EDT с интерфейсом это никогда не трогает. Запустить
интерфейс на рабочей области: scripts/run-gui.ps1 -Workspace <ws>.
Оба скрипта отказываются поднимать вторую EDT на уже занятой рабочей области и не снимают
блокировку, которую держит живой экземпляр. Общая проверка лежит в scripts/edt-common.ps1. Запуск
1cedt.exe руками эту проверку минует: второй экземпляр падает с “рабочая область уже
используется”, а если сделать так дважды, остаётся ворох недозапущенных окон.
MCP-клиент может говорить с плагином и напрямую по HTTP, без обвязки. Добавьте
{ "edt-bridge": { "type": "http", "url": "http://127.0.0.1:8770/mcp" } } в его .mcp.json. Сервер
говорит простым JSON-RPC по HTTP: initialize, tools/list, tools/call.
Переменные окружения
Настройки у обвязки и у плагина называются одинаково, EDT_BRIDGE_*, но читают их разные стороны:
обвязка при своём запуске, плагин внутри EDT. У большинства настроек обвязки есть флаг-двойник, он
описан в Командах.
Читает обвязка edt-bridge-mcp
| Переменная | Флаг | По умолчанию | Что задаёт |
|---|---|---|---|
EDT_BRIDGE_PORT |
--port |
8770 |
порт, на котором обвязка ищет мост |
EDT_BRIDGE_PORT_SCAN |
– | 20 |
сколько портов подряд начиная с этого просматривать. Занятый порт плагин отдаёт следующему свободному, и в этом же окне мост потом ищется |
EDT_BRIDGE_TOKEN |
– | пусто | токен инструментов записи. Уходит заголовком Authorization: Bearer и передаётся в JVM headless-экземпляра |
EDT_BRIDGE_WORKSPACE |
--workspace |
– | рабочая область EDT, которую поднимать при автозапуске headless |
EDT_BRIDGE_EDT_DIR |
--edt-dir |
самая свежая установка | каталог установки EDT (.../1cedt) |
EDT_BRIDGE_START_TIMEOUT |
--start-timeout |
360 |
сколько секунд ждать поднимающийся мост |
EDT_BRIDGE_AUTOSTART |
--no-autostart |
включён | 0 – ничего не поднимать и только пересылать запросы |
EDT_BRIDGE_WINDOW_WAIT |
– | 90 |
сколько секунд команда gui ждёт появления окна EDT. Большая рабочая область грузится минутами, поэтому промах здесь не ошибка, а повод повторить команду |
EDT_BRIDGE_LANG |
– | язык системы | язык справки и сообщений обвязки (ru или en) |
EDT_BRIDGE_NO_PLUGINS |
– | выкл | 1 – не искать плагины обвязки, оставить только штатные возможности |
EDT_BRIDGE_PLUGIN_INDEX |
– | – | адрес реестра пакетов, который self-update передаёт pip для плагинов, установленных по имени проекта. У плагина, поставленного из git, источник свой |
Читает плагин внутри EDT
| Переменная | Свойство запуска | По умолчанию | Что задаёт |
|---|---|---|---|
EDT_BRIDGE_PORT |
-Dedt.bridge.port |
8770 |
порт MCP-сервера. Если он занят, берётся следующий свободный |
EDT_BRIDGE_TOKEN |
-Dedt.bridge.token |
со страницы параметров | общий секрет, который требует каждый инструмент записи |
EDT_BRIDGE_ALLOW_EVALUATE |
– | выключено | 1 разрешает edt_evaluate – исполнение произвольного BSL против живой информационной базы. То же самое включается на странице параметров |
EDT_BRIDGE_AGENT_IDLE_MINUTES |
-Dedt.bridge.agent-idle-minutes |
30 |
через сколько минут простоя агент конфигуратора останавливается сам. off – держать вечно |
Заданное при запуске сильнее сохранённого: переменные окружения и свойства -Dedt.bridge.* имеют
приоритет над страницей параметров EDT. Так обвязка и управляет headless-экземпляром.
Сборка из исходников
Без Maven получается быстрее всего: локальный JDK плюс пул EDT, сеть не нужна.
# Windows – по умолчанию: -Pool %USERPROFILE%\.p2\pool\plugins, -JdkHome %JAVA_HOME%
powershell -ExecutionPolicy Bypass -File scripts/build-nomaven.ps1
# macOS / Linux – --pool автоопределяется из пула установленного 1C:EDT
./scripts/build-nomaven.sh
На выходе build/io.github.keyfire.edtbridge_<версия>.<таймстамп>.jar. Maven и Tycho
(mvn -f pom.xml clean verify, сначала правьте edt-bridge.target) остаются для CI.
Релизы собираются из локально построенного jar, потому что CI его скомпилировать не может:
SDK-бандлы 1C:EDT проприетарны и анонимно не скачиваются. Сопровождающий запускает
scripts/build-nomaven.ps1 -Dist, кладёт jar в dist/, ставит тег vX.Y.Z и отправляет тег в
репозиторий. .github/workflows/release.yml прикладывает jar и контрольную сумму. Проверить
приложенный файл можно так: пересобрать из тегированного исходника и сравнить.
Плагины обвязки
Не всё, что живёт рядом с мостом, годится для публичного репозитория: справочные материалы под
чужой лицензией, инструменты, завязанные на внутренний сервис. Такое живёт в отдельных пакетах,
установленных в окружение самой обвязки. Обвязка находит их через группу точек расширения
edt_bridge.tools, перечисляет объявленные ими инструменты рядом со своими и выполняет их сама,
поэтому они отвечают даже тогда, когда ни одна EDT не запущена.
Установка:
pipx inject edt-bridge-mcp <пакет>
Когда pipx работает поверх uv (pipx >= 1.15)
pipx на uv собирает окружение без pip, и три привычных приёма перестают работать так, как читаются:
--pip-args="--no-deps"одним словом доезжает до uv уже разобранным и падает его экраном использования. Флаг передаётся отдельным аргументом:pipx inject edt-bridge-mcp <пакет> --pip-args "--no-deps".<venv>/Scripts/python -m pipотвечает “No module named pip”.pipx runpip edt-bridge-mcpпри этом работает, потому что pipx сам уходит вuv pip, и остаётся штатной дорогой к окружению.- переустановка плагина без
--no-depsпереустанавливает и ядро, а заменитьedt-bridge-mcp.exe, пока его держит живая MCP-сессия, не может (“failed to persist … Отказано в доступе”). Сам плагин при этом обычно успевает встать, поэтому итог смотрите поedt-bridge-mcp plugins, а не по коду выхода.
Вот форма, которая обновляет плагин руками, не трогая занятое ядро:
python -m pipx runpip edt-bridge-mcp -- install --upgrade --no-deps <пакет>
Если плагин живёт в закрытом реестре, добавьте --index-url <адрес индекса>.
edt-bridge-mcp self-update проходит этой же дорогой по всем установленным плагинам сам, а
--plugins-only ограничивает работу плагинами. Каждый обновляется из источника своей установки:
git-репозитория либо реестра пакетов по имени проекта. Адрес реестра задаёт переменная
EDT_BRIDGE_PLUGIN_INDEX.
edt-bridge-mcp plugins показывает, что подключено, – пакеты, точки расширения и добавленные ими
инструменты, – а при сломанном плагине печатает сообщение загрузчика. EDT_BRIDGE_NO_PLUGINS=1
выключает поиск плагинов.
Плагин объявляет инструменты в pyproject.toml:
[project.entry-points."edt_bridge.tools"]
package-name = "my_package.tools:tools"
Значение – это Tool из edt_bridge_mcp.plugins, их список либо функция без аргументов,
возвращающая то или другое. Tool несёт дескриптор MCP – name, description, JSON-схему
аргументов – и обработчик, который вызывает обвязка. Строка становится текстовым результатом, любое
другое JSON-сериализуемое значение печатается как JSON, а исключение – сообщением об ошибке
инструмента. Несработавшая точка расширения, повтор имени инструмента и имя, затеняющее собственные
инструменты обвязки, громко отвергаются при обнаружении: молча пропавший плагин оставил бы агента
без инструментов и без объяснения.
Обработчик, объявивший ещё и параметр bridge – handler(arguments, bridge), – получает функцию
bridge(имя_инструмента, аргументы) -> str: она отправляет один вызов живому мосту и возвращает
текст его результата. EDT ради этого не запускается. Без работающего моста функция поднимает
RuntimeError с внятным сообщением, и плагин отвечает запиской вместо того, чтобы повесить
вызвавшего на минуты headless-старта. Старая обвязка зовёт такой обработчик одним аргументом, как
раньше, поэтому дайте bridge значение по умолчанию None.