Code Index MCP by Regsorm
Поиск по коду для ИИ-агентов: 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.
code-index-mcp
Поиск по коду для ИИ-агентов. Один бинарник, индекс в 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 072 | 2 мин 41 с | 2,3 с |
| 1С:Бухгалтерия предприятия | 88 284 | 5 мин 51 с | 5,3 с |
| сайт на PHP | 157 772 | 13 мин 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_diff | unified 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 и других).
Дальше
- Полное руководство на русском — демон, конфигурация, CLI, архитектура
- docs/operations.md — эксплуатация: перезапуск, добавление репозиториев, диагностика
- docs/bsl-indexer.md — сборка для 1С
- CHANGELOG.md — журнал изменений
Участие
Ошибки и предложения — в 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.
| Name | Stars | Licence | Last updated | Scan |
|---|---|---|---|---|
| Code Index MCP (this page) Regsorm | 160 | MIT | Oct 27, 2026 | Scanned, no flagged issues |
| Codebase Memory MCP DeusData | 48k | MIT | Nov 1, 2026 | Scanned, see report |
| Xerj xerj-org | 19k | Apache-2.0 | Nov 1, 2026 | Scanned, no flagged issues |
| MCP Toolbox googleapis | 17k | Apache-2.0 | Nov 1, 2026 | Scanned, no flagged issues |
| Nightingale ccfos | 13k | Apache-2.0 | Oct 30, 2026 | Scanned, no flagged issues |
| Dbhub bytebase | 3.8k | MIT | Oct 26, 2026 | Scanned, no flagged issues |