Skip to main content
Glama

gograph

Go Report Card License: MIT Go Version Homebrew Docs

Go 코딩 에이전트에게 더 안전한 리팩터링을 위한 컴파일러 인식 맵을 제공합니다.

gograph는 Go 저장소의 로컬 구조 그래프를 구축하며, 선택적으로 타입 검사된 CHA/SSA 강화를 지원합니다. CLI 및 MCP 워크플로는 코딩 에이전트가 호출자와 인터페이스 구현을 추적하고, 변경 영향을 계획하며, 임베딩이나 호스팅 코드 인덱스 없이 아키텍처를 강제할 수 있도록 돕습니다.

설치 없는 대화형 데모 살펴보기 · 재현 가능한 벤치마크 검토

동반 프로젝트: Scrinium은 코딩 에이전트를 위한 저장소 소유의 증거 기반 지식을 제공하며, Rulefloor는 저장소 로컬 불변식을 구체적인 테스트에 바인딩하고 드리프트를 감지하여 보호합니다. 이들은 독립적이고 선택적인 도구입니다. Scrinium은 Gograph 구조적 관찰을, Rulefloor 검증 결과를 별도의 증거로 유지할 수 있으며, 어느 쪽도 관련 없는 동작이나 전역 프로젝트 정확성의 증거로 취급하지 않습니다.

Gograph Demo

정적 분석; 대상 코드 실행 없음. 기본 인덱싱은 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-tests

Homebrew 및 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 개정판의 예시적 시점 출력 비교(저장소가 발전함에 따라 수는 달라집니다. 이러한 명령은 다른 종류의 증거를 반환합니다):

작업

grep -rn

gograph

관찰된 출력 차이

loadGraph의 호출자 찾기

158개의 일치하는 줄(주석, 문서, 변수)

56개의 AST 파생 호출 사이트 행

해당 실행에서 ~65% 적은 행

기호 정의 찾기

"Symbol"과 일치하는 842줄

83개의 실제 타입/메서드 선언

~90% 노이즈 제거

함수 본문 하나 읽기

cat은 전체 파일의 180+ 줄을 표시합니다

source는 12줄 함수를 추출합니다

해당 실행에서 ~93% 적은 소스 줄

공통 기호 컨텍스트 수집

별도의 노드, 소스, 호출자, 호출 수신자 및 테스트 쿼리

context는 해당 필드를 번들합니다

한 응답에 다섯 가지 증거 유형

주요 기능

기계 및 에이전트 워크플로 — 호출자, 호출 수신자, 역 테스트 커버리지, 안정적인 기호 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 텍스트를 반환하며, 그렇지 않으면 각 도구는 일반 응답 형식을 유지합니다.

카테고리

명령

기능

인덱싱

build . [--precise] [--memory-mode=low] [--max-memory=1GiB], stale, stats

AST를 파싱하고, 선택적으로 힙 사용량을 낮추는 것을 우선시하며, 그래프를 작성하고, 신선도와 상태를 확인합니다.

기계 검증

version --json, validate --repo PATH --binding-json JSON --json

삼중 상태 결과를 제공하는 버전 관리된 정확한 구조적 술어입니다.

탐색

query, callers [--depth N], callees [--depth N], path, source, node

심볼을 찾고, 호출 체인을 추적하며, 소스를 추출합니다.

컨텍스트

context, explain, focus, endpoint

한 번의 호출로 묶인 구조적 데이터입니다. 토큰 절약 기능입니다.

변경 분석

plan, review, risk, impact [--uncommitted|--since], changes [--git], api --since

편집 전 계획, 편집 후 검토, 위험 분석, 영향 범위, 드리프트 감지입니다.

아키텍처

boundaries, coupling, complexity, godobj, orphans, arity

품질 게이트, 죽은 코드, 결합도, 갓 객체를 감지합니다.

타입 및 구조체

fields, implementers [--test-only], interfaces, embeds, constructors, literals, usages, mutate, schema

구조체 필드, 인터페이스 충족 여부, 타입 사용을 분석합니다.

인프라

routes, sql, envs, errors, concurrency, globals, httpcalls, deps [--transitive], dependents, imports

HTTP 라우트(중첩된 Gin/Echo/Fiber 상수 그룹 및 Chi Route 클로저 포함), SQL, 환경 변수, 동시성, 아웃바운드 HTTP 호출, 임포트를 분석합니다.

보안

flow [term] [--source kind] [--sink kind] [--config path] [--no-tests]

SQL, 프로세스, 파일시스템, 아웃바운드 HTTP 싱크로 이어지는 잠재적 비신뢰 데이터 경로를 분석합니다.

테스팅

tests, coverage <TestFunc> [--exact-only] [--package name], untested [--pkg name] [--top N] [--exclude glob], fixtures, mocks

정방향 및 역방향 정확/가능 정적 테스트 귀속, 갭 조사, 경로 제외, 헬퍼, 목 구현을 제공합니다.

오류 추적

errorflow [--no-tests], trace

오류 문자열에서 HTTP 진입점까지 역방향 BFS를 수행합니다.

진단

doctor [--json], hotspot, returnusage, skeleton, diagram, changes, public

설치/PATH 진단, 핫스팟, 반환 사용량, API 시그니처, Mermaid 다이어그램을 제공합니다.

CI/CD

check [--since|--uncommitted], gate, snapshot save|diff|list|drop

정책 검사, 임계값 적용, 메트릭 스냅샷을 제공합니다.

텔레메트리

session create|end|audit|cleanup

에이전트 규정 준수 추적 및 등급 평가(A–F)입니다.

LLM-Wiki

wiki [--output dir]

llm-wiki/을 생성합니다 — 제로 비용 에이전트 오리엔테이션을 위한 머신 우선 마크다운 페이지(개요, 아키텍처, 핫스팟, 라우트, 환경, 오류, 동시성, 패키지별, API 표면)입니다.

요약

summary [--json]

단일 호출 코드베이스 브리핑: 상위 3개 핫스팟, 최악의 불안정성 패키지, 최고 복잡도 함수, 고아 개수, 갓 객체 개수를 제공합니다. 5개의 개별 호출을 대체합니다.

안정적 ID

identity <symbol-or-stable-id> [--package name] [--json]

패키지 내 줄 이동과 파일 이동에도 유지되는 모듈/패키지/리시버/이름 정체성을 출력하고 재해석합니다. 패키지는 외부 테스트 충돌을 명확히 구분합니다.

역방향 귀속

coverage <TestFunc> [--exact-only] [--package name] [--json]

하나의 명확한 테스트에 대한 전이적 제품 심볼 집합으로, 안정적 ID 경로와 정확/가능 전파를 포함합니다. 정적 증거만 제공하며 런타임 또는 브랜치 커버리지는 포함하지 않습니다.

미테스트

untested [--pkg name] [--top N] [--exclude glob] [--json]

정확/정적 테스트 귀속이 없는 호출된 프로덕션 심볼입니다. 정밀 빌드는 직접 테스트 호출을 정확히 바인딩하고 인터페이스 후보를 test_resolution=possible로 유지합니다. 반복 가능한 제외는 저장소 상대 경로와 일치합니다.

문서

doc <pkg[.Symbol]> [--json]

go doc 래퍼 — 모든 표준 라이브러리 또는 타사 심볼에 대한 시그니처 + 문서 주석을 제공합니다. 그래프가 필요 없습니다. 호출 체인이 프로젝트를 벗어날 때의 공백을 메웁니다.

전체 명령 참조 및 예제: 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@gograph

Claude 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에 압축된 컨텍스트 맵을 제공합니다:

외부 종속성 (기술 스택)

모듈

버전

github.com/gin-gonic/gin

v1.9.1

github.com/jackc/pgx/v5

v5.5.5

중요 심볼 (호출 수 상위)

심볼

종류

파일

줄

호출 수

(Server).Start

메서드

server.go

42

18

ValidateAuth

함수

auth.go

12

14


gograph는 gopls를 어떻게 보완하나요?

gopls는 Go 프로젝트의 컴파일러 기반 언어 서버입니다. 실시간 워크스페이스 진단, 탐색, 참조, 구현, 리팩터링 지원, 실험적 MCP 서버를 제공합니다. 편집기 및 컴파일러 인식 워크스페이스 작업에서는 여전히 첫 번째 선택이어야 합니다.

gograph는 저장소 및 에이전트 워크플로를 위한 다른 계층을 추가합니다:

  1. 영구 스냅샷 — CLI 분석은 안정적인 그래프 아티팩트를 검사할 수 있는 반면, MCP는 소스 분석 상태를 새로 고치고 요청된 정밀도 모드를 유지합니다.

  2. 저장소 수준 분석 — 변경 영향, 도달 가능성, 라우트, SQL, 환경 읽기, 보안 흐름 후보, 결합도, 정책 게이트가 함께 표현됩니다.

  3. 복합 응답 — 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를 참조하세요.

gograph MCP server

Available Tools

68 tools
gograph_apiA
Read-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.

NameRequiredDescriptionDefault
sinceYesA 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

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_arityA
Read-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.

NameRequiredDescriptionDefault
minNoInclusive minimum argument count to report (default: 5; 0 includes zero-arity functions)

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_boundariesA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
configNoOptional in-project path to a regular, non-linked boundary config (default .gograph/boundaries.json)
cursorNoOpaque next_cursor for the same graph snapshot and result selection.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so safety is covered. The description still adds real context beyond them: it refreshes source analysis, enforces that config paths stay inside the analyzed project, and reads every path component through the rooted repository boundary. It stops short of noting cost/pagination behavior of the refresh.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence followed by WHEN/NOT/RETURNS blocks that are easy to scan. The middle clause about path components and the rooted boundary is dense and slightly redundant with the config param description, holding it below a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even with no output schema, the RETURNS line tells the agent to expect structured pass state and boundary violations, and the WHEN/NOT guidance plus config prerequisites make the tool fully callable. Nothing an agent needs is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks – the config path must be in-project, non-linked, and defaults to .gograph/boundaries.json. It adds a bit of the boundary-safety constraint rather than merely restating field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (check) plus resource (package imports against a boundaries config) and immediately differentiates from siblings by naming gograph_deps and gograph_coupling as the tools for unconstrained exploration. An agent can pick this tool 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE (CI gates, post-edit reviews for layer separation) and NOT TO USE (dependency exploration) sections, with the alternative siblings named by tool. Also points to gograph_boundaries_create for creating the required config, covering the setup path.

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.

NameRequiredDescriptionDefault
configNoOptional in-project output path, absolute or repository-relative; linked components and existing entries are refused (default .gograph/boundaries.json)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_calleesA
Read-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.

NameRequiredDescriptionDefault
depthNoTraversal depth from 1 to 10 (default 1)
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
mermaidNoReturn Mermaid flowchart text instead of the normal response
functionYesThe name of the calling function to inspect callees for (supports short name 'Serve', dot-notation 'graph.Graph.Build', or fully-qualified ID)
no_testsNoExclude call edges originating in *_test.go files

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so safety is covered; the description nonetheless adds genuinely new behavioral context, namely that the MCP server refreshes source analysis before the call and that depth 2-10 expands the traversal. It stops short of latency/cost implications of that refresh, so not quite a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and defaults, then cleanly sectioned into WHEN/NOT TO USE and RETURNS. Dense but every sentence carries distinct information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the RETURNS section correctly carries the return-shape burden (callee symbols, package paths, file locations, call-site line numbers, Mermaid text) and the refresh behavior is disclosed. An agent has everything needed to invoke and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 goes further by explaining the default fan-out and the depth 2-10 expansion semantics, and by naming the mermaid=true alternate response mode. It adds meaning beyond the schema rather than restating it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Find functions and methods called by the specified function') and immediately scopes it against sibling tools by name ('use gograph_callers', 'use gograph_deps'). An agent can select it correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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 that name the two most confusable alternatives and the exact condition that routes to each (upstream callers vs. package dependency trees). This is 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_callersA
Read-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.

