About code-index
code-index is a Rust MCP server that indexes repositories in SQLite for AI coding agents, with native support for 1C:Enterprise exports. It provides code search, symbol navigation, call graphs, Git history, and specialized 1C metadata queries through one index.
Key features
- 01SQLite-backed repository index
- 02AST parsing for 14 languages
- 03Native 1C:Enterprise metadata tools
- 04Symbol search and call-graph navigation
- 05Code and text search
- 06Git history and diff tools
Use cases
- 01Find callers or callees across a codebase
- 02Inspect 1C configuration objects and references
- 03Search indexed source and text files
- 04Review repository history and file changes
MCP support
Exposes repository indexing and query tools to MCP clients over HTTP or stdio. A background daemon builds the index, while the server reads and serves it.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEcode-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+.
Подключение к клиенту
Общий процесс по 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. Модель получает три строки вместо трёх файлов.
Цифры
| Кодовая база | Файлов | Полная индексация | Запуск на готовом индексе |
|---|---|---|---|
| 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 — русский и английский.
- Регистр имени объекта не важен: кириллические имена приводятся к записи из конфигурации, в ответе имя показывается канонически.
Подробности — docs/bsl-indexer.md.
Языки
Полный разбор синтаксиса: 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.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.