edt-companion-mcp

mcp
Guvenlik Denetimi
Uyari
Health Uyari
  • License — License: NOASSERTION
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 6 GitHub stars
Code Uyari
  • Code scan incomplete — No supported source files were scanned during light audit
Permissions Gecti
  • Permissions — No dangerous permissions requested

Bu listing icin henuz AI raporu yok.

SUMMARY

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.md

edt-companion-mcp

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; там же сведения о сторонних
компонентах.

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

Yorumlar (0)

Sonuc bulunamadi