Command Palette

Search for a command to run...

UnylyUnyly
Browse all

Edt Companion

FreeNot checked

MCP server plugin for 1C:EDT — 46 tools over the live EDT model: metadata and BSL with unsaved editor changes, forms, DCS, metadata editing, validation, yaxunit

GitHubEmbed

About

MCP server plugin for 1C:EDT — 46 tools over the live EDT model: metadata and BSL with unsaved editor changes, forms, DCS, metadata editing, validation, yaxunit run and debug. MCP-сервер внутри 1С:EDT для AI-агентов.

README

HTTP MCP-сервер внутри 1C:EDT. OSGi-плагин поднимает локальный сервер на http://127.0.0.1:6868/mcp (JSON-RPC 2.0 + MCP) и отдаёт 46 инструментов, через которые AI-агент (Claude Code, Cursor, Cline, любой MCP-клиент) видит то же, что видит сам EDT: типизированную метамодель, BSL-код с несохранёнными правками открытых редакторов, структуру форм, СКД, XDTO, а также Eclipse Debug API для запуска и отладки yaxunit-тестов.

Плагин работает только над тем workspace, который сейчас открыт в EDT — отдельного процесса EDT/1С он не запускает.

Возможности

  • Чтение метаданных и BSL: объекты конфигурации, формы (с extInfo и обработчиками), СКД, XDTO, предопределённые элементы, права ролей, подсистемы, defined-типы. Через BM-транзакции — видит несохранённые правки открытых редакторов, а не только диск.
  • Поиск и навигация: текстовый поиск по BSL, резолв символов, cross-reference index (find_object_references), иерархия вызовов методов.
  • Конфигурации на обычных формах: модули обычных (неуправляемых) форм читаются и ищутся, хотя EDT их в модель не поднимает — текст извлекается из контейнера Form.oform. Инструменты, которые такие формы не покрывают, сообщают об этом явно, а не отдают молчаливый нуль.
  • Редактирование метаданных — единый инструмент edit_metadata: создание и удаление объектов, реквизиты, табличные части, формы (через штатный IFormGenerator), элементы форм, обработчики событий с авто-генерацией BSL-заглушек, права, подписки, defined-типы, XDTO-схемы, макеты, СКД. Принимает и конфигурации, и проекты-расширения.
  • Заимствование в расширение: adoptObject / adoptChild / adoptModule через штатный IModelObjectAdopter.
  • Валидация и сборка: маркеры EDT-валидации, rebuild_project, проверка запросов, headless-обновление ИБ (sync_database) без модального диалога.
  • yaxunit + отладка: запуск тестов, чтение отчёта, точки останова с условием/hit-count, getState / getVariables / evaluate, пошаговое выполнение — через стандартный Eclipse Debug API.

Полный каталог инструментов, конвенции параметров и типовые сценарии — в docs/llm-guide.md.

Требования

  • 1C:EDT 2025.2 или 2026.1 (проверялось на 2025.2.5 / EDT core 26.0.1 и на 2026.1.2 / EDT core 27.0.2).
  • Java 17 (идёт в составе EDT).
  • Открытый в EDT workspace с проектом конфигурации или расширения.

Установка

Через update-site (рекомендуется)

Стандартный механизм Eclipse. В 1C:EDT: Help → Install New Software…, в поле Work with укажите адрес репозитория обновлений:

https://sekam68.github.io/edt-companion-mcp/

Отметьте фичу edt-companion-mcp, пройдите мастер и перезапустите EDT. Обновления ставятся тем же путём (Help → Check for Updates).

Через drop-in jar (альтернатива)

  1. Скачайте io.github.sekam68.edt.companion.mcp-<версия>.jar из раздела Releases.

  2. Скопируйте jar в каталог dropins установки 1C:EDT. Типичный путь:

    <установка 1C:EDT>/components/1c-edt-<версия>-x86_64/dropins/
    

    (например C:/Program Files/1C/1CE/components/1c-edt-2025.2.5+2-x86_64/dropins/). У установок, развёрнутых 1cedtstart в отдельный каталог, это <каталог установки>/1cedt/dropins/ — например D:/1C/1cedtstart/installations/1C_EDT 2026.1/1cedt/dropins/.

  3. Перезапустите 1C:EDT (при первой установке помогает разовый запуск с -clean).

Проверка

curl http://127.0.0.1:6868/health
→ {"status":"ok","tools":46,"workspace":"D:\\1C\\workspaces\\Демо",
   "workspaceName":"Демо","projects":["Демо","Демо.Расширение"]}

