Дайте AI-ассистенту структурированный доступ к проекту 1С через службы запущенного экземпляра EDT.
Быстрый старт · Возможности · Архитектура · Участие в разработке
AI-EDT - MCP-сервер в виде плагина, работающего внутри запущенного экземпляра 1C:EDT. Он позволяет Claude, Cursor, GitHub Copilot и другим MCP-клиентам исследовать и изменять метаданные и BSL, переходить по семантическим ссылкам, управлять отладчиком, проверять проекты и работать с подключенной информационной базой.
Вместо того чтобы воспринимать рабочее пространство EDT как каталог XML- и BSL-файлов, ассистент использует семантическую модель, индексы, валидаторы и службы отладки самой EDT.
Important
Текущая версия работает на 1C:EDT 2026.2 и 2026.1. Сборка идет против 2026.1, поэтому один артефакт ставится на обе. Плагин работает везде, где работает EDT; на Windows рассчитаны только описанные ниже скрипты сборки и установки.
Ассистент с доступом только к тексту может искать по файлам, но не способен надежно отвечать на вопросы, зависящие от модели IDE:
- На какой объект метаданных указывает эта ссылка?
- Какие формы, роли и подсистемы зависят от справочника?
- Какой тип EDT вывела в этой позиции BSL?
- Почему валидатор проекта отклоняет объект?
- Что происходит в приостановленной отладочной сессии 1С?
- Можно ли применить изменение метаданных без ручного редактирования XML EDT?
- Соберется ли этот запрос именно на этой конфигурации - есть ли в ней такие таблицы и поля?
- Что скажет о новом коде валидатор EDT, а не текстовый линтер со стороны?
- Откроется ли эта форма у пользователя или развалится при загрузке конфигурации в базу?
- Соберется ли схема компоновки так, чтобы отчет заработал, а не просто существовал в файле?
AI-EDT дает для этого специализированные MCP-инструменты - те же службы, которыми пользуется сама среда. Ассистент не просто пишет BSL, запрос, форму, схему компоновки или объект метаданных: он тут же проверяет результат валидаторами EDT, поэтому ошибка всплывает на месте, а не в тот момент, когда конфигурацию впервые загружают в информационную базу. Меньше гадания, меньше хрупких текстовых правок, и вся работа идет в той же модели, которую видит разработчик в IDE.
| Сценарий | Что может сделать ассистент |
|---|---|
| 🔍 Исследовать код и метаданные | Искать по BSL, разрешать символы, находить семантические ссылки, строить иерархии вызовов, получать список модулей и структуру объектов. |
| 🏗️ Создавать и изменять метаданные | Создавать справочники, документы, регистры, формы, роли, команды, сервисы и другие объекты через edit_metadata, включая предпросмотр и пакетные операции. |
| 🐞 Отлаживать BSL | Запускать или подключать отладочную сессию, ставить обычные и exception breakpoints, смотреть переменные, вычислять выражения, выполнять шаги и собирать профилирование. |
| 🩺 Диагностировать конфигурацию | Получать проблемы EDT, перевалидировать объекты, исследовать граф зависимостей, находить антипаттерны запросов и оценивать влияние изменений. |
| 🧱 Собирать сложные артефакты | Работать со СКД, MXL, XDTO, расширениями, внешними объектами и внешними источниками данных через специализированные мастерские. |
| 🧪 Тестировать и исследовать данные | Запускать и отлаживать тесты YAxUnit, выполнять сценарии Vanessa Automation и исследовать состояние исполнения в приостановленной сессии отладки. |
| 🛡️ Проверять границы доступа | Аудировать роли и RLS, искать потенциально чувствительные данные в коде и метаданных, отключать записывающие инструменты пресетами. |
| 📦 Забирать поставку одним файлом | Импортировать конфигурацию или расширение из .cf и .cfe прямо в проект - последний сценарий, ради которого приходилось открывать Конфигуратор. Расширение импортируется к названному проекту основной конфигурации (baseProjectName). |
| 🔀 Обновлять конфигурацию на поддержке | Сравнить проект с новой поставкой и с общим предком, принять решения по объектам или по отдельным методам, применить обновление с сохранением доработок. Читать реестр поддержки поставщика и записывать режимы объектов в файл перед объединением. |
| 🧯 Проверить расширение до обновления | Получить список объектов расширения, которые после новой поставки перестанут применяться, с причиной по каждому: изменившаяся сигнатура перехватываемого метода, исчезнувшая цель, несовпадение заимствованного объекта. |
| 👀 Видеть, что делал агент | Открыть историю вызовов из строки состояния: что вызывалось, с какими аргументами и что ответило. |
| 🧪 Запустить обработку под отладчиком | Открыть внешнюю обработку или отчет в клиенте, который запускается под отладчиком, чтобы ее код исполнился при уже расставленных точках останова. |
| 🔔 Узнать, что среда ждет ответа | Увидеть модальное окно, которое держит вызов - заголовок, текст и кнопки - и нажать названную, вместо того чтобы ждать человека у клавиатуры. |
| 🔎 Спросить, что даст обновление | Узнать до запуска, нужно ли базе обновление и какое: update_database с dryRun=true отвечает состоянием обновления и ничего не запускает. Готовность базы и проверка выгрузки так не выполняются - ответ называет их списком notCheckedInDryRun. |
| 🧷 Подключить существующую базу | Добавить файловую базу по пути или серверную по строке соединения в список EDT и связать с проектом одним вызовом - вместе с пользователем и паролем базы, без окна запроса доступа: infobase_admin operation=register_infobase. |
| 📤 Взять объект из базы, а не из проекта | Выгрузить форму или объект конфигурации информационной базы в XML Конфигуратора (config_io operation=export_infobase_objects) - например, чтобы сравнить с проектом то, что правили в Конфигураторе. |
| 🧰 Вернуть базе инкрементальное обновление | Перестроить хранимый файл сведений выгрузки штатной выгрузкой Конфигуратора (sync_control operation=rebuild_dump_info), когда update_database отказывает на чужом формате файла, и отметить синхронизированной привязку базы, у которой еще нет базовой линии (mark_synchronized). Инкрементальное update_database отказывает, пока хранимая копия описывает другую базу или базу, замененную загрузкой .dt; verifyInfobaseContent=true перед обновлением сверяет копию с самой базой. |
| 💾 Снять базу в один файл и вернуть из него | Выгрузить информационную базу целиком в .dt (infobase_admin operation=export_database_snapshot; файл, уже стоящий по пути, отклоняется, а не заменяется) и загрузить обратно (restore_database_snapshot; перед загрузкой пишется копия текущего содержимого базы - backupTo, без довода рядом с загружаемым файлом, - и загрузка не начинается без копии; загрузка заменяет все, что база держит). Обе операции занимают базу монополией на время прогона: отказ busy называет держателей блоком infobaseHolders, когда сервер их видит, дольше timeoutSeconds - ответ Pending с runKey. |
| 🔁 Забрать правки из базы в проект | Подтянуть изменения, сделанные в информационной базе, в проект - направление, обратное update_database: infobase_admin operation=sync_control с syncOperation=retrieve_database_changes. Проект с собственными правками отказывается от подтягивания, пока не передан replaceLocal=true; толстый клиент, запущенный этой EDT, отказывает до подтягивания по имени запуска (heldBy); после успешного подтягивания markSynchronized=true перезаписывает базовую линию синхронизации. |
| 🖨️ Проверить печатную форму до печати | Узнать по модели макета, поместится ли область печати на лист по ширине и с каким запасом: mxl_workshop operation=check_print_width, без запуска платформы. |
| 🎬 Проверить действие в работающей 1С | Открыть список, встать на строку, нажать кнопку и получить кадр экрана с окном клиента тестирования после действия: vanessa с доводами списка. |
| 🤝 Спросить 1С:Напарника | Задать вопрос Напарнику из агента (naparnik operation=ask) при включенном мосте; по умолчанию Напарнику доступны только инструменты чтения, среди них поиск по документации платформы и ИТС в базе знаний сервиса. |
| 📜 Смотреть, что было в базе | Читать журнал регистрации файловой информационной базы: входы, проведения, обновления конфигурации, ошибки платформы - с отбором по времени, событию, пользователю и важности. |
| 🧭 Не путать запущенные EDT | Сервер называет рабочую область, в которой запущен, а self_status перечисляет живые экземпляры на машине с портами и открытыми проектами. |
| 🛑 Не потерять данные при обновлении | Узнать до обновления базы, какие таблицы потеряют данные из-за удаленного объекта или его части: update_database отказывает со списком dataLossTables и не захватывает базу, пока потеря не принята явно (acceptDataLoss=true). |
| ↩️ Вернуть файл или проект после объединения | Посмотреть изменения файла против коммита, в том числе по методам модуля (git operation=show_file_changes), вернуть файл из коммита с концами строк, которые дал бы git checkout (revert_file), и вернуть файлы проекта к точке, записанной перед объединением с поставкой (restore_merge_point). |
| 📥 Выгрузить конфигурацию из базы | Выгрузить конфигурацию или расширение информационной базы в .cf и .cfe (config_io operation=export_database_configuration, export_database_extension); занятый путь и база, отличающаяся от проекта, отклоняются без явного разрешения. |
| 🗂️ Увидеть список баз EDT | Получить базы из списка EDT с группами, строкой соединения с паролем под маской, версией платформы и привязанными проектами: infobase_admin operation=list_registered_infobases. |
| 🎨 Настроить условное оформление формы | Добавить, прочитать и снять правила условного оформления управляемой формы: edit_metadata add_form_appearance_rule, list_form_appearance_rules, remove_form_appearance_rule. |
| ⏸️ Приостановить поток отладки | Остановить поток или всю сессию (launch_debugger action=pause_thread), выключить точку останова без удаления (set_breakpoint_state) и заменить набор точек модуля одним вызовом (add_breakpoint с replaceModuleSet). |
Сервер предоставляет более ста операций. Родственные действия объединены фасадами code_search, edit_metadata, launch_debugger, diagnostics, insights и security_audit, поэтому MCP-клиент видит компактный набор инструментов вместо длинного списка почти одинаковых команд.
Метаданные создаются по описанию, а не правкой XML. Разработчику достаточно сказать, что нужно: справочник с такими-то реквизитами, документ с движениями, форма списка к нему. Ассистент раскладывает это в план операций edit_metadata и выполняет его одним пакетом, а не десятком разрозненных вызовов. Любой шаг заранее прогоняется с dryRun=true и показывает, что именно будет затронуто; удаление и прочие деструктивные операции требуют отдельного подтверждения. Изменения идут через модель EDT, а не текстом по .mdo, и сразу после применения объекты перевалидируются, так что ошибка видна на месте, а не при первой загрузке в информационную базу.
Открытый редактор виднее файла. read_module_source отдает то, что держит редактор, если в нем есть несохраненные правки, и говорит об этом в ответе: иначе ассистент рассуждал бы о версии, на которую разработчик уже не смотрит. write_module_source в таком случае отказывает и называет файл - запись поверх открытого редактора уничтожает либо вашу несохраненную работу, либо свою собственную, смотря кто сохранится последним, и делает это молча. Текст читается через менеджер файловых буферов платформы, поэтому ни окно, ни поток отображения для этого не нужны.
Запрос проверяется до того, как его кто-то запустит. validate_query разбирает текст в контексте проекта и возвращает синтаксические и семантические ошибки с номерами строк, отдельно для обычных запросов и для запросов СКД. Вместе с ними приходит список подсказок на типовые промахи: слова SQL вместо языка запросов 1С, УБЫВАНИЕ вместо УБЫВ. Ассистенту не нужно запускать конфигурацию, чтобы выяснить, что запрос не соберется.
И что этот запрос вернет - тоже. С describeResult=true тот же инструмент сообщает колонки каждого результата и их типы, взятые из модели конструктора запросов EDT, а не вычитанные из текста. Пакет разбирается целиком: временные таблицы не выдаются за результат, но занимают свою позицию в ВыполнитьПакет(), поэтому индексы совпадают с реальными. Тип, который определить нельзя, не указывается вовсе - уверенная неправда обошлась бы дороже честного пробела. Ассистент перестает угадывать имена колонок, а с ними уходит целый класс ошибок, которые иначе доживают до рантайма.
Форму собирает генератор EDT, а не ассистент. Достаточно описать, какая форма нужна: create_form принимает назначение - форма объекта, форма списка, форма выбора, русские синонимы тоже принимаются, - и форму строит тот же генератор, которым пользуется мастер IDE, с основным реквизитом и рабочей раскладкой. Если генератор не отработал, create_form отказывает и форму не создает, а layout=empty создает пустую форму без генератора. Дальше она правится по частям: реквизиты и колонки, поля, таблицы динамических списков, команды, обработчики событий, параметры, командный интерфейс, функциональные опции. Результат читается через get_form_structure - он же отдает настройки компоновки каждого динамического списка формы: порядок, отбор, группировки и условное оформление - и просматривается глазами через get_form_screenshot - в редакторе, а через vanessa с доводом formToOpen еще и в работающей 1С, где сценарий открывает форму и сохраняет кадр верхнего окна клиента тестирования - его рисует в файл внешняя компонента, что бы ни было поверх, - а validate_for_export ловит дефекты формы, которые проходят валидацию EDT и проявляются только при загрузке в информационную базу; ту же проверку update_database выполняет сам и отказывает на находке, не доводя дело до платформы.
flowchart TD
Q["Разработчик описывает задачу"] --> S["AI исследует модель EDT:<br/>код, метаданные, зависимости"]
S --> P["Показывает предлагаемые изменения"]
P --> E["Изменяет BSL или метаданные"]
E --> V["Запускает валидацию EDT и тесты"]
V --> D{"Найдена проблема?"}
D -- Да --> B["Отлаживает сессию 1С"]
B --> E
D -- Нет --> R["Возвращает проверенный результат"]
flowchart TD
subgraph Client["MCP-клиент"]
AI["Claude · Cursor · Copilot · Cline"]
end
subgraph Plugin["Плагин AI-EDT · внутри процесса EDT"]
direction LR
HTTP["MCP endpoint<br/>Streamable HTTP + SSE"] --> GATE["Политика доступа<br/>пресеты и разрешения"] --> TOOLS["Фасады<br/>и мастерские"]
end
subgraph EDT["Службы 1C:EDT"]
direction LR
BM["Семантическая<br/>модель"]
AST["Парсер BSL"]
CHECKS["Валидация"]
DEBUG["Отладчик"]
end
subgraph Runtime["1С:Предприятие"]
APP["Клиент · сервер · задания · тесты"]
end
AI <-->|"JSON-RPC · localhost:12250"| HTTP
TOOLS --> BM
TOOLS --> AST
TOOLS --> CHECKS
TOOLS --> DEBUG
DEBUG <--> APP
По умолчанию сервер доступен по адресу http://localhost:12250/mcp. Плагин не является отдельным headless-сервером: EDT должна быть запущена, а целевой проект - загружен. Благодаря этому инструментам доступны разрешенные ссылки, выведенные типы, текущие маркеры валидации и состояние живой отладки.
Другой бандл EDT может добавить плагину инструменты и модули: сервис IMcpTool становится вызываемым инструментом (свойство сервиса ru.aiedt.mcp.tool.writes говорит, пишет ли он; пресеты Read-only, Code Review и Debug & Test выключают пишущий вместе с собственными писателями плагина, а инструмент без свойства считается пишущим), сервис IModuleSourceProvider отдает модули, у которых есть адрес, но нет файла, - read_module_source, write_module_source, get_module_structure, read_method_source, list_modules и text_search работают с ними по адресу, а ответы, построенные по индексу BSL, заканчиваются строкой покрытия такого поставщика. Плагин экспортирует для этого пакеты ru.aiedt.mcp.server.support.modules, toolkit и wire.
- 1C:EDT
- 2026.2
- 2026.1
- Java / JDK
- 25 - для 1C:EDT 2026.2
- 17 - для 1C:EDT 2026.1
- Maven 3.9+ для сборки из исходников
- MCP-совместимый клиент
- ОС - любая, где работает 1C:EDT. Плагин собирается и полностью прогоняет тесты на Linux в CI. Windows нужна только вспомогательным скриптам
build.cmdиscripts/edt-selfupdate.ps1, а команды установки ниже записаны для PowerShell; сама установка через p2 director от ОС не зависит
Для дополнительных возможностей потребуются YAxUnit, Vanessa Automation или конфигурация Attach. Подробнее - в разделе Дополнительные интеграции.
В корне репозитория выполните:
build.cmd [EDT_INSTALL_DIR]Альтернативный вариант - собрать Maven-реактор напрямую:
cd mcp
mvn clean verifyСгенерированный P2-репозиторий:
mcp/repositories/ru.aiedt.mcp.server.repository/target/repository
Установка сводится к одному сообщению агенту: он поставит плагин сам, без единого щелчка мышью. Нужен AI-агент с доступом к оболочке на той машине, где стоит EDT.
Скопируйте ему этот промпт:
Установи мне плагин AI-EDT в 1C:EDT.
Рецепт: https://github.com/Desko77/ai-edt/blob/main/docs/agent-install.md
Прочитай его целиком и следуй ему.
Ставь с update site https://desko77.github.io/ai-edt/ через Equinox p2 director
(1cedtc.exe из каталога установки EDT). Мастер "Установить новое ПО" не используй.
Это первая установка, поэтому -uninstallIU не передавай.
Перед установкой закрой запущенный сеанс EDT, запомнив его командную строку;
после установки запусти его теми же аргументами и дождись ответа status: ok
от health endpoint.
После этого поставь себе скил из каталога skills/ai-edt репозитория - без него
ты будешь пользоваться сервером вслепую. Порядок в skills/README.md.
Ничего не завершай принудительно. Если EDT не закрывается сам - остановись и скажи мне.
Если плагин уже установлен и вы его обновляете, замените предложение про первую установку на: Плагин уже установлен, обновляй его одним запросом director с -uninstallIU и -installIU.
Полный рецепт вместе с правилами обращения с запущенной средой - в docs/agent-install.md.
Оба ручных пути - мастер EDT и командная строка - ставят ту же фичу с того же update site, поэтому собирать плагин самостоятельно не обязательно:
https://desko77.github.io/ai-edt/
Этот адрес указывается в EDT так же, как локальный архив.
Шаг 1. Запустите EDT и откройте Справка → Установить новое ПО.
Шаг 2. Нажмите Добавить рядом с полем Работать с.
Шаг 3. В диалоге Добавить репозиторий укажите, откуда ставить. Подходит любой из вариантов:
-
поле Расположение и адрес update site
https://desko77.github.io/ai-edt/; -
то же поле и адрес прямо на архив последнего релиза - p2 умеет читать репозиторий внутри zip по HTTP:
jar:https://github.com/Desko77/ai-edt/releases/latest/download/AI-EDT-update-site.zip!/Этот вариант всегда указывает на свежий выпуск и не зависит от публикации страницы, поэтому отстать от релиза не может. Обратите внимание на префикс
jar:и завершающие символы!/- без них адрес не работает. -
Архив... и файл
mcp/repositories/ru.aiedt.mcp.server.repository/target/AI-EDT-<версия>.zipиз локальной сборки; -
Расположение... и каталог
mcp/repositories/ru.aiedt.mcp.server.repository/target/repository.
Имя репозитория произвольное, например AI-EDT.
Шаг 4. Отметьте категорию AI-EDT или фичу AI-EDT (1C AI tools for EDT) внутри нее и нажмите Далее. Если список выглядит пустым, снимите флажок Группировать элементы по категории.
Шаг 5. Проверьте состав установки, примите лицензионное соглашение и нажмите Готово.
Шаг 6. Сборка не подписана, поэтому при первой установке EDT просит подтвердить установку неподписанного содержимого. Согласитесь, чтобы продолжить.
Шаг 7. Когда установщик предложит перезапустить EDT, нажмите Перезапустить.
После перезапуска переходите к разделу 4. Запуск и проверка.
К каждому выпуску приложены release-manifest.json (имя, размер в байтах и SHA-256 каждого архива) и SHA256SUMS, а на сами архивы GitHub выпускает аттестацию сборки. Архив, скачанный для установки через Архив..., проверяется так: скачайте его и release-manifest.json из одного выпуска и сверьте размер и хеш с записью манифеста, затем проверьте аттестацию (нужен GitHub CLI):
Get-FileHash -Algorithm SHA256 .\AI-EDT-update-site.zip
(Get-Item .\AI-EDT-update-site.zip).Length
gh attestation verify .\AI-EDT-update-site.zip --repo Desko77/ai-edtВ Linux и Git Bash хеши всех скачанных архивов сверяет sha256sum -c SHA256SUMS --ignore-missing. gh attestation verify проходит только для архива, собранного workflow выпуска этого репозитория.
Equinox P2 director ставит ту же фичу без интерфейса. Сначала закройте обновляемый сеанс EDT: запущенный экземпляр держит старый плагин в памяти до перезапуска, то есть перезапуск все равно понадобится, а сеанс, который сам выполняет операцию установки, удерживает блокировку профиля.
& "<EDT>\1cedtc.exe" -nosplash `
-application org.eclipse.equinox.p2.director `
-repository "file:///C:/path/to/AI-EDT/mcp/repositories/ru.aiedt.mcp.server.repository/target/repository" `
-uninstallIU ru.aiedt.mcp.server.feature.feature.group `
-installIU ru.aiedt.mcp.server.feature.feature.group `
-profileProperties org.eclipse.update.reconcile=trueФича - это p2-синглтон, поэтому установка новой версии поверх существующей не пройдет, если в том же запросе не удалить старую. При самой первой установке строку -uninstallIU нужно убрать: удалять еще нечего.
Для рабочей среды разработки скрипт scripts/edt-selfupdate.ps1 выполняет весь цикл: аккуратное закрытие, установку, перезапуск и проверку состояния.
Каким бы путем вы ни поставили плагин, установка на этом не заканчивается. Плагин дает агенту инструменты, но не объясняет, как ими пользоваться: какой фасад брать под задачу, какие проверки обязательны после правки, что означает ответ с ключом возврата. Это знание лежит в скиле skills/ai-edt и ставится копированием каталога:
Copy-Item -Recurse skills\ai-edt "$env:USERPROFILE\.claude\skills\ai-edt"cp -r skills/ai-edt ~/.claude/skills/ai-edtЭто расположение для Claude Code на уровне пользователя; каталог .claude/skills/ai-edt внутри проекта ограничит скил одним проектом. Если вы ставили плагин с update site и чекаута рядом нет, заберите каталог поверхностным клоном:
git clone --depth 1 https://github.com/Desko77/ai-edt.git "$env:TEMP\ai-edt-skill"
Copy-Item -Recurse "$env:TEMP\ai-edt-skill\skills\ai-edt" "$env:USERPROFILE\.claude\skills\ai-edt"
Remove-Item -Recurse -Force "$env:TEMP\ai-edt-skill"Для другого агента действует его собственное соглашение: SKILL.md - обычный Markdown с именем и описанием во front matter, файлы references/ подгружаются по мере надобности. Подробности - skills/README.md.
Скил необязателен: без него агент тоже работает, просто дороже - читает модули целиком, правит руками файлы, которыми владеет EDT, и повторяет вызов, который уже вернул ключ возврата.
Откройте Window → Preferences → AI-EDT и проверьте:
- порт сервера, обычно
12250, и сколько портов подряд разрешено занять. По умолчанию десять: сервер берет первый свободный, поэтому вторая EDT на той же машине поднимается сама, без правки настроек. Поставьте 1, если порт прописан в конфигурации клиента и должен остаться ровно этим; - нажмите Start, чтобы запустить сервер сейчас, либо включите Auto-start и перезапустите EDT;
- Plain text mode для клиентов без поддержки MCP resources;
- активный пресет инструментов.
После этого проверьте health endpoint:
curl.exe http://localhost:12250/healthГотовый экземпляр возвращает ответ со значениями status: ok и phase: ready. Если указано phase: indexing, дождитесь завершения загрузки проекта в EDT.
Сервер слушает только 127.0.0.1 и принимает запросы без токена. Флажок Require bearer token
на странице Window → Preferences → AI-EDT включает проверку: тогда каждый запрос несет заголовок
Authorization: Bearer <токен> с токеном из поля Bearer token той же страницы (он создается при
первом запуске сервера), а клиент без него получает 401. В примерах ниже заголовок указан; при
выключенной проверке сервер его не читает, строку можно опустить.
Добавьте сервер в %USERPROFILE%\.claude.json:
{
"mcpServers": {
"AI-EDT": {
"type": "http",
"url": "http://localhost:12250/mcp",
"headers": {"Authorization": "Bearer <токен со страницы Preferences > AI-EDT>"}
}
}
}Создайте .cursor/mcp.json в корне проекта и включите Plain text mode в настройках AI-EDT:
{
"mcpServers": {
"AI-EDT": {
"url": "http://localhost:12250/mcp",
"headers": {"Authorization": "Bearer <токен со страницы Preferences > AI-EDT>"}
}
}
}Пошаговая инструкция - подключение, скил и правило для Cursor, примеры задач и что делать, если не подключается: docs/cursor.md.
Установить и настроить все одним промптом агенту Cursor - рецепт для агента docs/cursor-agent-setup.md, готовый промпт в начале docs/cursor.md.
Создайте .vscode/mcp.json; токен запрашивается при первом подключении и хранится VS Code, в файл он не попадает:
{
"inputs": [
{"id": "ai-edt-token", "type": "promptString", "description": "AI-EDT bearer token", "password": true}
],
"servers": {
"AI-EDT": {
"type": "http",
"url": "http://localhost:12250/mcp",
"headers": {"Authorization": "Bearer ${input:ai-edt-token}"}
}
}
}Конфигурации для Claude Desktop, Cline и Antigravity находятся в docs/clients.md.
Скил skills/ai-edt ставится на шаге установки - И сразу поставьте скил
агенту. Если вы его пропустили, сейчас самый момент: клиент уже
подключен, и разница видна с первого задания. Проверить просто - в Claude Code скил появляется в
списке доступных под именем ai-edt.
Попросите клиента вывести список проектов EDT или версию EDT. Успешный ответ должен содержать структурированную информацию о проекте, а не сообщение "инструмент недоступен".
Примеры запросов:
Покажи проекты EDT в текущем рабочем пространстве и кратко опиши состояние их валидации.
Найди все семантические ссылки на Справочник.Номенклатура и сгруппируй их по метаданным, формам и модулям BSL.
Не заработало или непонятно - спрашивайте в группе Telegram.
В основе API AI-EDT лежат фасады. Фасад принимает дискриминатор операции и направляет родственные действия через единую стабильную точку входа.
Tip
Открыть полный каталог инструментов →
Все группы инструментов, режимы доступа и раскрываемые описания ключевых фасадов.
| Фасад | Область применения |
|---|---|
code_search |
Текстовый поиск, ссылки, разрешение символов, иерархия вызовов, информация о символах и content assist (в том числе пакетом позиций одним вызовом через positions). |
edit_metadata |
Изменение метаданных, форм, команд, ролей, сервисов, макетов и других элементов модели. |
launch_debugger |
Запуск/подключение, точки останова, шаги, переменные, вычисление выражений и профилирование. |
diagnostics |
Проблемы проекта, документация проверок, очистка и точечная перевалидация. |
insights |
Зависимости, метрики, антипаттерны, трехстороннее сравнение с поставкой и объединение, анализ влияния. |
security_audit |
Права ролей, нарушения RLS и поиск чувствительных данных. |
project_admin / infobase_admin |
Проекты рабочего пространства, конфигурации запуска, обновление ИБ и синхронизация. |
config_io |
Импорт и экспорт конфигурации и отдельных артефактов. |
docs_lookup |
Документация платформы и встроенная справка объектов 1С. |
workspace_marks |
Теги, объекты по тегам, закладки и задачи. |
git |
Репозиторий проекта внутри EDT: статус, ветки, история, коммит названных файлов, переход по веткам, изменения файла и его возврат из коммита, точка перед объединением - через JGit, который среда несет сама. Записи commit, checkout, revert_file и restore_merge_point гасятся пресетами под именами git_commit, git_checkout и git_revert_file; create_merge_restore_point в рабочее дерево не пишет и пресетами не выключается. |
dcs_workshop / mxl_workshop / xdto_workshop / external_data_source_workshop |
Программные конструкторы сложных артефактов 1С. |
extension_workshop / external_object_workshop |
Жизненный цикл расширений, внешних отчетов и обработок; import_external_object преобразует .epf / .erf через Конфигуратор названной базы (applicationId) и отдает базу обратно EDT. |
yaxunit_tests |
Запуск или отладка выбранных тестов YAxUnit и чтение отчетов. |
support_registry |
Состояние поддержки поставщика: конфигурации-поставщики и их релизы, режимы объектов, запись и восстановление режимов. |
Прежние отдельные имена инструментов сохранены как алиасы для обратной совместимости. Пресет Canonical скрывает их из tools/list, уменьшая расход контекста без потери возможностей.
Справка фасада - operation=help, с topic - по одной операции или доводу; find=<слова> ищет по справке и называет тему, по которой открыть раздел целиком.
Вызов, который не укладывается в ожидание, возвращает status=Pending и runKey. Повторный вызов с этим ключом отдает результат; работа при этом не перезапускается. Длину ожидания задает timeoutSeconds - от 5 до 120 секунд, по умолчанию 25.
Ответ edit_metadata batch дополнительно несет progress: сколько операций выполнено, применено и отклонено и какая идет сейчас. Батч фиксирует каждую операцию отдельно, поэтому названные примененными уже записаны.
Клиент, объявивший ревизию протокола 2026-07-28, получает тот же прогон как задание - tasks/get, tasks/update, tasks/cancel.
tasks/cancel переводит задание в cancelled, а statusMessage говорит, чем кончилась остановка: работа остановлена; ей велено остановиться, но она еще идет и может писать; либо сервер только перестал ее ждать, потому что процесс Конфигуратора после запуска не прерывается. Пока остановленная работа не завершилась, повторный вызов той же работы отвечает stillStopping: true, вторая копия не запускается.
Тяжелые вызовы - обновление базы, в том числе перед запуском клиента, выгрузка и загрузка конфигурации, запуск Конфигуратора, создание базы, широкие обходы проекта - выполняются не больше трех одновременно, а при остатке кучи EDT выше 92 % после сборки мусора новый тяжелый вызов отклоняется до начала работы. Внешний клиент получает отказ 503 с Retry-After. Ответ Pending держит разрешение до конца фоновой работы; опрос по runKey разрешения не занимает.
Клиент отзывает отправленный вызов уведомлением notifications/cancelled с его requestId. Отзыв действует в пределах своего клиента: сервер сопоставляет идентификатор среди вызовов с тем же MCP-Session-Id, который выдает при рукопожатии. Отзыв, обогнавший свой вызов, срабатывает, когда тот появляется.
Восемь обходов останавливаются на границе, за которой собранное остается целым: find_dead_code, detect_query_anti_patterns, sensitive_data_scan, find_rls_violations, project_metrics, dependency_graph, semantic_metadata_search, find_references. Ответ приходит с тем, что было найдено, и несет cancelled с числом пройденных единиц. Пустой результат остановленного обхода говорит, что обход остановлен, а не что находок нет.
project_metrics при остановке отвечает partial=true и списком unscannedModules; разделы, шаг которых не выполнялся, в ответе отсутствуют, а не равны нулю.
Оператор останавливает вызов из строки состояния. Когда вызовов несколько, кнопка и указатель относятся к старейшему выполняющемуся, а строка показывает +N при остальных.
На странице настроек Tools инструменты сгруппированы по назначению и доступны следующие пресеты:
| Пресет | Назначение |
|---|---|
| Canonical | Рекомендуемый вариант. В списке видны фасады, а алиасы совместимости остаются вызываемыми, но скрытыми. |
| All Tools | Показывает каждый зарегистрированный инструмент и алиас. Полезно для исследования API. |
| Read-only | Поиск, навигация и валидация без правок, отладки и обновления ИБ. |
| Editing | Чтение и запись без отладки. |
| Debug & Test | Чтение, отладка и тесты без изменения исходников и метаданных. |
| Code Review | Анализ кода и метаданных без записи. |
У каждого инструмента может быть состояние listed, callable-hidden или disabled. Скрытые инструменты продолжают принимать вызовы, отключенные - отклоняются. Благодаря этому Canonical уменьшает шум в каталоге, а ограничивающие пресеты действительно устанавливают границы доступа.
Caution
Плагин работает с правами процесса EDT. Он может изменять исходники, метаданные и информационные базы. Храните проект в системе контроля версий, проверяйте предпросмотр перед подтверждением разрушающих операций и не публикуйте локальный порт за пределами loopback-интерфейса.
Сервер слушает только 127.0.0.1; проверка bearer-токена включается на странице настроек.
- Bearer-токен. Он создается при первом запуске сервера, если поле на странице Preferences → AI-EDT пусто, и показан только там. Клиент передает его заголовком
Authorization: Bearer <токен>; сравнение идет за константное время. Запрос без верного токена получает401, тело отказа называет страницу настроек и не содержит токена. В журнал рабочей области токен не пишется. Кнопка Generate подставляет новый токен, Apply с пустым полем создает его сам; новый токен действует после того, как сохранен в настройках, - пока запись не завершена, действует прежний. - Require bearer token (
mcpAuthEnabled, по умолчанию выключен) включает проверку для сервера на127.0.0.1; при привязке ко всем интерфейсам токен требуется независимо от флажка. /healthбез токена при включенной проверке отвечает тремя полями:status,phase,edt_version. Имя рабочей области, текущий инструмент, показатели кучи и очереди - только с токеном.- Путь, которого у сервера нет, отвечает
404с текстом, называющим/mcp, заголовокAuthorization: Bearer <токен>и страницу настроек. - Происхождение страницы. Запрос браузера принимается, когда заголовок
Originцеликом равенhttp://localhost,http://127.0.0.1,http://[::1](с портом или без, поhttpилиhttps) либоvscode-webview://<id>.http://localhost.evil.exampleотвергается. Страница, открытая из файла, шлетOrigin: null- такой запрос принимается только при включенной настройке Accept browser pages without an origin, по умолчанию выключенной. - Привязка ко всем интерфейсам. Снимает ограничение loopback: любой хост, который дотянется до машины и знает токен, получит право читать и менять исходники и информационную базу.
Отдельная настройка включает маскирование данных, попадающих в ответ инструмента, - по категориям 152-ФЗ: ИНН, СНИЛС, номер карты, паспорт, телефон, email. По умолчанию выключена.
Что важно понимать про нее честно:
- Маскирование сделано с приоритетом точности над полнотой. ИНН, СНИЛС и карта проверяются по контрольной сумме, у паспорта и телефона обязателен разделитель - поэтому произвольный числовой идентификатор не будет испорчен. Обратная сторона: это не ловит ФИО, адреса и прочие персональные данные в свободном тексте.
- Маскируется собственный вывод инструмента и текст ошибок, но не конверт JSON-RPC и не бинарные изображения: структура ответа не меняется, только содержимое строк.
- Это снижает риск утечки в облачную модель, но не заменяет решение о том, какие данные вообще показывать ассистенту.
Каждый вызов инструмента записывается: что вызвали, с какими аргументами, что ответили, сколько заняло, и кто ответил агенту - инструмент или ваш сигнал из строки состояния. Запись несет arbitratedBy (tool / signal), deliveryStatus (delivered / failed), для сигнала - signalType и текст signalNote. Колонка Outcome показывает ok, interrupted (CANCEL) или failed, not delivered; в статистике get_mcp_history и self_status счетчики interrupted и undelivered идут поверх success и failure. Открыть - из индикатора AI-EDT в строке состояния, пункт Call history. Окно немодальное: агент продолжает работать, пока вы читаете.
Заголовок окна показывает, сколько вызовов хранится и по скольку символов запроса и ответа, а над панелью ответа видно, какая часть сохранена: Response (303 of 1957 characters). Так урезанную запись нельзя принять за короткий ответ.
Настройки в Window -> Preferences -> AI-EDT, раздел Call history: вести ли запись вообще, сколько вызовов хранить, сколько символов запроса и ответа сохранять. Умолчания рассчитаны на вопрос "какие инструменты отработали", а не "что именно они ответили" - если нужен полный ответ, увеличьте число символов, оно и решает, что вы увидите.
Глубина и объем ограничены совместно: буфер целиком не превышает заданного предела памяти, и если запрошенные значения в него не помещаются, число символов уменьшается пропорционально. Фактические значения показаны в заголовке окна истории, так что урезание видно. Умолчания до этого предела не достают.
Полный текст вызова хранится на диске рядом с буфером: get_mcp_history с доводом entryId из записи списка отдает один вызов целиком - полные аргументы и полный ответ, замаскированные так же, как в журнале, - а в окне истории тот же текст открывается по выбору записи. Запись, которой в хранилище больше нет, получает названный отказ, а не урезанную копию под видом полной. Чем это управляется - группа Call history on disk на странице настроек: хранить ли полный текст (по умолчанию да), сколько дней хранить (14, ноль означает до предела размера) и в какой папке (пусто - служебный каталог плагина). При выключенной записи вызовов на диск не пишется ничего.
Отдельная настройка дописывает каждый вызов в файл в служебном каталоге плагина, чтобы запись пережила перезапуск EDT. По умолчанию выключена. Файл ограничен по размеру и ротируется. Пароли информационных баз в него не попадают: значения аргументов с ключом вида password, token, secret заменяются на *** до записи. Персональные данные в файле маскируются - это можно отключить, но по умолчанию включено, потому что файл живет дольше сессии и уезжает вместе с приложением к отчету об ошибке.
- Инструменты рефакторинга метаданных используют сценарий preview/confirm.
- Для незнакомых проектов рекомендуется пресет Read-only.
evaluate_expressionвыполняет код в живой сессии 1С.- Удаление ИБ, импорт конфигурации и синхронизацию можно отключить отдельно.
- Перед структурными обновлениями, которые нельзя отменить через Git, сделайте резервную копию ИБ.
Фасад отладки поддерживает обычные клиентские запуски и конфигурации Attach to 1C:Enterprise Debug Server. Attach необходим для HTTP-сервисов, серверных вызовов, фоновых и регламентных заданий, а также кода, выполняемого в rphost.
Агент получает список конфигураций запуска EDT, подключается к серверу отладки 1С, устанавливает точку останова и ждет приостановки. После этого AI-EDT возвращает стабильные ссылки на поток, стек и кадр, чтобы агент мог исследовать переменные, вычислять выражения, выполнять код по шагам и продолжать выполнение.
Запуск считается состоявшимся только тогда, когда видна живая цель отладки; иначе приходит отказ с тем, что произошло вместо этого, и со списком модальных окон, открывшихся во время запуска. Довод debugServerPort дает запуску свой порт отладочного сервера, когда порт по умолчанию уже занят другой средой на этой машине. Запускаемый клиент может сразу открыть внешнюю обработку или отчет: среда собирает для этого дамп внешнего объекта, поэтому запуск проверяет, включена ли генерация дампа у проекта внешних объектов, и включает ее по доводу enableExternalObjectDump. Параметры открываемой обработке передаются строкой /C через довод startupOption - он пишется в копию конфигурации запуска, сохраненная не меняется; Attach-конфигурация и уже идущий сеанс его отвергают.
Клиент следует режиму запуска конфигурации. Конфигурация, у которой основной режим - обычное приложение, запускается в толстом клиенте: конфигурация запуска, которую создает запуск, сохраняется с толстым клиентом, существующая запускает этот запуск с ним, а /RunModeOrdinaryApplication кладется в дополнительные параметры запуска базы на ссылке, которую EDT держит в сеансе, - список баз на диске не пишется. Доводы clientType (thin, thick, web) и runMode (ordinary, managed) у launch_debugger action=launch и infobase_admin operation=start_client называют выбор прямо; clientType=thin у конфигурации обычного приложения без runMode=managed отвергается. Ответ говорит, что решено (clientType, clientTypeSource, runMode, runModeSource) и что изменено (runModeFlagState, runModeFlagScope, infobaseAdditionalParameters).
| Интеграция | Что становится доступно | Что нужно настроить |
|---|---|---|
| YAxUnit | Запуск и отладка unit-тестов, фильтрация наборов и разбор JUnit-отчетов. | Установить расширение YAxUnit в целевую информационную базу. |
| Vanessa Automation | Выполнение сценарных UI-тестов, синхронно либо ключом возврата, с отменой прогона и снимками, привязанными к упавшему шагу. | Отдельно настроить Vanessa и требуемую конфигурацию запуска. |
| Сервер отладки 1С | Отладка серверного BSL через Attach. | Запустить ragent с -debug -http и создать конфигурацию Attach в EDT. |
| BSL Language Server | Дополнительный анализ исходников через code_review. |
Указать внешний JAR в настройках AI-EDT. |
- AI-EDT зависит от внутренних и публичных служб EDT; после крупного обновления EDT может потребоваться новая версия плагина.
- Сервер доступен только при запущенной EDT.
- Для части семантических инструментов необходимо дождаться завершения индексации проекта; пока она идет, такой инструмент отказывает с указанием причины.
- Endpoint слушает loopback; проверка bearer-токена и привязка ко всем интерфейсам включаются на странице настроек - см. раздел про безопасность.
- Update site публикуется автоматически при выпуске релиза. Промежуточные сборки между релизами ставятся из исходников или из локального P2-репозитория.
Проект принимает воспроизводимые сообщения об ошибках, сфокусированные предложения возможностей, улучшения документации и pull request. Баги и предложения - в Issues по формам Дефект и Пожелание, вопросы и живое обсуждение - в теме Плагин группы Telegram. Агент готовит такую issue сам по правилу скила skills/ai-edt или скилом report-issue наборов правил: обезличенный черновик, отправка только с вашего согласия.
Начните с документов:
- CHANGELOG.md - что изменилось в каждом выпуске, одной строкой со ссылкой на подробности;
- CONTRIBUTING.md - сборка, стиль кода и правила участия;
- SECURITY.md - закрытая передача уязвимостей и модель угроз;
- docs/PROVENANCE.md - происхождение исходников и история переимплементации.
Структура репозитория:
mcp/
├── bundles/ # реализация OSGi-плагина
├── features/ # устанавливаемая Eclipse feature
├── repositories/ # генерируемый P2-репозиторий
├── targets/ # target platform EDT
└── tests/ # тесты плагина и контрактов
docs/ # руководства, аудиты и release notes
scripts/ # автоматизация разработки и обновления
Перед созданием pull request соберите Maven-реактор и опишите, как изменение было проверено на запущенном экземпляре EDT.
AI-EDT - самостоятельный продукт, созданный на основе EDT-MCP автора DitriX. Проект распространяется под лицензией AGPL-3.0-or-later; сохраненные уведомления и подробная история исходников описаны в LICENSE и docs/PROVENANCE.md.
GNU Affero General Public License версии 3.0 или новее. Полный текст - в LICENSE.