NameRequiredDescriptionDefault
depthNoTraversal depth from 1 to 10 (default 1)
exactNoRequire an exact symbol-name or fully-qualified-ID match
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
mermaidNoReturn Mermaid flowchart text instead of the normal response
functionYesThe target function or method (supports short name 'BuildGraph', interface notation 'Repository.Delete', concrete dot-notation 'Store.Delete', or a fully-qualified ID)
no_testsNoExclude call edges originating in *_test.go files

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so safety is covered; the description's 'Read-only; no persistent side effects' partly duplicates that. It adds genuine non-obvious behavior beyond the annotations: the server refreshes source analysis before the call, the default is one-hop fan-in with depth 2-10 expanding callers-of-callers, and interface method calls expand through implementations but report a shared source call site once.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded: the core action leads, then scope/defaults, then WHEN TO USE / NOT TO USE / RETURNS blocks. Dense but each block carries distinct information; only the 'Read-only; no persistent side effects' clause is somewhat redundant with annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the RETURNS block (caller symbols with package paths, file locations, call-site line numbers, and Mermaid text) is necessary and present. Combined with pagination notes implied by cursor/limit, the definition gives an agent everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning the schema lacks: it explains the depth semantic (default one-hop vs 2-10 expanding callers-of-callers), the mermaid=true output switch, and the interface/concrete dot-notation behavior behind the 'function' and 'exact' parameters. These are usage-level semantics not stated in the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find functions and methods that call the specified function or interface method') and immediately differentiates from siblings by contrasting with gograph_impact (upstream blast radius) and gograph_callees (downstream). An agent can distinguish it from the ~60 sibling tools without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Contains explicit WHEN TO USE ('Before renaming, removing, or changing a function or interface method signature') and NOT TO USE clauses that name alternative tools (gograph_impact, gograph_callees) with the conditions that select each. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_capabilitiesA
Read-onlyIdempotent

List the running gograph server version, all available 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 record the analysis instrument and orient before issuing analytical queries. NOT TO USE: Do not repeat after capabilities are cached in context. RETURNS: Structured JSON with version, every registered tool name, one-line purposes, recommended workflow sequences, and known static-analysis limitations.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so much is covered. The description nonetheless adds real value by stating there is no graph-state prerequisite once the server has started and by describing the return payload, which annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence, then labeled WHEN TO USE / NOT TO USE / RETURNS sections. Every sentence carries distinct information; there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no output schema, the description compensates by enumerating the return contents (version, tool names, purposes, workflow sequences, limitations). An agent knows exactly what it gets and when to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which is the baseline-4 case. The schema is empty and the description correctly implies a no-arg invocation, so no parameter clarification is needed or missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb (List) and a clearly scoped set of resources: server version, all registered MCP tools, their purposes, and recommended workflows. This meta/self-description role is unmistakably distinct from every analytical sibling such as gograph_summary or gograph_stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE ('call once per session to orient before issuing analytical queries') and NOT TO USE ('do not repeat after capabilities are cached'). Both the triggering condition and the anti-pattern are named, 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_changesA
Read-onlyIdempotent

Compare Go declaration fingerprints, including bodies, without marking every symbol in an edited file modified. Without git_ref, inspects trusted persisted graph.json without refreshing, or the startup fallback if no usable artifact exists. With git_ref, refreshes and extracts a confined declaration baseline without compiling application code. Existing but deselected files are excluded, not deleted; unsafe inputs and parse failures produce diagnostics, never deletion proof. Missing legacy declaration fingerprints produce unknown. Read-only analysis. WHEN TO USE: After editing to identify changed declarations before impact/review. NOT TO USE: For line-level diffs or a complete census when evaluation is partial/cannot_evaluate. RETURNS: Native gograph.changes.v1 with complete/partial/cannot_evaluate, diagnostics, changed_files, and new/modified/deleted/excluded/unknown symbol rows; CLI uses the same value and exits 2 for incomplete evaluation. Uncommitted modes compare declarations against HEAD, including selected untracked Go files. Current-graph consumers refuse incomplete comparisons, deleted declarations requiring historical caller evidence, and missing/ambiguous graph identities. Inspect changes --git REF for the declaration census; rebuild before traversing newly added symbols.

NameRequiredDescriptionDefault
git_refNoOptional git reference to compare against (e.g., 'main', 'HEAD~5', 'v1.4.50')

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only/idempotent safety profile, and the description layers rich additional context: behavior with vs without git_ref, that deselected files are excluded rather than deleted, that unsafe inputs/parse failures yield diagnostics and never deletion proof, and that missing legacy fingerprints resolve to 'unknown'. This is exactly the beyond-annotations behavioral detail the dimension rewards.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose and uses clear WHEN/NOT/RETURNS sectioning, so structure is strong. However it is quite long and dense for a one-parameter tool, with some jargon-heavy clauses (native gograph.changes.v1, current-graph consumers) that could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 carries the full return-value burden and discharges it well by enumerating the complete/partial/cannot_evaluate states, diagnostics, changed_files, and the symbol-row categories, plus CLI exit-code semantics. For a complex comparison tool this is thoroughly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the single git_ref parameter is already documented, establishing a baseline of 3. The description adds genuine meaning by explaining the semantic split between omitting git_ref (trusted persisted graph, no refresh) and supplying it (refresh and confined baseline extraction), which the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The lead sentence states a specific verb and resource: compare Go declaration fingerprints including bodies, with the key differentiator of not marking every symbol in an edited file as modified. It is distinguishable from siblings like gograph_stale and gograph_impact, though the opening clause is dense and takes a moment to parse.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE ('After editing to identify changed declarations before impact/review') and NOT TO USE ('For line-level diffs or a complete census when evaluation is partial/cannot_evaluate') sections route the agent precisely, and it names a concrete alternative workflow ('Inspect changes --git REF'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_checkA
Read-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. Uncommitted modes compare declarations against HEAD, including selected untracked Go files. Current-graph consumers refuse incomplete comparisons, deleted declarations requiring historical caller evidence, and missing/ambiguous graph identities. Inspect changes --git REF for the declaration census; rebuild before traversing newly added symbols.

NameRequiredDescriptionDefault
sinceNoGit 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
configNoOptional checks.json path; relative/default paths are project-confined, while an absolute path explicitly selects a regular local file
uncommittedNoIf true, include uncommitted changes in the analysis scope

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly/idempotent/no-destructive/no-open-world), the description discloses substantial behavior: config path confinement rules, how a `.json` baseline is validated vs. treated as a Git ref, what uncommitted mode compares against, and specific refusal conditions (incomplete comparisons, deleted declarations, missing/ambiguous graph identities). This is rich operational context the annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose with clearly labeled WHEN/NOT/RETURNS sections that aid scanning. It is dense (config path semantics and baseline validation are stated at near-schema level of detail and partially restated), but every section is purposeful and no sentence is pure filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies a RETURNS summary (pass/warn/fail status, findings, summary counts) and covers the tricky edge cases (incomplete comparisons, historical caller evidence, identity ambiguity) an agent must anticipate. Complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning: it clarifies the marker/linked-component validation for `.json` baselines, that the serialized root is ignored, and that otherwise the value is extracted as a Git ref. That goes beyond the schema's terse parameter text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('run static policy checks') and enumerates the exact check families covered (boundaries, API drift, route/export tests, coverage, orphans, globals, arity, complexity). An agent can tell this is a composite policy-check tool that bundles what the sibling single-topic tools (gograph_boundaries, gograph_coverage, etc.) expose individually.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'WHEN TO USE: During PR review or pre-commit analysis' and 'NOT TO USE: For CI process exit enforcement (use CLI gograph gate)', giving both the trigger context and the named alternative. Nothing about when to select this over siblings is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_complexityA
Read-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.

NameRequiredDescriptionDefault
symbolNoOptional Go function or method symbol name substring to filter the complexity report (e.g., 'Build')

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_concurrencyA
Read-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.

NameRequiredDescriptionDefault
termNoOptional filter term (e.g., 'goroutine', 'mutex', 'channel')
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only/idempotent/no-destruction profile, and the description goes further by disclosing the server-side freshness check and refresh-in-current-mode behavior, plus the CHA/SSA retry on source changes. The 'Read-only; no side effects' clause merely restates annotations, and the 'RETURNS' details about file/line/kind are useful but expected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the resource set, then cleanly sectioned into WHEN TO USE / NOT TO USE / RETURNS. Slightly over-long due to the redundant 'Read-only; no side effects' line and a dense freshness/refresh sentence, but overall well organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only discovery tool with no output schema, the description supplies the return shape (file locations, line numbers, primitive kind), the empty-result case, and the explicit exclusion of channel receives and select statements. Combined with annotations covering safety and the schema covering params, nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 term, limit, and cursor. The description only adds example filter terms ('mutex', 'goroutine', 'channel'), which is marginal value over the schema; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Find) and enumerates the exact resource set: goroutine spawns, channel sends, and calls on sync.Mutex/RWMutex, WaitGroup, and Once. It further distinguishes itself from siblings by directing sequential-flow queries to gograph_callers/gograph_callees, so an agent can identify this tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE (race-safety audit, async flow understanding, locating synchronization points before a concurrency refactor) and NOT TO USE (sequential call flow, with named alternatives gograph_callers/gograph_callees). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_constructorsA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
structYesThe exact name of the target Go struct to find constructors for (e.g., 'User', 'Config')

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds valuable context beyond that: the freshness check before the call, refresh in the current analysis mode, and CHA/SSA retry after source changes, plus the empty-result behavior. It does not, however, detail pagination/cursor interaction beyond what the schema states.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core definition and organized into labeled WHEN TO USE / NOT TO USE / RETURNS blocks that make scanning easy. The freshness/retry sentence is dense and somewhat implementation-flavored, but it still earns its place as behavioral context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the RETURNS section describes the return shape (constructor names with signatures, package paths, file locations; empty when none found). Combined with 100% schema coverage on inputs and the sibling routing, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so limit, cursor, and struct are all fully documented in the schema. The description adds no syntax or format detail for the struct parameter beyond the schema's own example. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Find all factory and constructor functions that instantiate and return a named Go struct,' with a parenthetical defining the exact return-type condition. It explicitly disambiguates from the closest siblings (gograph_literals, gograph_fields), so the agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit WHEN TO USE conditions (finding the canonical creation path, pre-modification impact checks) and NOT TO USE exclusions that name the correct alternative for each case (literals, fields). Nothing is left to inference about when this tool is the right pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_contextA
Read-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 in both text and gograph.read.v1 structured content; a missing symbol is a named error. source_error reports a partial context when indexed metadata exists but source cannot be served, also named in graph_state.read_diagnostic. With uncommitted=true, returns a contexts[] array; count:0 when no uncommitted symbols exist. Uncommitted modes compare declarations against HEAD, including selected untracked Go files. Current-graph consumers refuse incomplete comparisons, deleted declarations requiring historical caller evidence, and missing/ambiguous graph identities. Inspect changes --git REF for the declaration census; rebuild before traversing newly added symbols.

NameRequiredDescriptionDefault
exactNoRequire an exact symbol-name or fully-qualified-ID match in single-symbol mode.
symbolNoThe exact name, dot-notation 'graph.Graph', or ID of the symbol to retrieve context for.
uncommittedNoIf true, return context for all uncommitted modified symbols bundled in one response.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotent/destructive/openWorld, and the description adds substantial context beyond them: the freshness-check-before-call behavior, precise/precise_fallback CHA/SSA retry semantics, the audit-session telemetry caveat, and the uncommitted-mode declaration-vs-HEAD comparison rules including refusal conditions. It also documents partial-failure behavior (source_error, graph_state.read_diagnostic) and named errors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose and clearly labeled WHEN TO USE / NOT TO USE / RETURNS sections make it scannable despite its length. The opening paragraph is dense with internals (CHA/SSA retry, precise_fallback) that are less relevant to selection, adding some weight without much routing value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 carries the full burden and meets it: it spells out the JSON return fields (node, nodes[], source, callers[], callees[], tests[], test_results[], role), the uncommitted contexts[] variant, error/partial-context states, and the git-inspection follow-up. For a tool with a batch mode and multiple failure paths, this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already defines exact, symbol, and uncommitted, making the baseline 3. The description adds value by tying uncommitted=true to a different return shape (contexts[], count:0) and to declaration-census/HEAD comparison semantics, which goes slightly beyond the schema's own wording.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (fetch) and resource (pre-flight context bundle for a single Go symbol) and enumerates exactly what the bundle contains: AST node metadata, source, direct callers, direct callees, tests, and role classification. It distinguishes itself from siblings by explicitly naming gograph_focus and gograph_impact as the tools for adjacent needs, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Includes explicit WHEN TO USE ('first call before editing a symbol — eliminates 4–5 separate tool roundtrips') and NOT TO USE clauses that name the alternatives and the conditions that select them (gograph_focus for package orientation, gograph_impact for transitive blast radius). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_couplingA
Read-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.

