Граф кода: когда нейронка перестаёт гадать
Любой, кто пробовал скормить ИИ-агенту монолит на 500 тысяч строк, знает эту боль. Агент либо забывает контекст через три шага, либо выкачивает в промпт половину репозитория и виснет на лимите токенов. Решение лежит на поверхности — дать агенту не сырой код, а карту кода: граф зависимостей, где каждый узел — это функция, класс или файл, а рёбра — вызовы, наследование, импорты. Именно это и делает OntoIndex — open-source инструмент, который строит семантический граф вашего проекта и выставляет его через MCP-сервер прямиком в распоряжение AI-агента.
В двух словах: OntoIndex — это парсер кода + графовая база данных + MCP API + веб-интерфейс. Всё в одном Docker-образе.
В отличие от популярного Project Graph MCP, который выгружает связи в сжатый JSON, OntoIndex хранит граф в настоящей графовой БД (Neo4j) и позволяет агенту делать осмысленные запросы: «найди все функции, которые вызывают этот метод», «покажи путь от контроллера к базе данных», «кто наследуется от этого класса?». Агент получает не плоский список, а структуру, которую может обходить рекурсивно.
OntoIndex под капотом
Сердце инструмента — парсеры на основе Tree-sitter. Они умеют разбирать Python, TypeScript, Go, Rust, Java, C# и ещё с десяток языков. На выходе — не просто AST, а семантические сущности: функции, классы, интерфейсы, модули, а также отношения «вызывает», «использует тип», «реализует интерфейс», «импортирует», «наследует». Всё это складывается в Neo4j (можно заменить на Memgraph или даже SQLite с графовым расширением).
MCP-сервер OntoIndex предоставляет агентам несколько инструментов:
query_graph— поиск зависимостей по имени узла или регулярке.get_context— извлечение подграфа вокруг указанной функции (например, все её вызывающие и вызываемые).shortest_path— находит путь между двумя сущностями (бесценно при дебаге).diff_graph— показывает изменения в графе между двумя коммитами (beta).
Весь этот функционал доступен и через веб-интерфейс: можно визуально бродить по графу, искать узлы, смотреть историю изменений. Веб-морда написана на React + D3.js, легко кастомизируется.
Кто ещё строит графы? (спойлер: OntoIndex выигрывает)
| Инструмент | Графовая БД | MCP-сервер | Веб-UI | Поддержка языков |
|---|---|---|---|---|
| OntoIndex | Neo4j / Memgraph | Встроенный | Нативный | 10+ |
| Project Graph MCP | Нет (JSON) | Есть | Нет | 6 |
| SocratiCode | SQLite | Есть | Нет | 5 |
| Sourcegraph | Своя | Нет (только API) | Есть | 30+ |
Sourcegraph — тяжеловес, требует отдельного кластера, а MCP для него придётся писать самому или использовать сторонние коннекторы вроде Arcade.dev. SocratiCode больше заточен на вопросы по коду в стиле Q&A, а не на навигацию по графу. Project Graph MCP — лёгкий, но без графовой БД и визуализации. OntoIndex занимает нишу «золотой середины»: полноценный граф, MCP из коробки, удобная веб-морда.
Три сценария, где OntoIndex вывозит
1 Рефакторинг без страха
Агент получает задачу: «переименуй метод fetchData в loadUserData и подправь все места, где он вызывается». Без графа агент либо доверится grep'у (и пропустит динамические вызовы через getattr), либо пройдётся по всему проекту. OntoIndex даёт агенту точный список зависимостей — и он меняет только то, что нужно. А ещё можно проверить, не появились ли новые циклы в графе, вызвав diff_graph после коммита.
2 Онбординг новичка
Вместо того чтобы читать документацию (которой нет) и бродить по файлам в IDE, разработчик открывает веб-интерфейс OntoIndex и видит: вот точка входа, вот слой сервисов, вот как они связаны. Можно даже экспортировать граф в SVG для презентации. Когда агент уже знает архитектуру, его Agent Skills подгружаются быстрее — меньше контекста тратится на объяснение структуры.
3 Расследование багов в проде
Представьте: метод calculatePrice вдруг начал возвращать None. Агент с OntoIndex может за две секунды построить путь от этого метода до всех его вызывающих, выяснить, какой флаг был не установлен, и предложить фикс. Без графа — ручное чтение стека и надежда на интуицию.
Как подружить OntoIndex с вашим агентом
Установка — пара команд Docker. Для быстрого старта используйте официальный compose-файл, который поднимает Neo4j и OntoIndex:
git clone https://github.com/ontoindex/ontoindex
cd ontoindex
docker compose up -d
После этого откройте http://localhost:8080 — веб-интерфейс готов. Далее настройте MCP-клиент (например, Claude Desktop или ваш собственный оркестратор). В конфигурацию MCP добавьте сервер OntoIndex:
{
"mcpServers": {
"ontoindex": {
"command": "node",
"args": ["/app/mcp-server/index.js"],
"env": {
"NEO4J_URI": "bolt://localhost:7687",
"NEO4J_USER": "neo4j",
"NEO4J_PASSWORD": "password"
}
}
}
}
Теперь агент может использовать инструменты OntoIndex. Например, запрос «покажи зависимости класса UserService» превратится в вызов query_graph с параметром UserService. Подробнее о том, как MCP-серверы встраиваются в агентов, описано в руководстве по MCP от Anthropic.
Важный нюанс: OntoIndex индексирует только то, что описано в конфиге. Если проект использует динамические импорты или кодогенерацию, часть связей может быть потеряна. Рекомендую перед запуском на боевом репозитории протестировать на небольшой подвыборке и при необходимости дописать свои правила для Tree-sitter.
Кому это нужно (и кому не нужно)
OntoIndex — идеальный выбор для команд, которые уже используют AI-агентов для code review или рефакторинга и упираются в потолок контекста. Особенно полезен для микросервисных архитектур, где связи размазаны по десяткам репозиториев — можно запустить один инстанс и скормить ему все ваши репозитории, объединив в единый граф. DevOps-инженерам понравится лёгкость развёртывания (один Docker compose) и интеграция с существующей инфраструктурой MCP.
С другой стороны, если ваш проект — это один файл на 500 строк, OntoIndex будет избыточным. Для маленьких кодовых баз больше подойдёт Project Graph MCP или даже просто выгрузка AST в промпт. Также не стоит ждать чуда на проектах с активным использованием макросов или рефлексии — парсеры Tree-sitter могут не схватить такие связи.
В любом случае, граф кода — это следующий шаг после простой RAG-индексации. В сочетании с инструментами вроде Owlex (мультиагентный совет) или архитектуры Джеффа Эмануэля, OntoIndex может стать фундаментом для полностью автономных агентов, которые не теряют контекст. А если вы только начинаете погружаться в MCP, советую сперва прочитать практическое руководство по добавлению MCP в браузерного агента — там вся механика разжёвана.
OntoIndex не решит все проблемы, но снимет одну из самых болезненных — нехватку контекста. Попробуйте на своём второстепенном сервисе, и, возможно, через неделю вы уже не сможете представить работу агента без графа.