Code Index — структурный поиск по выгрузке кода 1С через MCP

27.04.26

Разработка - Инструментарий разработчика

Open source-индексатор кода 1С с MCP-протоколом для Claude Code, Cursor и других AI-ассистентов. Понимает BSL и XML-выгрузку конфигуратора как структуру: возвращает функции, граф вызовов, реквизиты объектов, обработчики форм и подписки на события. Полная индексация типовой бухгалтерии — 2.5 минуты, инкрементальные обновления — секунды.

Code Index — структурный поиск по коду 1С через MCP

Зачем это нужно

Когда работаешь с конфигурацией 1С через LLM-агента (Claude Code, Cursor, любой MCP-совместимый клиент) — самая дорогая операция это поиск по коду. Агент гоняет grep по гигабайтам выгрузки, забивает контекст сырыми строками, и через пару итераций ты упираешься в лимит окна. А поиск по BSL осложняется тем, что обычные индексаторы (ctags, ripgrep) не понимают структуру модулей 1С — они ищут текст, а не функции.

Code Index решает обе проблемы: парсит BSL (и ещё 7 языков) в SQLite-индекс, отдаёт по MCP-протоколу готовые функции, классы, граф вызовов. Агент получает не «строки 1234–1267 файла Х», а структурированный ответ: имя процедуры, путь, тело, кто её вызывает.

 

Что умеет (общие инструменты)

  • Поиск функций и классов по имени — найти ОбработкаПроведения во всей конфигурации за миллисекунды
  • Граф вызовов — кто вызывает эту процедуру (get_callers), что вызывает она сама (get_callees)
  • Получение тела функции по точному имени — без чтения всего модуля
  • Карта файла — список всех функций/классов модуля без открытия исходника
  • grep по телам функций — поиск подстроки или regex именно внутри процедур (не в комментариях документации)
  • Полнотекстовый поиск через SQLite FTS5 — мгновенный по любому объёму

 

Специальные инструменты для XML-выгрузки 1С

Поверх обычного BSL-парсера в code-index подключается отдельное расширение bsl-extension, которое разбирает не только модули, но и XML-файлы выгрузки конфигуратора. Эти инструменты появляются в MCP автоматически, если хотя бы один репо помечен language = "bsl".

Что разбирается из XML:

  • Configuration.xml — корневой файл конфигурации (состав, версия, совместимость)
  • <Объект>.xml (справочники, документы, регистры…) — реквизиты, табличные части, синонимы, типы
  • Form.xml — управляемые формы: реквизиты, элементы, обработчики событий
  • EventSubscription.xml — подписки на события (источник → обработчик)
  • ConfigDumpInfo.xml — UUID объектов конфигурации

И на основе этих данных — четыре MCP-инструмента, которых нет в обычных индексаторах:

Инструмент Что делает
get_object_structure Структура объекта по full_name (например Справочник.Контрагенты): meta_type, синоним, все реквизиты с типами, табличные части. Заменяет ручное чтение XML-файла объекта
get_form_handlers Все обработчики события формы: (событие → имя процедуры) для указанной формы. Сразу видно где сидит ПриОткрытииПередЗаписью и т.д.
get_event_subscriptions Все подписки на события репо (с фильтром по модулю-обработчику). Полезно когда нужно понять «кто подписан на запись справочника» — обычно эту информацию приходится искать вручную по всем подпискам
find_path Путь вызовов от одной процедуры к другой через граф proc_call_graph (recursive CTE в SQLite). Отвечает на «как ОбработкаПроведения доходит до СформироватьДвижения» — реальная цепочка через все промежуточные модули

 

Плюс есть enrichment-режим — необязательное обогащение индекса через LLM: для каждой функции генерируется сигнатура и краткое описание, которые потом попадают в FTS-поиск. Запрашивая «найди процедуру, которая считает курсовые разницы» — агент находит её даже если в имени нет ни слова «курс», ни «разниц».

 

Поддерживаемые языки

BSL (1С), Python, Rust, Java, Go, JavaScript, TypeScript, XML. Один индекс — все языки разом.

 

Архитектура

Два процесса:

  • Daemon индексации — отслеживает изменения файлов через mtime, переиндексирует только изменённое
  • HTTP MCP-сервер на 127.0.0.1:8011/mcp — один на все клиенты, читает SQLite в режиме read-only

Подключение к Claude Code / Cursor / любому MCP-клиенту — три строки в .mcp.json:

"code-index": { "type": "http", "url": "http://127.0.0.1:8011/mcp" }

В каждом вызове передаётся алиас репо — один сервер обслуживает сколько угодно конфигураций.

 

