Перестаньте уже копаться в чужом коде через grep. Серьёзно. Вы же не ищете иголку в стоге сена, перебирая каждую травинку? А вот ИИ-агент, которому скормили всю кодовую базу в контекст, делает именно это — пожирает тысячи токенов, тупеет на глазах и всё равно не может отличить определение функции от её вызова. Знакомая боль? Тогда встречайте SocratiCode — MCP-сервер, который не грузит контекст, а даёт агенту инструмент для поиска.
Чем SocratiCode отличается от гадалки на grep
В основе SocratiCode — не просто полнотекстовый поиск по файлам, а умный гибрид. Он сначала разбивает код на осмысленные куски через AST-чанкинг: выделяет классы, функции, методы, импорты. Каждому такому куску присваивается вектор через локальную модель Ollama (например, bge-m3 или nomic-embed-text). Вектора отправляются в Qdrant. А чтобы не промахнуться, SocratiCode ещё использует BM25 (ключевые слова) и скрещивает результаты — получается семантический поиск, который понимает, что вы хотели спросить, а не то, что написали в коммит-месседже.
Ключевая фишка: SocratiCode не пытается запихнуть весь код в промпт. Агент сам решает, когда ему нужно дёрнуть MCP-инструмент search_code или get_file_context. Это экономит тонны токенов и не даёт модели скатиться в бред.
На практике это выглядит так. Вы пишете в чате: «Найди функцию, которая парсит конфиг и валидирует тайм-ауты». Агент идёт в SocratiCode, получает 2-3 кандидата, вытаскивает исходник нужного метода — и вы уже видите баг в условии. Никаких лишних файлов в контексте.
Мясо: заглядываем под капот
Разберём архитектуру на пальцах. SocratiCode написан на Python, использует tree-sitter для парсинга AST — поддерживает JavaScript/TypeScript, Python, Go, Rust, Java и ещё с десяток языков. Чанкинг не тупой (по 200 токенов), а структурный: сначала выделяется глобальная область, потом класс с его методами, потом отдельные функции. Это похоже на то, как работает Ragex, но SocratiCode не строит граф зависимостей — он делает упор на поиск по смыслу.
За векторизацию отвечает Ollama. Вы просто тянете любую модель эмбеддингов, которая есть на вашей машине. Qdrant можно запустить в Docker или использовать облачный кластер — не принципиально. Коммуникация с агентом идёт через протокол MCP (Model Context Protocol).
{
"mcpServers": {
"socraticode": {
"command": "python",
"args": ["-m", "socraticode.mcp_server"],
"env": {
"SOCRATICODE_QDRANT_URL": "http://localhost:6333",
"SOCRATICODE_OLLAMA_URL": "http://localhost:11434",
"SOCRATICODE_REPO_PATH": "/path/to/your/project"
}
}
}
}
Индексация происходит один раз при старте, дальше — только инкрементальные обновления при изменениях в файлах. Не ждите, что это мгновенно для репозитория на 500 000 строк — первая индексация займёт пару минут. Но потом поиск летает.
Кто кого: SocratiCode vs Ragex vs Code-memory
На рынке MCP-серверов для кода уже появились интересные игроки. Code-memory строит граф знаний с кучей связей — супер, если вы хотите понять архитектуру, но жрёт VRAM как не в себя. Ragex тоже использует AST и графы, но его сильная сторона — навигация по зависимостям (кто кого вызывает). SocratiCode же заточен именно на семантический поиск: вы задаёте вопрос на естественном языке, и он возвращает куски кода, которые релевантны по смыслу, а не по названию файла.
| Параметр | SocratiCode | Ragex | Code-memory |
|---|---|---|---|
| Тип поиска | Гибридный (семантика + BM25) | Графовый (зависимости) | Граф знаний (сущности+связи) |
| Потребление ресурсов | Среднее (Qdrant + Ollama) | Низкое (только AST, без эмбеддингов) | Высокое (нейросеть для графа) |
| Лучше всего для | Поиска по смыслу в легаси | Понимания архитектуры вызовов | Полной карты проекта |
Вывод? SocratiCode — не замена, а дополнение. Если у вас уже есть графовый MCP-сервер (вроде Ragex) и вам не хватает семантического поиска, SocratiCode легко подключается как второй инструмент. Агент сам решит, куда обратиться.
Боевой сценарий: я искал тайм-аут, а нашёл баг
Берём свежий проект на Go, где timeout на запрос к внешнему API почему-то не срабатывал. Вместо того чтобы листать 50 файлов вручную, я просто спрашиваю ассистента: «Найди функцию, которая устанавливает тайм-аут для HTTP-клиента, и проверь, передаётся ли она в конструктор».
Ассистент (у меня был Claude Code) вызывает search_code с текстом запроса. SocratiCode возвращает три кандидата — один из них оказывается функцией newHTTPClientWithTimeout в файле pkg/client.go. Ассистент запрашивает полный контекст этого файла (инструмент get_file_context) и сразу видит: в конструктор передаётся переменная cfg.Timeout, но дефолтное значение равно нулю, а условие на установку дефолта написано с ошибкой — if timeout == 0 вместо if timeout <= 0. Нашёл и исправил за минуту. Без SocratiCode пришлось бы открывать каждый файл с подозрительным названием.
Сценарий не единичный. Особенно SocratiCode выручает, когда нужно быстро разобраться в чужом коде — например, перед ревью или при онбординге в проект. Согласитесь, гораздо приятнее спросить «где у нас обработка ошибок для S3?» и получить ссылку на конкретный блок, чем искать по репозиторию вручную.
Кому точно стоит попробовать (и кто может пропустить)
Инструмент идеален для разработчиков, которые работают с большими легаси-проектами, где grep и чтение всех исходников в голове больше не работают. Если у вас команда использует AI-ассистентов (Claude Code, Copilot Chat, CodeGPT с MCP-клиентами) — SocratiCode станет для них суперсилой. Плюс он локальный: данные не уходят в облако, что важно для корпоративных проектов.
А кому не подойдёт? Если ваш проект — это один файл на 200 строк, SocratiCode избыточен. Если вам нужен не поиск, а понимание архитектуры (кто вызывает кого) — скорее смотрите на Ragex. Но я бы на вашем месте поставил оба. Благо, MCP позволяет подключать сколько угодно инструментов.
Ещё один момент: SocratiCode требует Qdrant и Ollama. Если у вас нет возможности запустить эти сервисы локально, можно использовать облачный Qdrant и любой API для эмбеддингов, но это уже не совсем «локально-безопасная» история. Зато проект полностью open-source — fork на GitHub и доработка под себя не проблема.
Совет напоследок: не кормите агента контекстом, дайте ему удочку
Главная ошибка при работе с AI-агентами для кода — попытка скормить весь репозиторий в промпт. «Чтобы модель понимала контекст». Ага, а потом она начинает галлюцинировать, путать файлы и забывать ваши вопросы через три предложения. SocratiCode решает эту проблему кардинально: агент получает инструмент поиска, а не сырые данные. Это как дать рыбаку удочку вместо тонны рыбы — он сам наловит столько, сколько нужно. Кстати, про локальные LLM и их эффективность хорошо написано в этом обзоре — SocratiCode идеально ложится в концепцию полностью offline-агента. А если хотите посмотреть, как MCP-серверы могут работать в связке с поисковыми движками — гляньте на MCP-Manticore. Тот же принцип, но для SQL. Ну и для полного счастья — мега-гид по бесплатным инструментам для LLM, там ещё с десяток MCP-серверов найдёте. Пробуйте SocratiCode — и пусть ваш агент больше не тонет в коде.