gograph
gograph
Дайте Go-агентам кодирования карту с учётом компилятора для более безопасных рефакторингов.
gograph строит локальный структурный граф вашего Go-репозитория с опциональным
обогащением CHA/SSA с проверкой типов. Его CLI и MCP-рабочие процессы помогают
агентам кодирования отслеживать вызывающие функции и реализации интерфейсов,
планировать влияние изменений и обеспечивать соблюдение архитектуры без
встраиваний или размещённого индекса кода.
Изучите интерактивное демо без установки · Ознакомьтесь с воспроизводимым бенчмарком
Сопутствующие проекты: Scrinium предоставляет принадлежащие репозиторию знания, подкреплённые доказательствами, для агентов кодирования, а Rulefloor защищает локальные инварианты репозитория, привязывая их к конкретным тестам и обнаруживая расхождения. Это независимые, опциональные инструменты: Scrinium может хранить структурные наблюдения Gograph и результаты проверки Rulefloor как отдельные доказательства, не рассматривая ни одно из них как подтверждение несвязанного поведения или общей корректности проекта.

Статический анализ; без выполнения целевого кода. Индексация по умолчанию анализирует исходный код Go локально и не вызывает сервисы приложений. Ссылки-потомки и специальные файлы для расширений, распознаваемых
go/build, исключаются; чтение исходников, направляемое графом, ограничено обычными файлами внутри анализируемого репозитория, а связанные/нерегулярные метаданные инструментария Go (go.mod,go.sum,go.work,go.work.sumиvendor/modules.txt) отклоняются до вызова инструментария; явно символически связанный корень репозитория остаётся поддерживаемым. Применимые членыgo.work useдолжны оставаться в пределах рабочей директории, и каждый каталог-член,go.modи опциональныйgo.sumпроверяются перед запускомcmd/go. Gograph также читает метаданные проекта, такие как.gitignore, JSON графа/конфигурации и состояние Git. Индексация запрашивает у установленного инструментария Go эффективный контекст сборки/модулей; точный режим дополнительно выполняет загрузку типов пакетов, аdocзапускаетgo doc. Эти операции следуют вашей настроенной политике модулей/кэша/сети. Перед загрузкой пакетов репозитория илиgo docприменимые локальные деревья исходников модулей/рабочей области предварительно проверяются на ссылки, которыеcmd/goможет просматривать; поддеревья.gitи.gographисключаются. Телеметрия сеансов хранится локально в.gograph/sessions/; ничего не отправляется в сервисы gograph.
Быстрый старт
# Install
brew install --cask ozgurcd/tap/gograph
# or: go install github.com/ozgurcd/gograph/cmd/gograph@latest
# Confirm which installation will run and detect PATH shadowing
gograph doctor --json
# Build a type-enriched precise graph, then verify it
gograph build . --precise
gograph stats
# Optional: prioritize lower heap use on constrained hosts
gograph build . --precise --memory-mode=low --max-memory=1GiB
# Start with repository-wide results that require no guessed symbol
gograph summary
gograph hotspot --top 5
gograph flow --no-testsHomebrew и go install устанавливают обычный CLI gograph. MCP-клиенты, поддерживающие
MCP Bundles, могут вместо этого обнаружить локальный stdio-сервер в
официальном реестре MCP как
io.github.ozgurcd/gograph. Установка через реестр/MCPB — это отдельный путь
распространения; она не устанавливает Homebrew-кейк и не настраивает
плагин Claude Code Marketplace. Реестр в настоящее время находится в предварительном просмотре. См.
Официальный реестр MCP и установка MCPB для поддержки
клиентов, выбора цели и текущих ограничений.
Выберите реальную функцию или метод, показанные в summary, hotspot или
gograph complexity, затем подставьте его имя ниже:
gograph context "YourSymbol" # source + callers + callees + tests
# For compilable repositories, enrich the graph before a major refactor
gograph build . --precise
gograph plan "YourSymbol"Артефакты сборки записываются в целевой каталог .gograph/. gograph
добавляет .gograph/ в корневой .gitignore окружающего Git-репозитория, когда
это возможно, в противном случае — в .gitignore целевой сборки вне Git, и завершает работу
без замены артефактов, если файлы Go не найдены или ни один исходный файл не анализируется
успешно. Обновление принимает только отсутствующий или обычный .gitignore; предоставленная
репозиторием ссылка отклоняется, и её цель не изменяется. Ограничения сборки Go, правила каталогов пакетов cmd/go, сгенерированные
исходники, директивы игнорирования в режиме модулей и игнорирование Git используют ту же политику
сканера для сборки, проверки свежести и обнаружения изменений. Символические ссылки на исходные файлы
и другие нерегулярные записи .go сообщаются и исключаются;
связанные/нерегулярные записи go.mod, go.sum, go.work, go.work.sum и
vendor/modules.txt отклоняются до того, как gograph или инструментарий Go
прочитает их. Применимые члены go.work use должны оставаться в пределах рабочей
директории; их каталоги, go.mod и опциональный go.sum проверяются
до запуска cmd/go.
Сам .gograph должен быть реальным каталогом, а graph.json — обычным
файлом, ограниченным репозиторием. Графы с отсутствующим или неподдерживаемым маркером политики
ограничения должны быть перестроены с текущим бинарником, прежде чем команды, использующие граф,
смогут их использовать. Старые бинарники не обеспечивают эту границу, и их не следует
использовать для анализа недоверенных репозиториев.
Каждый индексируемый исходный файл хранит SHA-256 дайджест содержимого. Пересборки повторно анализируют все
выбранные файлы в изменённом пакете вместе и повторно используют записи парсера для
неизменённых пакетов; stats сообщает reused_files и rebuilt_packages.
Точные сборки повторно используют эту работу AST, но всё равно пересчитывают
обогащение типов/CHA/SSA по всему репозиторию, чтобы межпакетная диспетчеризация оставалась корректной.
Режим низкой памяти сохраняет эти семантики графа, используя более агрессивную
сборку мусора, возвращая память между анализом продакшена и тестов, и
избегая полной JSON-копии AST-графа. --max-memory принимает целочисленные
размеры в байтах, такие как 1GB или 1GiB, и требует --memory-mode=low. Это
мягкая цель памяти Go-runtime, а не жёсткий предел RSS, поэтому файлы с отображением памяти,
исполняемый файл и подпроцессы инструментария Go могут превысить запрошенное значение.
Агрессивная сборка мусора может увеличить время CPU, а слишком низкая цель
может сделать сборку значительно медленнее или привести к сбою; Gograph никогда молча
не снижает точность для её достижения.
Related MCP server: Axon
Машинно-читаемая структурная валидация
Внешние потребители могут проверить один замкнутый структурный предикат без разбора человекочитаемого вывода CLI:
gograph version --json
gograph validate --repo /work/project --binding-json '{"schema_version":"gograph.binding.v1","predicate":"symbol_exists","subject":{"language":"go","kind":"symbol","id":"example.com/project/internal/auth::Authorize"},"required_precision":"ast"}' --jsonСхемы версии и результата — gograph.version.v1 и
gograph.validation.v1; привязки используют gograph.binding.v1. V1 поддерживает только
symbol_exists, package_imports, call_edge_exists и type_implements.
Валидация доступна только для чтения и никогда не строит и не обновляет граф. Код выхода 0 означает
pass, код 1 — окончательно оценённый fail, а код 2 —
cannot_evaluate или недопустимый запрос.
Отрицательные результаты требуют полноты, специфичной для предиката: отсутствие символа и прямого
импорта требует актуального полного AST-графа; отсутствие реализации требует
актуального точного полного графа; отсутствие вызова дополнительно требует полного
разрешения соответствующих рёбер вызовов субъекта. Отсутствующие, устаревшие, частичные,
неоднозначные или неразрешённые доказательства понижаются до cannot_evaluate;
граф precise_fallback может поддерживать присутствие AST, но никогда не оценивает отсутствие.
Результат связывает точные байты графа, выбранный манифест исходников/контекста сборки
и каноническую привязку с SHA-256 отпечатками.
Gograph проверяет структуру Go выбранного контекста сборки. Он не доказывает
поведение во время выполнения или бизнес-корректность. Рёбра CHA — это возможные статические цели,
а не определённость диспетчеризации во время выполнения. V1 исключает достижимость, нестабильные или внешние
идентичности символов, безымянные типы и не-Go языки. См. точный
контракт машинной валидации.
Применимые локальные корни исходников модулей/рабочей области должны оставаться в пределах явного
корня --repo; v1 возвращает cannot_evaluate вместо расширения этих полномочий.
MCP-обновления по умолчанию остаются в памяти. Чтобы публиковать каждое успешное обновление для CLI-потребителей и последующих серверных процессов, запустите сервер явно с:
gograph mcp . --persist-refresh
# Optional low-memory policy for startup analysis and later refreshes:
gograph mcp . --memory-mode=low --max-memory=1GiBЭтот опциональный режим записывает или перезаписывает .gograph/graph.json и девять
Markdown-отчётов после подтверждённо свежего обновления. Он не изменяет
.gitignore, поэтому игнорируйте .gograph/ самостоятельно перед включением, когда это необходимо.
Каталог содержит только последнее опубликованное состояние; это не кэш для каждой ветки.
Если нет пригодного графа (включая небезопасный или неподдерживаемый артефакт),
автосборка при запуске публикуется перед обслуживанием;
сбой там предотвращает запуск. Последующий сбой публикации, вызванной инструментом,
заставляет этот инструмент вернуть ошибку, и сервер повторяет ожидающую публикацию
при другом вызове, способном к обновлению, без пересборки уже свежего
графа в памяти. Писатели координируются через локальный файл .gograph/.artifacts.lock; существующая
запись блокировки должна быть обычной, а не ссылкой или специальным файлом.
Отчёты заменяются первыми, а graph.json заменяется последним как маркер фиксации
публикации; полный набор из десяти файлов не является единой атомарной файловой
транзакцией. Замена в одном каталоге атомарна на Unix-подобных системах; Go
не гарантирует атомарную семантику переименования на не-Unix платформах. Файл
блокировки остаётся как операционное координационное состояние в дополнение к десяти выводам.
Почему gograph?
Иллюстративное сравнение выходных данных на момент времени из более ранней ревизии gograph (количество варьируется по мере развития репозитория; эти команды возвращают разные виды доказательств):
Задача |
|
| Наблюдаемая разница в выводе |
Найти вызывающие | 158 совпадающих строк (комментарии, документация, переменные) | 56 строк сайтов вызовов, полученных из AST | ~65% меньше строк в этом запуске |
Найти определения символов | 842 строки, совпадающих с "Symbol" | 83 истинных объявления типов/методов | ~90% шума устранено |
Прочитать тело одной функции |
|
| ~93% меньше строк исходников в этом запуске |
Собрать общий контекст символа | Отдельные запросы узлов, исходников, вызывающих, вызываемых и тестов |
| Пять типов доказательств в одном ответе |
Ключевые возможности
Машинные и агентные рабочие процессы — вызывающие, вызываемые, обратное тестовое покрытие, стабильная идентичность символов, влияние, контекст, план, обзор, поток, поток ошибок, структурная валидация, сироты, горячие точки, связанность и многое другое. MCP-сервер регистрирует 67 конечных точек, включая четыре инструмента жизненного цикла сеанса. Полная справочная информация по командам →
Федеративные рабочие области — моделируйте несколько проверенных репозиториев через независимо отпечатанные графы репозиториев плюс небольшой детерминированный кросс-репозиторный оверлей. Области разрешения поддерживают альтернативные флоты, такие как OSS/CE, без объединения владения репозиториями. P0 разрешает Go-модули, обычные кросс-репозиторные Go-вызовы и первоклассные HTTP-контракты для анализа статуса, запросов, путей и влияния в масштабе рабочей области. Четыре read-only MCP-инструмента рабочей области возвращают те же нативные значения результатов, что и CLI --json; обновление членов и публикация оверлея остаются явными мутациями CLI. Руководство по рабочим областям →
Native MCP Server — все 63 возможности запросов, анализа и рабочих процессов репозитория имеют эквиваленты project-MCP для Claude, Cursor, Copilot и других MCP-клиентов; четыре дополнительных конечных точки охватывают жизненный цикл сеанса (всего 67 инструментов проекта). Отдельный сервер рабочей области предоставляет статус, запрос, путь и влияние с теми же нативными результатами, что и соответствующие операции CLI. Обычное сопоставление: CLI <command> → MCP gograph_<command>; contract, boundaries --create и действия сеанса используют документированные специальные сопоставления. Только CLI-операции процесса/хоста/артефакта: build, validate, doctor, gate, snapshot, установка плагинов/хуков, запуск MCP проекта/рабочей области, обновление сборки/участников рабочей области, справка и версия. Представление транспорта различается там, где это уместно, но парные операции имеют общую функциональную семантику. Полная матрица CLI/MCP →
Явная модель свежести — анализ на основе графа CLI читает последний доверенный сохранённый граф. gograph stale сравнивает выбранные дайджесты содержимого исходников плюс эффективный отпечаток сборки/модуля; mtime используются только для диагностики текущих индексов. Это трёхсостояний предикат в текстовом и JSON-режимах: код выхода 0 означает актуальность, 2 — устаревание, 1 — операционную ошибку или ошибку JSON-сериализации; отсутствующий или неподдерживаемый маркер политики исходников — явное требование пересборки со статусом 1. Инструменты анализа исходников MCP проверяют ту же свежесть при каждом вызове, принимают более новый сохранённый точный граф и инкрементально пересобирают изменённые AST пакетов в памяти, используя последний запрошенный режим анализа. MCP stale, changes по умолчанию и stats проверяют доверенный сохранённый снимок или резервную автоматическую сборку при запуске, если нет пригодного артефакта. С --persist-refresh этот снимок продвигается после успешного обновления, поэтому changes по умолчанию сравнивает с новым опубликованным состоянием и обычно больше не сообщает о правках исходников этого обновления.
Компактные составные рабочие процессы — context, plan и explain объединяют данные исходников и графа, которые в противном случае потребовали бы нескольких отдельных запросов. Фактическая экономия вызовов инструментов и токенов зависит от репозитория и задачи.
Узко по замыслу — никогда не запускает бинарники или тесты целевого репозитория и намеренно не сканирует файлы .env, ключи, сертификаты или учётные данные. Исключаются ссылки-потомки и специальные файлы для распознаваемых входных данных сборки Go; чтение исходников и фрагментов по запросу использует дескриптор файловой системы с корнем в репозитории и принимает только обычные файлы .go без компонентов симлинков. Связанные/нерегулярные метаданные модуля/рабочей области Go, суммы и vendor/modules.txt отклоняются до использования инструментария. Применимые участники рабочей области должны оставаться в пределах каталога рабочей области, а их каталоги и метаданные модуля проверяются до cmd/go. Конфигурации политик по умолчанию/относительные ограничены проектом; документированные абсолютные аргументы конфигурации/вывода — явно выбранные оператором локальные расположения. Каталоги AI-рабочего дерева (.claude/, .cursor/, .agents/) исключаются. Установленный инструментарий Go разрешает эффективный контекст сборки во время индексации; точная загрузка пакетов репозитория и внешний go doc выполняются только после предварительной проверки, которая отклоняет ссылки исходного дерева, которые cmd/go может проверять через выбранный корень плюс его эффективный корень модуля, или корень рабочей области и деревья участников, исключая .git и .gograph. Разрешение зависимостей и инструментария остаётся открытым в окружении Go пользователя.
Принудительная архитектура — правила границ, обнаружение дрейфа API, ограничения сложности, проверки мёртвого кода, обнаружение god-object, анализ связности. Запуск в CI с gograph gate.
Анализ потоков безопасности — flow отслеживает потенциальные HTTP-запросы, декодированный JSON и данные окружения через присваивания и вызовы функций к тексту SQL-запросов, выполнению процессов, путям файловой системы и исходящим HTTP-целям. Результаты включают серьёзность, уверенность и шаги пути от источника к стоку; MCP предоставляет тот же анализ как gograph_flow.
Индексация с учётом целостности — публикация отказывается от связанного или некаталогового .gograph; graph.json размещается и заменяется последним только после успешного разбора (переименование в том же каталоге атомарно в Unix-подобных системах), записывает полное/частичное здоровье сборки и статус анализа ast/precise/precise_fallback и предоставляет оба через gograph stats. gate отказывается оценивать устаревший граф.
Аудит соответствия агентов — телеметрия сеанса отслеживает, выполняют ли агенты plan перед правками и review после. Оценивает поведение агентов по шкале A–F с практическими рекомендациями.
Справочник команд
Команды запросов и составного анализа поддерживают --json; version --json и validate ... --json используют свои выделенные машинные схемы. Точная поверхность --files-only перечислена в справочнике команд. Операционные команды, такие как build, wiki, gate, snapshot, установка и справка, используют текстовый вывод; doctor и сборка/статус/запрос/путь/влияние рабочей области также принимают --json, а session audit дополнительно поддерживает необработанный JSON. CLI --mermaid отображает callers, callees, impact, endpoint, dependents, deps, path и coupling как огороженный Mermaid. Их MCP-эквиваленты принимают mermaid=true и возвращают тот же Markdown-огороженный текст Mermaid; без него каждый инструмент сохраняет свой обычный формат ответа.
Категория | Команды | Что делает |
Индексация |
| Разбор AST, при необходимости приоритет меньшего использования кучи, запись графа, проверка актуальности и работоспособности. |
Машинная валидация |
| Версионированные точные структурные предикаты с троичными результатами. |
Навигация |
| Поиск символов, трассировка цепочек вызовов, извлечение исходного кода. |
Контекст |
| Сгруппированные структурные данные в одном вызове. Экономия токенов. |
Анализ изменений |
| Планирование до правок, ревью после правок, анализ рисков, радиус поражения, расхождения. |
Архитектура |
| Контроль качества, мёртвый код, связанность, божественные объекты. |
Типы и структуры |
| Поля структур, соответствие интерфейсам, использование типов. |
Инфраструктура |
| HTTP-маршруты (включая константные вложенные группы Gin/Echo/Fiber и замыкания Chi Route), SQL, переменные окружения, конкурентность, исходящие HTTP-вызовы, импорты. |
Безопасность |
| Потенциальные пути недоверенных данных к приёмникам SQL, процессов, файловой системы и исходящих HTTP-вызовов. |
Тестирование |
| Прямая и обратная точная/возможная статическая атрибуция тестов, перепись пробелов, исключения путей, помощники, mock-реализации. |
Трассировка ошибок |
| Обратный BFS от строк ошибок к точкам входа HTTP. |
Диагностика |
| Диагностика установки/PATH, горячие точки, использование возвращаемых значений, сигнатуры API, диаграммы Mermaid. |
CI/CD |
| Проверки политик, соблюдение порогов, снимки метрик. |
Телеметрия |
| Отслеживание соответствия агента и оценка (A–F). |
LLM-Wiki |
| Генерация |
Сводка |
| Краткая сводка кодовой базы одним вызовом: топ-3 горячих точек, пакет с наихудшей нестабильностью, функция с наибольшей сложностью, количество сирот, количество божественных объектов. Заменяет 5 отдельных вызовов. |
Стабильные ID |
| Вывод и повторное разрешение идентичности модуль/пакет/приёмник/имя, которая переживает сдвиги строк и перемещения файлов внутри пакета; пакет устраняет неоднозначность коллизий внешних тестов. |
Обратная атрибуция |
| Транзитивный набор символов продукта для одного однозначного теста, с путями стабильных идентификаторов и точным/возможным распространением. Только статические доказательства — не покрытие во время выполнения или ветвей. |
Непротестированное |
| Вызываемые производственные символы без точной/статической атрибуции тестов. Точные сборки связывают прямые вызовы тестов точно и сохраняют кандидатов интерфейсов как |
Документация |
| Обёртка |
Полная справка по командам с примерами: gograph.identuum.ai/docs/command-reference
Определите границы в .gograph/boundaries.json:
{
"layers": [
{ "name": "domain", "packages": ["internal/domain/**"], "may_import": [] },
{ "name": "handler", "packages": ["internal/handler/**"], "may_import": ["internal/service/**", "internal/domain/**"] }
]
}Запустите gograph boundaries — завершается с кодом 1 при нарушении. Работает в CI/CD.
gograph flow по умолчанию включает тестовые файлы; добавьте --no-tests для результатов только по продакшен-коду. Он автоматически читает .gograph/flow.json, если он присутствует, или принимает --config <path> для другого JSON-файла внутри корня графа. Санитайзеры применяются к возвращаемому значению функции и могут быть ограничены выбранными видами приёмников:
{
"sanitizers": [
{ "function": "security.CleanPath", "for": ["filesystem"] },
{ "function": "security.ValidateURL", "for": ["outbound_http"] }
]
}Опустите for, чтобы доверять возвращаемому значению для каждого вида приёмника. function принимает написание вызова или полностью квалифицированный идентификатор символа; используйте полностью квалифицированную форму при коллизии имён. Валидатор, возвращающий только bool или error, не санитизирует исходный ввод; оберните валидацию в функцию, возвращающую доверенное значение, если это предполагаемая политика.
Интеграция с AI-агентами
Официальный реестр MCP (предварительная версия): клиенты с поддержкой MCPB могут обнаружить
io.github.ozgurcd/gograph. Пакет запрашивает корневой каталог Go-проекта
и запускает встроенный исполняемый файл с отдельными аргументами, эквивалентными
gograph mcp <project-directory>. Релизы предоставляют пакеты для macOS, Linux и
Windows для amd64 и arm64. Текущая схема пакетов реестра
не может выбирать по архитектуре ЦП, поэтому выбирайте ресурс, имя файла которого соответствует хосту;
не предполагайте, что клиент выберет его автоматически. Весь анализ
по-прежнему выполняется локально через stdio, без размещённого сервиса gograph или удалённой
телеметрии.
Пакет реестра и сгенерированные установщиком регистрации MCP намеренно опускают
--persist-refresh, оставляя публикацию на диск отключённой по умолчанию. Используйте пользовательскую
локальную команду MCP, если вы явно хотите такое поведение.
Конфигурация Desktop, общие правила и настройка хука Claude Code:
gograph add-claude-pluginЭто регистрирует MCP-сервер Claude Desktop, внедряет общие правила управления CLAUDE.md
и устанавливает хук PreToolUse для Claude Code. Хук перенаправляет поиск
Go-символов только тогда, когда эффективная цель поиска принадлежит репозиторию с индексом .gograph,
поэтому неиндексированные папки в мультикорневых рабочих областях остаются без изменений.
Для регистрации MCP в Claude Code также выполните команду, выводимую установщиком:
claude mcp add gograph -- gograph mcp .. Установщик завершается с ненулевым кодом,
если какой-либо шаг установки завершился неудачей.
Альтернатива — установка через маркетплейс плагинов Claude Code:
/plugin marketplace add ozgurcd/gograph
/plugin install gograph@gographОбнаруживает gograph через маркетплейс плагинов Claude Code и поставляет SKILL.md,
который автоматически активируется при работе с Go, обучая агента рабочему процессу
(doctor --json → capabilities → stats → plan → context → edit → review),
когда полезна долговечная точная сборка CLI, когда использовать структурные запросы,
и когда проверять с помощью gopls или целевого поиска по тексту/исходному коду.
Вам всё ещё нужен установленный бинарник gograph (brew install --cask ozgurcd/tap/gograph или go install github.com/ozgurcd/gograph/cmd/gograph@latest). Используйте gograph add-claude-plugin для подключения MCP к Claude Desktop, а также общих правил и хука Claude Code; зарегистрируйте MCP-сервер Claude Code с помощью выведенной команды claude mcp add. Используйте маркетплейс плагинов, если предпочитаете обнаружение из UI плагинов Claude Code.
Другие агенты (Cursor, Copilot, Antigravity и т.д.):
gograph mcp . # stdio server; refreshes stay in memory
gograph mcp . --persist-refresh # opt in to publishing refreshed artifacts
gograph mcp . --memory-mode=low --max-memory=1GiB # same low-memory refresh policy as CLI buildsДобавьте в ваш .cursorrules или системный промпт ИИ:
Прежде чем отвечать на вопросы об архитектуре или репозитории, изучите доступные MCP-инструменты
gograph_*и выполнитеgograph capabilities. Предпочитайте gograph для поддерживаемых структурных запросов; используйтеgoplsили целевой поиск по исходному коду/тексту, когда результаты неоднозначны, произошёл откат точности или отсутствует известный вызов источника.
Команды запросов и комплексного анализа поддерживают --json для машиночитаемого вывода:
gograph callers "YourSymbol" --json
# → {"schema_version": "1", "command": "callers", "status": "ok", "count": 2, "results": [...]}Полные руководства по интеграции см. в docs/coding-agent-usage.md.
Ориентация без затрат с помощью llm-wiki/: Запустите gograph wiki один раз за сеанс, чтобы сгенерировать каталог машиночитаемых markdown-страниц — обзор, диаграмму архитектуры, горячие точки, маршруты, переменные окружения, места ошибок, конкурентность, документацию по пакетам и полную поверхность API. Агенты читают эти страницы вместо выполнения десятков отдельных вызовов инструментов:
gograph build . --precise
gograph wiki # writes to ./llm-wiki/
# generated orientation starts at: llm-wiki/overview.md
# if maintained governance pages exist, read:
# llm-wiki/index.md → project.md → agent-rules.md → agent-contract.mdДобавьте сгенерированный вывод wiki в .gitignore, если он одноразовый. Не перезаписывайте поддерживаемый или защищённый Scrinium файл agent-rules.md репозитория; предлагайте управляемые изменения через документированный рабочий процесс этого репозитория.
Пример вывода
Когда вы запускаете gograph build ., сгенерированный GRAPH_REPORT.md предоставляет вашему ИИ сжатую карту контекста:
Внешние зависимости (технологический стек)
Модуль | Версия |
|
|
|
|
Важные символы (по количеству исходящих вызовов)
Символ | Тип | Файл | Строка | Исходящие вызовы |
| метод |
| 42 | 18 |
| функция |
| 12 | 14 |
Как gograph дополняет gopls?
gopls — это языковой сервер проекта Go, основанный на компиляторе. Он предоставляет живую диагностику рабочей области, навигацию, ссылки, реализации, поддержку рефакторинга и экспериментальный MCP-сервер. Он должен оставаться первым выбором для операций в редакторе и рабочей области, учитывающих компилятор.
gograph добавляет другой уровень для рабочих процессов репозитория и агентов:
Постоянные снимки — CLI-анализ может проверять стабильный артефакт графа, в то время как MCP обновляет состояние анализа исходного кода и сохраняет запрошенный режим точности.
Анализ на уровне репозитория — влияние изменений, достижимость, маршруты, SQL, чтение окружения, кандидаты на потоки безопасности, связанность и шлюзы политик представлены вместе.
Составные ответы —
context,plan,reviewиsummaryупаковывают связанные доказательства для рабочих процессов агентов, а не предоставляют только одну языковую операцию за раз.
Используйте gopls для живой навигации и рефакторинга на основе компилятора, rg для текстовых и не-Go поисков, а gograph — когда полезен постоянный граф репозитория или составной рабочий процесс анализа изменений. См. руководство по бенчмаркам о том, как измерять эти различные рабочие процессы, не предполагая, что один инструмент является заменой другого.
Режим по умолчанию использует парсинг AST Go и эвристики наилучшего усилия. Допускает неполные или некомпилируемые репозитории.
Граница исходного кода репозитория исключает ссылки на потомков и специальные файлы для распознаваемых входных данных сборки Go до выбора сборки, предоставляет ограниченные байты парсеру AST и ограничивает последующие чтения
source, фрагментов вызывающего/вызываемого, сложности и изменённых файлов только обычными файлами репозитория. Связанные/нерегулярные метаданныеgo.mod,go.sum,go.work,go.work.sumиvendor/modules.txtотклоняются до того, как gograph или инструментарий Go прочитает их. Применимые путиgo.work useдолжны оставаться в пределах своего рабочего каталога; каталоги-участники,go.modи необязательныйgo.sumпроверяются передcmd/go. Точная загрузка иdocпредварительно проверяют выбранный корень и его эффективный корень модуля, или корень рабочей области и каждое дерево-участник;.gitи.gographисключаются из этого обхода дерева исходников. Постоянныйgraph.jsonтакже читается через эту границу,.gographдолжен быть реальным каталогом, и явно символически связанный корень репозитория разрешён. Отсутствующие или неподдерживаемые маркеры политики исходников и артефакты размером более 512 МиБ требуют пересборки, а сериализованные корни графа никогда не доверяются. Сохранённые базовые графы должны быть обычными несвязанными файлами внутри выбранного проекта с точным маркером и ограничением размера. Конфигурации по умолчанию/относительные проверки и потоки, границы, конфигурация шлюзов и управляемые репозиторием мутации сеансов/снимков/wiki отклоняют связанные компоненты пути; документированные абсолютные расположения конфигурации/wiki являются явным выбором оператора. Используйте текущий бинарник для недоверенных репозиториев.Точный режим пытается выполнить типизированное обогащение продакшена и требует компилируемых, выбранных для сборки пакетов для результатов CHA/SSA. Тела SSA строятся для выбранных пакетов репозитория, а не для полного транзитивного замыкания зависимостей; импортированные типы и локальные ссылки на внешние вызовы остаются доступными без графов вызовов тел зависимостей или их шума обёрток без исходников. Если обогащение не удаётся или пропускает индексированный не тестовый исходный файл, команда предупреждает, публикует AST-граф и записывает
precise_fallback; если свежий успешный точный артефакт уже покрывает те же исходники, неудачная повторная попытка сохраняет этот артефакт. Успешные и только AST сборки записываютpreciseиastсоответственно. Тестовые пакеты загружаются отдельным нефатальным типизированным проходом: сломанные тесты даютtyped_partialатрибуцию тестовых вызовов без понижения успешной точности продакшена. Только типизированные тестовые цели пересчитываются, а не переиспользуются как факты парсера, предотвращая умножение рёбер при неизменных точных сборках.Режим низкой памяти изменяет политику выполнения, а не смысл анализа. Он использует агрессивную сборку мусора, освобождает завершённое состояние типов/SSA продакшена перед загрузкой типизированных тестов и учитывает необязательную мягкую цель памяти Go runtime. Цель не является ни потолком RSS, ни гарантией того, что все репозитории завершатся в этом объёме; Gograph сообщает об откате/сбое обычным образом, а не молча пропускает точные факты.
Каждый точный вызов интерфейса представлен одним ребром вызова для каждой допустимой именованной цели CHA в репозитории.
callers Interface.Method(включая методы, унаследованные от встроенных интерфейсов, и конкретные методы, продвигаемые из встроенных полей) расширяется через реализации интерфейса и сообщает общее исходное выражение один раз; конкретная нотация приёмника и полностью квалифицированные идентификаторы методов остаются доступными для устранения неоднозначности. Сгенерированное компилятором продвижение методов хранится как синтетическое ребро только для обхода и скрыто из вывода сайтов вызовов.CHA консервативен, а не точен по указателям: он может сохранять реализации, которые не могут возникнуть в одной конфигурации выполнения. Отражение,
unsafe, плагины, неразрешённые значения функций, тестовые реализации, безымянные конкретные типы и реализации вне модуля могут быть неполными. Точная атрибуция тестовых вызовов связывает прямые селекторы и локальные значения методов точно; цели интерфейсов остаются явно возможными, аtyped_partialозначает, что некоторые тесты остались на эвристиках парсера.Ссылки на обратные вызовы сохраняются только тогда, когда они разрешаются в вызываемые объекты репозитория, а точные рёбра вызовов дедуплицируются перед сериализацией.
Запросы мутаций игнорируют обычные локальные присваивания и сохраняют информацию о типе-владельце, когда она статически известна, поэтому
Type.Fieldразличает поля с одинаковыми именами.Извлечение синхронизации требует приёмника, привязанного к известному типу
sync. Сообщения об ошибках берутся изpanic,errors.Newиfmt.Errorf, включая псевдонимы импорта.Эвристические экстракторы (маршруты, SQL, тесты только для парсера и сопоставление ошибок) являются навигационными помощниками, а не авторитетным анализом программ. Типизированная атрибуция тестов — это всё ещё статическое доказательство, а не доказательство покрытия во время выполнения.
Анализ потоков безопасности межпроцедурный и нечувствительный к путям, с сопоставлением вызовов/возвратов до 16 вложенных вызовов репозитория. Графы по умолчанию разрешают прямые локальные/импортированные функции;
build . --preciseпредоставляет более сильные цели методов/интерфейсов. Он не моделирует отражение, глобальные переменные, произвольные псевдонимы кучи или каждый динамический вызов. Неразрешённые внешние преобразования сохраняются с низкой уверенностью; каждая находка требует проверки исходного кода.
Нет парсинга нескольких языков
Нет вызовов API ИИ/моделей
Нет эмбеддингов или SaaS-бэкенда
Нет удалённой телеметрии или размещённой аналитики (необязательные сеансы аудита записывают только локальные метаданные)
Нет замены корректности компилятора/проверки типов
Вклад
Приветствуются pull request'ы! См. CONTRIBUTING.md для руководств по сборке, тестированию и вкладу.
Поддержка языков:
gographв настоящее время парсит только Go. Архитектура расширяема — если вы хотите добавить Python, TypeScript, Rust и т.д., пожалуйста, сначала откройте issue.
Лицензия
MIT — см. LICENSE.
Available Tools
67 toolsgograph_apiARead-onlyIdempotent
Detect public API surface drift by comparing exported Go symbols between the current working tree and a baseline. A since value ending in .json loads a regular saved graph inside the project root with no linked path component and the exact current repository source-policy marker; its serialized root is ignored. Otherwise gograph validates the value as a Git ref and uses git archive to build a temporary baseline. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only apart from reading the selected graph or extracting a temporary archive that is removed after the call. WHEN TO USE: Before releasing or merging a PR to catch breaking-change regressions — exported symbols added, removed, or renamed since the baseline. NOT TO USE: For listing current exports without a diff baseline (use gograph_public or gograph_skeleton instead). RETURNS: JSON with baseline and breaking flags; nested exported_symbols, interfaces, structs, and routes groups containing added/removed arrays plus changed detail objects; affected_tests, affected_mocks, and findings arrays. Empty groups indicate no drift.
| Name | Required | Description | Default |
|---|---|---|---|
| since | Yes | A baseline Git ref (for example 'main' or 'HEAD~1') or regular in-project saved graph path ending in .json, with no linked component and the exact current source-policy marker |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with annotations declaring readOnly, idempotent, and non-destructive, the description adds critical behavioral details: it extracts a temporary archive removed after the call, checks freshness, refreshes in the current analysis mode, and retries CHA/SSA for precise graphs. These details go far beyond the annotations and clarify the tool's runtime behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear sections (intro, parameter behavior, safety, WHEN/NOT TO USE, RETURNS). Every sentence carries specific information, and the most important facts are front-loaded. It's longer than most but each sentence earns its place, making it efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, no output schema, but supported by rich annotations, the description covers all necessary aspects: input semantics, execution behavior (including failure modes and side effects), return structure, and intended use cases. It leaves no significant gaps for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the single parameter 'since', but the description enriches it with significant semantics: it explains the two accepted value types (Git ref vs .json saved graph), special handling for .json paths, and the meaning of 'regular saved graph' with source-policy marker. This adds value beyond the schema's basic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource statement: 'Detect public API surface drift by comparing exported Go symbols between the current working tree and a baseline.' It clearly distinguishes itself from sibling tools like gograph_public and gograph_skeleton by explicitly stating it's for diffing against a baseline, not listing current exports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
WHEN TO USE and NOT TO USE sections are explicit and actionable. It says use before releasing or merging a PR to catch breaking changes, and directs users to gograph_public or gograph_skeleton for listing current exports without a baseline. This is the gold standard for usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_arityARead-onlyIdempotent
Find functions and methods with at least a threshold number of parameters — the long-parameter-list smell. The MCP server checks freshness before this call. Read-only; no side effects. min sets the inclusive minimum (default: 5; 0 includes zero-arity functions), matching CLI --min. WHEN TO USE: During code smell audits. NOT TO USE: For struct field counts (use gograph_fields or gograph_godobj). RETURNS: Functions meeting the threshold with parameter count, signature, and file location.
| Name | Required | Description | Default |
|---|---|---|---|
| min | No | Inclusive minimum argument count to report (default: 5; 0 includes zero-arity functions) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Read-only; no side effects.' It adds useful context beyond annotations by mentioning the MCP server checks freshness before the call, which is a behavioral trait not captured in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, uses clear section headers (WHEN TO USE, NOT TO USE, RETURNS), and every sentence adds meaningful information. It is well-organized and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description is complete: it explains what it returns (parameter count, signature, file location), covers usage scenarios, and indicates the freshness check. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single 'min' parameter, so the schema already documents it well. The description adds value by explaining the default and edge case (0 includes zero-arity functions) and mentioning the CLI --min equivalence, which provides additional context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Find') targeting a specific resource ('functions and methods') with a clear qualifier ('at least a threshold number of parameters') and explicitly names the code smell it addresses ('long-parameter-list smell'). It also distinguishes itself from sibling tools by mentioning alternatives for struct field counts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit WHEN TO USE and NOT TO USE sections, including concrete alternative tool names (gograph_fields, gograph_godobj). This gives the agent clear guidance for tool selection and exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_boundariesARead-onlyIdempotent
Refresh source analysis and check package imports against a boundaries.json configuration. The required config defaults to .gograph/boundaries.json; explicit paths must remain inside the analyzed project, and every path component plus the final regular file is read through the rooted repository boundary. Create it with gograph_boundaries_create. Read-only; no side effects. WHEN TO USE: In CI gates or post-edit reviews to enforce layer separation. NOT TO USE: For unconstrained dependency exploration (use gograph_deps or gograph_coupling). RETURNS: Structured pass state and boundary violations.
| Name | Required | Description | Default |
|---|---|---|---|
| config | No | Optional in-project path to a regular, non-linked boundary config (default .gograph/boundaries.json) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds 'Read-only; no side effects.' More importantly, it discloses path traversal constraints: 'explicit paths must remain inside the analyzed project, and every path component plus the final regular file is read through the rooted repository boundary,' providing context not in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose, followed by details, usage guidance, and return value. While slightly verbose, each section (WHEN TO USE, NOT TO USE, RETURNS) is structured for quick scanning. Minor redundancy with annotations ('Read-only; no side effects') prevents a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description covers the purpose, usage context, safety constraints, and returns ('Structured pass state and boundary violations'). It does not describe error behavior if the config is missing, but it mitigates this by pointing to gograph_boundaries_create for setup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single optional config parameter. The description adds value by reiterating the default ('.gograph/boundaries.json') and introducing a non-obvious constraint: explicit paths must remain inside the analyzed project, which is more precise than the schema's basic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource: 'check package imports against a boundaries.json configuration.' It also distinguishes itself from siblings by explicitly naming alternatives for unconstrained dependency exploration (gograph_deps, gograph_coupling) and referencing gograph_boundaries_create for creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
WHEN TO USE section explicitly prescribes 'In CI gates or post-edit reviews to enforce layer separation.' NOT TO USE section provides a clear exclusion and names alternative tools, giving the agent explicit decision criteria for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_boundaries_createA
Create a baseline architecture boundary configuration from the repository's current package imports. Defaults to .gograph/boundaries.json under the graph root, uses repository-rooted regular-file creation, and refuses linked paths or overwrite. Mutating and non-idempotent; no network access. WHEN TO USE: Once when adopting boundary checks in an existing repository, then review and tighten the generated rules. NOT TO USE: To verify an existing configuration (use gograph_boundaries). RETURNS: The written config path or an error when the path is unsafe or already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| config | No | Optional in-project output path, absolute or repository-relative; linked components and existing entries are refused (default .gograph/boundaries.json) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, idempotentHint=false, and destructiveHint=false, but the description adds meaningful context: 'Mutating and non-idempotent; no network access', and explicitly states safety behaviors like refusing linked paths and overwriting. This goes beyond the annotations and provides operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, followed by behavior details, THEN/NOT TO USE, and RETURNS. It is slightly longer than a minimal description but every sentence adds value, avoiding redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter create tool with no output schema, the description is comprehensive: it covers what it does, when to use it, safety constraints, and the return value ('The written config path or an error when the path is unsafe or already exists'). No critical gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter is already well-documented. The description adds the default path value ('.gograph/boundaries.json') which is not in the schema description, but this is a minor addition. The baseline of 3 applies since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Create a baseline architecture boundary configuration') and the resource ('from the repository's current package imports'). It also distinguishes from the sibling tool gograph_boundaries by specifying NOT TO USE for verification, making it highly distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'WHEN TO USE' (once when adopting boundary checks) and 'NOT TO USE' (to verify an existing configuration, with the alternative gograph_boundaries named). This is exemplary guidance that directly addresses tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_calleesARead-onlyIdempotent
Find functions and methods called by the specified function. Defaults to one-hop fan-out; depth 2-10 expands the downstream call graph. The MCP server refreshes source analysis before the call. Read-only; no persistent side effects. WHEN TO USE: To understand a function's downstream dependencies. NOT TO USE: For upstream callers (use gograph_callers); for package dependency trees (use gograph_deps). RETURNS: Callee symbols with package paths, file locations, and call-site line numbers; with mermaid=true, Mermaid flowchart text.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Traversal depth from 1 to 10 (default 1) | |
| mermaid | No | Return Mermaid flowchart text instead of the normal response | |
| function | Yes | The name of the calling function to inspect callees for (supports short name 'Serve', dot-notation 'graph.Graph.Build', or fully-qualified ID) | |
| no_tests | No | Exclude call edges originating in *_test.go files |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds context beyond these by noting the MCP server refreshes source analysis before the call and that the operation is read-only with no persistent side effects. It also explains depth-default and traversal expansion behavior, which is useful operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and logically organized with clear sections: action, default behavior, side-effect note, WHEN TO USE, NOT TO USE, and RETURNS. No sentence is wasted; all content is directly actionable for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a graph-traversal tool with no output schema, the description covers the essential contextual needs: purpose, default depth behavior, side-effect profile, source-refresh behavior, return value composition (package paths, file locations, line numbers), and alternative tools. Annotations cover safety and idempotency, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema already has 100% parameter description coverage, so the baseline is 3. The description adds meaning by explaining that depth defaults to one-hop fan-out and that depth 2-10 expands the downstream call graph, and by describing the mermaid=true return format. This enriches the schema's parameter descriptions with contextual semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find functions and methods called by the specified function.' It clearly identifies the traversal direction (fan-out to callees) and explicitly distinguishes itself from gograph_callers and gograph_deps in the usage guidance, making sibling differentiation strong.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description contains explicit 'WHEN TO USE' and 'NOT TO USE' sections, naming alternative tools (gograph_callers for upstream callers, gograph_deps for package dependency trees). This gives the agent unambiguous criteria for selecting this tool over closely related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_callersARead-onlyIdempotent
Find functions and methods that call the specified function or interface method. Defaults to one-hop fan-in; depth 2-10 expands callers-of-callers. In a precise graph, Interface.Method expands through all recorded implementations and reports a shared source call site once. The MCP server refreshes source analysis before the call. Read-only; no persistent side effects. WHEN TO USE: Before renaming, removing, or changing a function or interface method signature. NOT TO USE: For unbounded upstream blast radius (use gograph_impact); for downstream callees (use gograph_callees). RETURNS: Caller symbols with package paths, file locations, and call-site line numbers; with mermaid=true, Mermaid flowchart text.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Traversal depth from 1 to 10 (default 1) | |
| exact | No | Require an exact symbol-name or fully-qualified-ID match | |
| mermaid | No | Return Mermaid flowchart text instead of the normal response | |
| function | Yes | The target function or method (supports short name 'BuildGraph', interface notation 'Repository.Delete', concrete dot-notation 'Store.Delete', or a fully-qualified ID) | |
| no_tests | No | Exclude call edges originating in *_test.go files |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing the safety profile. The description adds valuable behavioral context beyond those hints: it explains that the MCP server refreshes source analysis before the call, describes how Interface.Method expands through all recorded implementations but reports a shared source call site once, and notes the 'precise graph' conditioning. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a concise opening summary, labeled WHEN TO USE / NOT TO USE sections, and a RETURNS section. Every sentence provides distinct value—no filler or repetition of schema fields. The use of labeled sections makes the information easily scannable for an agent, and the length is proportionate to the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity of the tool (depth handling, interface dispatch, alternative tools) and the absence of an output schema, the description compensates fully: the RETURNS section specifies caller symbols with package paths, file locations, call-site line numbers, and Mermaid text option. It also covers the freshness behavior and excludes unbounded blast radius. The description is complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema for key parameters: it explains depth semantics ('Defaults to one-hop fan-in; depth 2-10 expands callers-of-callers'), elaborates on the 'function' parameter's interface notation behavior, and clarifies the mermaid=true return type. It does not discuss no_tests or exact, but the schema already describes those adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find functions and methods that call the specified function or interface method.' It clearly identifies the tool as a fan-in caller analysis and distinguishes it from related tools by noting one-hop default vs. depth expansion and interface method expansion through implementations. The explicit mentions of gograph_impact and gograph_callees as alternatives reinforce the unique purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit WHEN TO USE section ('Before renaming, removing, or changing a function or interface method signature') and NOT TO USE section with named alternatives ('use gograph_impact' for upstream blast radius, 'use gograph_callees' for downstream callees). This gives the agent clear decision criteria for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_capabilitiesARead-onlyIdempotent
List all available gograph MCP tools, their purposes, and recommended agent workflows. Once the project-scoped MCP server has started, this tool has no additional graph-state prerequisite. Read-only; no side effects. WHEN TO USE: Call once per session to orient before issuing analytical queries. NOT TO USE: Do not repeat after capabilities are cached in context. RETURNS: Structured JSON with every registered tool name, one-line purposes, recommended workflow sequences, and known static-analysis limitations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description reinforces 'Read-only; no side effects' and adds context about the server prerequisite, caching recommendation, and that the return includes known limitations. This adds useful behavioral context beyond the annotation baseline, though it doesn't reveal any surprising behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose, prerequisites, side-effect statement, WHEN TO USE, NOT TO USE, and RETURNS. Every sentence serves a distinct purpose, and it's concise enough to read quickly without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description is complete: it explains what the tool does, when to use it, how often, prerequisites, return format, and even known limitations. The annotations cover safety, so no gaps remain in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema coverage is 100% (empty object). The description doesn't need to explain parameters but does describe the return value (structured JSON with tool names, purposes, workflows, limitations), which is helpful for an agent deciding what to expect. Baseline of 4 fits given no parameters to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'all available gograph MCP tools' along with their purposes and recommended agent workflows. This distinguishes it from sibling tools, which are analytical or graph-specific, by positioning it as a meta-orientation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit 'WHEN TO USE' (call once per session to orient before analytical queries) and 'NOT TO USE' (do not repeat after capabilities are cached), plus a prerequisite ('once the project-scoped MCP server has started, no graph-state prerequisite'). This gives clear guidance on when to invoke it versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_changesARead-onlyIdempotent
List Go symbols that have been structurally modified, added, or deleted. In working-tree mode, deleted also covers a prior graph file that is no longer in the current safely selected inventory because it is absent, ignored, build-inactive, or unsafe. Without git_ref, compares against trusted persisted graph.json without refreshing it, or against the startup fallback when no usable artifact exists. With git_ref, refreshes source analysis and performs a static symbol diff against the named Git reference. Read-only; no side effects. WHEN TO USE: After editing to confirm which symbols changed before gograph_impact or gograph_review. NOT TO USE: For line-level text diffs (use git diff); for blast radius (use gograph_impact). RETURNS: Changed symbols grouped by added/modified/deleted; empty arrays when no structural changes are detected.
| Name | Required | Description | Default |
|---|---|---|---|
| git_ref | No | Optional git reference to compare against (e.g., 'main', 'HEAD~5', 'v1.4.50') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already declare readOnly, idempotent, and non-destructive, the description adds substantial behavioral context: it explains the dual-mode semantics (with and without git_ref), details that 'deleted' in working-tree mode includes absent/ignored/build-inactive files, and notes that without git_ref it compares against trusted persisted graph.json without refreshing. This goes well beyond the structured annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear labels (WHEN TO USE, NOT TO USE, RETURNS) and front-loads the core action. Each sentence adds information about modes, exclusions, or return values; there is no filler. Despite its length, it remains efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's nuance (modes, exclusions, return semantics), the description is complete. It covers what it does, when to use it, behavior in each mode, what it returns (grouped by added/modified/deleted with empty arrays), and explicitly notes it is read-only. No output schema exists, so the description correctly takes on the responsibility of describing return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only says git_ref is an optional git reference string. The description enriches this by explaining the behavioral difference when git_ref is omitted (uses persisted graph.json) versus provided (refreshes analysis and diffs against the reference). This is crucial semantic information that the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List Go symbols that have been structurally modified, added, or deleted.' It clearly distinguishes itself from related tools by explicitly naming git diff for line-level diffs and gograph_impact for blast radius, making the tool's unique purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'WHEN TO USE' and 'NOT TO USE' sections, stating to use this tool after editing to confirm symbol changes before gograph_impact or gograph_review, and not for line-level diffs (use git diff) or blast radius (use gograph_impact). This is textbook guidance on when and when not to invoke the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_checkARead-onlyIdempotent
Refresh source analysis and run static policy checks: boundaries, API drift, changed-route/export tests, test coverage, orphans, globals, arity, and complexity. The default or a relative checks config is confined to a regular non-linked file beneath the project; an absolute config is an explicit operator-selected regular file. Baselines use the same validated builder as CLI: a value ending in .json loads a regular saved graph inside the project root with no linked component and the exact current source-policy marker, ignoring its serialized root; otherwise it is treated as a Git ref and extracted temporarily. WHEN TO USE: During PR review or pre-commit analysis. NOT TO USE: For CI process exit enforcement (use CLI gograph gate). RETURNS: Structured pass/warn/fail status, findings, and summary counts.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Git ref or regular in-project saved graph path ending in .json, with no linked component and the exact current source-policy marker, for api_drift | |
| config | No | Optional checks.json path; relative/default paths are project-confined, while an absolute path explicitly selects a regular local file | |
| uncommitted | No | If true, include uncommitted changes in the analysis scope |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, idempotent, non-destructive hints. The description adds valuable context beyond those hints: it details how relative vs absolute config paths are handled, explains that baselines ending in .json load a saved graph with specific constraints, and notes that Git refs are extracted temporarily. This meaningfully expands the agent's understanding, though it doesn't cover every possible behavior (e.g., error conditions).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than ideal, with several nested clauses, but it is well-structured with labeled sections (WHEN TO USE, NOT TO USE, RETURNS) and front-loads the main purpose. Each sentence contributes important safety and usage detail, so the length is justified despite being somewhat dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex—it aggregates many checks and has nuanced config/baseline logic—and there is no output schema. The description addresses this by listing the checks, explaining config confinement and baseline semantics, and stating the return structure (pass/warn/fail status, findings, summary counts). It is sufficiently complete for an agent to decide when and how to invoke it, though some technical details are compressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all 3 parameters with descriptions, providing a solid baseline. The description adds extra semantic nuance, particularly around config path confinement and baseline handling (saved graph versus Git ref), which maps to the 'config' and 'since' parameters. This goes beyond simply restating the schema, though not every parameter is individually explained in prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool refreshes source analysis and runs static policy checks, enumerating the specific check categories (boundaries, API drift, changed-route/export tests, coverage, etc.). It distinguishes itself from the many sibling analysis tools by serving as a consolidated policy-check/aggregate tool, and the WHEN TO USE/NOT TO USE sections reinforce its intended purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage guidance: 'WHEN TO USE: During PR review or pre-commit analysis' and 'NOT TO USE: For CI process exit enforcement (use CLI gograph gate).' This directly tells the agent when to choose this tool over alternatives and even names the specific alternative. It also clarifies config-path confinement for safe usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_complexityARead-onlyIdempotent
Report estimated cyclomatic complexity for Go functions, sorted highest-to-lowest with severity labels (LOW/MEDIUM/HIGH/VERY HIGH). A function whose repository source cannot be read or parsed safely is retained as UNKNOWN with score -1. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. Optional symbol substring filters to a specific function or set of functions. WHEN TO USE: During code quality audits, identifying functions that need decomposition, or setting complexity budgets in CI. NOT TO USE: For import dependency metrics (use gograph_coupling or gograph_deps); for God Object detection (use gograph_godobj). RETURNS: Structured list of functions with complexity score and severity label; empty when no functions match the filter.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | Optional Go function or method symbol name substring to filter the complexity report (e.g., 'Build') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and non-destructive, but the description adds substantial behavior: UNKNOWN handling with score -1, freshness checks and retry logic in specific graph modes, and side-effect-free guarantee. This goes well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than the ideal two-sentence pattern but is well structured with labeled sections (WHEN TO USE, NOT TO USE, RETURNS). It remains readable and every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description covers return shape (list of functions with score and severity label), empty-result behavior, and edge cases (UNKNOWN functions). This is complete for a reporting tool with no nested objects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the only parameter `symbol`, so baseline is 3. The description merely restates that it is an optional substring filter, adding minimal semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Report estimated cyclomatic complexity for Go functions' and adds sorting and severity labels. It clearly distinguishes from sibling tools by naming alternatives like gograph_coupling and gograph_deps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'WHEN TO USE' and 'NOT TO USE' sections are present, with concrete alternatives for other metric types. This gives the agent unambiguous guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_concurrencyARead-onlyIdempotent
Find indexed concurrency sites in the codebase: goroutine spawns (go statements), channel sends, and calls on sync.Mutex/RWMutex, sync.WaitGroup, and sync.Once. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. Optional term filter (e.g., "mutex", "goroutine", "channel"). WHEN TO USE: When auditing race safety, understanding async flow, or locating synchronization points before a concurrency refactor. NOT TO USE: For standard sequential call flow analysis (use gograph_callers/gograph_callees). RETURNS: File locations, line numbers, and primitive kind for each indexed concurrency site; empty when no sites are found. Channel receives and select statements are not indexed.
| Name | Required | Description | Default |
|---|---|---|---|
| term | No | Optional filter term (e.g., 'goroutine', 'mutex', 'channel') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations by disclosing freshness/refresh behavior (server checks freshness, retries CHA/SSA in precise modes), defining what is not indexed (channel receives/select), and confirming read-only semantics. This is valuable context not available in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections and every sentence contributes meaning. It is slightly verbose in the freshness mechanics, but still appropriately sized and front-loaded with the primary purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description explains return values (file locations, line numbers, primitive kind) and empty behavior. It also covers exclusions and refresh behavior, making it highly complete for a tool with only one optional parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the sole 'term' parameter, and the description repeats the same examples given in the schema. It adds no new semantic meaning beyond the schema, placing it at the baseline for adequate coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool identifies 'indexed concurrency sites' and enumerates specific resource types (goroutine spawns, channel sends, sync calls). It distinguishes from siblings by explicitly noting sequential flow analysis should use gograph_callers/gograph_callees.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'WHEN TO USE' and 'NOT TO USE' sections provide clear conditions (e.g., auditing race safety, async flow, synchronization points) and direct the agent to alternatives for sequential analysis. This is ideal guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_constructorsARead-onlyIdempotent
Find all factory and constructor functions that instantiate and return a named Go struct (functions whose return type includes the struct name). The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: When looking for the canonical way to create a struct, or before modifying struct initialization to ensure all construction paths are updated. NOT TO USE: For direct composite-literal sites (use gograph_literals); for struct fields (use gograph_fields). RETURNS: List of constructor function names with signatures, package paths, and file locations; empty when no factory functions are found.
| Name | Required | Description | Default |
|---|---|---|---|
| struct | Yes | The exact name of the target Go struct to find constructors for (e.g., 'User', 'Config') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes freshness checking, refresh behavior in different analysis modes, and retry logic for CHA/SSA after source changes. This adds significant context beyond the annotations, which already indicate read-only and idempotent. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear sections (purpose, freshness behavior, read-only, usage, returns). It is somewhat lengthy but every part adds value; front-loading with the core purpose is effective. A minor trim could be possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description specifies the return type: list of constructor names with signatures, package paths, file locations, and empty case. It covers all relevant aspects: behavior, usage prerequisites, and output format, making it fully contextual for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a well-described single parameter 'struct'. The tool description does not add further semantics beyond what the schema already provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds factory/constructor functions that instantiate named Go structs, with a specific condition on return types. It differentiates from sibling tools like gograph_literals and gograph_fields in the NOT TO USE section.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit WHEN TO USE and NOT TO USE sections provide clear guidance: use when looking for canonical construction or before modifying initialization; avoid for literal sites or fields. Also names alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_contextARead-onlyIdempotent
Fetch a pre-flight context bundle for a single Go symbol: AST node metadata, source code, direct callers, direct callees, linked test functions, and architectural role classification — all in one call. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only analysis; an active audit session may append local command telemetry. Set uncommitted=true to bundle context for all currently modified symbols at once. WHEN TO USE: As the first call before editing a symbol — eliminates 4–5 separate tool roundtrips. NOT TO USE: For package-level orientation (use gograph_focus); for transitive blast radius (use gograph_impact). RETURNS: JSON with node (first match), nodes[] (all matches), source, callers[], callees[], tests[], test_results[], and top-level role; empty object {} when symbol not found. With uncommitted=true, returns a contexts[] array; count:0 when no uncommitted symbols exist.
| Name | Required | Description | Default |
|---|---|---|---|
| exact | No | Require an exact symbol-name or fully-qualified-ID match in single-symbol mode. | |
| symbol | No | The exact name, dot-notation 'graph.Graph', or ID of the symbol to retrieve context for. | |
| uncommitted | No | If true, return context for all uncommitted modified symbols bundled in one response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, but the description adds context about freshness checks, retry of CHA/SSA after source changes, and the side effect of appending telemetry in an audit session. This goes beyond structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with labeled sections (purpose, WHEN TO USE, NOT TO USE, RETURNS). Every sentence conveys needed information, though some redundancy exists with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description's 'RETURNS' section fully lists the response structure, including the empty-object case and the uncommitted contexts[] variant. This makes the tool's behavior predictable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented. The description reinforces uncommitted=true behavior but does not add substantial detail beyond the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Fetch a pre-flight context bundle for a single Go symbol', listing exact contents (AST metadata, source, callers, callees, tests, role). This clearly distinguishes it from sibling tools like gograph_callers or gograph_tests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'WHEN TO USE' states it is the first call before editing to eliminate 4–5 roundtrips. 'NOT TO USE' names alternatives: gograph_focus for package-level orientation and gograph_impact for transitive blast radius.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_couplingARead-onlyIdempotent
Report fan-in (Ca), fan-out (Ce), and instability I=Ce/(Ca+Ce) per package. The MCP server refreshes source analysis before the call. Read-only; no side effects. package filters by substring; include_stdlib and internal_only control scope. WHEN TO USE: To evaluate package isolation. RETURNS: Package coupling records; with mermaid=true, Mermaid flowchart text.
| Name | Required | Description | Default |
|---|---|---|---|
| mermaid | No | Return Mermaid flowchart text instead of structured JSON | |
| package | No | Optional package name substring to filter results | |
| internal_only | No | Restrict the report to the project's own packages (anything starting with the module path from go.mod). Strictly stronger than excluding stdlib — also excludes third-party deps. | |
| include_stdlib | No | Include standard-library packages in the report. Default false — users asking 'how coupled is my code?' rarely care about stdlib coupling. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description adds 'Read-only; no side effects' which is consistent. It also discloses that the server refreshes source analysis before the call and mentions mermaid output behavior, providing extra behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections for WHEN TO USE and RETURNS, and it stays compact. It includes a small redundancy ('Read-only; no side effects' duplicates annotations) but overall every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description compensates by stating that returns are 'Package coupling records' and that Mermaid flowchart text is returned when mermaid=true. The metrics are already explained in the first sentence, making the return type sufficiently clear, though more detail on record fields or sorting would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive text for every parameter, so the baseline is 3. The description adds a brief restatement ('package filters by substring; include_stdlib and internal_only control scope') but does not meaningfully clarify parameter semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Report') and precisely names the metrics: fan-in (Ca), fan-out (Ce), and instability I=Ce/(Ca+Ce) per package. This clearly distinguishes gograph_coupling from sibling tools like gograph_deps or gograph_imports, which focus on different aspects of dependencies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
An explicit 'WHEN TO USE' section states 'To evaluate package isolation,' giving a clear and actionable use case. It does not name alternative tools or conditions when not to use it, so it falls short of the full explicit-exclusion bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_coverageARead-onlyIdempotent
Return the transitive set of production functions and methods statically reachable from one test function. The MCP server refreshes the graph first. Exact results have an all-static path; any parser-only or CHA dispatch edge degrades that symbol and its descendants to possible. Same-named tests in multiple packages return status=ambiguous and are never merged; retry with the stable test ID from matched_tests or gograph_identity. The optional package qualifier resolves the uncommon in-package versus external foo_test ID collision. Set exact_only=true to omit possible results. This is static attribution, not runtime or branch coverage proof. Read-only; no side effects. WHEN TO USE: To map one test to the product symbols it structurally exercises. NOT TO USE: To claim execution or branch coverage. RETURNS: gograph.coverage.v1 JSON with analysis precision, test-call resolution, matched tests, symbols, resolution, depth, representative stable-ID paths, and limitations.
| Name | Required | Description | Default |
|---|---|---|---|
| test | Yes | Exact test name or canonical stable test symbol ID | |
| package | No | Optional exact Go package name used only to disambiguate matching test symbols | |
| exact_only | No | Return only symbols reached entirely through exact/static edges |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description goes well beyond that: it discloses that the server refreshes the graph first, explains how exact versus possible results are determined via static vs CHA/parser-only dispatch edges, and specifies ambiguity handling. It explicitly states 'Read-only; no side effects' and distinguishes static attribution from runtime or branch coverage, which is critical behavioral context for an AI agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured and information-dense, using clear sections for when to use, not to use, and return value. Every sentence adds behavioral or semantic detail. It is longer than minimal, but the tool involves non-trivial precision semantics and ambiguity handling, so the length is justified. The most important statement about transitive reachability is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a read-only analysis tool with no output schema. It covers the core behavior, the degradation semantics, ambiguity resolution, retry strategies, exact-mode filtering, the optional package qualifier, and a summary of what the return payload contains. There are no obvious missing behavioral details an agent would need to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% description coverage for all three parameters. The tool description still adds meaningful semantic context: 'test' is clarified as exact name or canonical stable ID with guidance to use matched_tests/gograph_identity for retries; 'package' is defined as resolving the uncommon in-package versus external foo_test collision; 'exact_only' is connected to omitting possible results. This expands beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource statement: 'Return the transitive set of production functions and methods statically reachable from one test function.' It clearly defines the input (a test function) and the output relationship, and it disambiguates from siblings like gograph_tests, gograph_untested, and gograph_callees by emphasizing static reachability from a single test rather than coverage claims or general call graphs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides WHEN TO USE ('map one test to the product symbols it structurally exercises') and NOT TO USE ('To claim execution or branch coverage') sections. It also gives concrete conditional guidance for ambiguous cases: same-named tests return status=ambiguous, and the agent should retry with the stable test ID from matched_tests or gograph_identity. The package qualifier is framed precisely as resolving only the in-package versus external foo_test collision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_dependentsARead-onlyIdempotent
Find all packages that import the named package (inverse of gograph_deps). The MCP server refreshes source analysis before the call. Read-only; no side effects. WHEN TO USE: Before a package-level interface change or removal. NOT TO USE: For a single function's callers (use gograph_callers). RETURNS: Dependent packages; with mermaid=true, Mermaid flowchart text.
| Name | Required | Description | Default |
|---|---|---|---|
| mermaid | No | Return Mermaid flowchart text instead of the normal response | |
| package | Yes | The package to find dependents for (e.g., 'internal/auth', 'auth', or a full import path) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description reinforces this with 'Read-only; no side effects' and adds non-obvious behavior: 'The MCP server refreshes source analysis before the call.' This provides useful context beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loaded with purpose, and every sentence contributes value (purpose, refresh behavior, usage boundaries, return format). It repeats annotation information ('Read-only; no side effects') but not so much that it harms clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only query tool with no output schema, the description covers what it returns, when to use it, when not to use it, and a key behavioral detail about automatic source refresh. This is complete enough for an agent to select and invoke the tool correctly in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both 'package' and 'mermaid' have descriptions). The description adds little beyond the schema—only noting that mermaid=true returns Mermaid flowchart text, which the schema already communicates. Baseline 3 is appropriate since structured data carries the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Find' with a clear resource 'all packages that import the named package' and explicitly calls itself the inverse of gograph_deps, distinguishing it from the sibling tool. It also differentiates from gograph_callers for function-level queries, so purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit 'WHEN TO USE' and 'NOT TO USE' sections, with a named alternative (gograph_callers) and a concrete use case (before package-level interface change or removal). This is exactly the guidance an agent needs to decide between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_depsARead-onlyIdempotent
List the import dependencies of a named package. With transitive=false (default), returns direct imports; true returns the BFS closure. The MCP server refreshes source analysis before the call. Read-only; no side effects. WHEN TO USE: When auditing package layering. NOT TO USE: For reverse lookup (use gograph_dependents). RETURNS: direct[] and transitive[] arrays; with mermaid=true, Mermaid flowchart text; found:false when absent.
| Name | Required | Description | Default |
|---|---|---|---|
| mermaid | No | Return Mermaid flowchart text instead of structured JSON | |
| package | Yes | The target package path or name to inspect (e.g., 'internal/search', 'internal/cli') | |
| transitive | No | If true, return the full transitive import closure via Breadth-First Search (BFS) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description's 'Read-only; no side effects' is redundant. However, it adds valuable context: the MCP server refreshes source analysis before the call, and it documents the 'found:false' return condition. This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but highly structured: purpose, behavior, when to use, when not to use, and return format. Every sentence carries information. The capitalized labels (WHEN TO USE, NOT TO USE, RETURNS) improve scannability. A slight trim could be made, but it remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and moderate complexity, the description fully explains behavior, settings, return values, and edge cases ('found:false'). It also addresses the refreshing behavior, making it self-contained. Sibling differentiation is present. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds the default for transitive (false) and clarifies the return structure (direct[] vs transitive[]), which is not explicitly in the schema. This strengthens parameter understanding without being repetitive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List the import dependencies of a named package.' It clearly distinguishes itself from sibling tools by explicitly naming gograph_dependents as the reverse lookup tool. The transitive flag and its effect on scope are also mentioned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit WHEN TO USE and NOT TO USE sections are provided. 'When auditing package layering' gives a concrete use case, and the exclusion of gograph_dependents for reverse lookup prevents misuse. This is exactly the kind of guidance needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_diagramARead-onlyIdempotent
Refresh source analysis and generate a Mermaid architecture diagram of the package dependency graph. Read-only; no side effects. WHEN TO USE: Onboarding, architecture review, or communicating package structure. Use group_by=module for monorepos and group_by=file for drill-downs. NOT TO USE: For call-graph traversal or single-package focus. RETURNS: Mermaid text; use max_depth or coarser grouping for large graphs.
| Name | Required | Description | Default |
|---|---|---|---|
| group_by | No | Grouping level: 'package' (default), 'module', 'service', or 'file' | |
| max_depth | No | Maximum BFS depth from graph roots (0 = unlimited) | |
| include_stdlib | No | If true, include Go standard library packages in the diagram |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent; the description reinforces this with 'Read-only; no side effects' and adds behavioral context: refreshing source analysis, returning Mermaid text, and advising max_depth/grouping for large graphs. This goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with labeled sections (WHEN TO USE, NOT TO USE, RETURNS), front-loads the purpose, and every sentence earns its place. It is concise while packing substantial information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given annotations cover safety and schema covers parameters, the description provides complete operational context: output format (Mermaid text), typical use cases, exclusions, and scale guidance. Since no output schema exists, stating the return type is critical and handled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all three parameters fully, so baseline is 3. The description adds practical guidance for group_by values and max_depth for large graphs, enhancing meaning beyond schema. include_stdlib is not mentioned but the schema description is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates a Mermaid architecture diagram of the package dependency graph, with a specific verb and resource. It also distinguishes from siblings by explicitly excluding call-graph traversal and single-package focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit WHEN TO USE and NOT TO USE sections, plus parameter-specific guidance for monorepos (group_by=module) and drill-downs (group_by=file). This gives clear direction on when to select this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_docARead-onlyIdempotent
Fetch Go documentation for a package, stdlib symbol, or third-party symbol by running go doc <query>. The handler does not query the graph, though the project-scoped MCP server must already have started with a usable artifact or buildable Go source. Filesystem-shaped queries are rejected, and the command is refused for source-tree links the Go toolchain may inspect across the selected root plus its effective module root, or the workspace root and member trees; .git and .gograph are excluded from that preflight. It also refuses a special recognized Go build input, linked/non-regular Go tool metadata (go.mod, go.sum, go.work, go.work.sum, or vendor/modules.txt), or a workspace member outside the workspace directory. Each applicable member directory, go.mod, and optional go.sum is validated first. Dependency and toolchain resolution remain open-world under the user's Go environment. WHEN TO USE: When a call chain reaches code outside the project. NOT TO USE: For project-internal symbols (use gograph_source or gograph_context). RETURNS: A one-element JSON array containing {query, output}, where output is the raw go doc text; an error when the query or repository input is unsafe, the symbol is not found, or go is unavailable.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The go doc query string. Examples: 'fmt.Errorf', 'net/http.HandleFunc', 'io.Reader', 'github.com/jackc/pgx/v5.Conn.QueryRow' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations, detailing rejection of filesystem-shaped queries, refusal of certain source-tree links and Go metadata, validation of member directories/go.mod files, open-world dependency resolution, and return/error behavior. It fully discloses the safety and execution model without contradicting the read-only, idempotent, open-world hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but purposefully structured with clear sections (WHEN TO USE, NOT TO USE, RETURNS) and front-loaded with the core action. Every sentence adds value, though the dense security preflight details could be more compact. It remains readable and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a tool of this complexity. It covers the return format (one-element JSON array with query and output), error conditions, prerequisites, and behavioral edge cases. With no output schema and only one parameter, the description adequately fills all gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the query parameter with concrete examples, achieving 100% coverage. The description adds context about acceptable query types (package, stdlib, third-party) and restrictions (filesystem-shaped rejected), which is useful but not a significant departure from the schema. Thus the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Fetch Go documentation for a package, stdlib symbol, or third-party symbol by running `go doc <query>`.' It clearly distinguishes from siblings by noting the tool does not query the graph and by explicitly contrasting with gograph_source and gograph_context for project-internal symbols.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit WHEN TO USE ('When a call chain reaches code outside the project') and NOT TO USE ('For project-internal symbols (use gograph_source or gograph_context)') sections, naming alternative tools. It also states prerequisites about the MCP server needing a usable artifact or buildable source, giving clear context for when the tool is applicable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_embedsARead-onlyIdempotent
Find all Go structs that embed the named struct via anonymous field composition. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: When understanding how a base type is extended throughout the codebase, or before modifying a shared embedded struct to estimate blast radius. NOT TO USE: For interface implementations (use gograph_implementers); for named field type references in other structs (use gograph_usages). RETURNS: List of embedding parent struct names with package paths and file locations; empty when the struct is embedded nowhere.
| Name | Required | Description | Default |
|---|---|---|---|
| struct | Yes | The exact name of the target struct to inspect embedding relationships for (e.g., 'Symbol', 'PackageNode') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint), the description adds context about freshness checks, analysis mode refreshes, and retry behavior for precise graphs. It also reiterates 'Read-only; no side effects.' No contradiction found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a concise purpose statement, followed by technical behavior, usage guidance, return format. Every sentence adds value, and the most critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description lists return format (embedding parent struct names with package paths and file locations) and edge case (empty when nowhere embedded). The freshness mechanism is also explained. All necessary context for tool invocation is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'struct' has a schema description with examples (e.g., 'Symbol', 'PackageNode'), and the overall description reinforces what the parameter represents. Schema coverage is 100%, so the descriptive addition is helpful but not essential.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description immediately states the action: 'Find all Go structs that embed the named struct via anonymous field composition.' It clearly identifies the resource and scope, and distinguishes from sibling tools like gograph_implementers and gograph_usages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It includes explicit 'WHEN TO USE' and 'NOT TO USE' sections, specifying concrete scenarios (e.g., understanding base type extension, estimating blast radius) and alternatives for interface implementations and named field references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_endpointARead-onlyIdempotent
Build a full vertical slice for one HTTP route: the matched handler symbol, a BFS call chain downstream (default depth 5), all SQL queries emitted in that chain, and all env vars read. Constant nested Gin/Echo/Fiber Group prefixes and Chi Route closure prefixes are composed into final paths; dynamically computed prefixes remain unresolved and can still be queried by suffix or handler. The MCP server checks content-digest freshness before this call and incrementally refreshes changed package ASTs in the current requested analysis mode; precise and precise_fallback graphs retry repository-wide CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: When auditing what an API endpoint does end-to-end — its downstream dependencies, database queries, and configuration reads. NOT TO USE: For listing all routes (use gograph_routes first to find the pattern); for raw handler source code only (use gograph_source). RETURNS: Array of endpoint slices with route, handler, call chain, SQL, and env fields; found:false with a suggestion when the query does not match any route. query accepts route pattern ("POST /api/users"), path fragment ("/users"), or handler name. depth controls call-chain BFS depth (default: 5).
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | BFS depth for call chain traversal, clamped to 1-20 (default: 5) | |
| query | Yes | Route pattern ("POST /api/users"), path suffix ("POST /users"), or handler symbol name ("CreateUser"). Constant grouped prefixes are resolved; dynamic prefixes remain best-effort. | |
| mermaid | No | Return Mermaid flowchart text instead of structured JSON | |
| include_tests | No | Include routes registered in *_test.go files |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds transparency beyond the annotations by explaining internal behaviors such as content-digest freshness checks, incremental AST refreshes, and handling of dynamic prefixes. While valuable, some details are repeated, slightly reducing impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is overly verbose and repetitive. It repeats parameter descriptions, route-resolution details, and the concept of depth multiple times. It could be streamlined to half its length without losing essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description compensates for the lack of an output schema by describing the return structure (array of endpoint slices with route, handler, call chain, SQL, env fields) and the not-found case (found:false with suggestion). It also explains the refresh behavior, making it fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides descriptions for all four parameters, and the description repeats these almost verbatim. It adds minimal extra clarification (e.g., depth meaning, mermaid alternative) but does not significantly enhance understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool builds a full vertical slice for one HTTP route, listing the specific outputs (handler symbol, BFS call chain, SQL queries, env vars). It differentiates from sibling tools by focusing on a single route and its end-to-end behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidance via 'WHEN TO USE' and 'NOT TO USE' sections, naming alternatives like gograph_routes for listing all routes and gograph_source for raw source code. This gives clear direction on when to choose this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_envsARead-onlyIdempotent
Find all environment variable reads in the codebase via os.Getenv, os.LookupEnv, and common config frameworks, with their enclosing function context. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. Optional term filters by key name substring (e.g., "DATABASE" matches DATABASE_URL and DATABASE_HOST). WHEN TO USE: When compiling a deployment configuration manifest, documenting required env vars, or auditing what secrets a service reads at startup. NOT TO USE: For reading actual runtime env values (this is static analysis); for database queries (use gograph_sql). RETURNS: List of env key names, calling function, and file/line; empty when no env reads match the filter.
| Name | Required | Description | Default |
|---|---|---|---|
| term | No | Optional filter term (e.g., 'DATABASE' matches DATABASE_URL, DATABASE_HOST, etc.) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. The description adds detail on freshness checks, analysis mode refreshes, and retry behavior for precise/precise_fallback graphs, going beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (WHEN TO USE, NOT TO USE, RETURNS). It is concise, every sentence serves a purpose, and the main functionality is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a static analysis tool with one optional parameter and no output schema, the description covers purpose, usage guidelines, parameter semantics, and return values (list of env key names, calling function, file/line). No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single optional parameter. The description adds valuable context: the `term` filters by key name substring with an example (e.g., 'DATABASE' matches DATABASE_URL and DATABASE_HOST), clarifying fuzzy matching behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Find' and the resource 'environment variable reads', specifying the exact functions (os.Getenv, os.LookupEnv) and config frameworks. It distinguishes from sibling tools like gograph_sql, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit WHEN TO USE and NOT TO USE sections are provided, listing concrete scenarios like compiling deployment manifests or auditing secrets, and excluding runtime env reading or database queries with an alternative tool reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_errorflowARead-onlyIdempotent
Trace how a named error sentinel or error message string is defined, returned, and propagates up the call graph toward HTTP handlers or CLI entry points. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. Accepts either query (preferred) or term as the error name or message substring. WHEN TO USE: When auditing how a specific error is produced and handled end-to-end — find definition sites, all return sites, and upstream propagation paths (e.g., ErrNotFound). NOT TO USE: For general upstream traversal of any function (use gograph_callers or gograph_impact); for listing all error definitions (use gograph_errors). RETURNS: Definition sites, return sites, propagation path chains, and related test names; paths is empty when no propagation chain is found. Note: heuristic analysis — does not perform SSA or full data-flow tracking.
| Name | Required | Description | Default |
|---|---|---|---|
| term | No | The error string or sentinel error name (e.g., 'ErrInvalidToken' or 'invalid token') | |
| query | No | The error string or sentinel error name (preferred over term) | |
| no_tests | No | If true, exclude test files from related-test collection (matches CLI --no-tests) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds important behavioral context: freshness checks, retry of CHA/SSA after source changes, and that it's heuristic without full SSA or data-flow tracking. This exceeds annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections but slightly verbose. It front-loads the core purpose and clearly separates usage guidelines and return information. Efficient but could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description specifies what is returned (definition sites, return sites, propagation paths, test names) and explains edge cases (paths empty when no chain). It also notes the heuristic limitation. Complete for a complex analysis tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description adds nuance: 'query' is preferred over 'term', and explains the boolean 'no_tests' excludes test files. This provides helpful guidance beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool traces how a named error sentinel or string is defined, returned, and propagates up the call graph toward HTTP handlers or CLI entry points. It distinguishes from siblings by explicitly saying not for general upstream traversal (use gograph_callers or gograph_impact) and not for listing errors (use gograph_errors).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit WHEN TO USE section describes auditing a specific error end-to-end, and NOT TO USE section provides alternatives for general traversal and error listing. This gives clear guidance on appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_errorsARead-onlyIdempotent
Find all error and panic sites in the codebase: errors.New, fmt.Errorf, sentinel var declarations, and panic calls. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. Optional term filters by message substring (e.g., "ErrInvalid", "unauthorized"). WHEN TO USE: When cataloging error codes and panic paths, standardizing error messages, or checking whether a specific error string is already defined before adding a new one. NOT TO USE: For tracing how an error propagates up the call stack (use gograph_errorflow instead). RETURNS: List of error or panic sites with message text, file path, and line number; empty when no matches found.
| Name | Required | Description | Default |
|---|---|---|---|
| term | No | Optional keyword to filter the returned error structures (e.g., 'ErrInvalid', 'unauthorized') | |
| no_tests | No | Exclude error sites in *_test.go files |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly/idempotent/destructive hints, but the description adds meaningful operational behavior: freshness checking, refresh in requested analysis mode, CHA/SSA retry for precise graphs, and explicit 'Read-only; no side effects.' This goes well beyond the structured metadata and provides context an agent needs for execution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized with labeled sections (WHEN TO USE, NOT TO USE, RETURNS) and no redundant sentences. Every sentence conveys distinct information, and the most critical purpose statement is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description compensates by specifying the return shape (list of sites with message, file path, line number) and empty-result behavior. It also covers freshness/read-only semantics and usage context, making it complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining term filters by 'message substring' with examples ('ErrInvalid', 'unauthorized'). However, it does not mention the no_tests parameter, though the schema does document it; this is a minor gap given the schema already describes it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Find all error and panic sites') and enumerates the exact code patterns covered (errors.New, fmt.Errorf, sentinel var declarations, panic calls). It clearly distinguishes this tool from sibling gograph_errorflow by stating it catalogs error sites, not propagation paths.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'WHEN TO USE' and 'NOT TO USE' sections provide concrete use cases (cataloging error codes, standardizing messages, checking before defining a new error) and name the alternative (gograph_errorflow for tracing propagation). This is exemplary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_explainARead-onlyIdempotent
Generate a synthesized, LLM-ready narrative for a Go symbol: role classification, callers, callees, complexity, SQL, env vars, HTTP routes, concurrency primitives, tests, and interface satisfaction — all in one structured document. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: For onboarding to an unfamiliar symbol, generating PR documentation, or getting an opinionated architectural assessment without issuing multiple tool calls. NOT TO USE: For raw source code (use gograph_source); for targeted blast-radius analysis (use gograph_impact). RETURNS: Rich structured JSON with role, narrative summary, and all associated cross-references; {"found":false} when symbol is not in the graph.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | The name or ID of the symbol to explain (supports short name 'CreateUser', dot-notation 'graph.Graph', or fully-qualified ID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Read-only; no side effects,' which aligns perfectly with annotations (readOnlyHint=true, destructiveHint=false). It also discloses caching and freshness behavior, explaining that the server checks freshness and retries CHA/SSA after source changes, adding significant context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections and front-loads the purpose. It is slightly verbose in listing all included aspects, but each sentence adds value and does not waste space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description sufficiently describes the return value: rich structured JSON with role, narrative, cross-references, and a not-found indicator. Given the tool's complexity and number of siblings, the description is complete enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (symbol) exists with 100% schema description coverage. The description adds value by enumerating the supported formats (short name, dot-notation, fully-qualified ID), which is useful but not required. Baseline 3 is elevated to 4 due to this extra context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Generate' and specifies the exact resource: a synthesized, LLM-ready narrative for a Go symbol with a detailed list of included aspects (role classification, callers, callees, etc.). It clearly distinguishes from siblings like gograph_source and gograph_impact by contrasting use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit 'WHEN TO USE' and 'NOT TO USE' sections, providing clear context for when the tool is appropriate (onboarding, PR docs, architectural assessment) and when alternatives like gograph_source or gograph_impact should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_fieldsARead-onlyIdempotent
Extract all declared fields from a named Go struct: field names, Go types, and raw struct tag strings (json, db, yaml, gorm, etc.). The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: When mapping JSON/DB serialization tags, inspecting struct layouts, or enumerating fields before adding a new one. NOT TO USE: For methods on the struct (use gograph_node or gograph_source); for all struct initialization sites (use gograph_literals). RETURNS: Array of field entries with name, type, and tag string; empty when the struct is not found.
| Name | Required | Description | Default |
|---|---|---|---|
| struct | Yes | The exact name of the target struct to inspect fields for (e.g., 'Config', 'User') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes freshness checking, retry behavior in analysis modes, and confirms read-only with no side effects, adding context beyond the readOnlyHint, idempotentHint, and destructiveHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with separate sections, but slightly verbose. Could be trimmed while retaining key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all necessary information: purpose, usage guidance, behavioral traits, parameter description, and return format ('Array of field entries'). No output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'struct' is fully described in the schema (100% coverage). The description adds minimal extra meaning (e.g., 'named Go struct'), so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it extracts declared fields from a named Go struct, listing field names, types, and tag strings. It distinguishes from siblings like gograph_node and gograph_literals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides 'WHEN TO USE' and 'NOT TO USE' sections with specific examples (mapping serialization tags, inspecting layouts vs. methods/initialization sites).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_fixturesARead-onlyIdempotent
Find test helper structs and factory/builder functions declared in *_test.go files for a named package. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: Before writing new tests — check what test infrastructure (helper builders, stub factories, shared setup structs) already exists in the package to avoid duplication. NOT TO USE: For test functions that exercise a symbol (use gograph_tests); for external test data files on disk (those are not tracked in the graph — use filesystem search). RETURNS: Symbols defined in test files for the package including helper structs and factory functions; empty when the package has no test helper infrastructure.
| Name | Required | Description | Default |
|---|---|---|---|
| package | Yes | The package path or name (e.g., 'internal/auth') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses read-only nature, freshness checking, and refresh behavior in different analysis modes. Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds valuable context about graph mode specifics and retry behavior, exceeding the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (action, behavior, usage guidance, return value) and front-loaded with the primary purpose. While slightly verbose, every sentence adds value and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter, rich annotations, and no output schema, the description covers purpose, behavioral traits, usage boundaries, and return type comprehensively. It fully informs the agent about what the tool does and when to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, baseline is 3. The description adds meaning by explaining the parameter is used to find test infrastructure in the named package, specifically targeting test files, which goes beyond the schema description of 'package path or name'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds test helper structs and factory/builder functions in *_test.go files for a named package. It distinguishes from sibling tools like gograph_tests and filesystem search, making the purpose specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit 'WHEN TO USE' and 'NOT TO USE' sections, guiding the agent to use it before writing tests to avoid duplication, and not for test functions or external test data files. This provides clear context for when to select this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_flowARead-onlyIdempotent
Find potential untrusted-data paths from HTTP request objects, decoded JSON values, or environment variables to SQL query text, process execution arguments, filesystem paths, or outbound HTTP targets. The MCP server refreshes source analysis before this call; run gograph build . --precise first for stronger method/interface targets. Read-only; no side effects. WHEN TO USE: During a security review or before changing request parsing, command execution, file access, SQL construction, or URL handling. NOT TO USE: As proof of exploitability; the analysis is path-insensitive and matches call/return context for at most 16 nested repository calls. RETURNS: Structured findings with source, sink, severity, confidence, and path steps. Configure trusted return-value sanitizers in .gograph/flow.json or with config.
| Name | Required | Description | Default |
|---|---|---|---|
| sink | No | Optional sink kind: sql_query, process_execution, filesystem, or outbound_http | |
| term | No | Optional substring filter matched against functions, files, endpoints, and path steps | |
| config | No | Sanitizer policy path inside the graph root (default .gograph/flow.json when present) | |
| source | No | Optional source kind: http_request, decoded_json, or environment | |
| no_tests | No | Exclude functions in *_test.go files |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive. Description adds: MCP server refreshes source analysis before call, and the tool has no side effects. It explains what the analysis does and doesn't do (path-insensitive). Adds value beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with clear sections, front-loaded with purpose. It is informative but slightly verbose in the limitations part. Every sentence adds value; no wasted words. Could be tightened but still concise enough.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has 5 optional params, no output schema. Description compensates by stating returns include source, sink, severity, confidence, path steps. Provides context about analysis being path-insensitive and depth limit. Covers usage, limitations, and returns adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter having a description. The description adds marginal context: mentions configuring sanitizer policy via .gograph/flow.json for the config parameter. Baseline 3 is appropriate as schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it finds potential untrusted-data paths from specific sources (HTTP requests, JSON, env vars) to specific sinks (SQL queries, process execution, etc.). It uses a specific verb-resource pair. However, it does not explicitly differentiate from sibling tools, which are numerous but mostly unrelated to data-flow analysis. Slight deduction for lack of sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes explicit 'WHEN TO USE' and 'NOT TO USE' sections, providing clear context and exclusions. It specifies appropriate scenarios (security review) and warns against misuse (as proof of exploitability). Also notes limitations (path-insensitive, 16-call depth). Perfect guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_focusARead-onlyIdempotent
Extract a comprehensive structural summary of one Go package: all files, defined symbols, internal call edges, and package-level imports. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: When orienting to an unfamiliar package before editing it — provides a full map of what the package contains and how it connects to the rest of the codebase. NOT TO USE: For a single symbol's details (use gograph_context or gograph_source); for global keyword searches (use gograph_query). RETURNS: All files, symbol names, call edges, and import paths within the package; empty when the package is not found.
| Name | Required | Description | Default |
|---|---|---|---|
| package | Yes | The package path or name to focus on (e.g., 'internal/auth') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint, idempotentHint), the description adds that the server checks freshness and may retry CHA/SSA after source changes, and explicitly states 'read-only; no side effects'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with sections and front-loaded key info, but is slightly verbose with multiple paragraphs. However, every sentence adds value, so it earns a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one required param, no output schema, and comprehensive annotations, the description fully covers what the tool returns (files, symbols, edges, imports) and edge cases (empty when not found), making it complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for one parameter 'package'. The description adds a concrete example ('internal/auth') and clarifies it can be a path or name, adding slight value beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Extract a comprehensive structural summary of one Go package' with specific deliverables: files, symbols, call edges, imports. It distinguishes from siblings by contrasting with single-symbol tools (gograph_context, gograph_source) and global search (gograph_query).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes explicit 'WHEN TO USE' and 'NOT TO USE' sections, giving clear context for orientation before editing and exclusions for symbol-level or global queries, with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_globalsARead-onlyIdempotent
Find package-level variable declarations (var blocks) and the functions that mutate them in a specific package. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: When auditing mutable global state, identifying thread-safety hazards, or locating shared singleton variables before a concurrency refactor. NOT TO USE: For local-scope variables; for environment variable reads (use gograph_envs). RETURNS: Package-level variable names, types, and the functions that write to them; empty when the package has no package-level variables.
| Name | Required | Description | Default |
|---|---|---|---|
| package | Yes | The package name or path to inspect (e.g., 'internal/config') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint, openWorldHint. The description adds context about freshness checks and retry behavior for precise modes, which exceeds annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections but is slightly verbose due to multiple paragraphs. It is front-loaded with the core purpose and efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter, no output schema, and rich annotations, the description covers purpose, use cases, behavioral details, and return value expectations completely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for the 'package' parameter. The description does not add meaningful semantics beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'find' and the resource 'package-level variable declarations and the functions that mutate them'. It differentiates from siblings by explicitly excluding local-scope variables and environment variable reads, directing users to gograph_envs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes explicit WHEN TO USE (auditing mutable global state, thread-safety hazards, shared singleton variables) and NOT TO USE (local-scope variables, env var reads) sections, providing clear guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_godobjARead-onlyIdempotent
Detect God Object anti-pattern candidates by scoring structs on method count, field count, and outgoing call count. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. Thresholds: methods (default: 5), fields (default: 8), calls (default: 15); top limits results (default: 10). Exceeding any enabled threshold qualifies a struct, and the combined excess determines rank. WHEN TO USE: During architecture reviews to find monolithic structs that should be decomposed. NOT TO USE: For general struct layout inspection (use gograph_fields); for single-function complexity (use gograph_complexity). RETURNS: Ranked candidates with method, field, and call counts; empty when no threshold is exceeded.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum results to return (default: 10) | |
| calls | No | Minimum outgoing call count (default: 15) | |
| fields | No | Minimum field count (default: 8) | |
| methods | No | Minimum method count (default: 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Read-only; no side effects.' Beyond that, it adds valuable operational context: the MCP server checks freshness, refreshes in the requested analysis mode, and retries CHA/SSA after source changes for precise graphs. No contradictions with annotations; the extra context enhances transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, behavior, thresholds, when to use, returns). It is longer than the high-reference example but every sentence contributes useful information. Slightly verbose, but the structure and front-loaded purpose make it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a moderately complex analysis tool. It covers purpose, thresholds and qualification logic, freshness/refresh behavior, usage guidelines, alternatives, and return format ('Ranked candidates with method, field, and call counts; empty when no threshold is exceeded'). No output schema exists, so describing returns is necessary and done well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all four parameters with descriptions and defaults (coverage 100%). The description goes further by explaining the qualification logic: 'Exceeding any enabled threshold qualifies a struct, and the combined excess determines rank.' It also restates defaults and clarifies that top limits results, adding semantic meaning beyond the schema's simple 'Minimum ...' labels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Detect God Object anti-pattern candidates by scoring structs on method count, field count, and outgoing call count.' This clearly states what the tool does and highlights the unique scoring criteria, distinguishing it from sibling tools. The NOT TO USE section further clarifies its scope by contrasting with gograph_fields and gograph_complexity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
WHEN TO USE is explicitly stated: 'During architecture reviews to find monolithic structs that should be decomposed.' NOT TO USE provides concrete alternatives: 'For general struct layout inspection (use gograph_fields); for single-function complexity (use gograph_complexity).' This is an exemplary model of when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_hotspotARead-onlyIdempotent
Rank functions by incoming call count (fan-in) to identify the most-depended-on symbols in the codebase. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. top controls result count (default: 10; 0 = all). Set include_tests=true to count test-file call edges — by default excluded so test helpers don't dominate rankings in test-heavy codebases. WHEN TO USE: When deciding where to invest refactoring effort or documentation — high fan-in functions are the highest-risk change targets. NOT TO USE: For single-package metrics (use gograph_focus or gograph_coupling); for complexity scores (use gograph_complexity). RETURNS: Ranked list of function names with fan-in count and package location.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Number of results to return (default: 10, 0 = all) | |
| include_tests | No | Include call edges from *_test.go files. Default false — production fan-in only, otherwise test helpers (baseReq, newTestFoo, etc.) tend to dominate rankings in test-heavy codebases. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, destructiveHint, but the description adds valuable context about freshness checking, mode-specific retry of CHA/SSA, and the rationale for excluding test files. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (main purpose, behavior, parameters, WHEN/NOT TO USE, RETURNS). Every sentence adds value without fluff, and the length is appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the RETURNS section specifies what the agent should expect: 'Ranked list of function names with fan-in count and package location.' Combined with behavior, params, and usage guidance, the description is fully self-contained for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema covers 100% of parameters, the description adds meaningful semantics: 'top' default and 0 meaning, and include_tests explains why test helpers are excluded by default ('otherwise test helpers ... tend to dominate rankings'). This enriches the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Rank functions by incoming call count (fan-in)' which precisely identifies the tool's function. It also distinguishes it from siblings by noting alternatives in the NOT TO USE section, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit WHEN TO USE and NOT TO USE sections, naming specific alternative tools: gograph_focus, gograph_coupling, gograph_complexity. This clearly guides the agent on when to select this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_httpcallsARead-onlyIdempotent
Find all outbound HTTP client calls detected in the codebase via net/http package-level functions: http.Get, http.Post, http.PostForm, http.Head. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. Optional term filters by method, URL, or function name substring. WHEN TO USE: When auditing external API dependencies, understanding which services your code calls, or identifying all outbound HTTP traffic. NOT TO USE: For HTTP server route definitions (use gograph_routes). RETURNS: List of HTTP method, URL, static path segments, dynamic flag, calling function, and file/line; empty when no HTTP client calls match.
| Name | Required | Description | Default |
|---|---|---|---|
| term | No | Optional filter term (matches method, URL, or function name — e.g., 'POST' or 'api.example.com') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations: freshness checking, retry behavior in precise modes, and explicitly states 'Read-only; no side effects'. Annotations already provide readOnlyHint and idempotentHint, but the description adds meaningful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections (WHEN TO USE, NOT TO USE, RETURNS) and is front-loaded with the main functionality. It is slightly verbose in the freshness detail but each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description provides complete context: purpose, usage guidelines, behavioral details, and return value description. It adequately prepares the agent to select and invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with a description for the 'term' parameter. The description in the tool text adds value by providing concrete examples ('e.g., 'POST' or 'api.example.com''), which goes beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Find all outbound HTTP client calls detected in the codebase via net/http package-level functions'. It specifies the verb, resource, and scope, and distinguishes from sibling tool gograph_routes (HTTP server routes).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
WHEN TO USE and NOT TO USE sections explicitly provide usage context. It suggests using the tool for auditing external API dependencies and identifying outbound HTTP traffic, and explicitly says not to use it for HTTP server route definitions (use gograph_routes).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_identityARead-onlyIdempotent
Resolve an exact Go symbol spelling or canonical stable ID to location-independent symbol identity plus current source location. Canonical IDs are module import path + receiver/name and survive line shifts and file moves within the same package; package/module moves, receiver changes, and renames change the ID. Ambiguous short names return every candidate and never select one silently. An optional exact package qualifier disambiguates the uncommon in-package versus external foo_test ID collision. The MCP server refreshes the graph first. Read-only; no side effects. WHEN TO USE: Before persisting cross-document references or to re-resolve an existing stable ID. RETURNS: gograph.identity.v1 JSON with status exact, ambiguous, or not_found and deterministic matches.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Exact symbol name, package/receiver-qualified spelling, or canonical stable ID | |
| package | No | Optional exact Go package name used to disambiguate matching symbols |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry read-only, idempotent, and non-destructive hints, so the description still adds meaningful context: the MCP server refreshes the graph first, canonical IDs survive line shifts but change on significant refactors, ambiguous names return all candidates instead of silently picking one. The 'read-only; no side effects' line matches annotations and adds no conflict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose before complexity, and uses clear structural markers (all caps WHEN TO USE, RETURNS). It is dense, though perhaps slightly longer than minimal, with the canonical-ID mechanism explanation adding context that directly affects downstream usage rather than being filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only two-parameter tool with no output schema, the description sufficiently explains the return envelope (gograph.identity.v1 JSON), the status cases (exact, ambiguous, not_found), deterministic behavior, and how the optional parameter resolves collisions. An agent could confidently invoke this for the intended use case without additional clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions are complete for both fields, and the description layers on meaning beyond the schema: it explains that the symbol can be an exact name, qualified spelling, or canonical stable ID, and that the package parameter specifically disambiguates a known in-package/external ID collision. This gives an agent richer decision-making for both parameters than the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific operation ('Resolve') and resource ('Go symbol spelling or canonical stable ID') and clearly separates it from siblings by emphasizing location-independent symbol identity plus current source location, not merely looking up a graph node. It explicitly notes the handling of ambiguous short names, which further distinguishes its behavior from other graph tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear WHEN TO USE statement ('Before persisting cross-document references or to re-resolve an existing stable ID') that gives an agent actionable context for invoking the tool. It does not explicitly name alternatives or list when-not-to-use conditions, so it falls short of the strongest possible guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_impactARead-onlyIdempotent
Traverse the call graph backwards to find every symbol that transitively calls the target — the full upstream blast radius of a change. The MCP server checks freshness before the call. Read-only; no side effects. Three modes: (1) single symbol via symbol; (2) uncommitted changes via uncommitted=true; (3) git-ref changes via since. WHEN TO USE: Before refactoring a core function to see what breaks. NOT TO USE: For direct one-hop callers only (use gograph_callers). RETURNS: Transitive upstream affected symbols; with mermaid=true, Mermaid flowchart text; count:0 JSON when no changed symbols exist.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Git ref (e.g. 'main', 'HEAD~5'): blast radius of all symbols changed since this ref | |
| symbol | No | Symbol name for single-symbol blast radius (supports short name 'ValidateToken', dot-notation 'graph.Graph', or fully-qualified ID) | |
| mermaid | No | Return Mermaid flowchart text instead of the normal response | |
| uncommitted | No | If true, compute blast radius of all uncommitted modified symbols |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds context by noting 'The MCP server checks freshness before the call' and describing return behavior including 'count:0 JSON when no changed symbols exist.' This goes beyond the annotations, though it doesn't cover all possible edge cases (e.g., rate limits).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place. The description is front-loaded with the primary purpose, then structures modes, usage guidance, and return behavior with clear labels (WHEN TO USE, NOT TO USE, RETURNS). It provides substantive information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description must explain return values—and it does: 'Transitive upstream affected symbols; with mermaid=true, Mermaid flowchart text; count:0 JSON when no changed symbols exist.' It also explains freshness checking and differentiates from a sibling, making the description complete for this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so schema descriptions carry the load for parameter formats. The description adds value by mapping parameters to usage modes: 'single symbol via symbol; uncommitted changes via uncommitted=true; git-ref changes via since.' This explains when each parameter is relevant, which is not fully captured in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Traverse the call graph backwards to find every symbol that transitively calls the target — the full upstream blast radius of a change.' It clearly distinguishes from siblings by explicitly saying NOT to use for direct one-hop callers (use gograph_callers).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
WHEN TO USE is explicit: 'Before refactoring a core function to see what breaks.' NOT TO USE is also explicit: 'For direct one-hop callers only (use gograph_callers).' The three modes (symbol, uncommitted, since) further clarify when each parameter is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_implementersARead-onlyIdempotent
Find all concrete structs that implement a named Go interface via duck-typing (structs whose method set is a superset of the interface's methods). The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. Set test_only=true to restrict to structs in *_test.go files (mocks/stubs). WHEN TO USE: When tracing polymorphism, locating dependency injection points, or finding all mock implementations of an interface. NOT TO USE: For interfaces a struct satisfies — inverse direction (use gograph_interfaces instead); for struct fields (use gograph_fields). RETURNS: List of implementing struct names with package paths and file locations; empty when no struct implements the interface.
| Name | Required | Description | Default |
|---|---|---|---|
| interface | Yes | The name of the interface (e.g., 'AuthService') | |
| test_only | No | If true, return only structs defined in test or mock files (replaces gograph_mocks) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds value by explaining server-side refresh behavior: 'checks freshness... refreshes in current analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes.' This contextualizes behavior beyond standard annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with logical sections: core purpose, technical detail, usage guidelines, return format. It is front-loaded with the main action. While slightly lengthy, every sentence provides value and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 parameters, rich annotations, and no output schema, the description adequately covers key aspects: refresh behavior, return format ('List of implementing struct names with package paths and file locations; empty when no struct implements'), and parameter semantics. It is complete enough for effective agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters documented. The description enhances the 'test_only' parameter by explaining its purpose: 'restrict to structs in *_test.go files (mocks/stubs).' This adds specific usage context beyond the schema's generic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Find all concrete structs that implement a named Go interface via duck-typing.' It specifies a precise verb (Find), resource (concrete structs implementing an interface), and method (duck-typing). It also differentiates from siblings like gograph_interfaces and gograph_fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'WHEN TO USE' and 'NOT TO USE' sections, listing use cases (polymorphism tracing, DI points, mock finding) and alternatives (gograph_interfaces for inverse direction, gograph_fields for struct fields). This guidance is precise and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_importsARead-onlyIdempotent
Find all files and packages in the codebase that import a specific package by its exact import path. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: When isolating usage of a third-party library before removing or replacing it, or tracing where an internal package is consumed from outside. NOT TO USE: For a package's own outgoing imports (use gograph_deps); for reverse package-level dependency lookup by short name (use gograph_dependents). RETURNS: File paths and package names of all importers; empty when the package is imported nowhere.
| Name | Required | Description | Default |
|---|---|---|---|
| package | Yes | The exact import path of the target package to trace imports for (e.g., 'github.com/redis/go-redis') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent, but the description adds significant behavioral context: the MCP server checks freshness before the call, refreshes in the current analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes. It also states 'Read-only; no side effects' and describes empty return semantics, going well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose in the first sentence. Subsequent sentences are logically grouped into behavior, read-only status, and clearly labeled WHEN/NOT TO USE/RETURNS sections. Every sentence earns its place, with zero redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter with complete schema coverage and no output schema, the description compensates by explaining return values ('File paths and package names of all importers; empty when the package is imported nowhere'). It covers purpose, usage, behavior, and return semantics comprehensively for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the parameter already described as 'The exact import path'. The description reinforces 'exact' but doesn't add new format, constraints, or examples beyond the schema. The short-name contrast in NOT TO USE is a usage guideline, not parameter semantics, so the description adds marginal value here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Find all files and packages in the codebase that import a specific package by its exact import path' – a specific verb ('Find') and resource ('files and packages that import a package'). The NOT TO USE section further distinguishes it from sibling tools like gograph_deps and gograph_dependents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit WHEN TO USE (isolating third-party library usage, tracing internal package consumption) and NOT TO USE with named alternatives (gograph_deps for outgoing imports, gograph_dependents for reverse lookup by short name). This leaves no ambiguity about when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_interfacesARead-onlyIdempotent
Find all Go interfaces satisfied by a named concrete struct (duck-typing resolution — inverse of gograph_implementers). Given a struct name, returns every interface whose complete method set is a subset of that struct's methods. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: When you need to know which contracts a struct implicitly fulfills — useful before refactoring a method to understand which interface contracts will break. NOT TO USE: For finding structs that implement an interface (use gograph_implementers); for listing interface declarations in a package (use gograph_node or gograph_public). RETURNS: Interface names, method signatures, and file locations; empty when the struct satisfies no known interfaces.
| Name | Required | Description | Default |
|---|---|---|---|
| struct | Yes | The name of the struct (e.g., 'AuthService') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds context about freshness checks, mode-dependent retry behavior (CHA/SSA after source changes), and reaffirms 'Read-only; no side effects', which aligns with annotations and adds value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose first, then behavioral details, usage guidelines, and returns. It is informative without being overly verbose; however, it could be slightly more concise by merging the freshness check details into fewer sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one simple parameter and no output schema, the description covers all essential context: operation, input, usage guidance, behavioral details (freshness, retries), return values, and edge cases (empty result). It is comprehensive for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'struct' has 100% schema description coverage. The description says 'Given a struct name' which is essentially the same as the schema's 'The name of the struct'. No additional semantic meaning beyond the schema is provided, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Find all Go interfaces satisfied by a named concrete struct'), the resource (struct), and explicitly distinguishes from the sibling tool gograph_implementers by calling itself the inverse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'WHEN TO USE' and 'NOT TO USE' sections, giving concrete scenarios and naming alternative tools (gograph_implementers, gograph_node, gograph_public) for different tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_literalsARead-onlyIdempotent
Find every composite-literal initialization site for a named Go struct — all locations where Foo{...} syntax is used to construct the struct. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: Before adding a required field to a struct — every site returned will fail to compile if the new field has no default; run this first to scope the migration blast radius. NOT TO USE: For finding string or integer magic values (use gograph_envs or grep for those); for factory functions that return the struct (use gograph_constructors). RETURNS: All file paths and line numbers where the named struct is composite-initialized; empty when the struct has no direct initialization sites.
| Name | Required | Description | Default |
|---|---|---|---|
| struct | Yes | The name of the struct (e.g., 'User') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, but the description adds meaningful behavioral details beyond them: freshness checks, mode-specific refreshing, and CHA/SSA retry behavior. It also discloses return semantics (empty when no sites). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (WHEN TO USE, NOT TO USE, RETURNS) and front-loaded purpose. Each sentence contributes value, and the formatting aids scanning. Though moderately long, the complexity of the tool justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single-parameter tool with no output schema, the description fully covers required information: what it returns (file paths and line numbers), empty-result behavior, and relevant execution context (freshness/refresh). Combined with the strong annotations and schema, the description is complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, describing the single parameter as 'The name of the struct (e.g., 'User').' The description adds little beyond restating 'named Go struct' and the Foo{...} example, which does not materially enhance parameter understanding. Baseline 3 is appropriate when structured schema already fully documents the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find every composite-literal initialization site for a named Go struct,' and clarifies the exact syntax pattern (Foo{...}). It also explicitly distinguishes itself from sibling tools by stating what it is NOT for (magic values via gograph_envs, factory functions via gograph_constructors), eliminating ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit WHEN TO USE guidance ('Before adding a required field to a struct') and NOT TO USE guidance with named alternative tools. This gives the agent clear decision rules for selecting this tool versus relevant siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_mocksARead-onlyIdempotent
Find structs in *_test.go files that implement a named interface — test doubles, mocks, and stubs. Equivalent to gograph_implementers with test_only=true; kept for compatibility. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: When writing tests and wanting to find existing mock implementations before creating a new one. NOT TO USE: For production interface implementers (use gograph_implementers without test_only); prefer gograph_implementers(test_only=true) for new code. RETURNS: Test-file struct names implementing the interface with file locations; empty when no test mocks exist for the interface.
| Name | Required | Description | Default |
|---|---|---|---|
| interface | Yes | The name of the interface (e.g., 'AuthService') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description reinforces read-only, no side effects, and adds details on server freshness checks and retry behavior for precise modes. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with clear sections but slightly verbose. Could be shortened without losing meaning, but overall efficient for the information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one required parameter and no output schema, description explains return values (struct names with file locations, empty when no mocks). Covers behavioral context, freshness, and use cases adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter 'interface' with schema description 'The name of the interface (e.g., 'AuthService')'. Schema coverage is 100%, so description adds minimal value beyond schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it finds structs in test files implementing a named interface (test doubles, mocks, stubs). It explicitly distinguishes itself from gograph_implementers by noting equivalence with test_only=true and compatibility reason.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit WHEN TO USE (when writing tests, want to find existing mock implementations) and NOT TO USE (for production implementers, use gograph_implementers; prefer gograph_implementers(test_only=true) for new code). Also explains freshness checks and refresh behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_mutateARead-onlyIdempotent
Find struct-field and package-global mutation sites. Use Type.Field to exclude same-named fields on unrelated types; ordinary local-variable assignments are excluded. The MCP server refreshes in the current requested analysis mode; a precise graph adds ++/+=, pointer-alias, atomic/sync/wrapper, and channel mutations and re-runs that analysis after source edits. Read-only; no side effects. WHEN TO USE: Diagnosing state changes or auditing mutability. NOT TO USE: For field declarations (gograph_fields) or whole-struct initialization (gograph_literals). RETURNS: Mutation locations and indirect mutator method names when applicable.
| Name | Required | Description | Default |
|---|---|---|---|
| field | Yes | The field name to search for mutations (e.g., 'Status') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds significant context beyond that, explaining the two analysis modes (precise graph vs. standard), what mutations are detected (++/+=, pointer-alias, etc.), and that it re-runs analysis after source edits, all while reaffirming read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an opening sentence, then explanatory details, then usage guidance, and finally return info. Every sentence adds value, though it is slightly verbose. It is not overly long and is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description clearly states what is returned ('mutation locations and indirect mutator method names when applicable'). It also explains the two analysis modes and the refresh behavior, providing a complete picture for an agent to understand inputs, behavior, and outputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides a description for the single 'field' parameter (e.g., 'Status'), but the description adds important context on how to use it: 'Use Type.Field to exclude same-named fields on unrelated types'. This goes beyond the schema's basic example, justifying a score above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds 'struct-field and package-global mutation sites' with a specific verb 'find' and resource 'mutation sites'. It distinguishes from siblings by excluding field declarations (gograph_fields) and whole-struct initialization (gograph_literals) in the NOT TO USE section.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit 'WHEN TO USE' and 'NOT TO USE' sections, providing clear context for diagnosing state changes or auditing mutability, and explicitly excludes use for field declarations or whole-struct initialization. It also advises using Type.Field to avoid false positives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_nodeARead-onlyIdempotent
Fetch AST metadata for a named symbol, package, or file: kind, file path, line number, full signature, doc comment, and struct fields if applicable. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: When you need structural metadata (kind, signature, line number) without the full source body — lighter than gograph_source for metadata-only lookups. NOT TO USE: For full source code (use gograph_source); for call relationships (use gograph_callers/gograph_callees). RETURNS: Node properties array with kind, file, line, and signature; empty when the name is not found.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The exact symbol, package path, or Go file name to inspect (e.g., 'Graph', 'internal/search', 'server.go') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds valuable behavioral context: the server checks freshness before the call, refreshes in the current analysis mode, and precise graphs retry CHA/SSA after source changes. It confirms read-only and no side effects, aligning with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (6 sentences) and well-structured with clear sections: main purpose, caching behavior, usage guidelines, and return information. Every sentence adds value and is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple schema (one parameter with good description) and rich annotations, the description provides a complete picture: what the tool does, when to use it (including alternatives), behavioral details (caching, freshness), and return values (array with kind, file, line, signature; empty if not found). No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single required parameter 'name' is fully described in the schema with an explanation and examples. The description does not add additional semantic detail beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Fetch' and the resource 'AST metadata for a named symbol, package, or file'. It distinguishes from siblings by noting it is 'lighter than gograph_source for metadata-only lookups' and lists the specific metadata attributes (kind, file path, line number, etc.).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit 'WHEN TO USE' and 'NOT TO USE' sections, giving clear context for when to prefer this tool over alternatives like gograph_source for full source code and gograph_callers/gograph_callees for call relationships.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_orphansARead-onlyIdempotent
Find functions and methods unreachable from runtime roots (main/init), test/benchmark/fuzz roots, HTTP route handlers, and eligible externally callable exports; exports confined under internal/ are not roots. Uses full BFS reachability. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: During code cleanup or dead-code audits. NOT TO USE: For checking one symbol's usages (use gograph_usages or gograph_callers). RETURNS: Orphan symbols with package paths and file locations; empty means no unreachable code was detected.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Exceeds annotations by describing full BFS reachability, freshness checks, retry behavior for precise graphs, and confirms no side effects. No contradiction with readOnlyHint or idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, well-structured, front-loaded with purpose, and every sentence adds value. Uses clear sections (WHEN TO USE, NOT TO USE, RETURNS).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description fully covers behavior, use cases, and return value format. Annotations cover safety profile; description adds algorithmic and refresh context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters, so no parameter documentation needed. Description appropriately focuses on tool behavior rather than missing parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states 'Find functions and methods unreachable from runtime roots' with specific scoping (main/init, tests, HTTP routes, exports) and method (BFS reachability). Distinguishes from sibling tools like gograph_usages and gograph_callers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit 'WHEN TO USE' (code cleanup, dead-code audits) and 'NOT TO USE' (checking single symbol's usages, with alternatives named).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_pathARead-onlyIdempotent
Find the shortest BFS call chain from one symbol to another. The MCP server refreshes source analysis before the call. Read-only; no side effects. WHEN TO USE: To confirm reachability between non-adjacent symbols. NOT TO USE: For all transitive upstream callers (use gograph_impact). RETURNS: from, to, found, and steps[]; with mermaid=true, Mermaid flowchart text.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The target symbol name | |
| from | Yes | The starting symbol name | |
| mermaid | No | Return Mermaid flowchart text instead of structured JSON |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive hints. The description adds valuable context about the MCP server refreshing source analysis before the call, which is a non-obvious side effect (e.g., performance or freshness implications). It doesn't contradict annotations and augments them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized, front-loaded with the primary action, and every sentence earns its place. It uses clear labels (WHEN TO USE, NOT TO USE, RETURNS) to organize information without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple tool with no output schema, the description provides a complete picture: purpose, refresh behavior, read-only safety, usage guidance, alternative tool, and return format. It covers all essential aspects an agent needs to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for from, to, and mermaid. The description adds meaning by explaining the effect of mermaid=true and clarifying the structured return fields (from, to, found, steps[]), which helps the agent understand the tool's contract beyond the bare parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find the shortest BFS call chain from one symbol to another.' This clearly distinguishes the tool from siblings by focusing on pathfinding between two symbols, and explicitly contrasts with gograph_impact for transitive upstream reachability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use ('To confirm reachability between non-adjacent symbols') and when-not-to-use guidance ('For all transitive upstream callers') with a named alternative (gograph_impact). This fully addresses usage selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_planARead-onlyIdempotent
Generate a structured pre-edit plan for a target symbol: which symbols to read first, which tests cover them, which routes and env vars they touch, and whether the change is public-API or SQL-touching. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. Set with_context=true to inline full source+callers+callees for each symbol to inspect — eliminates follow-up gograph_context calls. WHEN TO USE: Before multi-file refactoring or architectural changes to understand scope upfront. NOT TO USE: For trivial single-line fixes; for post-edit verification (use gograph_review instead). RETURNS: JSON with inspect_first[], tests[], routes[], env[], and a risk object (public_api, touches_sql, etc.); with with_context=true, also includes inspect_contexts[] with full per-symbol bundles.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | The name of the symbol you intend to modify (supports short name 'ValidateToken', dot-notation 'graph.Graph', or fully-qualified ID) | |
| uncommitted | No | Set to true to generate a global plan for all currently uncommitted changes across the repository | |
| with_context | No | If set to true, bundles full context, source code, callers, callees, and architectural roles for each symbol to be inspected |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, no side effects. The description goes further by noting that precise and precise_fallback graphs retry after source changes, and that the MCP server checks freshness before calling. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: main purpose, freshness/retry note, parameter explanation, usage guidelines, and return format. It is slightly long but earns its length by providing necessary detail without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multi-planning for refactoring), the description covers inputs, behavioral details, usage guidance, and outlines the return JSON structure (inspect_first[], tests[], routes[], env[], risk, and optional inspect_contexts[]). No output schema, but the description compensates adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description adds value by explaining the purpose of each parameter: symbol (short name, dot-notation, fully-qualified), uncommitted (global plan for all uncommitted changes), and with_context (inline full source, callers, callees to avoid follow-up calls).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates a structured pre-edit plan for a target symbol, listing specific outputs (symbols to read, tests, routes, env vars, risk). It distinguishes from siblings by mentioning that it is for upfront planning, while gograph_review is for post-edit verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'WHEN TO USE' and 'NOT TO USE' sections are provided. It recommends using for multi-file refactoring and not for trivial single-line fixes, and names gograph_review as an alternative for post-edit verification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_publicARead-onlyIdempotent
List all exported (public) symbols of a specific package, including functions, methods, types/interfaces, variables, and constants. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: When reviewing a package's public contract before changing it, building integration documentation, or checking what a package exposes to callers. NOT TO USE: For unexported/private symbols (use gograph_node or gograph_focus); for API drift detection against a baseline (use gograph_api). RETURNS: List of exported symbol names with kinds and file locations; empty when the package has no exports or is not found.
| Name | Required | Description | Default |
|---|---|---|---|
| package | Yes | The package name or path to inspect (e.g., 'internal/auth') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/destructive-hints, and the description aligns with 'Read-only; no side effects.' It further discloses freshness-check/refresh behavior and CHA/SSA retry logic, which adds value beyond the annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structured with a purpose sentence, behavioral note, WHEN/NOT sections, and RETURNS. Every sentence provides necessary guidance; it is front-loaded with the core function and uses formatting to aid scanning without being bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully compensates for the lack of an output schema by specifying the return shape (names, kinds, file locations) and edge cases (empty when no exports/not found). Combined with strong annotations and clear usage guidance, the context is complete for this read-only listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the sole 'package' parameter, so the schema already defines it. The description's mention of 'specific package' adds no new semantic detail beyond what is already in the structured schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb+resource: 'List all exported (public) symbols of a specific package' and enumerates the categories (functions, methods, types/interfaces, variables, constants). It clearly distinguishes this from siblings like gograph_node or gograph_api through the public scope and purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit 'WHEN TO USE' and 'NOT TO USE' sections, naming exact alternatives (gograph_node, gograph_focus for private symbols; gograph_api for API drift). This leaves no ambiguity about when to select this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_queryARead-onlyIdempotent
Search the graph index for symbols, packages, files, and import edges that match one or more keyword substrings. Multiple terms use OR semantics, matching CLI query term.... The MCP server refreshes source analysis before the call. Read-only; no persistent side effects. WHEN TO USE: During initial exploration when you have a keyword or feature name but do not know its package. NOT TO USE: When you already know the exact symbol (use gograph_source or gograph_node); for package dependency trees (use gograph_deps). RETURNS: Matching symbols, files, and imports; empty when no terms match.
| Name | Required | Description | Default |
|---|---|---|---|
| term | No | One keyword search term (e.g. 'AuthService') | |
| terms | No | Optional list of keyword terms combined with OR semantics |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds that server refreshes source analysis before call and confirms no side effects, no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, front-loaded with main action, then usage guidelines and return info. Every sentence is necessary and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description adequately specifies return type (matching symbols, files, imports) and empty result. Also mentions source analysis refresh. Complete for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with descriptions for term and terms. Description adds OR semantics explanation and CLI equivalence, providing value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it searches the graph index for symbols, packages, files, and import edges using keyword substrings. Distinguishes from siblings like gograph_source and gograph_deps by specifying use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit WHEN TO USE (initial exploration with keyword) and NOT TO USE (exact symbol or dependency trees) with specific sibling tool names. Provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_returnusageARead-onlyIdempotent
Show how each caller uses the return value(s) of a named function: discarded, assigned, partially ignored, returned upstream, or passed directly to another call. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: Before changing a function's return signature — see which callers ignore the error or only use some return values. NOT TO USE: For error propagation tracing (use gograph_errorflow); for finding all callers without usage detail (use gograph_callers). RETURNS: List of call sites with usage classification (discarded/assigned/partially_ignored/returned/passed); empty when the function has no callers.
| Name | Required | Description | Default |
|---|---|---|---|
| function | Yes | The function name to analyse (e.g., 'ValidateToken') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Read-only; no side effects' and mentions freshness checks and retry behavior. This adds context beyond the annotations which already include readOnlyHint=true, idempotentHint=true, and destructiveHint=false. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections, but it is somewhat verbose. Every sentence adds value, so it earns a 4 for being appropriately sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers when to use, not to use, behavioral details, and return value categories. Despite lacking an output schema, the description fully explains what the tool returns. It is complete for the complexity of the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the single parameter 'function' well-described in the schema. The tool description does not add further detail about the parameter itself, but it explains the output classification. According to guidelines, baseline is 3 for high schema coverage, even without additional param info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Show how each caller uses the return value(s) of a named function: discarded, assigned, partially ignored, returned upstream, or passed directly to another call.' It distinguishes from sibling tools like gograph_callers and gograph_errorflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidelines: 'WHEN TO USE: Before changing a function's return signature... NOT TO USE: For error propagation tracing (use gograph_errorflow); for finding all callers without usage detail (use gograph_callers).' This helps the agent decide when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_reviewARead-onlyIdempotent
Summarize the scope and risk profile of a change: which symbols changed, which tests cover them, which routes and env vars they touch, and whether SQL is involved. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. Requires either symbol or uncommitted=true. WHEN TO USE: After editing — as a post-edit verification step before committing; confirms the blast radius matches expectations. Use uncommitted=true to review all current unstaged changes at once. NOT TO USE: For boundary constraint enforcement (use gograph_boundaries); for pre-edit planning (use gograph_plan). RETURNS: JSON with changed_symbols[], tests[], routes[], env[], errors[], and a risk object (public_api, touches_sql, touches_routes, touches_env).
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | The name of the target symbol to run the design review for (e.g. 'AuthService') | |
| uncommitted | No | Set to true to review all uncommitted/modified changes in the repository |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds behavioral details: freshness checking, refresh in current mode, retry behavior for precise graphs, and explicit 'Read-only; no side effects.' This complements annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections and front-loads the purpose. While detailed, every sentence serves a purpose; it is concise for the complexity but slightly verbose with technical retry details. Minor improvement possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully details the return JSON structure (changed_symbols[], tests[], routes[], etc.) and risk object fields. This gives the agent complete understanding of what the tool returns, making it highly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by stating 'Requires either symbol or uncommitted=true,' clarifying mutual exclusivity/constraint beyond the schema's optional fields. This improves usability.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: summarizing the scope and risk profile of a change, including symbols, tests, routes, env vars, and SQL involvement. It distinguishes itself from siblings like gograph_boundaries and gograph_plan by specifying what it does and does not do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides 'WHEN TO USE' (post-edit verification) and 'NOT TO USE' (boundary enforcement or pre-edit planning) with alternative tool names (gograph_boundaries, gograph_plan). This gives clear guidance on appropriate contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_riskARead-onlyIdempotent
Evaluate the change risk profile of target symbol(s) or uncommitted changes. Combines blast radius, cyclomatic complexity, test coverage, and downstream environment/SQL dependencies into a normalized 0–100 risk score and verdict. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. Requires either symbol or uncommitted=true. WHEN TO USE: Before committing edits or when planning changes to understand the technical risk. NOT TO USE: For post-edit review checklist generation (use gograph_review); for pre-edit plan generation (use gograph_plan). RETURNS: JSON with title, results[] containing risk scores, verdicts, and breakdown metrics, and optional message.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | The name of the target symbol to run the risk evaluation for (e.g. 'AuthService') | |
| uncommitted | No | Set to true to evaluate risk for all uncommitted/modified changes in the repository |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint, idempotentHint), the description adds that the tool combines multiple metrics, returns normalized scores and verdicts, mentions server freshness checks, and retry behavior. It explicitly declares no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear main sentence, followed by details and usage sections. While slightly lengthy, each sentence adds information and no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool (multi-metric evaluation) and absence of an output schema, the description adequately describes the return structure (results with risk scores, verdicts, breakdown metrics) and distinguishes from relevant siblings. It covers all necessary aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The description adds value by highlighting the mutual exclusivity requirement (either symbol or uncommitted=true), which is not obvious from the schema (both optional).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool evaluates change risk profile for symbols or uncommitted changes, listing specific components (blast radius, cyclomatic complexity, etc.) and output format (normalized 0-100 score and verdict). It distinguishes from siblings by naming alternatives (gograph_review, gograph_plan) in the usage sections.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'WHEN TO USE' and 'NOT TO USE' sections provide clear context and point to alternative tools. It also states the mutual exclusivity requirement (either symbol or uncommitted=true).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_routesARead-onlyIdempotent
List all HTTP routes registered in the codebase with their HTTP methods, URL patterns, and handler function names. Constant nested Gin/Echo/Fiber Group prefixes and Chi Route closure prefixes are composed into final paths; dynamically computed prefixes remain unresolved. The MCP server checks content-digest freshness before this call and incrementally refreshes changed package ASTs in the current requested analysis mode; precise and precise_fallback graphs retry repository-wide CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: To get the complete API surface of a service before deep-diving into a specific route with gograph_endpoint. NOT TO USE: For full call chain analysis of a route (use gograph_endpoint instead). RETURNS: Structured table of method/path/handler triples; empty when no HTTP routes are registered in the graph.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by explaining internal caching behavior (content-digest freshness, AST refreshing) and limitations (unresolved dynamic prefixes). It also reaffirms read-only and no side effects, matching the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for usage and returns, but includes some technical jargon (CHA/SSA, precise_fallback) that may be unnecessary for typical users. It is slightly verbose but still focused.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of parameters and output schema, the description covers the return format, intended use cases, and limitations. It provides sufficient context for an agent to decide when to use this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since there are zero parameters, the baseline is 4. No parameter descriptions are needed, and the description correctly omits them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: listing all HTTP routes with methods, URL patterns, and handler names. It also distinguishes itself from gograph_endpoint, making the purpose specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use (to get the complete API surface before diving into a specific route with gograph_endpoint) and when not to use (for full call chain analysis, which gograph_endpoint handles). This provides clear guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_schemaARead-onlyIdempotent
Find Go structs that declare a mapping to a specific database table via struct tags (e.g., db:"table_name", gorm:"table:table_name"). The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: When tracing which Go types represent a database table, or before writing a migration to understand the current ORM model. NOT TO USE: For non-tagged Go structs used as query results (use gograph_fields or gograph_query instead). RETURNS: Matching struct names with package paths and file locations; empty when no structs map to the named table.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | The table or schema name to search for in struct tags (e.g., 'users', 'roles') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint, etc.), the description explains the freshness/refresh mechanism and retry behavior for different analysis modes, adding valuable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences) and well-structured with clear sections for purpose, usage guidance, and return value, front-loading the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully specifies return values (struct names, package paths, file locations) and handles the empty case. The tool is simple and the description covers all necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single required parameter 'table', and the description adds value by providing usage examples of struct tags and clarifying that the parameter is a table or schema name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: finding Go structs mapped to a database table via struct tags, with examples of tags like `db:` and `gorm:`. It explicitly distinguishes from siblings like `gograph_fields` and `gograph_query` in the NOT TO USE section.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit WHEN TO USE and NOT TO USE sections, giving clear scenarios and alternative sibling tools for non-applicable cases, leaving no ambiguity about when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_session_auditARead-onlyIdempotent
Review and grade agent compliance (Plan rule, Review rule, Composability/Efficiency) and tool success rates. Session IDs are strictly validated and only regular repository-confined logs are read. No additional prerequisite once the MCP server is running. WHEN TO USE: After ending a session to obtain compliance metrics and recommendations. RETURNS: Audited session details and grade.
| Name | Required | Description | Default |
|---|---|---|---|
| json | No | Set to true to return structured JSON format instead of human-readable ASCII layout. | |
| session_id | No | Optional session ID to audit. If not supplied, audits the most recent session in the repository. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds valuable behavior beyond annotations: strict Session ID validation, reading only repository-confined logs, no additional prerequisites, and a summary of return values. This enriches the agent's understanding without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured with explicit labels (WHEN TO USE, RETURNS). Every sentence contributes meaningful information, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two optional parameters and no output schema, the description covers the purpose, usage context, behavioral guarantees, and returns. It is self-sufficient even without additional structured context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the parameters. The description adds no parameter-specific semantics, but the baseline of 3 is appropriate given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Review and grade') and resource ('agent compliance' and 'tool success rates'), with explicit grading criteria (Plan rule, Review rule, Composability/Efficiency). This clearly distinguishes it from sibling session tools like gograph_session_create or gograph_session_cleanup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context: 'WHEN TO USE: After ending a session to obtain compliance metrics and recommendations.' This clearly indicates the timing but does not explicitly name alternatives or when not to use, which would merit a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_session_cleanupADestructiveIdempotent
Delete stale inactive regular session telemetry JSONL logs without following linked repository paths. If no session is active, it deletes all eligible logs; an active log is preserved. MCP annotations mark this operation mutating and destructive. No prerequisites. WHEN TO USE: Call after auditing to keep the repository clean. RETURNS: Number of deleted session files.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructive and non-read-only behavior. The description adds useful context: active logs are preserved, linked repository paths are not followed, and it returns the number of deleted files. The redundant note that annotations mark it destructive is not additive but does not detract.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is structured with WHEN TO USE and RETURNS sections, making it easily parseable. However, the sentence 'MCP annotations mark this operation mutating and destructive' is redundant with the structured annotations, which slightly reduces conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully explains what is deleted, conditional behavior (active log preserved), prerequisites, and return value. For a zero-parameter destructive tool, this is sufficient for safe invocation, though an explicit note on idempotence (already in annotations) could have made it a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so baseline is 4. The description appropriately notes 'No prerequisites', which clarifies that no arguments are needed and the call is unconditional aside from session state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deletes 'stale inactive regular session telemetry JSONL logs' and scopes it 'without following linked repository paths'. It differentiates from sibling session tools (audit, create, end) by focusing on cleanup, so purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context with 'WHEN TO USE: Call after auditing to keep the repository clean' and 'No prerequisites'. It gives a solid recommendation but does not explicitly discuss alternatives or when not to use, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_session_createA
Start a telemetry audit session for tracking agent compliance and tool success metrics. Writes only regular, repository-confined session state under .gograph/sessions and refuses linked storage; MCP annotations mark it mutating and non-idempotent. No prerequisites once the MCP server is running. WHEN TO USE: Call once at the start of a multi-step coding task to track your work. NOT TO USE: When a session is already active. RETURNS: Structured message with the newly generated session ID.
| Name | Required | Description | Default |
|---|---|---|---|
| custom_word | No | Optional custom word prefix to incorporate in the timestamped session ID (e.g. 'implement_feature') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare mutating and non-idempotent, and the description reinforces this while adding specifics: it writes only repository-confined state under .gograph/sessions and refuses linked storage. It also clarifies there are no prerequisites. This adds context beyond the annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with labeled sections and front-loads the purpose. The sentence about 'MCP annotations mark it mutating and non-idempotent' is redundant since annotations are visible, but it doesn't significantly bloat the text. Overall, it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description covers purpose, when to use/not use, side effects (write location and storage refusal), and return value (session ID). There are no gaps for the agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for the only parameter, custom_word, with a clear description. The tool description adds no parameter-specific guidance, but the schema fully compensates. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Start[s] a telemetry audit session' for tracking compliance and success metrics, distinguishing it from sibling session tools like audit, cleanup, and end. It also specifies the resource scope (session state under .gograph/sessions), making it unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
WHEN TO USE and NOT TO USE sections give explicit start-of-task and active-session conditions. It mentions no prerequisites once the MCP server is running, which is useful. However, it does not name alternative sibling tools (e.g., gograph_session_audit), so differentiation is less explicit than it could be.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_session_endA
End the active telemetry session cleanly, append its end record, and remove the active-session pointer through repository-confined regular-file operations. MCP annotations mark it mutating and non-idempotent. No additional prerequisite once the MCP server is running. WHEN TO USE: Call once after you have completed all edits and post-edit reviews. NOT TO USE: When no session is active. RETURNS: Message confirming ending of the session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by detailing the side effects: appending an end record and removing the active-session pointer via 'repository-confined regular-file operations'. It also notes there are no additional prerequisites. While it explicitly references the annotations (mutating, non-idempotent), it adds useful behavioral context that the bare annotations lack.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and succinct, using clearly labeled sections (WHEN TO USE, NOT TO USE, RETURNS) with no redundant or extraneous information. Every sentence contributes essential context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description fully covers what an agent needs: the action, the effects, the prerequisites, when to use/not use, and the return message. It is complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema already reflects this with 100% coverage. The description adds no parameter information because none exists. Following the baseline for 0-parameter tools, a score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as ending the active telemetry session and specifies the exact actions: 'append its end record' and 'remove the active-session pointer'. It distinguishes itself from related session tools like gograph_session_create and gograph_session_cleanup by focusing on termination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit WHEN TO USE and NOT TO USE sections provide unambiguous guidance: call once after edits and reviews, and avoid when no session is active. This tells the agent exactly when to invoke the tool and when to avoid it, satisfying the requirement for clear usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_skeletonARead-onlyIdempotent
Emit the full repository's API signatures with function bodies stripped — struct definitions, interface declarations, and function/method signatures only. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WARNING: output can be very large on big repositories — consider using gograph_public per package for targeted queries. WHEN TO USE: When an LLM needs a compact map of the entire codebase's shape without reading source files individually. NOT TO USE: For full implementations (use gograph_source); for a single package (use gograph_public). RETURNS: Multi-line text of all stripped declarations across all packages; always non-empty when the graph has symbols.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds freshness checking, refresh behavior, and 'Read-only; no side effects', which is consistent and extends beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Efficiently structured with clear sections: main description, warning, when/not to use, returns. Front-loaded with purpose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description explains return type and non-empty guarantee. Covers behavior, warnings, usage guidance, and alternatives. Complete for a read-only, parameterless tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in schema; baseline 4. Description does not need to add parameter info as zero params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states verb 'Emit' and resource 'full repository's API signatures with function bodies stripped', clearly distinguishing from siblings like gograph_public and gograph_source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit WHEN TO USE and NOT TO USE sections with alternative tools named: 'use gograph_source' and 'use gograph_public'. Also warns about large output.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_sourceARead-onlyIdempotent
Retrieve verbatim Go source for a named function, method, struct, interface, type, variable, or constant, including complete bodies or declarations. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Source reads are confined to regular .go files beneath the analyzed repository and reject symlink path components. Read-only; no side effects. WHEN TO USE: When you need a specific implementation or declaration in full without loading a large file — a targeted alternative to reading the whole file. NOT TO USE: For call hierarchy information (use gograph_callers/gograph_callees); for AST metadata without the full source (use gograph_node). RETURNS: Raw Go source blocks with file paths and line numbers. It errors when the symbol is absent or no matching block can be read safely; an ambiguous query may still return its safely readable matches.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | The name of the symbol to retrieve source for (supports short name 'ValidateToken', dot-notation 'graph.Graph', or fully-qualified ID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses freshness checks, analysis-mode refreshes, CHA/SSA retry behavior, source read confinement to regular .go files, symlink rejection, and error/ambiguity handling. These go well beyond the readOnly/idempotent/destructive annotations, adding valuable context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: first sentence gives the core purpose, followed by behavioral notes, a clear WHEN TO USE/NOT TO USE section, and a RETURNS/error section. Each sentence adds value, no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only tool with no output schema, the description covers purpose, usage context, constraints, return content (raw source with file paths/line numbers), and error conditions. It fully equips the agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full parameter detail, including supported formats (short name, dot-notation, fully-qualified ID), so schema coverage is 100%. The description adds no new parameter semantics beyond listing symbol types, which is redundant. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves verbatim Go source for a named symbol with complete bodies/declarations, using a specific verb and resource. It also distinguishes from siblings by explicitly naming gograph_callers/gograph_callees and gograph_node as alternatives for other use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit WHEN TO USE and NOT TO USE sections are provided, with concrete alternative tools named (gograph_callers/gograph_callees for call hierarchy, gograph_node for AST metadata). This gives the agent clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_sqlARead-onlyIdempotent
Find all SQL query literals embedded in Go source code, with their enclosing function context and file/line locations. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. Optional term filters by SQL keyword or table name (e.g., "SELECT", "users"). WHEN TO USE: When auditing database interactions, reviewing queries for performance issues, or locating all queries that touch a specific table. NOT TO USE: For ORM struct-to-table mappings (use gograph_schema); for env-based configuration (use gograph_envs). RETURNS: List of SQL string literals with file, line, and enclosing function name; empty when no matches found.
| Name | Required | Description | Default |
|---|---|---|---|
| term | No | Optional SQL keyword or table name to filter database queries (e.g., 'SELECT', 'users') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as readOnly and idempotent. The description adds context about freshness checks and retries in certain analysis modes, which provides additional behavioral insight beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a clear opening sentence, then supplementary details. Slightly lengthy but each section (freshness, read-only, parameter, usage, return) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description specifies the return format: list with file, line, and enclosing function name. All necessary information for an AI to use the tool is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter; the description reinforces its purpose with examples (e.g., 'SELECT', 'users'), adding practical guidance beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Find' and clearly identifies the resource: SQL query literals in Go source code. It distinguishes from sibling tools like gograph_schema and gograph_envs by stating when not to use this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides 'WHEN TO USE' and 'NOT TO USE' sections with concrete scenarios and alternative tool names. Also explains the optional 'term' parameter for filtering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_staleARead-onlyIdempotent
Check whether the trusted persisted graph index loaded from a regular, repository-confined .gograph/graph.json differs from the current selected-file inventory, effective Go build context, or selected source content digests. Modification times are returned only as diagnostics; legacy indexes without digests temporarily use the former mtime fallback until rebuilt. This tool intentionally does not refresh first; when the artifact is missing, unreadable, unsafe, or uses an unsupported source policy it compares against the startup auto-build fallback. Read-only; no side effects. WHEN TO USE: To decide whether CLI snapshot analysis or precise enrichment needs rebuilding. NOT TO USE: For module dependency freshness; for changed symbols (use gograph_changes). RETURNS: is_stale, graph_age, newest source metadata, changed_files, and build_context_changed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds critical behavioral details: mtime fallback, no auto-refresh, fallback comparison on missing/unreadable artifacts, and read-only/no side effects. It enriches the safety profile without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (WHEN TO USE, NOT TO USE, RETURNS) and each sentence conveys essential information. It is detailed yet not bloated, front-loading the core purpose before expansion.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description explicitly lists return fields (is_stale, graph_age, newest source metadata, changed_files, build_context_changed) and explains fallback behavior. For a 0-parameter tool, it covers all necessary context for correct invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the baseline is 4. The description does not need to add parameter-level semantics, and it doesn't, but it stays at the baseline. No additional value is required here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: checking whether the trusted persisted graph index differs from selected-file inventory, build context, or content digests. It clearly names the resource (.gograph/graph.json) and defines the scope, and explicitly differentiates from gograph_changes via the NOT TO USE section, making it distinct among many sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
WHEN TO USE and NOT TO USE sections provide explicit context (deciding whether rebuilding is needed) and exclusions (module dependency freshness, changed symbols with gograph_changes named as alternative). This is exemplary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_statsARead-onlyIdempotent
Report trusted persisted-index health and counts without refreshing source analysis, or startup-fallback health when graph.json is missing, unreadable, unsafe, or uses an unsupported source policy: schema/build timestamps, complete/partial status, ast/precise/precise_fallback analysis status, scanned/parsed/reused/rebuilt-package/failure counts, and graph entity totals. Read-only; no side effects. WHEN TO USE: To validate the snapshot/fallback before relying on its data. NOT TO USE: For a live symbol profile (use gograph_node or gograph_complexity). RETURNS: Structured build health and repository counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and no destructive/intent, but the description adds valuable behavioral context: 'without refreshing source analysis' clarifies that this tool does not trigger recomputation, and it specifies fallback conditions (missing, unreadable, unsafe graph.json). No contradiction with annotations; the description enriches what annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear markers (WHEN TO USE, NOT TO USE, RETURNS) and front-loaded with the core purpose. Every sentence provides essential information without fluff, balancing detail with readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only health-check tool, the description thoroughly covers what it reports, when it uses fallback, and what it does not do. It also mentions read-only and no side effects, making it complete given the tool's simplicity and the lack of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema covers everything (coverage 100%). Per guidelines, baseline is 4 when no parameters exist. The description does not need to add parameter detail since there are none, and it doesn't.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reports trusted persisted-index health and counts, with specific details on what is included (schema/build timestamps, statuses, counts). It explicitly distinguishes from siblings by naming alternatives for live symbol profiling, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit WHEN TO USE (validate snapshot/fallback before relying) and NOT TO USE sections with named alternatives (gograph_node, gograph_complexity). This provides clear direction on when this tool is appropriate versus others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_summaryARead-onlyIdempotent
Single-call codebase briefing: top 3 hotspots (most-called symbols), worst instability package, highest cyclomatic complexity function, total orphan count, and god-object count. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: At the very start of any session — replaces running gograph_hotspot + gograph_coupling + gograph_orphans + gograph_complexity + gograph_godobj separately (5 calls → 1). NOT TO USE: For detailed drill-down into a specific metric (use the dedicated tool after reviewing summary). RETURNS: JSON with symbols, packages, hotspots[], worst_instability, top_complexity, orphan_count, and god_object_count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent. Description adds context about freshness checks and retry behavior for different analysis modes, which is beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise yet comprehensive. Front-loaded with purpose, followed by details, then clear usage guidance. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 0 parameters and no output schema, the description fully explains what the tool does, when to use, what it returns (JSON with specific fields), and how it interacts with analysis modes. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so baseline is 4. Description doesn't need to add parameter details, and schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it's a single-call codebase briefing with specific metrics (hotspots, instability, complexity, orphans, god-objects). Distinguishes from siblings by noting it replaces 5 separate calls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use ('at the very start of any session') and when not to use ('for detailed drill-down'), with alternative dedicated tools listed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_testsARead-onlyIdempotent
Find test functions in *_test.go files that statically exercise a named symbol, or list all attributed test edges when no symbol is given. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise graphs separately type-resolve compiling test packages. Direct selectors and local method values can bind exact symbol IDs; interface dispatch remains bounded CHA-possible evidence, and test-package failures are reported through test_call_resolution=typed_partial rather than weakening production precision. Read-only; no side effects. WHEN TO USE: Before editing a function — check what tests are statically attributed so you know what to run; or to audit test coverage candidates across the codebase. NOT TO USE: For test helper infrastructure (use gograph_fixtures); for running the tests or proving runtime coverage (use go test and coverage evidence). RETURNS: Test function names, attributed targets, and file locations; returns all test edges when symbol is omitted; empty when no test edge matches the symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | The symbol name to find tests for (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey a read-only, idempotent, non-destructive safety profile, so the bar for extra credit is lower — and the description clears it substantially: it documents server-side freshness checking/refresh behavior, type-resolution for compiling test packages, bounded CHA-possible evidence for interface dispatch, and the typed_partial result encoding for broken test packages. These are valuable behavioral details that neither schema nor annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average, but it is deliberately sectioned (WHEN/NOT/RETURNS) and each block adds non-redundant information. The first sentence fully characterizes the tool before introducing alternatives, so the content earns its length even if some clauses could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the RETURNS block explicitly describes the returned shape (test function names, targets, file locations), the no-symbol mode, and the empty result case. Edge cases such as non-compiling test packages and the freshness-refresh behavior are covered — the description is fully sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the single optional `symbol` parameter. The description goes one step beyond by explaining the semantics of the missing parameter — omitting it returns all test edges — and by tying the symbol matching to static attribution behavior (exact IDs for direct selectors, CHA-possible evidence for interface dispatch). That adds real meaning beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Find test functions in *_test.go files that statically exercise a named symbol' and immediately distinguishes the two invocation modes (symbol given vs. omitted). It differentiates from siblings like gograph_callers and gograph_fixtures by the test-target niche and the explicit fallback behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
WHEN TO USE and NOT TO USE bullets state explicitly the circumstances for calling this tool ('Before editing a function — check what tests are statically attributed') and name the alternatives (gograph_fixtures for test helpers, `go test` and coverage evidence for proving runtime coverage). The exclusion is concrete, so an agent does not have to infer selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_traceARead-onlyIdempotent
Alias for gograph_errorflow. Refreshes in-memory source analysis, then traces an error string heuristically from its definition up through the call chain to HTTP handlers. Read-only; no side effects. WHEN TO USE: Prefer gograph_errorflow; this alias exists for compatibility. RETURNS: The same structured output as gograph_errorflow.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | Error string or symbol name to trace (e.g. 'ErrNotFound', 'permission denied') | |
| no_tests | No | If true, skip collecting related test functions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds context about refreshing in-memory analysis and explicitly states 'Read-only; no side effects,' which aligns with annotations and adds behavioral nuance beyond what schema or annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with purpose, usage, and return info. No unnecessary words; every sentence serves a clear function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description mentions the return type (same as gograph_errorflow) which compensates. It covers purpose, usage, behavior, and parameters (via schema). The only minor gap is that the return structure of gograph_errorflow is not detailed, but the reference is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for both parameters ($term, $no_tests). The description does not add any additional meaning or constraints beyond what the schema already provides, so it meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is an alias for gograph_errorflow, specifies that it refreshes in-memory analysis and traces error strings from definition to HTTP handlers, and explicitly mentions it is read-only with no side effects. This distinguishes it from siblings by directing to the preferred tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'WHEN TO USE: Prefer gograph_errorflow; this alias exists for compatibility.' This tells the agent exactly when to use this tool versus the alternative, which is excellent clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_untestedARead-onlyIdempotent
Sweep the full graph in one pass and return called production functions and methods without an exact/static attributed test edge. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise graphs separately type-resolve compiling test packages. Exact direct selectors and local method values suppress only their resolved symbol, avoiding same-name receiver conflation. CHA interface targets remain visible with test_resolution=possible and possible_test_count instead of silently satisfying exact coverage; test_resolution=none means no attributed or bounded-possible test target was found. Repeatable CLI --exclude globs map to the MCP exclude string array and match repository-relative source paths lexically without filesystem access. This is static attribution, not runtime coverage proof. Read-only; no side effects. WHEN TO USE: During test census or pre-release hardening. Distinct from gograph_orphans (zero production callers) and replaces N sequential gograph_tests calls. NOT TO USE: For running tests or proving branch execution. RETURNS: JSON array sorted by caller_count descending with name, kind, file, line, caller_count, package, test_resolution, and optional possible_test_count; empty when every called symbol has an exact/static or historical parser-attributed test edge.
| Name | Required | Description | Default |
|---|---|---|---|
| pkg | No | Optional package name substring to filter results (e.g. 'cli', 'search') | |
| top | No | Limit results to top N by caller count (0 = all, default) | |
| exclude | No | Repository-relative path globs to exclude; use prefix/** for all descendants |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnly, idempotent, non-destructive), so the description earns credit for what it adds beyond them: freshness/refresh behavior, test_resolution=possible versus none semantics, CHA interface target handling, same-name receiver conflation suppression, 'static attribution, not runtime coverage proof', and lexical exclude matching without filesystem access. This is genuinely rich operational context, not a restatement of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense, with every section earning its place: core semantics, resolution edge cases, parameter behavior, WHEN/NOT TO USE, and complete RETURNS format. The only redundancy is 'Read-only; no side effects', which duplicates the annotations; the rest is purely additive and appropriately front-loaded with the primary purpose before the details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex tool with no output schema, yet the description fully compensates: it documents the exact return shape ('JSON array sorted by caller_count descending with name, kind, file, line, caller_count, package, test_resolution, and optional possible_test_count'), the empty-result case, the meaning of test_resolution values, and the edge cases an agent would otherwise be blind to. Nothing needed for a correct invocation is missing, apart from external requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful extra meaning beyond the schema: exclude globs match repository-relative source paths lexically without filesystem access, map from CLI --exclude flags, and the return is sorted by caller_count descending, which clarifies the semantics of top. This is more than the schema alone provides, though the marginal gain is moderate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Sweep the full graph in one pass and return called production functions and methods without an exact/static attributed test edge') and sharpens the boundary with an explicit negative condition. It also differentiates from siblings by name (gograph_orphans, gograph_tests), so an agent can identify this tool among more than 60 siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit WHEN TO USE ('test census or pre-release hardening'), NOT TO USE ('for running tests or proving branch execution'), and names the alternatives ('Distinct from gograph_orphans... replaces N sequential gograph_tests calls'). The routing decision is fully stated, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_usagesARead-onlyIdempotent
Find every place a named Go type appears in function parameter lists, return type signatures, and struct field type declarations. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. Read-only; no side effects. WHEN TO USE: Before changing an interface or type definition — see the full consumption blast radius across all signatures and struct fields. NOT TO USE: For call sites of a function (use gograph_callers); for struct composite-literal initialization sites (use gograph_literals); for all transitive callers (use gograph_impact). RETURNS: File paths and line locations where the type name appears in signatures or struct fields; empty when the type is not referenced.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | The type name to search for (e.g., 'AuthService', 'Repository') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds freshness checking behavior and retry logic for precise analysis modes. No contradiction with annotations; adds meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise and well-structured: opens with core purpose, then behavioral details, then usage guidelines, then return value. Every sentence provides valuable information without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description fully covers purpose, behavior, usage context, and return values. The RETURNS section compensates for missing output schema by describing result format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of the 'type' parameter. The tool description does not add additional semantics beyond the schema, which is adequate. For a single parameter, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states specific verb ('find') and resource ('every place a named Go type appears in function parameter lists, return type signatures, and struct field type declarations'). Distinguishes from sibling tools in the NOT TO USE section, making purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides WHEN TO USE context ('before changing an interface or type definition') and lists concrete alternatives for different scenarios (NOT TO USE for call sites, literals, impact). This helps the agent select the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gograph_wikiADestructiveIdempotent
Generate the llm-wiki/ directory of machine-first markdown pages from the static graph. Pages produced: overview.md, architecture.md, hotspots.md, routes.md, env.md, errors.md, concurrency.md, api-surface.md, and one packages/.md per internal package. The MCP server checks freshness before this call and refreshes in the current requested analysis mode; precise and precise_fallback graphs retry CHA/SSA after source changes. A relative output is anchored beneath the graph root and rejects linked components; an absolute output explicitly selects a local destination whose final directory must be real. Generated page paths and regular-file writes remain confined beneath the selected output root. Writes may overwrite existing regular files; MCP annotations mark it mutating and destructive. WHEN TO USE: At the start of an agent session on an unfamiliar codebase — run once to get a token-efficient orientation without issuing dozens of individual tool calls. NOT TO USE: For targeted symbol lookups (use gograph_context or gograph_source). RETURNS: JSON manifest of written page filenames and a count; error when the graph cannot be loaded or the output directory is unsafe or cannot be created.
| Name | Required | Description | Default |
|---|---|---|---|
| output | No | Wiki directory: relative paths are graph-rooted; an absolute path explicitly selects a real local output root (default 'llm-wiki') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark mutating/destructive, and the description reinforces this by disclosing that writes may overwrite existing regular files and that page paths are confined beneath the output root. It also adds freshness/retry behavior and error conditions, going beyond annotation details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence serves a purpose, covering output list, freshness, path safety, overwrite behavior, usage guidance, and returns. It is well-structured with clear labels, though it could be slightly tightened without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch generation tool with one optional parameter and no output schema, the description provides thorough context: exact generated pages, output path rules, safety constraints, return manifest, and error cases. It also explains why to use it as an orientation tool, covering both context and alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is fully described in the schema (100% coverage), and the description restates the same semantics without adding extra nuance. Baseline 3 applies because schema carries the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Generate the llm-wiki/ directory of machine-first markdown pages from the static graph.' It lists exact page outputs and differentiates itself from sibling tools by positioning as a batch orientation tool, with targeted lookups delegated to gograph_context/gograph_source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly includes WHEN TO USE and NOT TO USE sections, prescribing use at the start of an agent session on an unfamiliar codebase and explicitly excluding targeted symbol lookups, pointing to specific sibling tools. This gives clear selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v1.6.2- Added
gograph_coverage - Added
gograph_identity - Changed
gograph_untested1 field changed- added
Input schema / properties / excludeAdded value: +{ + "description": "Repository-relative path globs to exclude; use prefix/** for all descendants", + "items": { + "type": "string" + }, + "type": "array" +}
1 tool update
v1.5.8- Changed
gograph_endpoint1 field changed- changed
Input schema / properties / query / descriptionPrevious value: -"Route pattern (\"POST /api/users\"), final path suffix (\"POST /users\"), or handler symbol name (\"CreateUser\"). NOTE: Nested route-group prefixes are lost statically."New value: +"Route pattern (\"POST /api/users\"), path suffix (\"POST /users\"), or handler symbol name (\"CreateUser\"). Constant grouped prefixes are resolved; dynamic prefixes remain best-effort."
18 tool updates
v1.5.6- Changed
gograph_api1 field changed- changed
Input schema / properties / since / descriptionPrevious value: -"The baseline git reference (e.g., 'main' or 'HEAD~1') to compare against"New value: +"A baseline Git ref (for example 'main' or 'HEAD~1') or regular in-project saved graph path ending in .json, with no linked component and the exact current source-policy marker"
- Changed
gograph_arity2 fields changed- changed
Input schema / properties / min / descriptionPrevious value: -"Minimum argument count to report (default: 5)"New value: +"Inclusive minimum argument count to report (default: 5; 0 includes zero-arity functions)" - changed
Input schema / properties / min / typePrevious value: -"number"New value: +"integer"
- Changed
gograph_boundaries1 field changed- changed
Input schema / properties / config / descriptionPrevious value: -"Optional file path to boundary constraints configuration (defaults to .gograph/boundaries.json)"New value: +"Optional in-project path to a regular, non-linked boundary config (default .gograph/boundaries.json)"
- Changed
gograph_boundaries_create1 field changed- changed
Input schema / properties / config / descriptionPrevious value: -"Optional repository-relative output path (default .gograph/boundaries.json)"New value: +"Optional in-project output path, absolute or repository-relative; linked components and existing entries are refused (default .gograph/boundaries.json)"
- Changed
gograph_callees2 fields changed- changed
Input schema / properties / depth / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / mermaidAdded value: +{ + "description": "Return Mermaid flowchart text instead of the normal response", + "type": "boolean" +}
- Changed
gograph_callers2 fields changed- changed
Input schema / properties / depth / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / mermaidAdded value: +{ + "description": "Return Mermaid flowchart text instead of the normal response", + "type": "boolean" +}
- Changed
gograph_check2 fields changed- changed
Input schema / properties / config / descriptionPrevious value: -"Optional path to a checks.json config file (defaults to .gograph/checks.json if present)"New value: +"Optional checks.json path; relative/default paths are project-confined, while an absolute path explicitly selects a regular local file" - changed
Input schema / properties / since / descriptionPrevious value: -"Git ref for api_drift baseline (e.g. 'main', 'HEAD~5', 'v1.4.50')"New value: +"Git ref or regular in-project saved graph path ending in .json, with no linked component and the exact current source-policy marker, for api_drift"
- Changed
gograph_coupling1 field changed- added
Input schema / properties / mermaidAdded value: +{ + "description": "Return Mermaid flowchart text instead of structured JSON", + "type": "boolean" +}
- Changed
gograph_dependents1 field changed- added
Input schema / properties / mermaidAdded value: +{ + "description": "Return Mermaid flowchart text instead of the normal response", + "type": "boolean" +}
- Changed
gograph_deps1 field changed- added
Input schema / properties / mermaidAdded value: +{ + "description": "Return Mermaid flowchart text instead of structured JSON", + "type": "boolean" +}
- Changed
gograph_diagram1 field changed- changed
Input schema / properties / max_depth / typePrevious value: -"number"New value: +"integer"
- Changed
gograph_endpoint4 fields changed- changed
Input schema / properties / depth / descriptionPrevious value: -"BFS depth for call chain traversal (default: 5)"New value: +"BFS depth for call chain traversal, clamped to 1-20 (default: 5)" - changed
Input schema / properties / depth / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / include_tests / descriptionPrevious value: -"Include call-chain edges originating in *_test.go files"New value: +"Include routes registered in *_test.go files" - added
Input schema / properties / mermaidAdded value: +{ + "description": "Return Mermaid flowchart text instead of structured JSON", + "type": "boolean" +}
- Changed
gograph_godobj4 fields changed- changed
Input schema / properties / calls / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / fields / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / methods / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
gograph_hotspot1 field changed- changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
gograph_impact1 field changed- added
Input schema / properties / mermaidAdded value: +{ + "description": "Return Mermaid flowchart text instead of the normal response", + "type": "boolean" +}
- Changed
gograph_path1 field changed- added
Input schema / properties / mermaidAdded value: +{ + "description": "Return Mermaid flowchart text instead of structured JSON", + "type": "boolean" +}
- Changed
gograph_untested1 field changed- changed
Input schema / properties / top / typePrevious value: -"number"New value: +"integer"
- Changed
gograph_wiki1 field changed- changed
Input schema / properties / output / descriptionPrevious value: -"Output directory for wiki pages (default: 'llm-wiki')"New value: +"Wiki directory: relative paths are graph-rooted; an absolute path explicitly selects a real local output root (default 'llm-wiki')"
9 tool updates
v1.5.4- Added
gograph_api - Added
gograph_arity - Added
gograph_boundaries - Added
gograph_boundaries_create - Added
gograph_callees - Added
gograph_callers - Added
gograph_capabilities - Added
gograph_imports - Added
gograph_literals
23 tool updates
v1.5.3- Added
gograph_changes - Added
gograph_dependents - Added
gograph_deps - Added
gograph_diagram - Added
gograph_doc - Added
gograph_envs - Added
gograph_errorflow - Added
gograph_errors - Added
gograph_explain - Added
gograph_fields - Added
gograph_fixtures - Added
gograph_flow - Added
gograph_focus - Added
gograph_globals - Added
gograph_godobj - Added
gograph_hotspot - Added
gograph_httpcalls - Added
gograph_impact - Added
gograph_implementers - Added
gograph_interfaces - Added
gograph_mocks - Added
gograph_mutate - Added
gograph_node
18 tool updates
v1.5.3- Added
gograph_check - Added
gograph_complexity - Added
gograph_concurrency - Added
gograph_constructors - Added
gograph_coupling - Removed
gograph_diagram - Added
gograph_embeds - Added
gograph_endpoint - Removed
gograph_errors - Removed
gograph_interfaces - Added
gograph_orphans - Added
gograph_path - Added
gograph_plan - Added
gograph_public - Added
gograph_query - Added
gograph_returnusage - Added
gograph_review - Added
gograph_routes
44 tool updates
v1.5.3- Removed
gograph_api - Removed
gograph_arity - Removed
gograph_boundaries - Removed
gograph_boundaries_create - Removed
gograph_callees - Removed
gograph_callers - Removed
gograph_capabilities - Removed
gograph_changes - Removed
gograph_check - Removed
gograph_complexity - Removed
gograph_concurrency - Removed
gograph_constructors - Removed
gograph_coupling - Removed
gograph_dependents - Removed
gograph_deps - Removed
gograph_doc - Removed
gograph_embeds - Removed
gograph_endpoint - Removed
gograph_envs - Removed
gograph_errorflow - Removed
gograph_explain - Removed
gograph_fields - Removed
gograph_fixtures - Removed
gograph_flow - Removed
gograph_focus - Removed
gograph_globals - Removed
gograph_godobj - Removed
gograph_hotspot - Removed
gograph_httpcalls - Removed
gograph_impact - Removed
gograph_implementers - Removed
gograph_imports - Removed
gograph_literals - Removed
gograph_mocks - Removed
gograph_mutate - Removed
gograph_node - Removed
gograph_orphans - Removed
gograph_path - Removed
gograph_plan - Removed
gograph_public - Removed
gograph_query - Removed
gograph_returnusage - Removed
gograph_review - Removed
gograph_routes
8 tool updates
- Added
gograph_boundaries_create - Changed
gograph_callees2 fields changed- added
Input schema / properties / depthAdded value: +{ + "description": "Traversal depth from 1 to 10 (default 1)", + "type": "number" +} - added
Input schema / properties / no_testsAdded value: +{ + "description": "Exclude call edges originating in *_test.go files", + "type": "boolean" +}
- Changed
gograph_callers4 fields changed- added
Input schema / properties / depthAdded value: +{ + "description": "Traversal depth from 1 to 10 (default 1)", + "type": "number" +} - added
Input schema / properties / exactAdded value: +{ + "description": "Require an exact symbol-name or fully-qualified-ID match", + "type": "boolean" +} - changed
Input schema / properties / function / descriptionPrevious value: -"The name of the target function to find callers for (supports short name 'BuildGraph', dot-notation 'graph.Graph.Build', or fully-qualified ID)"New value: +"The target function or method (supports short name 'BuildGraph', interface notation 'Repository.Delete', concrete dot-notation 'Store.Delete', or a fully-qualified ID)" - added
Input schema / properties / no_testsAdded value: +{ + "description": "Exclude call edges originating in *_test.go files", + "type": "boolean" +}
- Changed
gograph_context1 field changed- added
Input schema / properties / exactAdded value: +{ + "description": "Require an exact symbol-name or fully-qualified-ID match in single-symbol mode.", + "type": "boolean" +}
- Changed
gograph_endpoint1 field changed- added
Input schema / properties / include_testsAdded value: +{ + "description": "Include call-chain edges originating in *_test.go files", + "type": "boolean" +}
- Changed
gograph_errors1 field changed- added
Input schema / properties / no_testsAdded value: +{ + "description": "Exclude error sites in *_test.go files", + "type": "boolean" +}
- Added
gograph_flow - Changed
gograph_query3 fields changed- changed
Input schema / properties / term / descriptionPrevious value: -"The keyword search term to locate in symbols, files, and imports (e.g., 'AuthService', 'token', 'router')"New value: +"One keyword search term (e.g. 'AuthService')" - added
Input schema / properties / termsAdded value: +{ + "description": "Optional list of keyword terms combined with OR semantics", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Input schema / requiredPrevious value: -[ - "term" -]New value: +[]
TDQS
Each tool has a highly specific purpose with detailed descriptions that clearly differentiate it from others. For example, gograph_callers, gograph_callees, gograph_impact, and gograph_path all deal with call relationships but at different levels (direct one-hop, transitive, shortest path). Overlaps like gograph_mocks being an alias for gograph_implementers are explicit and not confusing.
All tools follow a consistent 'gograph_' prefix with underscore-separated descriptive names (e.g., gograph_callers, gograph_boundaries_create, gograph_session_audit). No mixing of camelCase or other conventions, making the naming predictable and easy to navigate.
With 65 tools, the count far exceeds the typical well-scoped range of 3-15 tools. While each tool is justified for a comprehensive static analysis server, the sheer volume makes it overwhelming for agents to select the right tool efficiently, reducing coherence.
The tool set covers an extensive range of static analysis capabilities: call graphs, dependencies, complexity, API surfaces, HTTP routes, SQL queries, environment variables, error handling, test coverage, concurrency, mutability, and session management. No obvious gaps exist for a Go codebase analysis server.
Maintenance
Related MCP Connectors
Code intelligence for coding agents: semantic, AST, graph, and full-text search. 279+ languages.
Code intelligence platform for AI agents. 20 tools for architecture, security & impact analysis.
Deterministic context layer for your codebase: change impact, blast radius, answers with receipts.
Ground-truth code graph for your codebase: exact callers, callees, symbols & dependencies.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that transforms codebases into knowledge graphs using Neo4J, enabling AI assistants to understand code structure, relationships, and metrics for more context-aware assistance.27MIT
- AlicenseNot gradedqualityCmaintenanceA graph-powered code intelligence engine that indexes codebases into a structural knowledge graph to provide AI agents with deep context on function calls, types, and execution flows. It offers local, zero-dependency tools for hybrid search, impact analysis, and dead code detection across Python, JavaScript, and TypeScript projects.808MIT
- FlicenseNot gradedqualityDmaintenanceA minimalist indexing tool that provides AI agents with semantic search and structural AST parsing for deep codebase understanding. It enables autonomous agents to navigate large codebases predictably using vector embeddings and native language server capabilities like definition and reference tracking.-
- AlicenseNot gradedqualityBmaintenanceA local code-intelligence engine for AI agents that indexes repositories into a PostgreSQL-backed code graph and serves structured, token-budgeted context over MCP and HTTP, enabling targeted queries on symbols, dependencies, contracts, and impact analysis.Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ozgurcd/gograph'
If you have feedback or need assistance with the MCP directory API, please join our Discord server