NameRequiredDescriptionDefault
mermaidNoReturn Mermaid flowchart text instead of structured JSON
packageNoOptional package name substring to filter results
internal_onlyNoRestrict 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_stdlibNoInclude standard-library packages in the report. Default false — users asking 'how coupled is my code?' rarely care about stdlib coupling.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_coverageA
Read-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.

NameRequiredDescriptionDefault
testYesExact test name or canonical stable test symbol ID
packageNoOptional exact Go package name used only to disambiguate matching test symbols
exact_onlyNoReturn only symbols reached entirely through exact/static edges

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_dependentsA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
mermaidNoReturn Mermaid flowchart text instead of the normal response
packageYesThe package to find dependents for (e.g., 'internal/auth', 'auth', or a full import path)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/no-destructive safety, so 'Read-only; no side effects' is largely redundant. However, the description adds genuine behavior beyond the annotations: the server refreshes source analysis before the call (freshness guarantee) and the mermaid return-format branch. This extra context is useful but modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then cleanly sectioned WHEN TO USE / NOT TO USE / RETURNS. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only query with no output schema, the description covers purpose, routing to alternatives, freshness behavior, and return format (including the mermaid variant). Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so limit, cursor, mermaid, and package are all documented in the schema itself. The description only echoes the mermaid=true behavior and adds no syntax or format detail beyond what the schema already provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find all packages that import the named package') and distinguishes itself from siblings by naming gograph_deps as its inverse. An agent can tell exactly what this returns 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE ('Before a package-level interface change or removal') and NOT TO USE ('For a single function's callers (use gograph_callers)') with a named alternative. The condition selecting the sibling is fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_depsA
Read-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.

NameRequiredDescriptionDefault
mermaidNoReturn Mermaid flowchart text instead of structured JSON
packageYesThe target package path or name to inspect (e.g., 'internal/search', 'internal/cli')
transitiveNoIf true, return the full transitive import closure via Breadth-First Search (BFS)

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_diagramA
Read-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.

NameRequiredDescriptionDefault
group_byNoGrouping level: 'package' (default), 'module', 'service', or 'file'
max_depthNoMaximum BFS depth from graph roots (0 = unlimited)
include_stdlibNoIf true, include Go standard library packages in the diagram

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_docA
Read-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.

NameRequiredDescriptionDefault
queryYesThe go doc query string. Examples: 'fmt.Errorf', 'net/http.HandleFunc', 'io.Reader', 'github.com/jackc/pgx/v5.Conn.QueryRow'

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_embedsA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
structYesThe exact name of the target struct to inspect embedding relationships for (e.g., 'Symbol', 'PackageNode')

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, so 'Read-only; no side effects' is redundant. However the description adds genuinely useful disclosures beyond the annotations: the freshness check/refresh behavior before the call and the CHA/SSA retry on precise and precise_fallback graphs after source changes. These are real behavioral traits an agent cannot get from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then organizes WHEN/NOT/RETURNS into scannable labeled clauses. The freshness/CHA-SSA sentence is somewhat implementation-heavy for the value it adds, but the overall structure is tight and every other sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description spells out the return shape (embedding parent struct names with package paths and file locations, empty when nowhere embedded), so an agent knows exactly what to expect. Together with usage guidance and freshness semantics, the definition is complete for a 3-param read-only query.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so limit, cursor, and struct are all documented in the schema itself. The description only restates that a named struct is the target, adding no syntax or edge-case detail (e.g., exact-name matching, pagination semantics) beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Find) and resource (Go structs that embed the named struct via anonymous field composition), and explicitly distinguishes itself from gograph_implementers and gograph_usages. An agent can identify the tool's niche 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Has explicit WHEN TO USE ('understanding how a base type is extended', 'estimate blast radius before modifying a shared embedded struct') and NOT TO USE sections that name the two alternative tools for adjacent questions. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_endpointA
Read-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).

NameRequiredDescriptionDefault
depthNoBFS depth for call chain traversal, clamped to 1-20 (default: 5)
queryYesRoute pattern ("POST /api/users"), path suffix ("POST /users"), or handler symbol name ("CreateUser"). Constant grouped prefixes are resolved; dynamic prefixes remain best-effort.
mermaidNoReturn Mermaid flowchart text instead of structured JSON
include_testsNoInclude routes registered in *_test.go files

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness2/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_envsA
Read-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.

NameRequiredDescriptionDefault
termNoOptional filter term (e.g., 'DATABASE' matches DATABASE_URL, DATABASE_HOST, etc.)
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context beyond the annotations: the freshness check before the call, mode-dependent CHA/SSA retry after source changes, and an empty-list return when no reads match. It restates 'read-only; no side effects' (redundant with annotations) but the freshness/retry disclosure is substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded: purpose first, then behavior, then labeled WHEN TO USE / NOT TO USE / RETURNS sections. It runs somewhat long and the term example duplicates the schema, but every section maps to a decision the agent must make, so there is little waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so (key names, calling function, file/line, empty case). Combined with freshness/retry behavior and full parameter coverage, an agent has what it needs; only the limit/cursor pagination interplay is left entirely to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are documented in the schema itself (term with the DATABASE example, limit as rows-per-page with byte budget, cursor as opaque next_cursor). The description largely repeats the term example and adds no semantics for limit or cursor, so the baseline 3 for full schema coverage is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (find) and resource (environment variable reads) and enumerates the exact detection mechanisms (os.Getenv, os.LookupEnv, config frameworks) plus enclosing function context. An agent can distinguish this from siblings like gograph_globals or gograph_literals without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE (deployment manifest, documenting required env vars, auditing secrets) and NOT TO USE clauses, including a named alternative (gograph_sql for database queries) and the clarification that this is static, not runtime, analysis. Routing is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_errorflowA
Read-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.

NameRequiredDescriptionDefault
termNoThe error string or sentinel error name (e.g., 'ErrInvalidToken' or 'invalid token')
queryNoThe error string or sentinel error name (preferred over term)
no_testsNoIf true, exclude test files from related-test collection (matches CLI --no-tests)

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_errorsA
Read-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.

NameRequiredDescriptionDefault
termNoOptional keyword to filter the returned error structures (e.g., 'ErrInvalid', 'unauthorized')
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
no_testsNoExclude error sites in *_test.go files

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the description's 'Read-only; no side effects' is partly redundant. It does add genuinely new behavioral context: the server checks freshness before the call, refreshes in the requested analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes – useful preconditions an agent wouldn't infer from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and clearly sectioned into WHEN/NOT/RETURNS blocks. The freshness/CHA-SSA sentence is somewhat dense and internal-mechanism heavy, but every part is scannable and earns its place for an agent deciding how to call it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly carries the return-shape burden: it specifies the list contents (message text, file path, line number) and the empty-result case. Combined with usage and behavioral notes, an agent has everything needed to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so term/limit/cursor/no_tests are already documented. The description restates the term filter with examples ('ErrInvalid', 'unauthorized') and implies pagination via 'empty when no matches found', but adds no semantics beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Find') and resource ('error and panic sites'), then enumerates the exact patterns detected (errors.New, fmt.Errorf, sentinel var declarations, panic calls). It explicitly distinguishes itself from the sibling gograph_errorflow, so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit WHEN TO USE scenarios (cataloging error codes, standardizing messages, checking whether a string exists) and an explicit NOT TO USE clause pointing to the alternative gograph_errorflow for propagation tracing. When/when-not/alternative are all covered unambiguously.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_explainA
Read-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.

NameRequiredDescriptionDefault
symbolYesThe name or ID of the symbol to explain (supports short name 'CreateUser', dot-notation 'graph.Graph', or fully-qualified ID)

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_exploreA
Read-onlyIdempotent

Explore a lexical term or Go symbol in one bounded call. Standard mode combines ranked matches with selected-symbol source, direct callers/callees, tests, and exact impact. compact=true returns discovery, selected-node metadata, role, complete counts, and explicit omitted_sections while suppressing token-heavy bodies (default limit 5). deep=true retains standard evidence and adds bounded depth-3 exact identity callers/callees, package context, and explanation (default limit 25). compact and deep are mutually exclusive; an explicit limit overrides their defaults. Possible dispatch is excluded from bundled identity impact and deep traversals. The MCP server refreshes source analysis before the call. Read-only; no persistent side effects. Question-like text is lexical, not model-interpreted. Focused tools remain authoritative for complete output. RETURNS: shared gograph.explore.v1 with mode, selection_basis, ambiguity, totals, truncation, and omission metadata.

NameRequiredDescriptionDefault
deepNoExpanded response: standard evidence plus bounded depth-3 exact callers/callees, package context, and explanation; mutually exclusive with compact
exactNoRequire exact resolution for selected-symbol context; broad lexical matches remain visible
limitNoMaximum rows returned per section, clamped to 1-100; defaults to 5 compact, 10 standard, or 25 deep
queryYesA symbol, fully-qualified ID, lexical feature term, or short question-like phrase to explore
compactNoLow-token response: matches, selected node/role, complete counts, and explicit omissions; mutually exclusive with deep

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint/idempotent/destructive:false, which already establish the safety profile), the description adds genuine behavioral context: source analysis is refreshed before the call, possible dispatch is excluded from bundled identity impact and deep traversals, compact/deep are mutually exclusive, and question-like text is lexical rather than model-interpreted. 'Read-only; no persistent side effects' is redundant with the annotations, but the other disclosures are valuable and non-contradictory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is dense but front-loads the core purpose before diving into modes, constraints, and return shape, so an agent can extract the essentials quickly. Some sentences are load-bearing (mutual exclusivity, dispatch exclusion, refresh behavior), though 'Read-only; no persistent side effects' duplicates the annotations and the overall length is on the heavy side.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex multi-mode aggregation tool with no output schema, the description supplies the missing return-value information explicitly via the RETURNS block (shared gograph.explore.v1 with mode, selection_basis, ambiguity, totals, truncation, omission metadata) and covers mode defaults, limits, and exclusions. Nothing an agent needs to invoke this correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 five parameters including the compact/deep exclusivity and the clamped 1-100 limit. The description reinforces mode defaults (5/25) but adds little semantic detail beyond what the schema provides, matching the baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb and resource (explore a lexical term or Go symbol) and frames the tool as a single bounded aggregation call that bundles matches, source, callers/callees, tests, and impact. It differentiates itself from the many focused siblings by noting that 'focused tools remain authoritative for complete output,' which tells an agent this is the bundled-overview option. The differentiation is meaningful though it references the sibling class generically rather than naming specific tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly explains the mode-selection conditions (compact for low-token discovery, deep for expanded evidence, mutual exclusivity, explicit limit overriding defaults) and when to prefer this over focused tools for complete output. It provides strong usage context but stops short of explicit when-not-to-use guidance or naming the specific alternative tools for a given task.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_fieldsA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
structYesThe exact name of the target struct to inspect fields for (e.g., 'Config', 'User')

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the bare safety profile is covered. The description adds genuinely non-obvious behavior: a freshness check performed server-side, refresh in the requested analysis mode, and CHA/SSA retry for precise/precise_fallback graphs after source changes. It also states the empty-result case, though it does not discuss rate limits or how pagination interacts with graph snapshots.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The labeled WHEN TO USE / NOT TO USE / RETURNS structure makes it scannable and front-loads the core action. It is somewhat dense with implementation detail about freshness and CHA/SSA retries, but each sentence carries routing or behavioral value; little is filler beyond the redundant 'Read-only; no side effects.'

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 correctly supplies the return shape (array of {name, type, tag}) and the empty/not-found case. Combined with schema-documented pagination and the annotations covering safety, an agent has everything needed to call and interpret this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 struct, limit, and cursor including bounds and byte-budget caveats. The description only implies the 'struct' argument's role ('named Go struct') and adds no syntax or format detail beyond the schema. Baseline 3 is correct when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 ('Extract all declared fields from a named Go struct') and enumerates exactly what is returned: field names, Go types, and raw tag strings. It further distinguishes this from sibling tools by naming gograph_node/gograph_source for methods and gograph_literals for initialization sites, so an agent can route without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE clause covers three concrete scenarios (mapping serialization tags, inspecting layouts, enumerating fields before adding one), and the NOT TO USE clause names both alternatives and the conditions that select them (methods vs. initialization sites). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_fixturesA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
packageYesThe package path or name (e.g., 'internal/auth')

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/destructive, but the description adds genuine operational context: the server checks freshness before the call, refreshes in the requested analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes. 'Read-only; no side effects' is redundant with annotations, but the staleness/retry behavior is real added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded: purpose first, then usage routing, then returns. However, the freshness/CHA/SSA retry sentence is fairly detailed implementation trivia that borders on noise for a selection decision. Still, structure is clean and labels (WHEN TO USE, NOT TO USE, RETURNS) make it scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return burden and does so explicitly (helper structs and factory functions, empty when none exist), plus the pagination behavior. An agent has everything needed to call it correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 package, limit, and cursor. The description only implies the package scoping ('for a named package') and says nothing about pagination or the limit/cursor semantics beyond what the schema already states. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Find test helper structs and factory/builder functions declared in *_test.go files for a named package.' This precisely distinguishes it from gograph_tests (test functions) and shared-setup detection, so an agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Includes explicit WHEN TO USE (before writing new tests, to avoid duplication) and NOT TO USE clauses that name alternatives: use gograph_tests for test functions exercising a symbol, and filesystem search for external test data files. Both the positive and negative routing conditions are spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_flowA
Read-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.

