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은 일반 gograph CLI를 설치합니다. MCP 번들을 지원하는 MCP 클라이언트는 대신 공식 MCP 레지스트리에서 로컬 stdio 서버를 io.github.ozgurcd/gograph로 발견할 수 있습니다. 레지스트리/MCPB 설치는 별도의 배포 경로입니다. Homebrew cask를 설치하거나 Claude Code 마켓플레이스 플러그인을 구성하지 않습니다. 레지스트리는 현재 미리 보기 상태입니다. 클라이언트 지원, 대상 선택 및 현재 제한 사항은 공식 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는 사용 가능한 경우 포함하는 Git 저장소 루트 .gitignore에 .gograph/를 추가하고, Git 외부에서는 빌드 대상 .gitignore로 대체하며, 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 강화를 다시 계산하여 패키지 간 디스패치가 올바르게 유지되도록 합니다.
저메모리 모드는 더 공격적인 가비지 컬렉션을 사용하면서 그래프 의미를 유지하고, 프로덕션 및 테스트 분석 사이에 메모리를 회수하며, AST 그래프의 전체 JSON 복사본을 피합니다. --max-memory는 1GB 또는 1GiB와 같은 정수 바이트 크기를 허용하며 --memory-mode=low가 필요합니다. 이는 소프트 Go 런타임 메모리 대상이며 하드 RSS 상한이 아니므로 메모리 매핑 파일, 실행 파일 및 Go 도구 체인 하위 프로세스로 인해 프로세스 메모리가 요청된 값을 초과할 수 있습니다. 공격적인 GC는 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은 도달 가능성, 불안정하거나 외부 기호 ID, 명명되지 않은 타입 및 비-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 및 9개의 Markdown 보고서를 쓰거나 덮어씁니다. .gitignore를 수정하지 않으므로 필요할 때 활성화하기 전에 직접 .gograph/를 무시하세요. 디렉터리에는 최신 게시 상태만 포함됩니다. 분기별 캐시가 아닙니다. 사용 가능한 그래프가 없으면(안전하지 않거나 지원되지 않는 아티팩트 포함) 시작 자동 빌드가 서빙 전에 게시됩니다. 실패하면 시작이 방지됩니다. 이후 도구 트리거 게시 실패는 해당 도구가 오류를 반환하게 하며, 서버는 이미 신선한 인메모리 그래프를 다시 빌드하지 않고 다른 새로 고침 가능 호출에서 보류 중인 게시를 재시도합니다. 작성자는 로컬 .gograph/.artifacts.lock 파일을 통해 조정합니다. 기존 잠금 항목은 링크나 특수 파일이 아닌 일반 파일이어야 합니다. 보고서가 먼저 교체되고 graph.json이 게시 커밋 마커로 마지막에 교체됩니다. 완전한 10개 파일 번들은 단일 원자 파일 시스템 트랜잭션이 아닙니다. 동일 디렉터리 교체는 Unix 계열 시스템에서 원자적입니다. Go는 비-Unix 플랫폼에서 원자적 이름 변경 의미를 보장하지 않습니다. 잠금 파일은 10개 출력 외에 운영 조정 상태로 남아 있습니다.
왜 gograph인가?
이전 gograph 개정판의 예시적 시점 출력 비교(저장소가 발전함에 따라 수는 달라집니다. 이러한 명령은 다른 종류의 증거를 반환합니다):
작업 |
|
| 관찰된 출력 차이 |
| 158개의 일치하는 줄(주석, 문서, 변수) | 56개의 AST 파생 호출 사이트 행 | 해당 실행에서 ~65% 적은 행 |
기호 정의 찾기 | "Symbol"과 일치하는 842줄 | 83개의 실제 타입/메서드 선언 | ~90% 노이즈 제거 |
함수 본문 하나 읽기 |
|
| 해당 실행에서 ~93% 적은 소스 줄 |
공통 기호 컨텍스트 수집 | 별도의 노드, 소스, 호출자, 호출 수신자 및 테스트 쿼리 |
| 한 응답에 다섯 가지 증거 유형 |
주요 기능
기계 및 에이전트 워크플로 — 호출자, 호출 수신자, 역 테스트 커버리지, 안정적인 기호 ID, 영향, 컨텍스트, 계획, 검토, 흐름, 오류 흐름, 구조 검증, 고아, 핫스팟, 결합 등. MCP 서버는 4개의 세션 수명 주기 도구를 포함하여 67개의 엔드포인트를 등록합니다. 전체 명령 참조 →
연합 작업 공간 — 독립적으로 지문이 찍힌 저장소 그래프와 작은 결정적 교차 저장소 오버레이를 통해 여러 체크아웃된 저장소를 모델링합니다. 해석 범위는 저장소 소유권을 병합하지 않고 OSS/CE와 같은 대체 플릿을 지원합니다. P0은 Go 모듈, 일반 교차 저장소 Go 호출 및 작업 공간 전체 상태, 쿼리, 경로 및 영향 분석을 위한 일급 HTTP 계약을 해석합니다. 4개의 읽기 전용 작업 공간 MCP 도구는 CLI --json과 동일한 네이티브 결과 값을 반환합니다. 멤버 새로 고침 및 오버레이 게시는 명시적 CLI 변형으로 유지됩니다. 작업 공간 가이드 →
네이티브 MCP 서버 — 63개의 저장소 쿼리, 분석, 워크플로 기능 모두에 Claude, Cursor, Copilot 및 기타 MCP 클라이언트용 프로젝트 MCP 대응 기능이 있으며, 세션 수명주기를 다루는 엔드포인트 4개가 추가로 포함됩니다(총 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는 할당 및 함수 호출을 통해 SQL 쿼리 텍스트, 프로세스 실행, 파일시스템 경로, 아웃바운드 HTTP 대상으로의 잠재적 HTTP 요청, 디코딩된 JSON, 환경 데이터를 추적합니다. 결과에는 심각도, 신뢰도, 소스-싱크 경로 단계가 포함되며, 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 싱크로 이어지는 잠재적 비신뢰 데이터 경로를 분석합니다. |
테스팅 |
| 정방향 및 역방향 정확/가능 정적 테스트 귀속, 갭 조사, 경로 제외, 헬퍼, 목 구현을 제공합니다. |
오류 추적 |
| 오류 문자열에서 HTTP 진입점까지 역방향 BFS를 수행합니다. |
진단 |
| 설치/PATH 진단, 핫스팟, 반환 사용량, API 시그니처, Mermaid 다이어그램을 제공합니다. |
CI/CD |
| 정책 검사, 임계값 적용, 메트릭 스냅샷을 제공합니다. |
텔레메트리 |
| 에이전트 규정 준수 추적 및 등급 평가(A–F)입니다. |
LLM-Wiki |
|
|
요약 |
| 단일 호출 코드베이스 브리핑: 상위 3개 핫스팟, 최악의 불안정성 패키지, 최고 복잡도 함수, 고아 개수, 갓 객체 개수를 제공합니다. 5개의 개별 호출을 대체합니다. |
안정적 ID |
| 패키지 내 줄 이동과 파일 이동에도 유지되는 모듈/패키지/리시버/이름 정체성을 출력하고 재해석합니다. 패키지는 외부 테스트 충돌을 명확히 구분합니다. |
역방향 귀속 |
| 하나의 명확한 테스트에 대한 전이적 제품 심볼 집합으로, 안정적 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을 자동으로 읽거나, 그래프 루트 내의 다른 JSON 파일에 대해 --config <path>를 허용합니다. 새니타이저는 함수의 반환 값에 적용되며 선택한 싱크 종류로 범위를 지정할 수 있습니다:
{
"sanitizers": [
{ "function": "security.CleanPath", "for": ["filesystem"] },
{ "function": "security.ValidateURL", "for": ["outbound_http"] }
]
}for를 생략하면 모든 싱크 종류에 대해 반환 값을 신뢰합니다. function은 호출 표기 또는 정규화된 심볼 ID를 허용합니다. 이름이 충돌할 때는 정규화된 형식을 사용하세요. bool 또는 error만 반환하는 검증기는 원래 입력을 새니타이즈하지 않습니다. 신뢰할 수 있는 값을 반환하는 함수로 검증을 감싸는 것이 의도된 정책이라면 그렇게 하세요.
AI 에이전트 통합
공식 MCP 레지스트리(미리보기): MCPB 지원 클라이언트는
io.github.ozgurcd/gograph를 발견할 수 있습니다. 번들은 Go 프로젝트의 루트
디렉터리를 요청하고 gograph mcp <project-directory>와 동일한 별도 인수로
번들 실행 파일을 실행합니다. 릴리스는 amd64와 arm64 모두에 대해 macOS, Linux,
Windows 번들을 제공합니다. 현재 레지스트리 패키지 스키마는 CPU 아키텍처로
선택할 수 없으므로 호스트와 일치하는 파일명의 자산을 선택하세요. 클라이언트가
자동으로 선택할 것이라고 가정하지 마세요. 모든 분석은 여전히 stdio를 통해
로컬에서 실행되며, 호스팅된 gograph 서비스나 원격 텔레메트리는 없습니다.
레지스트리 번들과 설치 프로그램이 생성한 MCP 등록은 의도적으로
--persist-refresh를 생략하여 디스크 게시를 기본적으로 비활성화합니다. 해당
동작을 명시적으로 원한다면 사용자 지정 로컬 MCP 명령을 사용하세요.
데스크톱 구성, 공유 규칙, Claude Code 훅 설정:
gograph add-claude-plugin이것은 Claude Desktop MCP 서버를 등록하고, 공유 CLAUDE.md 스티어링 규칙을 주입하며, Claude Code PreToolUse 훅을 설치합니다. 훅은 유효한 검색 대상이 .gograph 인덱스가 있는 저장소에 속할 때만 Go 심볼 검색을 리디렉션하므로, 다중 루트 워크스페이스의 인덱스되지 않은 폴더는 영향을 받지 않습니다. Claude Code MCP 등록을 위해 설치 프로그램이 출력한 명령도 실행하세요: claude mcp add gograph -- gograph mcp .. 설치 프로그램은 설치 단계가 실패하면 0이 아닌 코드로 종료됩니다.
대안 — Claude Code 플러그인 마켓플레이스를 통한 설치:
/plugin marketplace add ozgurcd/gograph
/plugin install gograph@gographClaude Code의 플러그인 마켓플레이스를 통해 gograph를 발견하고 Go 작업 시 자동 활성화되는 SKILL.md를 제공하여 에이전트에게 워크플로(doctor --json → capabilities → stats → plan → context → 편집 → review), 지속적인 정밀 CLI 빌드가 유용한 시점, 구조적 쿼리를 사용해야 하는 시점, gopls 또는 대상 텍스트/소스 검색으로 검증해야 하는 시점을 가르칩니다.
여전히 gograph 바이너리를 설치해야 합니다 (brew install --cask ozgurcd/tap/gograph 또는 go install github.com/ozgurcd/gograph/cmd/gograph@latest). Claude Desktop MCP 연결과 공유 규칙 및 Claude Code 훅을 위해 gograph add-claude-plugin을 사용하세요. 출력된 claude mcp add 명령으로 Claude Code MCP 서버를 등록하세요. Claude Code의 플러그인 UI에서 검색을 선호한다면 플러그인 마켓플레이스를 사용하세요.
기타 에이전트 (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 또는 AI 시스템 프롬프트에 추가하세요:
아키텍처 또는 저장소 질문에 답하기 전에 사용 가능한
gograph_*MCP 도구를 검사하고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를 실행하여 기계 우선 마크다운 페이지 디렉터리를 생성하세요 — 개요, 아키텍처 다이어그램, 핫스팟, 라우트, 환경 변수, 오류 지점, 동시성, 패키지별 문서, 전체 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생성된 위키 출력이 일회용이면 .gitignore에 추가하세요. 저장소에서 유지 관리되거나 Scrinium으로 보호되는 agent-rules.md를 덮어쓰지 마세요. 관리되는 변경 사항은 해당 저장소의 문서화된 워크플로를 통해 제안하세요.
예제 출력
gograph build .를 실행하면 생성된 GRAPH_REPORT.md가 AI에 압축된 컨텍스트 맵을 제공합니다:
외부 종속성 (기술 스택)
모듈 | 버전 |
|
|
|
|
중요 심볼 (호출 수 상위)
심볼 | 종류 | 파일 | 줄 | 호출 수 |
| 메서드 |
| 42 | 18 |
| 함수 |
| 12 | 14 |
gograph는 gopls를 어떻게 보완하나요?
gopls는 Go 프로젝트의 컴파일러 기반 언어 서버입니다. 실시간 워크스페이스 진단, 탐색, 참조, 구현, 리팩터링 지원, 실험적 MCP 서버를 제공합니다. 편집기 및 컴파일러 인식 워크스페이스 작업에서는 여전히 첫 번째 선택이어야 합니다.
gograph는 저장소 및 에이전트 워크플로를 위한 다른 계층을 추가합니다:
영구 스냅샷 — CLI 분석은 안정적인 그래프 아티팩트를 검사할 수 있는 반면, MCP는 소스 분석 상태를 새로 고치고 요청된 정밀도 모드를 유지합니다.
저장소 수준 분석 — 변경 영향, 도달 가능성, 라우트, SQL, 환경 읽기, 보안 흐름 후보, 결합도, 정책 게이트가 함께 표현됩니다.
복합 응답 —
context,plan,review,summary는 한 번에 하나의 언어 작업만 노출하는 대신 에이전트 워크플로를 위한 관련 증거를 패키징합니다.
실시간 컴파일러 기반 탐색 및 리팩터링에는 gopls를, 텍스트 및 비-Go 검색에는 rg를, 영구 저장소 그래프 또는 복합 변경 분석 워크플로가 유용할 때는 gograph를 사용하세요. 한 도구가 다른 도구의 대체품이라고 가정하지 않고 이러한 다양한 워크플로를 측정하는 방법은 벤치마크 가이드를 참조하세요.
기본 모드는 Go AST 파싱과 최선 노력 휴리스틱을 사용합니다. 불완전하거나 컴파일되지 않는 저장소를 허용합니다.
저장소 소스 경계는 빌드 선택 전에 인식된 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 MiB보다 큰 아티팩트는 재빌드가 필요하며, 직렬화된 그래프 루트는 절대 신뢰되지 않습니다. 저장된 기준 그래프는 선택된 프로젝트 내의 정확한 마커와 크기 제한을 가진 일반 비링크 파일이어야 합니다. 기본/상대 검사 및 흐름 구성, 경계, 게이트 구성, 저장소 제어 세션/스냅샷/위키 변경은 링크된 경로 구성 요소를 거부합니다. 문서화된 절대 구성/위키 위치는 명시적 운영자 선택입니다. 신뢰할 수 없는 저장소에는 현재 바이너리를 사용하세요.정밀 모드는 타입 검사된 프로덕션 강화를 시도하며 CHA/SSA 결과를 위해 컴파일 가능하고 빌드 선택된 패키지가 필요합니다. SSA 본문은 선택된 저장소 패키지에 대해 빌드되며 전체 전이 종속성 클로저가 아닙니다. 가져온 타입과 로컬 외부 호출 참조는 종속성 본문 호출 그래프나 소스 없는 래퍼 노이즈 없이 사용 가능합니다. 강화가 실패하거나 인덱싱된 비테스트 소스 파일을 생략하면 명령은 경고하고 AST 그래프를 게시하며
precise_fallback을 기록합니다. 새로운 성공적인 정밀 아티팩트가 이미 동일한 소스를 포함하는 경우 실패한 재시도는 해당 아티팩트를 유지합니다. 성공 및 AST 전용 빌드는 각각precise와ast를 기록합니다. 테스트 패키지는 별도의 비치명적 타입 패스로 로드됩니다. 깨진 테스트는 성공적인 프로덕션 정밀도를 낮추지 않고typed_partial테스트 호출 속성을 생성합니다. 타입 전용 테스트 대상은 파서 사실로 재사용되지 않고 다시 계산되어 변경되지 않은 정밀 빌드에서 엣지 곱셈을 방지합니다.저메모리 모드는 분석 의미가 아닌 실행 정책을 변경합니다. 공격적인 GC를 사용하고, 타입 테스트 로딩 전에 완료된 프로덕션 타입/SSA 상태를 해제하며, 선택적 소프트 Go 런타임 메모리 대상을 존중합니다. 이 대상은 RSS 상한도 아니고 모든 저장소가 해당 양 내에서 완료될 수 있다는 보장도 아닙니다. Gograph는 정밀 사실을 조용히 생략하는 대신 정상적으로 폴백/실패를 보고합니다.
각 정밀 인터페이스 호출은 유효한 명명된 저장소 내 CHA 대상당 하나의 호출 엣지로 표현됩니다.
callers Interface.Method(임베디드 인터페이스에서 상속된 메서드와 임베디드 필드에서 승격된 구체 메서드 포함)는 인터페이스 구현자를 통해 확장되고 공유 소스 표현식을 한 번 보고합니다. 구체 수신자 표기법과 정규화된 메서드 ID는 명확화를 위해 계속 사용할 수 있습니다. 컴파일러 생성 승격 메서드 전달은 순회 전용 합성 엣지로 저장되며 호출 사이트 출력에서 숨겨집니다.CHA는 포인트 투 정밀보다 보수적입니다. 단일 런타임 구성에서 발생할 수 없는 구현을 유지할 수 있습니다. 리플렉션,
unsafe, 플러그인, 해결되지 않은 함수 값, 테스트 전용 구현, 명명되지 않은 구체 타입, 모듈 외부 구현은 여전히 불완전할 수 있습니다. 정밀 테스트 호출 속성은 직접 선택자와 로컬 메서드 값을 정확히 바인딩합니다. 인터페이스 대상은 명시적으로 가능한 상태로 유지되며,typed_partial은 일부 테스트가 파서 휴리스틱에 머물렀음을 의미합니다.콜백 참조는 저장소 호출 가능 항목으로 해석될 때만 유지되며, 정확한 호출 엣지는 직렬화 전에 중복 제거됩니다.
변경 쿼리는 일반 로컬 할당을 무시하고 정적으로 알려진 경우 소유 타입 정보를 유지하므로
Type.Field는 동일한 이름의 필드를 명확히 구분합니다.동기화 추출은 알려진
sync타입에 연결된 수신자가 필요합니다. 오류 메시지는panic,errors.New,fmt.Errorf에서 오며 가져오기 별칭을 포함합니다.휴리스틱 추출기(라우트, SQL, 파서 전용 테스트, 오류 매핑)는 탐색 보조 도구이지 권위 있는 프로그램 분석이 아닙니다. 타입 테스트 속성은 여전히 런타임 커버리지 증명이 아닌 정적 증거입니다.
보안 흐름 분석은 절차 간이며 경로에 민감하지 않으며, 최대 16개의 중첩 저장소 호출에 걸쳐 호출/반환 매칭을 수행합니다. 기본 그래프는 직접 로컬/가져온 함수를 해결합니다.
build . --precise는 더 강력한 메서드/인터페이스 대상을 제공합니다. 리플렉션, 전역, 임의 힙 별칭, 모든 동적 호출을 모델링하지 않습니다. 해결되지 않은 외부 변환은 낮은 신뢰도로 유지되며 모든 발견에는 소스 검토가 필요합니다.
다중 언어 파싱 없음
AI/모델 API 호출 없음
임베딩 또는 SaaS 백엔드 없음
원격 텔레메트리 또는 호스팅 분석 없음 (선택적 감사 세션은 로컬 메타데이터만 기록)
컴파일러/타입 검사기 정확성의 대체 없음
기여
풀 리퀘스트 환영합니다! 빌드, 테스트, 기여 지침은 CONTRIBUTING.md를 참조하세요.
언어 지원:
gograph는 현재 Go만 파싱합니다. 아키텍처는 확장 가능합니다 — Python, TypeScript, Rust 등을 추가하려면 먼저 이슈를 열어 주세요.
라이선스
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.811MIT
- 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