Преимущества перед grep / ripgrep / встроенным поиском Конфигуратора

  • Структурный поиск: возвращает функции, а не строки. Агент сразу понимает контекст
  • Граф вызовов из коробки — никаких сторонних утилит
  • Понимает выгрузку 1С как структуру — формы, объекты, подписки, а не просто XML
  • Инкрементальная индексация — после первого прохода обновления почти бесплатные
  • Один индекс на все репо — переключение между конфигурациями без перенастройки
  • Read-only SQLite — несколько агентов параллельно не мешают друг другу
  • Федеративный режим — один MCP-сервер может проксировать запросы к индексам на других машинах

 

Производительность — реальный замер

Прогон на типовой бухгалтерии (выгрузка XML), Linux VM, режим in-memory, NVMe:

  • Файлов в репо: 93 648 (из них ~19 300 .bsl)
  • Размер итогового индекса: 5.2 ГБ
  • Пик RAM: ~14 ГБ (in-memory режим всю БД держит в RAM до финального сброса)

Разбивка по фазам:

Фаза Время Что делается
Сбор кандидатов 5.6 сек walkdir по 93K файлам + stat() — около 17 000 stat-операций в секунду
Парсинг + запись данных 19 сек tree-sitter парсит каждый BSL-файл, извлекает функции/классы/переменные/импорты; батчи по 2000 в SQLite. ~5 000 файлов/сек
Создание B-tree индексов + FTS5 rebuild 78.7 сек строятся индексы на колонки (для join/lookup) и перестраивается полнотекстовый индекс через FTS5 — самая долгая фаза
Финальный flush на диск ~29 сек сброс in-memory БД (5.2 ГБ) на NVMe
Wall-clock итого 2 мин 31 сек  

Почему B-tree + FTS5 занимают 78 секунд — это последовательная операция: для каждой записи в таблицах functions/classes выполняется токенизация и вставка в виртуальную FTS5-таблицу. На объёме 92K+ функций фрагментация во временных структурах вынуждает много random I/O даже на NVMe. Это плата за то, что после индексации поиск работает за миллисекунды.

Инкрементальные обновления — на порядки быстрее: при повторном запуске на тех же 93K файлах daemon сравнивает mtime+size без чтения содержимого и обрабатывает только реально изменённые файлы — обычно секунды вместо минут.

 

Скорости запросов после индексации

  • Поиск функции по имени: <10 мс
  • get_callers / get_callees: <20 мс
  • grep_body по regex с фильтром по языку: <100 мс на репозитории УТ
  • get_object_structure / get_form_handlers: <5 мс (одиночный SELECT по индексу)

 

Установка

Бинарник под Windows / Linux собирается через cargo build --release. Подробная инструкция и release-сборки — в репозитории.

 

Ссылка

GitHub: https://github.com/Regsorm/code-index-mcp

Вступайте в нашу телеграмм-группу Инфостарт

1С:Предприятие 8.3 BSL MCP Claude Code Cursor AI-ассистент поиск по коду индексация конфигурации граф вызовов разбор XML 1С tree-sitter open source

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

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

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

24900 руб.

20.08.2024    66417    351    163    

307

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    256762    1418    421    

1161

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26

22570 руб.

06.10.2023    37722    100    46    

119

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

15250 руб.

25.08.2025    52803    106    29    

118

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

17000 руб.

10.11.2023    24914    92    44    

102

Мастера заполнения Поиск данных Инструментарий разработчика Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5.

6000 руб.

25.02.2026    3266    12    1    

14

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки. 1.3.11 Доработан механизм контекстной подсказки по метаданным

9500 руб.

17.05.2024    52387    181    63    

214
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Viver 27.04.26 17:51 Сейчас в теме
Вроде интересная штука, сам что-то подобное давно хотел сделать
2. GarriSoft 513 27.04.26 18:52 Сейчас в теме
(1)
Вроде ни чего сложного, но зачем писать теперь самому, когда уже есть готово решение.
Автору спасибо!
3. ixijixi 2148 28.04.26 09:53 Сейчас в теме
Спасибо, затестим.

Единственно, не уловил - индексируется только выгрузка DumpConfigToFiles или проект ЕДТ тоже умеет?
5. Sorm 83 28.04.26 10:47 Сейчас в теме
(3)
Единственно, не уловил - индексируется только выгрузка DumpConfigToFiles или проект ЕДТ тоже умеет?


У меня EDT негде протестить, поэтому я ориентировался на DumpConfigToFiles. Но могу исследовать и вопрос по EDT
4. ixijixi 2148 28.04.26 10:27 Сейчас в теме
И еще вопрос:
[daemon]
http_port = 0                  # 0 = выбрать свободный порт автоматически
max_concurrent_initial = 1     # папки обрабатываются последовательно при initial reindex

[[paths]]
path = "C:\\RepoUT"

[[paths]]
path = "C:\\RepoBP_1"
debounce_ms = 500              # per-папка переопределение: быстрее чем дефолт 1500 мс
batch_ms    = 1000
Показать