NameRequiredDescriptionDefault
sinkNoOptional sink kind: sql_query, process_execution, filesystem, or outbound_http
termNoOptional substring filter matched against functions, files, endpoints, and path steps
configNoSanitizer policy path inside the graph root (default .gograph/flow.json when present)
sourceNoOptional source kind: http_request, decoded_json, or environment
no_testsNoExclude functions in *_test.go files

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines5/5

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_focusA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
packageYesThe package path or name to focus on (e.g., 'internal/auth')

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, but the description adds freshness-check context and the CHA/SSA retry behavior on source changes, which is genuine behavioral value beyond the annotations. It does not describe pagination totals or failure modes beyond the empty-result case, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose followed by clearly labeled WHEN/NOT/RETURNS blocks; every sentence carries information. The behavior sentence about freshness and CHA/SSA retries is dense but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-shape burden and does so explicitly (files, symbol names, call edges, import paths, empty when package not found). Combined with annotations covering safety and the schema covering pagination, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 names the package focus conceptually but adds no syntax or format detail beyond the schema, and says nothing about limit/cursor semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Extract) and resource (structural summary of one Go package) and enumerates exactly what it returns: files, defined symbols, internal call edges, and package-level imports. It also names the siblings it is not for, so an agent can distinguish it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE (orienting to an unfamiliar package before editing) and NOT TO USE clauses that route to alternatives by name (gograph_context/gograph_source for a single symbol, gograph_query for global searches). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_globalsA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
packageYesThe package name or path to inspect (e.g., 'internal/config')

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint/openWorldHint, so safety is covered. The description adds substantial non-obvious behavior: freshness checks before the call, refresh in the requested analysis mode, and CHA/SSA retry on precise/precise_fallback graphs after source changes. It stops short of describing pagination semantics fully, but goes well 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then clearly delimited WHEN TO USE / NOT TO USE / RETURNS sections. Slightly dense with the freshness/CHA-SSA detail, but every sentence carries information and headings aid scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by describing the return payload (variable names, types, mutating functions, empty case). Combined with usage guidance and freshness behavior, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 package, limit, and cursor (including byte-budget and cursor-snapshot semantics). The description adds no parameter-level 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (find) and resource (package-level variable declarations / var blocks) plus the secondary output (functions that mutate them) scoped to a specific package. It clearly distinguishes itself from siblings like gograph_envs and from local-scope variable analysis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit WHEN TO USE (mutable global state audits, thread-safety hazards, shared singletons before concurrency refactors) and NOT TO USE (local-scope vars; environment variable reads, routed to gograph_envs). The alternative is named with the condition that selects it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_godobjA
Read-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.

NameRequiredDescriptionDefault
topNoMaximum results to return (default: 10)
callsNoMinimum outgoing call count (default: 15)
fieldsNoMinimum field count (default: 8)
methodsNoMinimum method count (default: 5)

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_hotspotA
Read-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.

NameRequiredDescriptionDefault
topNoNumber of results to return (default: 10, 0 = all)
include_testsNoInclude 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

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_httpcallsA
Read-onlyIdempotent

List a bounded page of HTTP evidence from imported, unshadowed net/http Get/Post/PostForm/Head calls and possible NewRequest/NewRequestWithContext construction. Client receiver methods and arbitrary URL-building functions are not inferred. Static strings and bounded lexical base + static suffix expressions are recorded; runtime environment values are never read. Construction is not dispatch proof. Workspace http_clients may explicitly map bases or env:KEY to scoped logical authorities; unresolved destinations remain workspace diagnostics. The MCP server refreshes source analysis before this call. Read-only. Optional term matches method, URL/base, or function. RETURNS: gograph.results.v1 rows with file/line and dynamic base/suffix or request-only evidence in detail, plus total/returned/truncated/next_cursor. For server routes use gograph_routes.

NameRequiredDescriptionDefault
termNoOptional filter term (matches method, URL, or function name — e.g., 'POST' or 'api.example.com')
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds valuable non-obvious behavior: 'The MCP server refreshes source analysis before this call,' 'runtime environment values are never read,' pagination via 'next_cursor' tied to a 'same graph snapshot,' and the caveat that 'Construction is not dispatch proof.' That is substantive context 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded: lead sentence states purpose, then scope exclusions, semantics, behavior, and return shape. Every sentence earns its place, though the wording is dense enough that a reader may need to parse carefully; it avoids filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given three params, no output schema, and a read-only bounded list tool, the description supplies the needed return shape (gograph.results.v1 rows, total/returned/truncated/next_cursor), pagination behavior, and scoping caveats. It is nearly complete for invocation, with minor gaps around filtering semantics beyond the term option.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema documents all three parameters with semantics (term matches method/URL/function, limit byte budget, cursor snapshot bounds). The description adds little beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description precisely states the resource (HTTP evidence from net/http calls) and the exact syntactic constructs captured (Get/Post/PostForm/Head, NewRequest variants) while bounding scope. It explicitly names the sibling it replaces for server routes ('For server routes use gograph_routes'), making it distinguishable from the large sibling set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states what is included (static strings, bounded lexical base + static suffix) and what is excluded ('Client receiver methods and arbitrary URL-building functions are not inferred'). The routing pointer to gograph_routes is an explicit alternative. However, it doesn't describe when an agent should reach for this tool over, e.g., gograph_literals or gograph_endpoint, leaving some selection inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_identityA
Read-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.

NameRequiredDescriptionDefault
symbolYesExact symbol name, package/receiver-qualified spelling, or canonical stable ID
packageNoOptional exact Go package name used to disambiguate matching symbols

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_impactA
Read-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; a bounded native page (including empty pages). Exact and possible paths remain distinct; Mermaid uses dotted edges for possible evidence. Uncommitted modes compare declarations against HEAD, including selected untracked Go files. Current-graph consumers refuse incomplete comparisons, deleted declarations requiring historical caller evidence, and missing/ambiguous graph identities. Inspect changes --git REF for the declaration census; rebuild before traversing newly added symbols.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
sinceNoGit ref (e.g. 'main', 'HEAD~5'): blast radius of all symbols changed since this ref
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
symbolNoSymbol name for single-symbol blast radius (supports short name 'ValidateToken', dot-notation 'graph.Graph', or fully-qualified ID)
mermaidNoReturn Mermaid flowchart text instead of the normal response
exact_onlyNoExclude any path that depends on possible call evidence; default false retains explicitly labeled possible results
uncommittedNoIf true, compute blast radius of all uncommitted modified symbols

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so 'Read-only; no side effects' is partly redundant. However the description adds substantial beyond-annotation behavior: a pre-call freshness check, refusal conditions for incomplete comparisons/deleted declarations/ambiguous identities, and the requirement to rebuild before traversing newly added symbols.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then modes, usage guidance, returns, and constraints in a scannable order. It is dense and slightly long, but nearly every sentence carries actionable detail rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden well: it lists the transitive upstream symbols, Mermaid flowchart text, bounded paging including empty pages, and the exact/possible distinction. Modes, constraints, and edge cases are all covered, leaving nothing an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning by framing the three mutually exclusive modes (symbol, uncommitted, since) and clarifying exact_only semantics (excludes paths relying on possible evidence) and mermaid output. It goes beyond the per-field schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (traverse backwards), resource (call graph / symbols), and scope (full upstream blast radius), which immediately distinguishes it from the one-hop sibling gograph_callers. An agent can tell exactly what it computes without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Has explicit WHEN TO USE ('before refactoring a core function to see what breaks') and NOT TO USE ('for direct one-hop callers only, use gograph_callers') guidance. The alternative and the condition that selects it are both named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_implementersA
Read-onlyIdempotent