Если /health не отвечает — EDT не запущен либо bundle не активировался.

workspace / projects называют, какой именно EDT отвечает на этом порту, — при двух запущенных экземплярах это единственный способ не спутать порты (см. docs/multi-instance.md).

Порт по умолчанию — 127.0.0.1:6868. Меняется прямо в Window → Preferences → edt-companion-mcp (поле «TCP-порт», применяется сразу, без перезапуска EDT). Для headless/CI порт можно задать VM-аргументом -Dedt.yaxunit.mcp.port=<порт>1cedt.ini после -vmargs) или переменной окружения EDT_YAXUNIT_MCP_PORT — они имеют приоритет над значением на странице настроек.

Подключение AI-агента

Пропишите сервер в .mcp.json проекта (или в конфигурации вашего MCP-клиента):

{
  "mcpServers": {
    "edt-companion-mcp": {
      "type": "http",
      "url": "http://127.0.0.1:6868/mcp"
    }
  }
}

Протокол — JSON-RPC 2.0 через POST /mcp; поддержаны методы initialize, tools/list, tools/call. Список инструментов и их параметры агент получает через tools/list; человекочитаемый справочник — в docs/llm-guide.md.

Конфигурации на обычных (неуправляемых) формах

EDT такую конфигурацию импортирует нормально, но обычную форму в модель не поднимает: и раскладка, и модуль лежат в бинарном Form.oform в каталоге формы, а API чтения этого контейнера EDT не предоставляет. На конфигурации эпохи 8.2 это может быть половина кода — и молчаливое «совпадений нет» из поисковых инструментов опаснее отсутствующей возможности, потому что читается как «использований нет».

Плагин закрывает это с двух сторон.

Читает и правит модули. read_module_source, read_method_source и get_module_structure принимают путь .../Forms/<Имя>/Module.bsl, которого на диске нет: текст извлекается из контейнера, в ответе source:"oform" и путь к Form.oform. search_in_code досматривает контейнеры отдельным проходом, помечая совпадения источником. write_module_source по тому же пути правит текст модуля внутри контейнера — EDT обычную форму не моделирует, а везёт файл как есть и сравнивает с информационной базой.

Состав процедур менять можно, включая переименования: служебных процедур в формах около трети. Но обработчик обычной формы привязан по имени — в раскладке либо строкой в коде, — и за переименованием привязка не переезжает: конфигурация соберётся, а событие молча перестанет срабатывать. Поэтому запись проверяет исчезнувшие имена по обоим источникам и, если задет обработчик, возвращает предупреждение с именем события и указанием перепривязать его в конфигураторе. Строгий режим (handlerChanges: "refuse") отклоняет такие правки вместо предупреждения. Раскладка формы остаётся только для конфигуратора.

Не выдаёт неполноту за полноту. get_form_layout по обычной форме отдаёт layoutAvailable:false с причиной вместо пустых секций, get_form_screenshot отказывает сразу, find_object_references и get_method_call_hierarchy добавляют блок coverage со счётчиками. get_config_properties отдаёт режим запуска конфигурации (defaultRunMode, modalityUseMode, interfaceCompatibilityMode, …) и счётчики форм по типу — этого хватает, чтобы с первого вызова понять, с чем имеешь дело.

Режим — в Window → Preferences → edt-companion-mcp, «Обычные (неуправляемые) формы»: по умолчанию авто, то есть применимость определяется наличием Form.oform в проекте, и на конфигурациях с управляемыми формами вывод инструментов не меняется. «Только чтение» запрещает запись в контейнер, «не читать контейнеры» отключает и извлечение текста, оставляя явные отказы с причиной; то же значение принимает переменная EDT_COMPANION_ORDINARY_FORMS.

Цикл правки целиком — от чтения модуля до возврата изменений в EDT — в docs/ordinary-forms.md.

Защита персональных данных (PII-редактор)

Опциональный output-фильтр: перед отправкой результата любого инструмента агенту (в т.ч. в облачную модель) содержимое прогоняется через набор правил, и обнаруженные ПДн заменяются на маску [redacted] или коррелируемый псевдоним Физлицо#<hmac> (одинаковый вход → один токен, без раскрытия и без хранения таблицы соответствий). По умолчанию выключен — включается осознанно на базах с реальными ПДн.

