code-analyze-mcp
[!NOTE] Нативные инструменты агентов (regex-поиск, сопоставление путей, чтение файлов) хорошо справляются с точечными запросами.
aptu-coderвыполняет механическую, не связанную с ИИ работу: построение структуры каталогов, извлечение символов и трассировку графов вызовов. Передача этой работы выделенному инструменту снижает расход токенов и ускоряет разработку с более высокой точностью.
Бенчмарки
Задача миграции аутентификации в Claude Code на дереве исходников Django (Python). Полная методология.
Режим | Sonnet 4.6 | Haiku 4.5 |
MCP | 112k токенов, $0.39 | 406k токенов, $0.42 |
Нативный | 276k токенов, $0.95 | 473k токенов, $0.53 |
Экономия | на 59% меньше токенов, на 59% дешевле | на 14% меньше токенов, на 21% дешевле |
Задача аудита интеграции AeroDyn в Claude Code на дереве исходников OpenFAST (Fortran). Полная методология.
Режим | Sonnet 4.6 | Haiku 4.5 |
MCP | 472k токенов, $1.65 | 687k токенов, $0.72 |
Нативный | 877k токенов, $2.85 | 2162k токенов, $2.21 |
Экономия | на 46% меньше токенов, на 42% дешевле | на 68% меньше токенов, на 68% дешевле |
Related MCP server: CodeGraphMCPServer
Обзор
aptu-coder — это сервер Model Context Protocol, который предоставляет ИИ-агентам точный структурный контекст о кодовой базе: деревья каталогов, определения символов и графы вызовов — без чтения исходных файлов. Поддерживает 18 языков (см. Поддерживаемые языки) и интегрируется с любым MCP-совместимым оркестратором.
Поддерживаемые языки
Язык | Расширения |
Astro |
|
C/C++ |
|
C# |
|
CSS |
|
Fortran |
|
Go |
|
HTML |
|
Java |
|
JavaScript |
|
JSON |
|
Kotlin |
|
Markdown |
|
Python |
|
Rust |
|
TOML |
|
TSX |
|
TypeScript |
|
YAML |
|
Установка
Homebrew (macOS и Linux)
brew install clouatre-labs/tap/aptu-coderОбновление: brew upgrade aptu-coder
cargo-binstall (Rust не требуется)
cargo binstall aptu-codercargo install (требуется инструментарий Rust)
cargo install aptu-coderБыстрый старт
Сборка из исходников
cargo build --releaseБинарный файл находится по пути target/release/aptu-coder.
Настройка MCP-клиента
Доступны два транспорта. Streamable HTTP рекомендуется при использовании оркестраторов, порождающих делегатов (например, goose coder): один серверный процесс используется совместно оркестратором и всеми агентами, что устраняет расхождение расширений, возникающее, когда каждый stdio-подпроцесс получает собственный изолированный экземпляр.
Streamable HTTP (рекомендуется для многокомпонентных конфигураций)
С Homebrew одна команда запускает сервер при входе в систему и поддерживает его работу:
brew services start aptu-coderФормула Homebrew запускает сервер на порту 49200 по умолчанию. Затем добавьте расширение один раз в ~/.config/goose/config.yaml:
extensions:
aptu-coder:
type: streamable_http
uri: http://127.0.0.1:49200/mcp
name: aptu-coder
timeout: 300Или для Claude Code:
claude mcp add --transport http aptu-coder http://127.0.0.1:49200/mcpЧтобы использовать другой порт, задайте APTU_CODER_PORT перед перезапуском:
APTU_CODER_PORT=4000 brew services restart aptu-coderЧтобы запустить напрямую без brew services:
aptu-coder --port 49200
# or equivalently
APTU_CODER_PORT=49200 aptu-coderstdio (для одного клиента)
Подходит, когда только одному процессу нужен сервер. Клиент владеет жизненным циклом процесса и запускает его автоматически:
claude mcp add --transport stdio aptu-coder -- aptu-coderИли добавьте вручную в .mcp.json в корне вашего проекта (общий для команды через систему контроля версий):
{
"mcpServers": {
"aptu-coder": {
"command": "aptu-coder",
"args": []
}
}
}Инструменты
Все необязательные параметры могут быть опущены. Общие необязательные параметры для analyze_directory, analyze_file и analyze_symbol:
Параметр | Тип | По умолчанию | Описание |
| boolean | auto | Компактный вывод; автоматически включается выше 50K символов |
| string | -- | Курсор пагинации из поля |
| integer | 100 | Элементов на странице |
Инструмент | Назначение | Языки |
| Дерево каталогов с количеством строк кода, функций и классов; учитывает | все |
| Функции, классы и импорты с сигнатурами и диапазонами строк; возвращает корректный запасной вариант (количество строк, начало файла, без AST) для неподдерживаемых расширений | все |
| Облегчённый индекс функций и импортов (примерно на 75% меньше, чем | все |
| Граф вызовов для именованного символа по каталогу; вызывающие, вызываемые, глубина вызовов | все |
| Создать или перезаписать файл; создаёт родительские каталоги | любой файл |
| Заменить уникальный точный текстовый блок или все непересекающиеся вхождения (replace_all=true); возвращает ошибку при нулевом или множественном совпадении; пустой | все |
| Выполнить shell-команду; возвращает stdout, stderr, код выхода; вывод ограничен и фильтруется; необязательные | любой |
Параметры инструментов, ограничения и примеры доступны через инспектор инструментов вашего MCP-клиента или ответ tools/list.
MCP-ресурсы
Функция графа знаний предоставляет шаблоны MCP-ресурсов для навигации по структурному графу, построенному при вызовах analyze_symbol. Ресурсы адресуются через URI; используйте resources/templates/list для обнаружения доступных шаблонов.
Шаблон URI | Описание |
| BFS-обход от символа наружу до настраиваемой глубины (по умолчанию: 3). Возвращает цепочки вызывающих/вызываемых в радиальной компоновке. |
| Полный подграф (вызывающие, вызываемые и их связи) для одного символа. |
Пагинация: Результаты разбиты на страницы; передайте непрозрачное значение cursor из предыдущего ответа, чтобы получить следующую страницу.
Параметр глубины: Шаблон blast-radius принимает необязательный параметр запроса depth (целое число в диапазоне 1–5, по умолчанию 3).
Холодный кэш: Сначала вызовите analyze_symbol для каталога, чтобы построить граф. Ресурсы возвращают информационное сообщение, пока граф недоступен.
Управление выводом
Для больших кодовых баз предусмотрено несколько механизмов, предотвращающих переполнение контекста.
Пагинация
analyze_file и analyze_symbol добавляют строку NEXT_CURSOR:, когда вывод усечён. Передайте токен обратно как cursor, чтобы получить следующую страницу. summary=true и cursor взаимоисключающие; передача обоих возвращает ошибку.
# Response ends with:
NEXT_CURSOR: eyJvZmZzZXQiOjUwfQ==
# Fetch next page:
analyze_symbol path: /my/project symbol: my_function cursor: eyJvZmZzZXQiOjUwfQ==Ограничения вывода exec_command
exec_command применяет три независимых байтовых ограничения, чтобы предотвратить переполнение контекста большими выводами команд:
Поток | Лимит | Поведение |
stdout | 30 000 символов | Сохраняет хвост; оставляет последние 30k символов |
stderr | 10 000 символов | Сохраняет хвост; ошибки появляются в конце |
combined | 50 000 символов | Страховка после чередования |
Ограничение stdout в 30k основано на данных: анализ 27,981 наблюдаемых вызовов exec_command показывает, что только 0,33% превышают этот лимит. Когда срабатывает любое ограничение, в ответе устанавливается output_truncated: true и это фиксируется в метриках JSONL.
drain_timeout_secs управляет тем, как долго сервер ждёт после завершения дочернего процесса, пока фоновый подпроцесс всё ещё удерживает канал открытым. По умолчанию — 500 мс (0 или не указано). Отрицательные значения возвращают INVALID_PARAMS. Если окно ожидания истекает до закрытия канала, устанавливается output_truncated: true.
exec_command: фильтры вывода
Встроенная таблица фильтров подавляет пофайловый шум от болтливых CLI-инструментов до того, как вывод попадёт в модель. Фильтры применяются к stdout, stderr и чередующемуся выводу только при успехе; при сбое всегда сохраняется необработанный вывод.
Команда | Поведение |
| Удаляет шум diff-stat (строки с вертикальными чертами, |
| Удаляет строки |
| Удаляет строки прогресса |
| Ограничение 20 строк |
| Ограничение 20 строк |
| Удаляет фрагменты патчей (заголовки |
| Удаляет вывод GPG-подписи и хука gitleaks; ограничение 10 строк; пустой вывод заменяется на |
| Удаляет ANSI-escape-последовательности; ограничение 100 строк; пустой вывод заменяется на |
| Удаляет вывод хука gitleaks; ограничение 5 строк; пустой вывод заменяется на |
| Удаляет строки |
| Удаляет строки |
Локальные для проекта правила можно добавить в .aptu/filters.toml. Ошибки парсинга и нераспознанные значения schema_version (версия != 1) приводят к откату к встроенной таблице с предупреждением в журнале; сбоя не происходит. Когда фильтр срабатывает, filter_applied в structuredContent указывает, какое правило совпало.
Неинтерактивные пайплайны
В однопроходных сессиях субагентов кэши подсказок записываются, но никогда не переиспользуются. Бенчмарки показали, что ответы MCP записывают в кэш примерно в 2 раза больше, чем нативные рабочие процессы, что добавляет затраты без выигрыша в качестве. Установите DISABLE_PROMPT_CACHING=1 (или DISABLE_PROMPT_CACHING_HAIKU=1 для пайплайнов, специфичных для Haiku), чтобы избежать этих накладных расходов.
Собственные инструкции сервера описывают рекомендуемый 4-шаговый рабочий процесс для неизвестных репозиториев: осмотрите корень репозитория с помощью analyze_directory с max_depth=2, углубитесь в исходный пакет, выполните analyze_module на ключевых файлах для получения индекса функций/импортов (или analyze_file, когда нужны сигнатуры и типы), затем используйте analyze_symbol для трассировки графов вызовов. MCP-клиенты, которые отображают инструкции сервера, автоматически представят этот рабочий процесс агенту.
Переменные окружения
Кэш и среда выполнения
Переменная | По умолчанию | Описание |
|
| Размер LRU-кэша для результатов анализа каталогов. |
|
| Каталог для L2-кэша графов вызовов на диске, используемого |
| unset | Установите |
|
| Размер LRU-кэша для результатов анализа файлов. |
| unset | Абсолютный путь для одноразового экспорта метрик JSONL при завершении работы. |
| unset | Порт для потокового HTTP-режима. Эквивалентно |
| unset | Bearer-токен для аутентификации транспорта Streamable HTTP. Предупреждение записывается в журнал, если значение короче 32 символов. |
| unset | Оболочка для |
Наблюдаемость
Схему JSONL, конфигурацию OTel и политику атрибутов спанов см. в:
OBSERVABILITY.md (repository root)
Документация
AGENTS.md — Справочник для контрибьюторов: структура проекта, команды, подводные камни rmcp, ограничения параметров инструментов
ARCHITECTURE.md — Цели дизайна, карта модулей, поток данных, система обработчиков языков, стратегия кэширования
CONTRIBUTING.md — Процесс разработки, соглашения о коммитах, чек-лист PR
DESIGN-GUIDE.md — Дизайн-решения, обоснование и руководство по воспроизведению для создания высокопроизводительных MCP-серверов
MCP Best Practices — Лучшие практики для агентских циклов, паттернов оркестрации, дизайна MCP-инструментов, управления памятью и контроля безопасности
METRICS.md — Схема метрик, формат JSONL и политика хранения
ROADMAP.md — История разработки и будущие направления
SECURITY.md — Политика безопасности и отчёт об уязвимостях
Лицензия
Apache-2.0. Подробности см. в LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Repository knowledge graph MCP server for codebase understanding and debugging.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA lightning-fast, language-agnostic code analysis MCP (Model Context Protocol) server built in Rust9-
- AlicenseNot gradedqualityDmaintenanceA lightweight, zero-configuration MCP server for source code analysis with GraphRAG capabilities, enabling structural understanding and efficient code completion from MCP-compatible AI tools.38 PyPI14MIT
- AlicenseNot gradedqualityDmaintenanceA persistent, tree-sitter-backed code knowledge cache MCP server that reduces token usage by storing parsed structure and enabling fast symbol lookup, inheritance graph, call graph, and semantic search.1MIT
- AlicenseAqualityDmaintenanceUniversal MCP server that analyzes any codebase and provides structured context to AI assistants. Dynamic, accurate, and token-efficient.187 npmMIT