Find all concrete structs that implement a named Go interface. Type-checked production results are merged with AST-discovered implementations from test files because production package loading excludes test variants. 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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
interfaceYesThe name of the interface (e.g., 'AuthService')
test_onlyNoIf true, return only structs defined in test or mock files (replaces gograph_mocks)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations that already declare read-only/idempotent behavior, the description discloses non-obvious mechanics: production type-checked results are merged with AST-discovered test implementations because package loading excludes test variants. It also explains freshness checking and CHA/SSA retry behavior for precise graphs, which materially affects result interpretation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and uses clear WHEN TO USE / NOT TO USE / RETURNS sections. It is slightly overstuffed, and 'Read-only; no side effects' duplicates the annotations, but the additional behavioral details earn most of their space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex graph-analysis tool with no output schema, the description covers purpose, behavioral mechanics, alternatives, and return format. An agent has enough context to call it correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 four parameters including limit, cursor, interface, and test_only. The description adds only a brief restatement of test_only's purpose, which is already present in the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource: 'Find all concrete structs that implement a named Go interface.' It explicitly distinguishes itself from siblings by naming gograph_interfaces for the inverse direction and gograph_fields for struct fields, so an agent can route correctly without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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. It names concrete scenarios (tracing polymorphism, dependency injection points, mocks) and points to the exact alternative tools for excluded cases (gograph_interfaces, gograph_fields).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_importsA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
packageYesThe exact import path of the target package to trace imports for (e.g., 'github.com/redis/go-redis')

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false. The description adds genuinely new context: the server checks freshness before the call, refreshes in the requested analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes. The 'read-only; no side effects' line merely restates annotations, but the freshness/retry behavior is valuable. A 4 fits given annotations carry the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose, then structures WHEN/NOT-TO-USE and RETURNS cleanly. Dense but every section earns its place; slightly long due to the freshness/CHA-SSA detail, but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description supplies a RETURNS section (file paths, package names, empty when unused) and covers the freshness/refresh behavior an agent needs to interpret results. Sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%; the package, limit, and cursor params are all documented in the schema, and the description's 'exact import path' wording reinforces the package format. It adds little beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: 'Find all files and packages that import a specific package by its exact import path.' It explicitly names the siblings it is not (gograph_deps for outgoing imports, gograph_dependents for short-name reverse lookup), so an agent can disambiguate without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Contains explicit WHEN TO USE ('isolating usage of a third-party library before removing/replacing it, or tracing where an internal package is consumed from outside') and NOT TO USE clauses that route to gograph_deps and gograph_dependents. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_interfacesA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
structYesThe name of the struct (e.g., 'AuthService')

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the safety bar is low. The description adds genuinely useful beyond-annotation context: freshness is checked before the call, a refresh happens in the current analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes. It stops short of describing pagination or the empty-result edge case in depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core one-line definition followed by clearly labeled WHEN/NOT/RETURNS sections. Some phrasing is dense (CHA/SSA retry detail) but each sentence carries distinct information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating returns (interface names, method signatures, file locations) and the empty case. Combined with the explicit usage routing and freshness behavior, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 struct, limit (byte budget caveat), and cursor. The description restates that a struct name is the input and clarifies the subset semantics of the query, but adds no syntax or format detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (find) and resource (Go interfaces satisfied by a struct), and explicitly frames itself as the inverse of gograph_implementers via duck-typing resolution. An agent can distinguish it from 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Includes explicit WHEN TO USE (know which contracts a struct implicitly fulfills, e.g. before refactoring a method) and NOT TO USE clauses that name the correct alternatives (gograph_implementers for the inverse, gograph_node/gograph_public for interface declarations). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_literalsA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
structYesThe name of the struct (e.g., 'User')

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), but the description adds non-obvious behavior: a freshness check before the call, a refresh in the requested analysis mode, and CHA/SSA retry on precise graphs after source changes. That is genuine context beyond structured fields, though it could clarify result caching or pagination interaction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose, then uses labeled WHEN/NOT/RETURNS blocks that are easy to scan. Slightly dense, particularly the analysis-mode freshness sentence, but every section earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return contract itself (file paths and line numbers, empty when no sites), plus usage conditions and behavioral caveats. Nothing an agent needs to invoke and interpret this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the struct, limit, and cursor semantics are already fully documented in the schema (opaque next_cursor, byte-budget caveat). The description reinforces the 'named struct' concept but adds no syntax or format detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb (find) and resource (composite-literal initialization sites for a named Go struct) and clarifies with concrete syntax Foo{...}. It distinguishes itself from siblings by naming gograph_constructors and gograph_envs, so an agent can separate it without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE (scoping a required-field migration blast radius) and NOT TO USE sections that name the correct alternatives for excluded cases (gograph_envs/grep for magic values, gograph_constructors for factory functions). No inference required to route correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_mocksA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
interfaceYesThe name of the interface (e.g., 'AuthService')

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/no-destructive, so 'Read-only; no side effects' is redundant. However the description adds genuinely non-obvious behavior beyond the annotations: the server checks freshness before the call, refreshes in the requested analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes. The empty-result behavior is also disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose before the equivalence note, then cleanly sectioned as WHEN TO USE / NOT TO USE / RETURNS. Slightly dense in the middle where the graph-freshness mechanics are packed into one long sentence, but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the RETURNS section correctly compensates by describing the return shape (test-file struct names with file locations, empty when none exist). Purpose, alternatives, behavior, and return values are all covered for a 3-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents limit, cursor, and interface (including the 'AuthService' example), so the baseline is 3. The description adds nothing further about parameter syntax, pagination usage, or how cursor interacts with the freshness/retry behavior described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find structs in *_test.go files that implement a named interface') and sharpens it with the domain gloss ('test doubles, mocks, and stubs'). It also declares its exact equivalence to the sibling gograph_implementers(test_only=true), so an agent can distinguish it from siblings without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Contains explicit WHEN TO USE and NOT TO USE sections, names the alternative (gograph_implementers without test_only) for the production case, and even recommends the canonical call for new code. There is no ambiguity left about when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_mutateA
Read-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.

NameRequiredDescriptionDefault
fieldYesThe field name to search for mutations (e.g., 'Status')
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description redundantly restates 'Read-only; no side effects'. It does, however, add real behavioral context: the server re-refreshes in the requested analysis mode, a precise graph widens detection (++/+=, pointer-alias, atomic/sync/wrapper, channel), and analysis re-runs after source edits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose followed by labeled WHEN/NOT/RETURNS sections make it scannable. Slightly dense in the middle sentence about analysis modes, but every sentence carries information and nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers selection constraints, freshness/re-analysis behavior, and return contents (mutation locations plus indirect mutator method names), which compensates for the absent output schema. Pagination is documented in the schema via limit/cursor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 goes further by explaining the 'Type.Field' qualified form for the required field parameter, which disambiguates same-named fields across unrelated types, and by stating the exclusion of local-variable assignments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource: 'Find struct-field and package-global mutation sites', which is a distinct capability from siblings like gograph_fields or gograph_usages. The scope qualifiers (excludes ordinary local-variable assignments) further sharpen what is returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE ('Diagnosing state changes or auditing mutability') and NOT TO USE clauses that name the correct alternatives: gograph_fields for declarations, gograph_literals for whole-struct initialization. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_nodeA
Read-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.

NameRequiredDescriptionDefault
nameYesThe exact symbol, package path, or Go file name to inspect (e.g., 'Graph', 'internal/search', 'server.go')
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior, but the description adds meaningful context: the MCP server checks freshness before the call, refreshes in the requested analysis mode, and precise graphs retry CHA/SSA after source changes. It also states empty return when the name is not found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, followed by WHEN TO USE, NOT TO USE, and RETURNS sections. The structure is clean and every sentence contributes selection or behavior information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description explains the return shape (node properties array with kind, file, line, signature) and the empty-result case. Combined with the schema covering pagination parameters, 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.

Parameters3/5

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 name, limit, and cursor in detail. The description's 'symbol, package, or file' phrase loosely maps to the name parameter but adds no syntax or format detail beyond the schema, making baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (fetch AST metadata for symbol/package/file) and enumerates returned fields. It explicitly distinguishes itself from gograph_source and gograph_callers/gograph_callees, so an agent can choose correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It has explicit WHEN TO USE and NOT TO USE sections, names the relevant alternatives (gograph_source, gograph_callers, gograph_callees), and gives the selecting condition (metadata-only lookups vs full source or call relationships).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_orphansA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial beyond that: the MCP server checks freshness and refreshes in the requested analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes. It also discloses the algorithm (full BFS reachability), which affects result interpretation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose, then labeled WHEN TO USE / NOT TO USE / RETURNS sections that make scanning easy. Dense but every clause carries information; the middle sentence on freshness/retry is somewhat heavy but genuinely useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description covers returns (orphan symbols with package paths and file locations, empty = none detected) plus pagination via the schema. For a read-only analysis tool, an agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for both params (limit, cursor), and the schema already explains the byte budget and opaque cursor semantics. The description adds no parameter detail beyond that, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Find functions and methods unreachable from runtime roots') and precisely enumerates what counts as a root (main/init, test/benchmark/fuzz, HTTP route handlers, eligible external exports, with internal/ exclusion). An agent can distinguish this dead-code detector from gograph_usages, gograph_callers, and gograph_untested without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE ('During code cleanup or dead-code audits') and NOT TO USE with named alternatives ('For checking one symbol's usages use gograph_usages or gograph_callers'). Routing is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_pathA
Read-onlyIdempotent

Find the best call chain from one symbol to another. Competing paths rank exact before possible, then shorter, production before tests, typed resolution before heuristics, with a deterministic canonical tie-breaker. 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.

NameRequiredDescriptionDefault
toYesThe target symbol name
fromYesThe starting symbol name
mermaidNoReturn Mermaid flowchart text instead of structured JSON

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuine beyond-annotation context: the ranking rules (exact before possible, shorter, production before tests, typed before heuristics), the canonical tie-breaker, and that the server refreshes source analysis before the call. It does not cover error/failure behavior, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then organizes ranking rules, mutation/safety note, and WHEN/NOT/RETURNS blocks. Slightly dense with the ranking sentence, but each clause carries meaning and nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 explicit RETURNS section (from, to, found, steps[], plus Mermaid text when mermaid=true) fills that gap. Combined with usage routing and ranking behavior, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented in the schema. The only added hint is 'with mermaid=true, Mermaid flowchart text,' which largely restates the mermaid parameter's own schema description. Baseline 3 when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Find the best call chain from one symbol to another.' It also distinguishes itself from the sibling gograph_impact by name, so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Contains explicit WHEN TO USE ('confirm reachability between non-adjacent symbols') and NOT TO USE ('for all transitive upstream callers, use gograph_impact') sections, naming the alternative and the condition that selects it. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_planA
Read-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. Uncommitted modes compare declarations against HEAD, including selected untracked Go files. Current-graph consumers refuse incomplete comparisons, deleted declarations requiring historical caller evidence, and missing/ambiguous graph identities. Inspect changes --git REF for the declaration census; rebuild before traversing newly added symbols.

NameRequiredDescriptionDefault
symbolNoThe name of the symbol you intend to modify (supports short name 'ValidateToken', dot-notation 'graph.Graph', or fully-qualified ID)
uncommittedNoSet to true to generate a global plan for all currently uncommitted changes across the repository
with_contextNoIf set to true, bundles full context, source code, callers, callees, and architectural roles for each symbol to be inspected

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only/idempotent/non-destructive, yet the description adds real behavioral context: the server checks freshness before the call, retries CHA/SSA for precise modes, uncommitted modes compare declarations against HEAD, and consumers refuse incomplete comparisons or missing/ambiguous graph identities. This is disclosure well beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and well-organized into WHEN/NOT/RETURNS blocks. It is dense and long, and 'Read-only; no side effects' partially restates the readOnlyHint annotation, but nearly every sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by fully describing the JSON return shape (inspect_first[], tests[], routes[], env[], risk object, inspect_contexts[] with with_context). Combined with the freshness and refusal semantics, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: with_context=true inlines full source/callers/callees and eliminates follow-up gograph_context calls, and uncommitted=true produces a global plan for all uncommitted changes. Only the symbol parameter's short/dot/fully-qualified forms are left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Generate') and resource ('structured pre-edit plan for a target symbol') and enumerates the plan's contents (symbols to read first, tests, routes, env vars, public-API/SQL risk). It distinguishes itself from siblings by naming gograph_review and gograph_context explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The WHEN TO USE / NOT TO USE block is explicit: use before multi-file refactoring or architectural changes; do not use for trivial single-line fixes or post-edit verification, and it routes the latter to gograph_review. The with_context guidance further tells the agent how to avoid follow-up gograph_context calls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_publicA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
packageYesThe package name or path to inspect (e.g., 'internal/auth')

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description goes beyond that by disclosing the server-side freshness check and refresh in the current analysis mode, and the CHA/SSA retry after source changes, plus empty-result semantics — meaningful operational behavior not captured by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose, then uses clearly delimited WHEN TO USE / NOT TO USE / RETURNS blocks. Each sentence carries distinct information (scope, freshness behavior, routing, empty-result behavior) with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by describing the return shape (exported symbol names with kinds and file locations, empty when no exports or package not found). Combined with annotation coverage and freshness notes, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so package, limit, and cursor are already documented in the schema (including the byte-budget note and opaque cursor semantics). The description adds no parameter-level detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List all exported (public) symbols of a specific package') and enumerates the kinds returned (functions, methods, types/interfaces, variables, constants). It also scopes itself against siblings by naming the private-symbol and drift alternatives, so an agent can distinguish it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Contains explicit WHEN TO USE (reviewing a package's public contract, integration docs, checking exposure) and NOT TO USE conditions with named alternatives: gograph_node/gograph_focus for unexported symbols and gograph_api for drift against a baseline. This is textbook routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_queryA
Read-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.