Включается одним флагом в Window → Preferences → edt-companion-mcp«Фильтровать персональные данные (ПДн) в ответах инструментов» (применяется сразу, перезапуск EDT не нужен). Остальное работает на разумных умолчаниях: встроенный набор правил под 152-ФЗ (email, телефон, СНИЛС, ИНН) и случайный ключ псевдонимайзера на запуск.

Флаг можно перекрыть переменной окружения EDT_COMPANION_PII (on/1/true/yes) — приоритетнее галочки, удобно для CI/headless. Для продвинутых сценариев доступны (только через env, в UI не выведены): EDT_COMPANION_PII_SALT — постоянная соль для стабильных псевдонимов между сессиями; EDT_COMPANION_PII_RULES — путь к своему JSON-набору правил.

Текущая версия применяет правила по содержимому значения (regex): email, телефон +7…, СНИЛС, ИНН, паспортные/длинные числовые последовательности. Формат правила: { "enabled", "scope": "VALUE", "countable", "representation", "regex" } (countable:false — плоская маска, countable:true — псевдоним).

Каталог инструментов (46)

Группа Инструменты
Workspace и среда list_workspace_projects, list_applications, show_edt_version
Чтение BSL read_module_source, read_method_source, get_module_structure, search_in_code, resolve_symbol
Запись BSL write_module_source
Метаданные (чтение) list_metadata_objects, list_modules, get_object_details, get_form_layout, get_form_screenshot, get_config_properties
Анализ find_object_references, get_method_call_hierarchy, get_validation_errors, get_check_description, apply_quick_fix
Редактирование метаданных edit_metadata (единый диспетчер операций)
XDTO read_xdto_package, edit_xdto_package
Сборка и ИБ rebuild_project, sync_database, job, get_event_log, refresh_workspace
Запросы validate_query
Документация платформы get_object_help, get_platform_docs
yaxunit run_yaxunit, get_yaxunit_report
Отладка addBreakpoint, removeBreakpoint, listBreakpoints, getState, getVariables, evaluate, resume, suspend, stepOver, stepInto, stepReturn, terminate, get_profiling_results

get_form_screenshot требует native-buffered рендера форм: добавьте в 1cedt.ini после строки -vmargs две строки -DnativeFormLayoutRender=true и -DnativeFormBufferedLayoutRender=true и перезапустите EDT. Без них буфер изображения пуст (форма рисуется в нативное окно). Остальные инструменты в этих аргументах не нуждаются. Аргументы живут в 1cedt.ini конкретной установки — после обновления EDT на новую версию их нужно прописать заново.

get_method_call_hierarchy строит граф сам, а не через модельные Method.callers / Method.callees — те объявлены transient и заполняются только редакторским путём EDT, поэтому при чтении модуля через BM read-транзакцию пусты. Границы методов берутся из AST (видны несохранённые правки), имена разрешаются по индексу модулей workspace. Глобальные функции платформы и вызовы через переменную/менеджер объекта в граф не попадают — они перечислены в unresolvedCalls.

Когда не подходит

  • Headless / CI / удалённая разработка без открытого EDT — сервер живёт внутри процесса EDT; без UI ряд операций (в т.ч. sync_database) недоступен.
  • Редактирование тела существующего BSL-метода — плагин читает модули, ищет по коду, находит ссылки и дописывает заглушки обработчиков, но тело процедуры правит сам агент своими file-tools.

Лицензия

Использование бесплатно — в личных целях и внутри организации, без ограничения по числу рабочих мест, в том числе в коммерческой разработке. Распространение, изменение и восстановление исходного кода требуют разрешения правообладателя. Полные условия — в файле LICENSE; там же сведения о сторонних компонентах.

Результаты работы плагина — код и метаданные в ваших проектах — принадлежат вам, никаких прав на них правообладатель не заявляет.

from github.com/SeKam68/edt-companion-mcp

Installing Edt Companion

This server has no published package — it is built from source. Open the repository and follow its README.

▸ github.com/SeKam68/edt-companion-mcp

FAQ

Is Edt Companion MCP free?

Yes, Edt Companion MCP is free — one-click install via Unyly at no cost.

Does Edt Companion need an API key?

No, Edt Companion runs without API keys or environment variables.

Is Edt Companion hosted or self-hosted?

Self-hosted: the server runs locally on your machine via the install command above.

How do I install Edt Companion in Claude Desktop, Claude Code or Cursor?

Open Edt Companion on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.

Related MCPs

Compare Edt Companion with

Not sure what to pick?

Find your stack in 60 seconds

Author?

Embed badge for your README

Browse similar

All development MCPs