Привет, MCP-сервер для структурной навигации по коду - спасает ваши токены в больших проектов.
Не реклама, не продажа - локальный инструмент для себя, делюсь подходом и личным опытом.
Первый и экслюзивный? пост для LIMB
Постановка проблемы:
когда проект перерастает ~50 файлов, AI-агент начинает терять контекст, стоимость и качество навигации растет .
Repo-map (tree-sitter карта) помогает, но это одноразовый снимок - сгенерировал, засунул в промпт, на следующую сессию забыл.
Что я сделал:
Честные минусы:
TypeScript/JavaScript - полная поддержка (символы, deps, refs). Python - символы и deps работают, refs пока нет
Symbol refs - сырые, без полного cross-file linking через граф импортов (т.е. foo() найдёт, но не всегда свяжет с конкретным export function foo из конкретного файла)
Индексацию нужно запускать вручную (нет file watcher)
Summaries генерирует AI по запросу - гибко, но требует промпт
Если кто-то делает что-то похожее или есть идеи по symbol linking - буду рад обсудить.
Не реклама, не продажа - локальный инструмент для себя, делюсь подходом и личным опытом.
Первый и экслюзивный? пост для LIMB
Постановка проблемы:
когда проект перерастает ~50 файлов, AI-агент начинает терять контекст, стоимость и качество навигации растет .
Repo-map (tree-sitter карта) помогает, но это одноразовый снимок - сгенерировал, засунул в промпт, на следующую сессию забыл.
Что я сделал:
MCP-сервер, который даёт агенту набор инструментов для точечного доступа к коду вместо заливки всего в контекст.
Вдохновлялся идеей RLM (Recursive Language Models).
Точечный доступ вместо контекстного окна
- Основная идея RLM: агент не заливает весь код в промпт, а дёргает только то, что нужно прямо сейчас
- На больших проектах это разница между "влезает в контекст" и "не влезает"
Экономия токенов (= денег)
- Агент спрашивает
symbols_find("handleAuth")→ получает файл + строку + сигнатуру за 3 строки JSON, вместо того чтобы читать 500-строчный файл целиком, а потом ещё раз перечитывать при каждом повторном обращенииoverview()даёт карту проекта (директории, количество файлов, экспорты) без чтения ни одного файлаdeps("server.ts")→ 22 зависимости за 1 запрос вместоrg "import"+ ручной парсинг по всем файлам- На проекте 50+ файлов один запрос
symbols_findэкономит в разы меньше токенов на навигацию по проекту
Скорость ответов
- Все запросы к индексу миллисекунды (0.1–0.5ms) - это SQLite с индексами, а не повторный парсинг AST
- Инкрементальная переиндексация по хешу файла - при повторном
indexпереиндексирует только изменённое
Что реализовано:
Персистентный индекс (SQLite) - символы, зависимости, описания модулей живут между сессиями
Граф зависимостей - deps("server.ts", direction="importers") → кто импортирует этот файл, с traversal до 3 уровней
Поиск символов- symbols_find("handleAuth")→ файл, строка, сигнатура, exported/internal
Symbol refs- symbol_refs("functionName") → все места вызова в проекте
Summaries - AI сам пишет краткие описания модулей, они сохраняются в БД и доступны в следующих сессиях
Overview - иерархический обзор проекта с экспортами по директориям, без чтения файлов
AST-поиск- через ast-grep, не regex а структурный паттерн
Инкрементальная индексация - по хешу файла, переиндексирует только изменённое
Чем отличается от обычного repo-map:
Repo-map - снимок.
Этот сервер - персистентная БД + граф, который обновляется инкрементально и доступен между сессиями через MCP-протокол.
Стек:
TypeScript, MCP SDK, better-sqlite3, ripgrep, ast-grep
Честные минусы:
TypeScript/JavaScript - полная поддержка (символы, deps, refs). Python - символы и deps работают, refs пока нет
Symbol refs - сырые, без полного cross-file linking через граф импортов (т.е. foo() найдёт, но не всегда свяжет с конкретным export function foo из конкретного файла)
Индексацию нужно запускать вручную (нет file watcher)
Summaries генерирует AI по запросу - гибко, но требует промпт
Если кто-то делает что-то похожее или есть идеи по symbol linking - буду рад обсудить.
Спойлер: Что изучал / на что опирался:
RLM -
Графы / нейро-подходы -
Не удалось прогрузить медиа
Не удалось прогрузить медиа
Спойлер: скрины в работе с криптопроектом
Не удалось прогрузить медиа
Не удалось прогрузить медиа
👍61
❤️11
🔥14
😁12
🤔7
💯14
LIMB