NameRequiredDescriptionDefault
termNoOne keyword search term (e.g. 'AuthService')
limitNoMaximum rows per page; the byte budget may return fewer.
termsNoOptional list of keyword terms combined with OR semantics
cursorNoOpaque next_cursor for the same graph snapshot and result selection.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: the server refreshes source analysis before the call, multiple terms use OR semantics, and results are empty when no terms match. It stops short of describing pagination/cursor behavior, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose, then uses labeled WHEN/NOT/RETURNS sections. Each sentence carries distinct information and there is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description steps in to describe return values (matching symbols, files, imports; empty on no match) and pagination is hinted via the cursor semantics. For a search tool with full annotation and schema coverage, nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 term, terms (OR semantics), limit (byte budget caveat), and cursor. The description largely restates the OR semantics already present in the schema and adds little new parameter-level meaning. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Search) and a well-scoped resource (graph index for symbols, packages, files, and import edges), plus the matching mechanism (keyword substrings). An agent can distinguish it from siblings like gograph_source and gograph_deps 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE (initial exploration with a keyword but unknown package) and NOT TO USE clauses that name the exact alternatives (gograph_source, gograph_node for known symbols; gograph_deps for dependency trees). Routing is fully specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_returnusageA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
functionYesThe function name to analyse (e.g., 'ValidateToken')

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, and closed-world behavior. The description adds meaningful non-annotation context: freshness checking, conditional CHA/SSA retry after source changes, and the empty-result case, though it also redundantly repeats '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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and structured with WHEN TO USE, NOT TO USE, and RETURNS labels. It is mostly efficient, but repeats the read-only/no-side-effects point already covered by annotations and includes implementation-level CHA/SSA detail that is useful but not tightly edited.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return shape, classification values, and empty-result behavior. It also covers freshness and retry behavior, making the definition complete enough for an agent to call the tool and interpret its results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 function, limit, and cursor semantics. The description names the function parameter and return classifications but adds no syntax, constraints, or edge cases beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Show how each caller uses') and resource ('return value(s) of a named function'), with clear distinctions from sibling tools in the NOT TO USE section. An agent can tell it apart from gograph_callers and gograph_errorflow without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit WHEN TO USE guidance tied to a concrete scenario (changing a function's return signature) and NOT TO USE guidance naming the alternative tools gograph_errorflow and gograph_callers. Routing is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_reviewA
Read-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). Uncommitted modes compare declarations against HEAD, including selected untracked Go files. Current-graph consumers refuse incomplete comparisons, deleted declarations requiring historical caller evidence, and missing/ambiguous graph identities. Inspect changes --git REF for the declaration census; rebuild before traversing newly added symbols.

NameRequiredDescriptionDefault
symbolNoThe name of the target symbol to run the design review for (e.g. 'AuthService')
uncommittedNoSet to true to review all uncommitted/modified changes in the repository

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial context beyond them: freshness checking and refresh behavior, CHA/SSA retry on the precise graph, mode-dependent semantics ('Uncommitted modes compare declarations against HEAD, including selected untracked Go files'), and refusal conditions (incomplete comparisons, deleted declarations, missing/ambiguous identities). This is rich behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and clearly segmented into WHEN TO USE / NOT TO USE / RETURNS sections, so structure aids scanning. It is somewhat verbose, with internal engine details ('precise and precise_fallback graphs retry CHA/SSA', 'Current-graph consumers refuse...') that are informative but border on excess for a selection-time description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description compensates by describing the RETURNS shape (changed_symbols[], tests[], routes[], env[], errors[], risk object with public_api/touches_sql/touches_routes/touches_env). Combined with usage rules and refusal conditions, an agent has everything needed for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema documents both params and the baseline is 3. The description adds value the schema lacks: it states the mutual requirement ('Requires either symbol or uncommitted=true') and clarifies what uncommitted=true actually reviews ('all current unstaged changes at once'), which is more precise than the schema's 'uncommitted/modified changes'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Summarize the scope and risk profile of a change', and immediately enumerates the dimensions covered (changed symbols, covering tests, routes, env vars, SQL). It further differentiates itself from siblings by explicitly naming gograph_boundaries and gograph_plan as alternatives for other jobs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Contains explicit WHEN TO USE guidance ('After editing — as a post-edit verification step before committing') and a NOT TO USE section routing to gograph_boundaries for boundary enforcement and gograph_plan for pre-edit planning. It also states the invocation condition: 'Requires either symbol or uncommitted=true', and explains the uncommitted=true usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_riskA
Read-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. Uncommitted modes compare declarations against HEAD, including selected untracked Go files. Current-graph consumers refuse incomplete comparisons, deleted declarations requiring historical caller evidence, and missing/ambiguous graph identities. Inspect changes --git REF for the declaration census; rebuild before traversing newly added symbols.

NameRequiredDescriptionDefault
symbolNoThe name of the target symbol to run the risk evaluation for (e.g. 'AuthService')
uncommittedNoSet to true to evaluate risk for all uncommitted/modified changes in the repository

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only/idempotent, and the description adds real behavioral context: freshness checking before the call, graph-mode retries (CHA/SSA), and current-graph consumer refusal conditions (incomplete comparisons, deleted declarations, ambiguous identities). This goes well beyond the annotation surface.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose and organizes content into usage, exclusion, and return sections. However, the trailing sentences about graph consumers, declaration census, and rebuilds are dense implementation detail that could crowd out agent-relevant guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies a RETURNS section (title, results[], scores, verdicts, breakdown metrics, optional message) and covers uncommitted-mode behavior. An agent has enough to call and interpret it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds a meaningful constraint not captured by the schema: 'Requires either symbol or uncommitted=true' (schema marks neither required). This clarifies mutual-requirement semantics for the two params.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Evaluate the change risk profile of target symbol(s) or uncommitted changes') and spells out what the score combines (blast radius, complexity, coverage, dependencies). The explicit WHEN/NOT TO USE clauses naming gograph_review and gograph_plan let an agent distinguish it from the large sibling set without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'WHEN TO USE: Before committing edits...' and 'NOT TO USE: ... use gograph_review ... use gograph_plan' guidance. The routing conditions are unambiguous and name the concrete alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_routesA
Read-onlyIdempotent

List a deterministic bounded page of HTTP routes with methods, URL patterns, handler names, and source locations. Production routes are returned by default; include_tests=true adds *_test.go registrations. Optional term matches method/path, handler, or file. module selects an exact module path/directory, a unique nested-module directory basename, or the repository directory name for a root module. limit defaults to 100 and is restricted to 1-200; next_cursor continues the same filtered census. Each page is also bounded to 64 KiB so the result stays directly consumable instead of spilling to an out-of-band file. Constant nested Gin/Echo/Fiber Group prefixes and Chi Route closure prefixes are composed; Gin/Fiber use the final variadic argument as the terminal handler, while Echo uses the handler immediately after the path. Dynamically computed prefixes remain unresolved. The MCP server refreshes source analysis before this call. Read-only; no side effects. WHEN TO USE: To inventory one service/module or find a route before gograph_endpoint. NOT TO USE: For a handler's downstream call chain (use gograph_endpoint). RETURNS: gograph.routes.v1 JSON with total, returned, truncated, routes[], and next_cursor when more matches exist.

NameRequiredDescriptionDefault
termNoOptional case-insensitive substring matched against method/path, handler, or file
limitNoMaximum rows in this page, 1-200 (default: 100); the 64 KiB byte budget may return fewer
cursorNoOpaque next_cursor from the previous gograph_routes result; reuse the same filters
moduleNoOptional exact module path/directory, unique nested-module directory basename, or repository directory name for a root module (for example identuum-idp)
include_testsNoInclude routes registered in *_test.go files; false by default

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/no-destructive, so the bar is lower, yet the description adds substantial non-annotation behavior: the server refreshes source analysis before the call, pages are capped at 64 KiB to avoid spilling to an out-of-band file, Gin/Fiber vs Echo handler-resolution rules differ, constant Group/Route prefixes are composed, and dynamic prefixes stay unresolved. These are real operational traits an agent cannot infer from the schema or hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then caveats, then WHEN TO USE/NOT TO USE and RETURNS. Dense but every sentence carries information; the framework-specific handler-resolution detail is the only passage bordering on over-explanation for a listing tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 compensates by naming the gograph.routes.v1 payload shape (total, returned, truncated, routes[], next_cursor). Combined with pagination limits, test inclusion, and module resolution semantics, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 goes slightly beyond by framing cursor reuse as continuing the 'same filtered census' and explaining that limit interacts with the 64 KiB byte budget (the page may return fewer than limit rows). Most param text overlaps the schema, so it is not a full 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (List) + resource (HTTP routes) + explicit scope (deterministic bounded page) with the returned fields enumerated. The WHEN TO USE / NOT TO USE block names gograph_endpoint as the sibling for downstream call chains, so an agent can distinguish it from the surrounding gograph_* tools 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Contains an explicit WHEN TO USE (inventory one service/module, find a route before gograph_endpoint) and NOT TO USE (handler downstream call chain → use gograph_endpoint). The condition selecting the alternative is stated, not implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_schemaA
Read-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.

NameRequiredDescriptionDefault
limitNoMaximum rows per page; the byte budget may return fewer.
tableYesThe table or schema name to search for in struct tags (e.g., 'users', 'roles')
cursorNoOpaque next_cursor for the same graph snapshot and result selection.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description is consistent ("Read-only; no side effects"). It adds genuinely new behavioral context beyond annotations: freshness checking before the call, refresh in the requested analysis mode, and CHA/SSA retry after source changes in precise modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then clearly sectioned WHEN TO USE / NOT TO USE / RETURNS. Efficient overall, though the freshness/CHA-SSA sentence is dense and slightly tangential to selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description supplies the return shape (struct names, package paths, file locations, empty result semantics). Combined with purpose, usage, and behavioral notes, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 table, limit, and cursor with clear semantics. The description adds no parameter-level detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (find) and resource (Go structs mapping to a DB table via struct tags) with concrete examples of the tag forms (db:"table_name", gorm:"table:table_name"). It is clearly distinguishable from siblings like gograph_fields, gograph_query, and gograph_sql.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE (tracing which types represent a table, pre-migration ORM model inspection) and NOT TO USE (non-tagged structs as query results) with named alternatives gograph_fields and gograph_query. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_session_auditA
Read-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.

NameRequiredDescriptionDefault
jsonNoSet to true to return structured JSON format instead of human-readable ASCII layout.
session_idNoOptional session ID to audit. If not supplied, audits the most recent session in the repository.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_cleanupA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
custom_wordNoOptional custom word prefix to incorporate in the timestamped session ID (e.g. 'implement_feature')

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_skeletonA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_sourceA
Read-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. Text and gograph.read.v1 structured content both carry the source or a named refusal: absent symbol, ambiguity with candidates, unsafe/unreadable source, invalid indexed range, or source exceeding 65536 bytes (with its size).

NameRequiredDescriptionDefault
symbolYesThe name of the symbol to retrieve source for (supports short name 'ValidateToken', dot-notation 'graph.Graph', or fully-qualified ID)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly, idempotent, non-destructive, closed-world), the description discloses unusual behavior: a pre-call freshness check with mode-aware CHA/SSA retries, confinement to regular .go files under the repo, symlink path rejection, and a 65536-byte size cap. This is far more than the annotations carry and materially affects invocation expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then clearly delimited WHEN TO USE / NOT TO USE / RETURNS sections. Despite its length every clause is functional; there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description fully compensates by explaining the return shape (raw Go source blocks with file paths and line numbers, mirrored in text and gograph.read.v1 structured content) and enumerating named refusal cases. An agent has everything needed to call and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'symbol' parameter already documents short name, dot-notation, and fully-qualified ID forms. The description adds only a restatement of symbol kinds, which partially overlaps the enum of retrievable kinds but adds no new format or syntax detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (retrieve) and resource (verbatim Go source) with an enumerated scope of symbol kinds (function, method, struct, interface, type, variable, constant) and clarifies bodies vs declarations. The NOT TO USE section explicitly separates it from gograph_callers/gograph_callees and gograph_node, so an agent can disambiguate without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit WHEN TO USE (targeted alternative to reading a whole file) and NOT TO USE clauses naming the correct alternatives for call hierarchy and AST metadata. Both the condition and the routing target are spelled out, 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_sqlA
Read-onlyIdempotent

