Code Index MCP by Regsorm

by Regsorm• 160•• Scanned•Claim this listing•Request removal
Database Management1c enterpriseastbslcode indexcode search

Поиск по коду для ИИ-агентов: 32 инструмента MCP, индекс на SQLite, один бинарник без зависимостей. Разбирает выгрузки 1С:Предприятие — Конфигуратор и EDT; конфигурация на 88 тыс. файлов индексируется за 6 минут, ответ на запрос — 10 мс. Code index MCP server: tree-sitter AST for 14 languages, 20 universal tools + 12 for 1C/BSL.

Code Index MCP is an open-source mcp server by Regsorm, written mainly in Rust, with 160 GitHub stars and the MIT license. Its code was last updated Oct 27, 2026. The latest npm release is @regsorm/code-index-mcp 1.17.0, published Nov 15, 2026, with 680 downloads last week.

<a href="https://infostart.ru/1c/tools/2677918/" title="Публикация на Инфостарте"> <img src="https://infostart.ru/bitrix/templates/sandbox_empty/assets/tpl/abo/img/logo.svg" alt="Infostart" height="32"> </a>

code-index-mcp

Релиз npm Лицензия

Поиск по коду для ИИ-агентов. Один бинарник, индекс в SQLite, ответ за миллисекунды. Разбирает выгрузки 1С:Предприятие 8.3 — и из Конфигуратора, и из 1С:EDT.

Полное руководство · English · Документация · Журнал изменений

Выгрузки с именами файлов Unicode в NFC и NFD поддерживаются; для восстановления данных старого индекса нужна пересборка (версия данных 6).


Установка

Windows — одной командой

irm https://raw.githubusercontent.com/Regsorm/code-index-mcp/main/install.ps1 | iex

Скачивает последний выпуск в C:\tools\code-index, запоминает папку в переменной окружения, создаёт заготовку файла настроек и печатает готовый блок для .mcp.json.

С параметрами — папка установки, папка с исходниками, автозапуск при входе в систему:

