mcpField
C
code-index

code-index

本地服务
github.com/Regsorm开发工具1581 天前更新

关于 code-index

code-index 是面向 AI 编码 Agent 的 Rust MCP 服务,将代码库索引存入 SQLite,并原生支持 1C:Enterprise 导出文件。它通过单一索引提供代码搜索、符号导航、调用图、Git 历史和专用 1C 元数据查询。

主要功能

  1. 01基于 SQLite 的代码库索引
  2. 02支持 14 种语言的 AST 解析
  3. 03原生 1C:Enterprise 元数据工具
  4. 04符号搜索与调用图导航
  5. 05代码和文本搜索
  6. 06Git 历史与差异工具

适用场景

  1. 01查找代码库中的调用方或被调用方
  2. 02检查 1C 配置对象及其引用
  3. 03搜索已索引的源码和文本文件
  4. 04查看代码库历史和文件变更

MCP 相关

通过 HTTP 或 stdio 向 MCP 客户端提供代码库索引与查询工具。后台守护进程负责构建索引,服务端读取并提供索引内容。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"regsorm-code-index": {
"command": "npx",
"args": [
"-y",
"@regsorm/code-index-mcp"
]
}
}
}
启动命令npx -y @regsorm/code-index-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@regsorm/code-index-mcp1.15.6

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Infostart

code-index-mcp

发行版 npm 许可证

面向 AI Agent 的代码搜索。单个二进制文件,使用 SQLite 建立索引,毫秒级响应。 可解析 1C:Enterprise 8.3 导出文件——包括来自 Configurator 和 1C: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,用于不含 1C 的构建版本;-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 是支持 1C 的构建版本(42 个工具)。若需不含 1C 的版本, 请下载 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。此封装仅提供不含 1C 的构建版本。

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 服务器内置于程序中,无需单独的 Web 服务器;默认仅监听 127.0.0.1:

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

仅监听 127.0.0.1,并且只接受 Host 标头中的 loopback 值。 若要让服务器在网络上提供服务(使用 --host 0.0.0.0 或在 serve.toml 中设置 [me].ip),请在 [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. Модель получает три строки вместо трёх файлов.

Цифры

В среднем в 2,04 раза дешевле по токенам, в 1,78 раза быстрее, 51 % экономии за сеанс
Кодовая базаФайловПолная индексацияЗапуск на готовом индексе
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 和来自 1С:EDT 的 .mdo。
  • 根据属性、维度和表格部分中的引用类型构建数据关系图:对于企业会计系统,包含 65 421 条边。
  • 从模块中提取编译指令(&НаСервере、&НаКлиенте)和扩展注释(&Вместо、&После、&Перед),以及被重写过程的名称。
  • 支持 BSL 的俄语和英语两种语法。
  • 对象名称不区分大小写:西里尔字母名称会规范为配置中的写法,响应中显示规范名称。

详情请见 docs/bsl-indexer.md。

语言

完整语法解析:Python、JavaScript、TypeScript、Java、Rust、Go、PHP、C、C++、C#、Ruby、Swift、1С(BSL)、HTML。1С 元数据支持配置器 XML 和来自 EDT 的 .mdo。此外,还支持对 50 多种文本格式进行全文索引(.md、.json、.yaml、.toml、.sql 等)。

后续

参与贡献

错误报告和建议请提交到 issues,问题和讨论请前往 Discussions。如何提交修改,请参阅 CONTRIBUTING.md;有关漏洞的信息,请参阅 SECURITY.md。

许可证

MIT,详见 LICENSE。

本项目基于 tree-sitter、1c-syntax 社区提供的 BSL 语法、rusqlite、rayon 和 MCP Rust SDK。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。