Return one bounded gograph.sql.v1 page of static PostgreSQL query literals with operation, read/write/DDL access, referenced tables, enclosing function, module ownership, and source location. Extraction covers direct literals plus statically resolvable local or same-file package const/var declarations, straight-line assignments, and bounded string concatenations. The MCP server checks freshness before this call and refreshes in the current requested analysis mode. Read-only; no side effects. Filters in different categories AND-compose; repeated values within tables, verbs, and accesses OR-compose. Tests remain included by default for backward compatibility; set no_tests=true for production-only results. CTEs resolve to their actual operation, data-modifying CTEs retain write access/table evidence, PostgreSQL UPSERT remains INSERT, and unsupported classification is explicit rather than guessed. WHEN TO USE: Audit database interactions, write paths, or queries touching a table. NOT TO USE: For ORM struct mappings (use gograph_schema) or runtime-generated SQL that is not a static literal. RETURNS: A deterministic page with total/returned/truncated/next_cursor and queries[].

NameRequiredDescriptionDefault
termNoOptional case-insensitive raw SQL substring filter
limitNoPage size from 1 to 200; defaults to 100
verbsNoOptional PostgreSQL operation filters; values OR-compose
cursorNoOpaque next_cursor from the previous gograph_sql page; reuse the same filters
moduleNoOptional exact module path/directory, unique nested basename, or repository basename for a root module
tablesNoOptional PostgreSQL table selectors; values OR-compose and may be table or schema.table
accessesNoOptional statement access classes; values OR-compose
functionNoOptional case-insensitive enclosing-function substring
no_testsNoExclude SQL facts from *_test.go files; tests are included by default

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world behavior, so the safety profile is covered. The description adds useful operational context not in annotations: server-side freshness checks, refresh mode, AND/OR filter composition, test inclusion default, and classification rules for CTEs/UPSERT. However, it does not describe pagination mechanics beyond the return shape or any rate limit or auth requirements. It is solid, but not rich enough for a 4-5 given the lower bar 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core behavior, then extraction scope, freshness, filter semantics, defaults, and finally WHEN/NOT TO USE and RETURNS blocks. It is dense but every section serves a distinct purpose. Minor inefficiency: the classification rules for CTEs and UPSERT feel like implementation notes that could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a 9-parameter, highly configurable query tool with no output schema, the description provides the missing pieces: filter combination logic, default test inclusion, pagination via cursor, freshness guarantees, and return page shape. An agent has everything needed to call it correctly and interpret the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter is documented in the schema. The description only adds high-level filter composition rules (AND across categories, OR within) and the test-inclusion default; the rest of the semantics for term, module, function, cursor, and tables come from the schema. A baseline 3 is appropriate because the description does not meaningfully extend the schema's parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with a specific verb and resource: returns one bounded page of static PostgreSQL query literals, enumerated with precise fields. It distinguishes itself from siblings by explicitly routing ORM mappings to gograph_schema and runtime SQL elsewhere. An agent can identify this tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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 name concrete scenarios, including the sibling (gograph_schema) to use instead for ORM mappings. The only missing negative is runtime-generated SQL, but that is called out as well, 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_staleA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_statsA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_summaryA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_testsA
Read-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. Direct mode accepts Receiver.Method (including pointer receivers) or a full stable symbol ID. By default this preserves the direct-edge result contract. Set transitive=true with a required symbol to return gograph.tests.v1 reverse attribution, including exact/possible resolution, depth, and a representative stable-ID path from every reaching test; exact_only omits uncertain paths and package disambiguates the selected product symbol. The MCP server checks freshness before this call and refreshes in the current requested analysis mode. Read-only; no side effects. WHEN TO USE: Before editing a function — use transitive=true for router/callback-mediated coverage and direct mode for concrete test call sites. NOT TO USE: For test helper infrastructure (use gograph_fixtures); for running tests or proving runtime coverage. RETURNS: Direct result rows by default, or a versioned reverse-transitive report when requested.

NameRequiredDescriptionDefault
symbolNoThe symbol name to find tests for (optional)
packageNoWith transitive=true, optional exact Go package name used to disambiguate the selected symbol
exact_onlyNoWith transitive=true, omit paths containing possible edges
transitiveNoReturn reverse-transitive test attribution; requires symbol

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavior beyond that: the server checks freshness and refreshes in the requested analysis mode, and the return contract changes shape when transitive=true (versioned report with exact/possible resolution and depth). It stops short of describing rate limits or size/pagination of large result sets.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then modes, then WHEN/NOT/RETURNS blocks. Slightly redundant — 'By default this preserves the direct-edge result contract' is restated in the RETURNS block — but nearly every sentence carries routing or contract information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 must describe returns; it does so at a high level (direct rows vs versioned reverse-transitive report with resolution/depth/path). Adequate for a 4-param, optional-arg tool, though field-level detail of the returned rows is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds non-obvious semantics: transitive requires a symbol, package only applies with transitive=true, and exact_only omits uncertain paths. The cross-parameter dependencies go beyond the per-parameter schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('find test functions in *_test.go files'), distinguishes two modes (direct vs transitive), and names the sibling it is not (gograph_fixtures). An agent can separate it from the other ~60 graph tools without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE ('Before editing a function — transitive=true for router/callback-mediated coverage, direct mode for concrete test call sites') and NOT TO USE clauses with named alternatives (gograph_fixtures for helpers; not for running tests or runtime coverage). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_traceA
Read-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.

NameRequiredDescriptionDefault
termYesError string or symbol name to trace (e.g. 'ErrNotFound', 'permission denied')
no_testsNoIf true, skip collecting related test functions

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_untestedA
Read-onlyIdempotent

Sweep the full graph in one pass and return called production functions and methods without an exact transitive static path from any test. The MCP server checks freshness first. Precise direct calls and proof-backed concrete interface receivers are exact; open CHA or parser-only paths propagate possible to descendants, which remain visible with test_resolution=possible and possible_test_count. Repeatable CLI --exclude globs map to the MCP exclude string array and match repository-relative source paths lexically. This is static attribution, not runtime coverage proof. Read-only; no side effects. WHEN TO USE: During test census or pre-release hardening; it replaces N forward coverage or direct gograph_tests probes. NOT TO USE: For running tests or proving branch execution. RETURNS: JSON rows sorted by caller_count with stable_id, name, kind, file, line, caller_count, package, test_resolution, and optional possible_test_count.

