codebase-memory-mcp — граф знаний кода на чистом C с индексацией за миллисекунды
📂 Исходный код на GitHubВысокопроизводительный MCP-сервер для анализа кода на чистом C. Индексирует кодовую базу в персистентный граф знаний через tree-sitter AST (158 языков) + Hybrid LSP type resolution. Поддерживает 11 AI-агентов, Cypher-запросы, dead code detection, impact-анализ. 99% экономии токенов.
codebase-memory-mcp — самый быстрый MCP-сервер для анализа кода. Полностью индексирует репозиторий в граф знаний за миллисекунды, ядро Linux (28M строк, 75K файлов) — за 3 минуты. Написан на чистом C, поставляется одним статическим бинарником для macOS, Linux и Windows — без Docker, рантаймов и API-ключей.
Зачем это нужно
AI-агенты при работе с кодом читают файлы по одному. Пять структурных запросов через file-by-file grep требуют ~412 000 токенов. Тот же результат через граф знаний — ~3400 токенов. Снижение на 99,2%.
Один запрос к графу заменяет десятки циклов grep/read: агент сразу видит, кто вызывает функцию, какие маршруты использует и что сломается при изменении.
Как работает
Инструмент — структурный бэкенд. Он строит и запрашивает граф знаний, но не содержит LLM. Роль переводчика выполняет MCP-клиент — Claude Code, Codex, Gemini CLI или любой другой агент:
Вы: "что вызывает ProcessOrder?"
Агент вызывает: trace_path(function_name="ProcessOrder", direction="inbound")
codebase-memory-mcp: выполняет запрос к графу, возвращает структурированный результат
Агент: описывает цепочку вызовов обычным языком
Установка
Одна строка для macOS и Linux:
curl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash
Команда install автоматически находит все установленные AI-агенты и настраивает MCP-конфигурацию, файлы инструкций и хуки для каждого. После перезапуска агента — сказать «Index this project».
Производительность
Бенчмарки на Apple M3 Pro:
| Операция | Время | Примечание |
|---|---|---|
| Ядро Linux (full) | 3 мин | 28M LOC, 75K файлов → 4.81M узлов, 7.72M рёбер |
| Ядро Linux (fast) | 1 мин 12 сек | 1.88M узлов |
| Django | ~6 сек | 49K узлов, 196K рёбер |
| Cypher-запрос | <1 мс | Обход связей |
| Поиск по имени (regex) | <10 мс | SQL LIKE префильтрация |
| Dead code detection | ~150 мс | Полное сканирование графа |
| Трассировка вызова (depth=5) | <10 мс | BFS-обход |
Индексация работает в оперативной памяти (LZ4-сжатие, in-memory SQLite, запись в конце). Память освобождается после завершения.
Гибридный LSP
Tree-sitter даёт синтаксическое AST — это хорошо для структуры и вызовов, но не для типов. user.profile.display_name() — tree-sitter не знает, что это Profile.display_name из модуля тремя файлами выше.
Hybrid LSP — это слой семантического разрешения типов на чистом C, встроенный в бинарник. Без отдельного процесса language server, без настройки проекта, без API-ключей. Результат — граф, где рёбра вызовов соответствуют тому, что показал бы IDE «Go to Definition».
Полная поддержка Hybrid LSP для 9 языков:
| Язык | Что разрешает |
|---|---|
| Python | импорты, dataclass, generics, SQLAlchemy/Pydantic, narrowing |
| TypeScript / JS / TSX | generics, JSX dispatch, JSDoc inference, module re-exports |
| PHP | пространства имён, traits, late static binding, PHPDoc |
| C# | records, LINQ, async Task, global usings |
| Go | generics, embedded structs, interface satisfaction |
| C / C++ | макросы, typedef chains, templates, namespaces, auto |
| Java | иерархии классов, overload matching, lambdas, static imports |
| Kotlin | extension functions, scope functions, data classes |
| Rust | impl blocks, trait methods, UFCS, derive-macro synthesis |
Остальные 149 языков получают базовый tree-sitter анализ (определения, вызовы, импорты).
14 MCP-инструментов
Индексирование
index_repository— индексация репозитория в графlist_projects— список проиндексированных проектовdelete_project— удаление проекта и данных графаindex_status— статус индексации
Запросы
search_graph— структурный поиск по меткам, именам, файламtrace_path— BFS-обход: кто вызывает функцию и что она вызываетdetect_changes— маппинг git-diff на затронутые символы с классификацией рискаquery_graph— Cypher-запросы (read-only openCypher)get_graph_schema— схема графа: узлы, рёбра, свойстваget_code_snippet— чтение исходного кода функции по qualified nameget_architecture— обзор архитектуры: языки, пакеты, маршруты, hotspots, кластерыsearch_code— grep-поиск по проиндексированным файламmanage_adr— CRUD для Architecture Decision Recordsingest_traces— загрузка runtime-трейсов для валидации HTTP-связей
Поиск и анализ
Инструмент поддерживает четыре уровня поиска:
- Семантический (
semantic_query) — векторный поиск с эмбеддингами Nomicnomic-embed-code, встроенными в бинарник. Без API-ключей, Ollama и Docker. 11-сигнальный рейтинг (TF-IDF, AST-профили, data flow, MinHash, graph diffusion) - BM25 — полнотекстовый поиск через SQLite FTS5 с токенизатором, понимающим camelCase и snake_case
- Структурный — regex по именам, фильтры по меткам, степеням, файлам
- По коду — graph-augmented grep
Связывание микросервисов
Граф обнаруживает межсервисные связи:
- HTTP-маршруты ↔ места вызовов с оценкой уверенности
- gRPC, GraphQL, tRPC — детекция сервисов с извлечением protobuf-маршрутов
- Каналы
EMITS/LISTENS_ONдля Socket.IO, EventEmitter и pub/sub (8 языков) CROSS_*рёбра между репозиториями в одном хранилище
Командный артефарт графа
Файл .codebase-memory/graph.db.zst — сжатый снимок графа, живущий рядом с исходным кодом. После индексации файл обновляется; когда коллега клонирует репозиторий, артефакт распаковывается и добавочный индекс заполняет локальный diff — без полной переиндексации.
- Формат: SQLite, индексы удалены,
VACUUM INTO, сжатие zstd 1.5.7 (8–13:1) - Два уровня качества: Best (zstd -9) и Fast (zstd -3)
.gitattributes merge=ours— без конфликтов при слиянии
Поддержка 11 AI-агентов
Команда install настраивает все обнаруженные агенты автоматически:
| Агент | MCP-конфиг | Инструкции | Хуки |
|---|---|---|---|
| Claude Code | .claude/.mcp.json |
4 навыка | PreToolUse (Grep/Glob augment) |
| Codex CLI | .codex/config.toml |
.codex/AGENTS.md |
SessionStart |
| Gemini CLI | .gemini/settings.json |
.gemini/GEMINI.md |
BeforeTool + SessionStart |
| Zed | settings.json |
— | — |
| OpenCode | opencode.json |
AGENTS.md |
— |
| Antigravity | .gemini/config/mcp_config.json |
antigravity-cli/AGENTS.md |
SessionStart |
| Aider | — | CONVENTIONS.md |
— |
| KiloCode | mcp_settings.json |
~/.kilocode/rules/ |
— |
| VS Code | Code/User/mcp.json |
— | — |
Хуки структурно неблокирующие (всегда возвращают exit code 0). Для Claude Code хук перехватывает Grep/Glob и при совпадении с проиндексированными символами добавляет их как контекст.
CLI-режим
Любой MCP-инструмент можно вызвать из командной строки:
codebase-memory-mcp cli index_repository '{"repo_path": "/path/to/repo"}'
codebase-memory-mcp cli search_graph '{"name_pattern": ".*Handler.*", "label": "Function"}'
codebase-memory-mcp cli trace_path '{"function_name": "Search", "direction": "both"}'
codebase-memory-mcp cli query_graph '{"query": "MATCH (f:Function) RETURN f.name LIMIT 5"}'
codebase-memory-mcp cli list_projects
Графовая модель данных
Узлы: Project, Package, Folder, File, Module, Class, Function, Method, Interface, Enum, Type, Route, Resource
Типы рёбер (основные): CALLS, IMPORTS, DEFINES, IMPLEMENTS, INHERITS, HTTP_CALLS, ASYNC_CALLS, EMITS, LISTENS_ON, DATA_FLOWS, SIMILAR_TO, SEMANTICALLY_RELATED
Infra-as-code тоже индексируется: Dockerfile, манифесты Kubernetes, Kustomize overlay — как узлы графа с перекрёстными ссылками.
Безопасность
- Всё работает локально, телеметрии нет — код, запросы и данные не покидают машину
- VirusTotal — все бинарники проверяются 70+ антивирусами (0 детектов обязательно)
- SLSA Level 3 — криптографическое подтверждение сборки через GitHub Actions
- Sigstore cosign — keyless-подписи на всех артефактах
- SHA-256 чек-суммы в каждом релизе
- CodeQL SAST — блокирует релиз при открытых алёртах
Ссылки
- Репозиторий: github.com/DeusData/codebase-memory-mcp
- Исследование: arXiv:2603.27277
- Пакетные менеджеры: npm, PyPI, Homebrew, Scoop, Winget, Chocolatey, AUR,
go install - Лицензия: MIT