Установка и сборка
Требования, установка вручную без обвязки и сборка плагина из исходников.
Чтобы пользоваться мостом
- 1C:EDT с открытым проектом – либо позвольте
edt-bridge-mcpподнять headless EDT. - Для
edt_dump_external_object(сборка.epf/.erf) иedt_update_infobase: установленная локально платформа 1С:Предприятие, совместимая с версией проекта – 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) или соберите (ниже). - Скопируйте в
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 (без GUI): scripts/run-headless.ps1 -Workspace <ws> (Windows) или
scripts/run-headless.sh --workspace <ws> (macOS / Linux); scripts/toggle-headless.ps1 включает/выключает
одним действием. Запущенную GUI EDT это никогда не трогает. Запустить GUI на рабочей области:
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.