NameRequiredDescriptionDefault
pkgNoOptional package name substring to filter results (e.g. 'cli', 'search')
topNoLimit results to top N by caller count (0 = all, default)
excludeNoRepository-relative path globs to exclude; use prefix/** for all descendants

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, and closed-world hints. The description adds significant context: it checks freshness first, explains exact vs possible test attribution (CHA/parser-only paths), notes repeatable CLI --exclude mapping, clarifies it is static attribution not runtime coverage, and explicitly states it is read-only with no side effects, which reinforces rather than contradicts annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (general behavior, WHEN TO USE, NOT TO USE, RETURNS). It is somewhat long but every sentence adds useful information. Front-loads the core purpose before details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity and lack of an output schema, the description is complete. It explains the return format (JSON rows sorted by caller_count with specified fields) and covers behavioral aspects like freshness check and static attribution. Nothing critical is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters. The description adds some detail about exclude globs mapping from CLI and matching repository-relative paths lexically, but does not go beyond the schema's own descriptions for pkg and top. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 transitive static path from any test.' This clearly distinguishes it from siblings like gograph_tests 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.

Usage Guidelines5/5

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 tells the agent to use it during test census or pre-release hardening and that it replaces forward coverage or direct gograph_tests probes. It also clearly states not to use it for running tests or proving branch execution.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_usagesA
Read-onlyIdempotent

Find every place a named Go type appears in function parameter lists, return type signatures, struct field or interface method declarations, and composite-literal construction. 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 consumption and construction blast radius. NOT TO USE: For call sites of a function (use gograph_callers); use gograph_literals when only struct Foo{...} initialization sites are needed; for all transitive callers use gograph_impact. RETURNS: File paths and line locations where the type appears; empty when the type is not referenced.

NameRequiredDescriptionDefault
typeYesThe type name to search for (e.g., 'AuthService', 'Repository')
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, so the safety profile is covered. The description still adds real context the annotations do not: server-side freshness checks, refresh in the current analysis mode, and CHA/SSA retry after source changes. It does not cover rate limits or graph-snapshot staleness semantics for the cursor, but the added freshness/retry detail is substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core scope statement, then WHEN/NOT TO USE, then RETURNS. Dense but every sentence carries information; the enum-like field list in the opening sentence is slightly heavy but justifies the tool's breadth.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by describing the return values (file paths and line locations) and the empty-result case. Combined with the freshness behavior and alternative routing, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (type, limit, cursor) are already documented in the schema. The description adds no syntax or format guidance beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Find every place') and resource ('named Go type') and enumerates the exact syntactic contexts searched (parameter lists, return signatures, struct/interface declarations, composite literals). An agent can distinguish it from sibling tools 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE ('before changing an interface or type definition') and NOT TO USE sections that name three alternatives — gograph_callers, gograph_literals, gograph_impact — each with the condition that selects it. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gograph_wikiA
DestructiveIdempotent

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.

NameRequiredDescriptionDefault
outputNoWiki directory: relative paths are graph-rooted; an absolute path explicitly selects a real local output root (default 'llm-wiki')

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 32 tool updatesv1.7.5
    • Changedgograph_boundaries2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_callees2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_callers2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_concurrency2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_constructors2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_dependents2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_embeds2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_envs2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_errors2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Addedgograph_explore
    • Changedgograph_fields2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_fixtures2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_focus2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_globals2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_httpcalls2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_impact3 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / exact_only
        Added value: +{
        +  "description": "Exclude any path that depends on possible call evidence; default false retains explicitly labeled possible results",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_implementers2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_imports2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_interfaces2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_literals2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_mocks2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_mutate2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_node2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_orphans2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_public2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_query2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_returnusage2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_routes5 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor from the previous gograph_routes result; reuse the same filters",
        +  "type": "string"
        +}
      • addedInput schema / properties / include_tests
        Added value: +{
        +  "description": "Include routes registered in *_test.go files; false by default",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Maximum rows in this page, 1-200 (default: 100); the 64 KiB byte budget may return fewer",
        +  "type": "integer"
        +}
      • addedInput schema / properties / module
        Added value: +{
        +  "description": "Optional exact module path/directory, unique nested-module directory basename, or repository directory name for a root module (for example identuum-idp)",
        +  "type": "string"
        +}
      • addedInput schema / properties / term
        Added value: +{
        +  "description": "Optional case-insensitive substring matched against method/path, handler, or file",
        +  "type": "string"
        +}
    • Changedgograph_schema2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedgograph_sql10 fields changed
      • addedInput schema / properties / accesses
        Added value: +{
        +  "description": "Optional statement access classes; values OR-compose",
        +  "items": {
        +    "enum": [
        +      "read",
        +      "write",
        +      "ddl"
        +    ],
        +    "type": "string"
        +  },
        +  "maxItems": 32,
        +  "type": "array"
        +}
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor from the previous gograph_sql page; reuse the same filters",
        +  "maxLength": 1024,
        +  "type": "string"
        +}
      • addedInput schema / properties / function
        Added value: +{
        +  "description": "Optional case-insensitive enclosing-function substring",
        +  "maxLength": 1024,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Page size from 1 to 200; defaults to 100",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / module
        Added value: +{
        +  "description": "Optional exact module path/directory, unique nested basename, or repository basename for a root module",
        +  "maxLength": 1024,
        +  "type": "string"
        +}
      • addedInput schema / properties / no_tests
        Added value: +{
        +  "description": "Exclude SQL facts from *_test.go files; tests are included by default",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / tables
        Added value: +{
        +  "description": "Optional PostgreSQL table selectors; values OR-compose and may be table or schema.table",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 32,
        +  "type": "array"
        +}
      • changedInput schema / properties / term / description
        Previous value: -"Optional SQL keyword or table name to filter database queries (e.g., 'SELECT', 'users')"New value: +"Optional case-insensitive raw SQL substring filter"
      • addedInput schema / properties / term / maxLength
        Added value: +4096
      • addedInput schema / properties / verbs
        Added value: +{
        +  "description": "Optional PostgreSQL operation filters; values OR-compose",
        +  "items": {
        +    "enum": [
        +      "SELECT",
        +      "INSERT",
        +      "UPDATE",
        +      "DELETE",
        +      "MERGE",
        +      "CREATE",
        +      "ALTER",
        +      "DROP",
        +      "TRUNCATE"
        +    ],
        +    "type": "string"
        +  },
        +  "maxItems": 32,
        +  "type": "array"
        +}
    • Changedgograph_tests3 fields changed
      • addedInput schema / properties / exact_only
        Added value: +{
        +  "description": "With transitive=true, omit paths containing possible edges",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / package
        Added value: +{
        +  "description": "With transitive=true, optional exact Go package name used to disambiguate the selected symbol",
        +  "type": "string"
        +}
      • addedInput schema / properties / transitive
        Added value: +{
        +  "description": "Return reverse-transitive test attribution; requires symbol",
        +  "type": "boolean"
        +}
    • Changedgograph_usages2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque next_cursor for the same graph snapshot and result selection.",
        +  "maxLength": 128,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum rows per page; the byte budget may return fewer.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
  2. 3 tool updatesv1.6.2
    • Addedgograph_coverage
    • Addedgograph_identity
    • Changedgograph_untested1 field changed
      • addedInput schema / properties / exclude
        Added value: +{
        +  "description": "Repository-relative path globs to exclude; use prefix/** for all descendants",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  3. 1 tool updatev1.5.8
    • Changedgograph_endpoint1 field changed
      • changedInput schema / properties / query / description
        Previous 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."
  4. 18 tool updatesv1.5.6
    • Changedgograph_api1 field changed
      • changedInput schema / properties / since / description
        Previous 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"
    • Changedgograph_arity2 fields changed
      • changedInput schema / properties / min / description
        Previous value: -"Minimum argument count to report (default: 5)"New value: +"Inclusive minimum argument count to report (default: 5; 0 includes zero-arity functions)"
      • changedInput schema / properties / min / type
        Previous value: -"number"New value: +"integer"
    • Changedgograph_boundaries1 field changed
      • changedInput schema / properties / config / description
        Previous 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)"
    • Changedgograph_boundaries_create1 field changed
      • changedInput schema / properties / config / description
        Previous 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)"
    • Changedgograph_callees2 fields changed
      • changedInput schema / properties / depth / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / mermaid
        Added value: +{
        +  "description": "Return Mermaid flowchart text instead of the normal response",
        +  "type": "boolean"
        +}
    • Changedgograph_callers2 fields changed
      • changedInput schema / properties / depth / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / mermaid
        Added value: +{
        +  "description": "Return Mermaid flowchart text instead of the normal response",
        +  "type": "boolean"
        +}
    • Changedgograph_check2 fields changed
      • changedInput schema / properties / config / description
        Previous 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"
      • changedInput schema / properties / since / description
        Previous 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"
    • Changedgograph_coupling1 field changed
      • addedInput schema / properties / mermaid
        Added value: +{
        +  "description": "Return Mermaid flowchart text instead of structured JSON",
        +  "type": "boolean"
        +}
    • Changedgograph_dependents1 field changed
      • addedInput schema / properties / mermaid
        Added value: +{
        +  "description": "Return Mermaid flowchart text instead of the normal response",
        +  "type": "boolean"
        +}
    • Changedgograph_deps1 field changed
      • addedInput schema / properties / mermaid
        Added value: +{
        +  "description": "Return Mermaid flowchart text instead of structured JSON",
        +  "type": "boolean"
        +}
    • Changedgograph_diagram1 field changed
      • changedInput schema / properties / max_depth / type
        Previous value: -"number"New value: +"integer"
    • Changedgograph_endpoint4 fields changed
      • changedInput schema / properties / depth / description
        Previous value: -"BFS depth for call chain traversal (default: 5)"New value: +"BFS depth for call chain traversal, clamped to 1-20 (default: 5)"
      • changedInput schema / properties / depth / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / include_tests / description
        Previous value: -"Include call-chain edges originating in *_test.go files"New value: +"Include routes registered in *_test.go files"
      • addedInput schema / properties / mermaid
        Added value: +{
        +  "description": "Return Mermaid flowchart text instead of structured JSON",
        +  "type": "boolean"
        +}
    • Changedgograph_godobj4 fields changed
      • changedInput schema / properties / calls / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / fields / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / methods / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / top / type
        Previous value: -"number"New value: +"integer"
    • Changedgograph_hotspot1 field changed
      • changedInput schema / properties / top / type
        Previous value: -"number"New value: +"integer"
    • Changedgograph_impact1 field changed
      • addedInput schema / properties / mermaid
        Added value: +{
        +  "description": "Return Mermaid flowchart text instead of the normal response",
        +  "type": "boolean"
        +}
    • Changedgograph_path1 field changed
      • addedInput schema / properties / mermaid
        Added value: +{
        +  "description": "Return Mermaid flowchart text instead of structured JSON",
        +  "type": "boolean"
        +}
    • Changedgograph_untested1 field changed
      • changedInput schema / properties / top / type
        Previous value: -"number"New value: +"integer"
    • Changedgograph_wiki1 field changed
      • changedInput schema / properties / output / description
        Previous 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')"
  5. 9 tool updatesv1.5.4
    • Addedgograph_api
    • Addedgograph_arity
    • Addedgograph_boundaries
    • Addedgograph_boundaries_create
    • Addedgograph_callees
    • Addedgograph_callers
    • Addedgograph_capabilities
    • Addedgograph_imports
    • Addedgograph_literals
  6. 23 tool updatesv1.5.3
    • Addedgograph_changes
    • Addedgograph_dependents
    • Addedgograph_deps
    • Addedgograph_diagram
    • Addedgograph_doc
    • Addedgograph_envs
    • Addedgograph_errorflow
    • Addedgograph_errors
    • Addedgograph_explain
    • Addedgograph_fields
    • Addedgograph_fixtures
    • Addedgograph_flow
    • Addedgograph_focus
    • Addedgograph_globals
    • Addedgograph_godobj
    • Addedgograph_hotspot
    • Addedgograph_httpcalls
    • Addedgograph_impact
    • Addedgograph_implementers
    • Addedgograph_interfaces
    • Addedgograph_mocks
    • Addedgograph_mutate
    • Addedgograph_node
  7. 18 tool updatesv1.5.3
    • Addedgograph_check
    • Addedgograph_complexity
    • Addedgograph_concurrency
    • Addedgograph_constructors
    • Addedgograph_coupling
    • Removedgograph_diagram
    • Addedgograph_embeds
    • Addedgograph_endpoint
    • Removedgograph_errors
    • Removedgograph_interfaces
    • Addedgograph_orphans
    • Addedgograph_path
    • Addedgograph_plan
    • Addedgograph_public
    • Addedgograph_query
    • Addedgograph_returnusage
    • Addedgograph_review
    • Addedgograph_routes
  8. 44 tool updatesv1.5.3
    • Removedgograph_api
    • Removedgograph_arity
    • Removedgograph_boundaries
    • Removedgograph_boundaries_create
    • Removedgograph_callees
    • Removedgograph_callers
    • Removedgograph_capabilities
    • Removedgograph_changes
    • Removedgograph_check
    • Removedgograph_complexity
    • Removedgograph_concurrency
    • Removedgograph_constructors
    • Removedgograph_coupling
    • Removedgograph_dependents
    • Removedgograph_deps
    • Removedgograph_doc
    • Removedgograph_embeds
    • Removedgograph_endpoint
    • Removedgograph_envs
    • Removedgograph_errorflow
    • Removedgograph_explain
    • Removedgograph_fields
    • Removedgograph_fixtures
    • Removedgograph_flow
    • Removedgograph_focus
    • Removedgograph_globals
    • Removedgograph_godobj
    • Removedgograph_hotspot
    • Removedgograph_httpcalls
    • Removedgograph_impact
    • Removedgograph_implementers
    • Removedgograph_imports
    • Removedgograph_literals
    • Removedgograph_mocks
    • Removedgograph_mutate
    • Removedgograph_node
    • Removedgograph_orphans
    • Removedgograph_path
    • Removedgograph_plan
    • Removedgograph_public
    • Removedgograph_query
    • Removedgograph_returnusage
    • Removedgograph_review
    • Removedgograph_routes
  9. 8 tool updates
    • Addedgograph_boundaries_create
    • Changedgograph_callees2 fields changed
      • addedInput schema / properties / depth
        Added value: +{
        +  "description": "Traversal depth from 1 to 10 (default 1)",
        +  "type": "number"
        +}
      • addedInput schema / properties / no_tests
        Added value: +{
        +  "description": "Exclude call edges originating in *_test.go files",
        +  "type": "boolean"
        +}
    • Changedgograph_callers4 fields changed
      • addedInput schema / properties / depth
        Added value: +{
        +  "description": "Traversal depth from 1 to 10 (default 1)",
        +  "type": "number"
        +}
      • addedInput schema / properties / exact
        Added value: +{
        +  "description": "Require an exact symbol-name or fully-qualified-ID match",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / function / description
        Previous 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)"
      • addedInput schema / properties / no_tests
        Added value: +{
        +  "description": "Exclude call edges originating in *_test.go files",
        +  "type": "boolean"
        +}
    • Changedgograph_context1 field changed
      • addedInput schema / properties / exact
        Added value: +{
        +  "description": "Require an exact symbol-name or fully-qualified-ID match in single-symbol mode.",
        +  "type": "boolean"
        +}
    • Changedgograph_endpoint1 field changed
      • addedInput schema / properties / include_tests
        Added value: +{
        +  "description": "Include call-chain edges originating in *_test.go files",
        +  "type": "boolean"
        +}
    • Changedgograph_errors1 field changed
      • addedInput schema / properties / no_tests
        Added value: +{
        +  "description": "Exclude error sites in *_test.go files",
        +  "type": "boolean"
        +}
    • Addedgograph_flow
    • Changedgograph_query3 fields changed
      • changedInput schema / properties / term / description
        Previous 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')"
      • addedInput schema / properties / terms
        Added value: +{
        +  "description": "Optional list of keyword terms combined with OR semantics",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "term"
        -]New value: +[]

TDQS

A4.1/5.0

Scored across 68 tools

Disambiguation3/5

Most tools target distinct analysis tasks, but several are explicit aliases or near-duplicates (gograph_trace vs gograph_errorflow, gograph_mocks vs gograph_implementers), and bundle-style tools such as context, explore, explain, plan, review, summary, and wiki overlap in scope. The descriptions provide WHEN/NOT TO USE guidance, which mitigates but does not eliminate misselection risk.

Naming Consistency5/5

All 68 tools use the same gograph_ prefix and lower_snake_case convention, including multiword names like gograph_session_create and gograph_boundaries_create. There is no mixing of camelCase, PascalCase, or inconsistent delimiter styles.

Tool Count1/5

68 tools is far beyond the 3-15 well-scoped range and exceeds the 50+ threshold for extreme mismatch. The large surface includes compatibility aliases and multiple overlapping analysis bundles, making the set unwieldy for agents despite the domain being broad.

Completeness5/5

The surface covers static Go analysis comprehensively: call graphs, dependencies, types and interfaces, SQL, routes, env vars, errors, concurrency, tests and coverage, complexity, hotspots, orphans, mutation, boundaries, API drift, changes, risk review, diagrams, docs, and session telemetry. No obvious lifecycle gap remains for the stated static-analysis purpose.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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.
    28
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A 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.
    1,290 PyPI
    815
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A 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.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    A 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.
    7
    Apache 2.0