& ([scriptblock]::Create((irm https://raw.githubusercontent.com/Regsorm/code-index-mcp/main/install.ps1))) `
    -InstallDir 'D:\code-index' -Repo 'main=D:\Repo1C' -RegisterAutostart

Автозапуск идёт через папку автозагрузки пользователя: прав администратора не требует, окон не показывает. Остальные параметры — -Flavor core для сборки без 1С, -Version 1.0.0 для конкретного выпуска, -Port и -DaemonPort, если порты по умолчанию заняты. Полный список — Get-Help .\install.ps1 -Detailed.

Windows — вручную, готовый архив из выпуска

Скачивает последний выпуск, распаковывает в C:\tools\code-index и запоминает эту папку в переменной окружения:

$dst = 'C:\tools\code-index'
New-Item -ItemType Directory -Force $dst | Out-Null
$url = (Invoke-RestMethod https://api.github.com/repos/Regsorm/code-index-mcp/releases/latest).assets |
       Where-Object name -eq 'bsl-indexer-windows-x64.zip' |
       Select-Object -ExpandProperty browser_download_url
Invoke-WebRequest $url -OutFile "$env:TEMP\code-index.zip"
Expand-Archive "$env:TEMP\code-index.zip" -DestinationPath $dst -Force
setx CODE_INDEX_HOME $dst

bsl-indexer — сборка с поддержкой 1С (42 инструмента). Нужна работа без 1С — возьмите code-index-windows-x64.zip (25 инструментов). Для Linux и macOS в том же выпуске лежат *-linux-x64.tar.gz и *-macos-arm64.tar.gz.

Дальше — файл настроек, запуск, подключение клиента и автозапуск. Всё это без скриптов, по шагам: установка вручную (English).

npm

npm install -g @regsorm/code-index-mcp
npx @regsorm/code-index-mcp serve --path /путь/к/репозиторию

Шаг postinstall скачивает готовый бинарник под вашу платформу — ничего не компилируется. Пакет есть и в реестре MCP под именем io.github.Regsorm/code-index. В обёртке только сборка без 1С.

Сервер serve только читает индекс, строит его фоновый индексатор. Поэтому должны быть запущены npx @regsorm/code-index-mcp daemon run и задана переменная CODE_INDEX_HOME — иначе инструменты отвечают daemon_offline. Настройка — в полном руководстве.

Сборка из исходников

git clone https://github.com/Regsorm/code-index-mcp.git
cd code-index-mcp
cargo build --release -p code-index                          # без 1С
cargo build --release -p bsl-indexer --features enrichment   # с поддержкой 1С

Нужен Rust 1.77+.

Сервер для команды

Готовые варианты развёртывания на Linux — в deploy/: Docker, systemd и веб-панель администрирования баз, чтобы добавлять и удалять базы из браузера.

Подключение к клиенту

Общий процесс по HTTP — один индекс на все сессии и все проекты. HTTP-сервер встроен в программу, отдельный веб-сервер не нужен; по умолчанию он слушает только 127.0.0.1:

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

Слушает только 127.0.0.1 и принимает только loopback-значения заголовка Host. Сервер в сети (--host 0.0.0.0 или [me].ip в serve.toml) перечисляет имена клиентов в [me].allowed_hosts либо в CODE_INDEX_ALLOWED_HOSTS — иначе /mcp отвечает 403 Host header is not allowed. Подробности — полное руководство.

Отдельный процесс на сессию (stdio) — клиент сам запускает сервер при открытии сессии, порт не нужен. Фоновый индексатор (daemon run) при этом тоже должен работать: сервер только читает индекс, а строит его индексатор. Без него инструменты отвечают daemon_offline:

{
  "mcpServers": {
    "code-index": {
      "command": "npx",
      "args": ["-y", "@regsorm/code-index-mcp", "serve", "--path", "."]
    }
  }
}

Работает с Claude Code, Cursor, VS Code, LibreChat — с любым клиентом MCP. Настройка фонового демона, список репозиториев, тонкие параметры — полное руководство.

Гард: чтение через индекс (необязательно)

Правило «по индексированным каталогам читай через code-index» модель под нагрузкой забывает и уходит в обычное чтение файлов, которое в 3–10 раз дороже по токенам. code-index-guard — хук PreToolUse для Claude Code и Codex CLI: отклоняет обычное чтение, поиск и обход каталога только там, где индекс отдаёт тот же файл, и подсказывает нужный инструмент. Новый, ещё не проиндексированный или исключённый из индекса файл читается как обычно. Сборка и установка — crates/code-index-guard.

Копия проекта с готовым индексом

code-index-copy делает копию проекта (файлы под контролем git или git worktree на новой ветке) и переносит в неё базу индекса, так что индекс копии не строится заново: демон копии при запуске только сверяет файлы с базой. Файлы исходника вне git из базы копии убираются, конфиги демона и сервера выдачи копии пишутся сразу. Подробности — crates/code-index-copy.

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

Языковая модель без индекса ищет по коду тем же способом, что и человек без среды разработки: перебором. Один вопрос «кто вызывает эту процедуру» превращается в десяток последовательных обходов файлов, каждый из которых читает тысячи файлов и возвращает в контекст модели куски текста — вместе с оплатой этих кусков.

code-index делает работу заранее: разбирает исходники в синтаксическое дерево, складывает символы, тела, вызовы и метаданные в SQLite и отдаёт агенту готовый ответ по протоколу MCP. Модель получает три строки вместо трёх файлов.

Цифры

<picture> <source media="(prefers-color-scheme: dark)" srcset="docs/bench-summary-dark.svg"> <img alt="В среднем в 2,04 раза дешевле по токенам, в 1,78 раза быстрее, 51 % экономии за сеанс" src="docs/bench-summary-light.svg" width="880"> </picture>
Кодовая базаФайловПолная индексацияЗапуск на готовом индексе
1С:Управление Торговлей57 0722 мин 41 с2,3 с
1С:Бухгалтерия предприятия88 2845 мин 51 с5,3 с
сайт на PHP157 77213 мин 1 с8,0 с

Полная индексация — разбор всего с нуля, делается один раз. У Бухгалтерии эти 5 мин 51 с складываются так: 2 мин 38 с ядро (синтаксические деревья и запись), 1 мин 58 с надстройка 1С (метаданные, формы, права, граф вызовов), 56 с сброс базы на диск. Дальше правки подхватываются по одной, за миллисекунды.

Запуск на готовом индексе сверяет время правки и размер каждого файла — ни одного чтения содержимого, ни одного хеша.

Ответ на запросоколо 10 мс по HTTP, повторный из кэша — доли миллисекунды
Размер бинарника39 МБ без 1С, 41 МБ с 1С
Функций в индексе Управления Торговлей261 548
Вызовов в графе там же1 962 941

Замеры сделаны на одной машине под Windows с обычным жёстким диском, август 2026.

Инструменты

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

Поиск и навигация

search_function search_classполнотекстовый поиск по функциям и классам
get_function get_classточное имя → готовое тело; при промахе подсказывает похожие имена
find_symbolсимвол любого рода: функция, класс, переменная, импорт
get_importsимпорты модуля или файла
get_file_summaryкарта файла без чтения исходника

Граф вызовов

get_callers get_calleesкто вызывает процедуру и кого вызывает она
find_pathкратчайшая цепочка вызовов между двумя функциями
get_call_treeдерево вызовов вниз или вверх на заданную глубину

Содержимое файлов

read_fileчтение с диапазоном строк; содержимое кода лежит в индексе, сжатое zstd
list_files stat_fileсписок файлов по маске и метаданные одного файла
grep_bodyподстрока или регулярное выражение в телах функций и классов
grep_code grep_textто же по всему тексту файлов кода и текстовых файлов
search_textполнотекстовый поиск по текстовым форматам
get_stats healthсостояние индекса и сервера

Git (включается git = true у записи [[paths]]; git_path — если репозиторий лежит выше индекса)

git_logистория коммитов ревизии или локальной даты с фильтром по пути
git_changed_filesизменённые файлы между двумя снимками: статусы, переименования, бинарные
git_changes_by_objectте же изменения, сгруппированные по объектам метаданных 1С
git_diffunified diff одного файла с контекстом и пределом длины
git_show_fileисторическое содержимое файла с диапазоном строк

Даты — YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DDTHH:MM; зону можно задать параметром tz (+03:00 или UTC), иначе берётся локальная зона исполняющей машины (в контейнере ноды это UTC, timezone есть в каждом ответе). Пути — от корня индекса (для подкаталога изменения вне его не видны; для bare — от корня репозитория). Shallow-клон отвергается с подсказкой git fetch --unshallow, сеть инструменты не используют, а правка git/git_path применяется без перезапуска.

Для конфигураций 1С (сборка bsl-indexer, появляются сами при наличии репозитория с выгрузкой)

get_object_structureреквизиты с типами и синонимами, табличные части, измерения и ресурсы, предопределённые элементы, свойства проведения
get_object_profileпаспорт объекта одним вызовом: структура, формы, модули, связи
get_form_handlersобработчики событий управляемой формы, с привязкой к элементу
get_event_subscriptionsподписки на события: явные источники, наборы и определяемые типы, менеджеры, расширения; способ совпадения и предупреждения о неполноте
get_data_links find_data_pathграф связей данных: кто на кого ссылается и цепочка между двумя объектами
find_referencesкарта влияния: ссылки из метаданных, обращения в коде, права ролей
get_register_writersрегистраторы регистра и движения документа
find_path_bslцепочка вызовов процедур по графу выгрузки
query_call_sitesвызовы с контекстом места: в цикле, в Попытке, с глубиной вложенности
get_node_structureскелет процедуры: циклы, Попытка и ветки с номерами строк
get_line_contextчто находится на строке: процедура, содержащие её блоки, признаки
search_termsсмысловой поиск процедур по именам, синонимам и комментариям
get_role_rightsправа ролей на объект и права одной роли
bsl_sqlпроизвольный запрос на чтение к таблицам метаданных и графов

Что даёт поддержка 1С

  • Разбираются обе формы выгрузки: XML из Конфигуратора и .mdo из 1С:EDT.
  • Граф связей данных строится по ссылочным типам реквизитов, измерений и табличных частей: для Бухгалтерии предприятия это 65 421 ребро.
  • Из модулей извлекаются директивы компиляции (&НаСервере, &НаКлиенте) и аннотации расширений (&Вместо, &После, &Перед) вместе с именем переопределяемой процедуры.
  • Понимаются оба синтаксиса BSL — русский и английский.
  • Регистр имени объекта не важен: кириллические имена приводятся к записи из конфигурации, в ответе имя показывается канонически.
  • Критерий name_like ищет по имени И синониму без учёта регистра — кириллица тоже (% — любая последовательность, _ — один Unicode-символ, остальное буквально, без экранирования обратной косой чертой, после NFC); причина совпадения приходит в matched_by (["name"], ["synonym"], ["name", "synonym"]), объект возвращается один раз.
  • grep_code/grep_text/grep_body помечают производные файлы (file_annotations) по явной фразе в шапке — «НЕ редактировать», DO NOT EDIT, auto-generated; непроверенная шапка получает derived_status: unknown, а не «свой файл».
  • Расхождение версии данных видно и на успешных ответах: рядом с result появляются data_version_stale и data_version с версиями и сообщением; на свежем индексе этих полей нет.

Подробности — docs/bsl-indexer.md.

Поиск и полнота ответа

Для grep_code, grep_text, list_files, find_symbol и get_object_structure доступны список repos: ["app", "app-test"] и маска алиасов repo: "app-*". Максимум восемь элементов; повторы удаляются в порядке списка, маска раскрывается по алфавиту. Точный алиас главнее маски; конфликт селекторов, неизвестные алиасы, пустые или неверные маски отклоняются до поиска. Селектор не открывает путь или адрес; остальные инструменты отклоняют repos. Ответ набора сгруппирован в result.repos (repo, status, payload); ошибки и пропуски видны явно. Одиночный алиас и default_repo сохраняют прежнюю форму. Старый федеративный узел без bounded_search даёт ошибку группы.

Общие пределы: limit 1–500, default 100; для объектов — 1–50, default 50. Контекст grep не считается находкой. Обход последовательный: 4096 файлов, 64 MiB сжатых и 64 MiB распакованных данных, максимум 30 секунд и tool_timeout. max_response_bytes ограничивает весь набор (стандартно 48 000 байт, конечный предел сохраняется и при выключенном серверном cap). Набор не кэшируется; дедуп ведётся отдельно по инструменту и repo.

Нулевой grep проверяет другую категорию теми же regex/glob/language: 256 файлов, 8 MiB сжатых и 8 MiB распакованных данных, до 20 строк; это расход общего бюджета набора. other_category.matched при complete=false — нижняя граница; неполный ноль не доказывает отсутствия. Полный ноль в обеих категориях нового поля не добавляет.

file_annotations доступны и в поиске символов, текста и списке файлов. Проверяется только шапка из индекса: до 20 строк, 4 KiB распакованного и 64 KiB сжатого префикса на файл; до 100 путей, 256 KiB сжатых и 256 KiB распакованных данных на запрос, общих для набора. Подтверждение: derived=true и header_line; недоступная шапка: derived_status=unknown с причиной и отдельной пометкой неполноты, без ложного derived=false. source_path не выводится. data_version_stale=true, data_version (built/current/message, локально также command) и data_version_hint видны у каждой группы с устаревшим индексом и перепроверяются на cache hit; удалённый путь как команду клиенту не возвращаем. content.text и structuredContent содержат одинаковые данные.

Языки

Полный разбор синтаксиса: Python, JavaScript, TypeScript, Java, Rust, Go, PHP, C, C++, C#, Ruby, Swift, 1С (BSL), HTML. Метаданные 1С — XML Конфигуратора и .mdo из EDT. Плюс полнотекстовая индексация 50+ текстовых форматов (.md, .json, .yaml, .toml, .sql и других).

Дальше

Участие

Ошибки и предложения — в issues, вопросы и обсуждения — в Discussions. Как прислать правку — CONTRIBUTING.md, об уязвимостях — SECURITY.md.

Лицензия

MIT, см. LICENSE.

Проект стоит на tree-sitter, грамматике BSL от сообщества 1c-syntax, rusqlite, rayon и Rust SDK для MCP.

Code Index MCP alternatives

View more →

Similar mcp servers in Database Management, ranked by GitHub stars. Compare licence, recent activity and scan status before you choose.

NameStarsLicenceLast updatedScan
Code Index MCP (this page)
Regsorm
160MITOct 27, 2026Scanned, no flagged issues
Codebase Memory MCP
DeusData
48kMITNov 1, 2026Scanned, see report
Xerj
xerj-org
19kApache-2.0Nov 1, 2026Scanned, no flagged issues
MCP Toolbox
googleapis
17kApache-2.0Nov 1, 2026Scanned, no flagged issues
Nightingale
ccfos
13kApache-2.0Oct 30, 2026Scanned, no flagged issues
Dbhub
bytebase
3.8kMITOct 26, 2026Scanned, no flagged issues