Двойные квадратные скобки в paths не опечатка? Реально так надо?
6. Sorm 83 28.04.26 10:51 Сейчас в теме
(4)
И еще вопрос:
[daemon]
http_port = 0 # 0 = выбрать свободный порт автоматически
max_concurrent_initial = 1 # папки обрабатываются последовательно при initial reindex

[[paths]]
path = "C:\\RepoUT"

[[paths]]
path = "C:\\RepoBP_1"
debounce_ms = 500 # per-папка переопределение: быстрее чем дефолт 1500 мс
batch_ms = 1000
Показать

Двойные квадратные скобки в paths не опечатка? Реально так надо?
Показать


Да. Это штатный синтаксис TOML., элемент "массива таблиц"
7. GarriSoft 513 28.04.26 12:03 Сейчас в теме
Коллега, реально отличный проект, СПАСИБО ОГРОМНОЕ!!!
но, не удалось запустить "Дополнительные инструменты для репозиториев 1C "

Мой кусок из daemon.toml:
[daemon]
# 0 = автоматически выбрать свободный порт
http_port = 0
# Количество папок, индексируемых одновременно
max_concurrent_initial = 1

language = "bsl"

# Укажите ВАШИ проекты (замените пути на реальные)
[[paths]]


Структура проекта:
|-- .ai
|-- .code-index
|-- .codex
|-- scripts
|-- src <---------------- тут выгруженная база из 1с
|-- .env
|-- .gitignore
|-- AGENTS.md
|-- dumpcfg.cmd
|-- loadcfg.cmd
`-- README.md

mcp не видит дополнительных инструментов:
get_object_structure, get_form_handlers и т.д.
Что может быть не так?
9. Sorm 83 28.04.26 13:43 Сейчас в теме
(7) Дело в бинарнике. В релизах на GitHub лежат два артефакта для Windows:
• code-index-windows-x64.zip — универсальный индексатор без 1С-специфики
• bsl-indexer-windows-x64.zip — то же самое плюс инструменты для конфигураций 1С

«Дополнительные инструменты для репозиториев 1С» (get_object_structure, get_form_handlers, get_event_subscriptions, find_path, search_terms) физически линкуются только во второй бинарник. На code-index.exe они никогда не появятся, какой бы конфиг ни написать.

Минимальный рабочий конфиг:

[daemon]
http_port = 0
max_concurrent_initial = 1

[[paths]]
path = "C:\\полный\\путь\\к\\проекту"
После старта вызовите get_stats() — ваш репо должен быть с language: "bsl", и в tools/list появятся пять дополнительных инструментов.
10. GarriSoft 513 28.04.26 14:16 Сейчас в теме
(9)
Коллега, спасибо.
Все понятно, кроме этого:
После старта вызовите get_stats() — ваш репо должен быть с language: "bsl",

Расшифруйте пожалуйста как вызвать get_stats() и где должно именно быть прописано language: "bsl"
11. Sorm 83 28.04.26 14:51 Сейчас в теме
(10)
0. GarriSoft 509 28.04.26 14:16
(9)
Коллега, спасибо.
Все понятно, кроме этого:
После старта вызовите get_stats() — ваш репо должен быть с language: "bsl",

Расшифруйте пожалуйста как вызвать get_stats() и где должно именно быть прописано language: "bsl"


А вы как намерены это использовать? Это MCP-сервер, у него есть метод get_stats().Вызовите его через модель или через curl
12. GarriSoft 513 28.04.26 15:16 Сейчас в теме
(11)
Коллега, я разобрался, спасибо!
8. Sorm 83 28.04.26 13:30 Сейчас в теме
Брали из репозитория какой файл(и запускали какой)? Их там два
13. h3adhunt3r 28.04.26 18:24 Сейчас в теме
Подскажите, на macOS будет работать?
14. Sorm 83 28.04.26 20:25 Сейчас в теме
(13)
Конкретно под MacOS не тестировал, но на Гитхабе компилируется без ошибок.
15. gybson 6 28.04.26 23:26 Сейчас в теме
html-файлы тоже было бы неплохо добавить, для нужд ассистентов
17. Sorm 83 29.04.26 13:00 Сейчас в теме
(15)
html-файлы тоже было бы неплохо добавить, для нужд ассистентов


в следующем обновлении будет.
19. Sorm 83 29.04.26 21:05 Сейчас в теме
(15) Забирайте 0.7.2 с гитхаба
16. Sorm 83 29.04.26 09:52 Сейчас в теме
По обратной связи(не только в чате) сделал ревизию и выкатил обновление. Забирайте на гитхабе.
18. Ibrogim 1657 29.04.26 18:00 Сейчас в теме
Спасибо. то что нужно!
Для отправки сообщения требуется регистрация/авторизация