Skip to main content
Glama

gograph

Symbol queries accept path/to/file.go:Name, including path/to/file.go:Receiver.Method, or an import-qualified file path when a short name is ambiguous. source prints exact selectors for ambiguous matches. Supported declaration tools and named exceptions are listed in the selector contract. Queries include struct fields; query --no-tests excludes test-file rows. Precise mutation queries recover the type of fields assigned on returned values. Routes retain constant and unresolved path registrations; precise builds resolve constants across packages, including net/http method patterns. tests --transitive --files-only prints unique file paths, matching the files in the MCP transitive report.

Graph-state output and capabilities expose freshness_context: CLI freshness checks use the querying process's Go context, including GOFLAGS; MCP uses its startup context and explicit tags. A context mismatch remains stale, even when source bytes have not changed. No environment values are printed. Precise indexes include package-level constant references in usages and query, including comparisons, switch cases, composite values, and function arguments. Typed enum-like constants retain their declaration identity; local shadows are excluded. query labels these reference sites as usage rows. AST-only graphs do not claim type-resolved constant usages. review uses the same test attribution as context. Rebuild after upgrading.

review --uncommitted includes deleted declarations from changes --git HEAD and explicitly leaves historical callers, tests and risk unevaluated. Other current-graph traversal commands retain their deletion refusal. Builds explain when an enclosing Git repository ignores the requested directory.

Uncommitted plan/review skip blank-identifier declarations such as var _ I = (*T)(nil) during symbol traversal. Review keeps their declaration evidence and names the limit; changes --git HEAD still lists them.

Session audits list invocation errors separately from operational failures and exclude them from compliance scoring. Composability measures the mix of composed and raw query commands; it does not measure answer correctness or token savings.

Go Report Card License: MIT Go Version Homebrew Docs

Give Go coding agents a compiler-aware map for safer refactors.

gograph builds a local structural graph of your Go repository, with optional type-checked CHA/SSA enrichment. Its CLI and MCP workflows help coding agents trace callers and interface implementations, plan change impact, and enforce architecture without embeddings or a hosted code index.

Explore the interactive no-install demo · Review the reproducible benchmark

See CLI/MCP query contracts for bounded result pages, snapshot-bound cursors, exact/possible impact, and change-evaluation status.

Companion projects: Scrinium provides repository-owned, evidence-backed knowledge for coding agents, while Rulefloor protects repository-local invariants by binding them to concrete tests and detecting drift. They are independent, optional tools: Scrinium can keep Gograph structural observations and Rulefloor validation results as separate evidence without treating either as proof of unrelated behavior or global project correctness.

Gograph Demo

Static analysis; no target-code execution. Default indexing parses Go source locally and does not call application services. Linked directories and linked/special files for extensions recognized by go/build are excluded; unrelated regular-file or dangling links with non-Go extensions are not Go tool inputs and do not block precise analysis. Graph-directed source reads remain confined to regular files beneath the analyzed repository, and linked/non-regular Go tool metadata (go.mod, go.sum, go.work, go.work.sum, and vendor/modules.txt) is rejected before toolchain invocation; an explicitly symlinked repository root remains supported. Applicable go.work use members may be sibling modules beneath the nearest real Git checkout; without that boundary they remain confined beneath the workspace directory. Each member directory, go.mod, and optional go.sum is validated before cmd/go starts. Gograph also reads project metadata such as .gitignore, graph/config JSON, and Git state. Indexing asks the installed Go toolchain for the effective build/module context; precise mode additionally performs package type loading, and doc runs go doc. Those operations follow your configured module/cache/network policy. Before repository package loading or go doc, applicable local module/workspace source trees are preflighted for links that cmd/go may inspect; .git and .gograph subtrees are excluded. Session telemetry is local under .gograph/sessions/; nothing is sent to gograph services.

Quick Start

# 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 CI contract: fail when precise enrichment falls back
gograph build . --precise --strict

# Optional: prioritize lower heap use on constrained hosts
gograph build . --precise --memory-mode=low --max-memory=1GiB

# Optional: include integration-tagged files and tests in this graph
gograph build . --precise --tags=integration

# Optional: omit unrelated broken package directories
gograph build . --precise --strict --exclude-dirs=legacy,examples/broken

# Start with repository-wide results that require no guessed symbol
gograph summary
gograph hotspot --top 5
gograph flow --no-tests

Homebrew and go install install the normal gograph CLI. MCP clients that support MCP Bundles can instead discover the local stdio server in the official MCP Registry as io.github.ozgurcd/gograph. Registry/MCPB installation is a separate distribution path; it does not install the Homebrew cask or configure the Claude Code marketplace plugin. The Registry is currently in preview. See Official MCP Registry and MCPB installation for client support, target selection, and current limitations.

Choose a real function or method shown by summary, hotspot, or gograph complexity, then substitute its name below:

gograph explore "YourSymbol" --compact # low-token discovery, identity/role, and complete evidence counts
gograph explore "YourSymbol"           # standard source + callers/callees + tests + exact identity impact
gograph explore "YourSymbol" --deep    # standard response + depth-3 exact evidence, package context, explanation
gograph context "YourSymbol" # source + callers + callees + tests

# For compilable repositories, enrich the graph before a major refactor
gograph build . --precise
gograph plan "YourSymbol"

Build artifacts are written under the target .gograph/ directory. gograph adds .gograph/ to the enclosing Git repository root .gitignore when available, falls back to the build target .gitignore outside Git, and exits without replacing artifacts if no Go files are found or no source file parses successfully. The update accepts only an absent or regular .gitignore; a repository-provided link is refused and its target is not modified. Go build constraints, explicit comma-separated --tags (or inherited GOFLAGS when the flag is absent), cmd/go package-directory rules, generated sources, module-mode ignore directives, and Git ignores use the same scanner policy for building, freshness checks, and change detection. Linked .go files, linked directories, and other non-regular recognized Go inputs are reported and excluded. Unrelated regular-file and dangling links with non-Go extensions (for example YAML configuration or TSV fixtures) are ignored by Go-tool preflight; linked/non-regular go.mod, go.sum, go.work, go.work.sum, and vendor/modules.txt entries are rejected before gograph or the Go toolchain reads them. Applicable go.work use members may be sibling modules beneath the nearest real Git checkout. Non-Git layouts retain workspace-directory confinement, nested Git boundaries are not crossed, and every member directory, go.mod, and optional go.sum is validated before cmd/go starts. .gograph itself must be a real directory, and graph.json must be a regular repository-confined file. Graphs with a missing or unsupported confinement policy marker must be rebuilt with the current binary before graph-backed commands use them. Older binaries do not enforce this boundary and should not be used to analyze untrusted repositories.

Each indexed source file stores a SHA-256 content digest. Rebuilds reparse all selected files in a changed package together and reuse parser records for unchanged packages; stats reports reused_files and rebuilt_packages. Precise builds reuse that AST work but still recompute repository-wide type/CHA/SSA enrichment so cross-package dispatch remains correct.

Low-memory mode preserves those graph semantics while using more aggressive garbage collection, reclaiming memory between production and test analysis, and avoiding a full JSON copy of the AST graph. --max-memory accepts integer byte sizes such as 1GB or 1GiB and requires --memory-mode=low. It is a soft Go-runtime memory target—not a hard RSS cap—so memory-mapped files, the executable, and Go toolchain subprocesses can make process memory exceed the requested value. Aggressive GC can increase CPU time, and a target that is too low may make the build much slower or fail; Gograph never silently reduces precision to meet it.

Precise fallback continues to exit zero by default for compatibility and is recorded in graph metadata. Add --strict with --precise when fallback must fail CI; Gograph still publishes or retains the diagnostic artifact before returning non-zero.

For precise builds blocked by unrelated directories, see directory exclusions. Use the same --exclude-dirs selection on gograph mcp startup; imported dependencies must still type-check. For symlinked skills, v1.7.2 supports --exclude-dirs=.claude/skills: directory links beneath that real directory are hidden from Go loading, without following their targets. Linked Go inputs and metadata remain protected. See the Codex MCP setup guide for registration and verification.

Related MCP server: Axon

Machine-readable structural validation

External consumers can validate one closed structural predicate without parsing human CLI output:

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

The version and result schemas are gograph.version.v1 and gograph.validation.v1; bindings use gograph.binding.v1. V1 supports only symbol_exists, package_imports, call_edge_exists, and type_implements. Validation is read-only and never builds or refreshes the graph. Exit 0 means pass, exit 1 means a conclusively evaluated fail, and exit 2 means cannot_evaluate or an invalid request.

Negative results require predicate-specific completeness: symbol and direct import absence need a current complete AST graph; implementation absence needs a current precise-complete graph; call absence additionally requires complete resolution of the subject's relevant call edges. Missing, stale, partial, ambiguous, or unresolved evidence degrades to cannot_evaluate; a precise_fallback graph may support AST presence but never evaluated absence. The result binds the exact graph bytes, selected source/build-context manifest, and canonical binding with SHA-256 fingerprints.

Gograph validates selected-build-context Go structure. It does not prove runtime behavior or business correctness. CHA edges are possible static targets, not runtime dispatch certainty. V1 excludes reachability, unstable or external symbol identities, unnamed types, and non-Go languages. See the exact machine-validation contract. Applicable local module/workspace source roots must remain beneath the explicit --repo root; v1 returns cannot_evaluate instead of widening that authority.

MCP refreshes stay in memory by default. To publish each successful refresh for CLI consumers and later server processes, start the server explicitly with:

gograph mcp . --persist-refresh
# Keep MCP startup and every later refresh on the integration-tagged selection:
gograph mcp . --tags=integration
# Optional low-memory policy for startup analysis and later refreshes:
gograph mcp . --memory-mode=low --max-memory=1GiB

This opt-in mode writes or overwrites .gograph/graph.json and the nine Markdown reports after a confirmed-fresh refresh. It does not modify .gitignore, so ignore .gograph/ yourself before enabling it when needed. The directory holds only the latest published state; it is not a per-branch cache. If no usable graph exists (including an unsafe or unsupported artifact), the startup auto-build is published before serving; a failure there prevents startup. A later tool-triggered publication failure makes that tool return an error, and the server retries the pending publication on another refresh-capable call without rebuilding the already-fresh in-memory graph. Writers coordinate through a local .gograph/.artifacts.lock file; an existing lock entry must be regular rather than a link or special file. Reports are replaced first and graph.json is replaced last as the publication commit marker; the complete ten-file bundle is not a single atomic filesystem transaction. Same-directory replacement is atomic on Unix-like systems; Go does not guarantee atomic rename semantics on non-Unix platforms. The lock file remains as operational coordination state in addition to the ten outputs.

Persisted graphs are bound to their effective Go environment and build selection. Start MCP with the same GOWORK, GOFLAGS, and --tags context used to build the graph; a mismatch is stale and must refresh successfully or return a diagnostic rather than silently serving incompatible facts. gograph doctor --json reports that repository diagnostic.

Why gograph?

Illustrative point-in-time output comparison from an earlier gograph revision (counts vary as the repository evolves; these commands return different kinds of evidence):

Task

grep -rn

gograph

Observed output difference

Find callers of loadGraph

158 matching lines (comments, docs, vars)

56 AST-derived call-site rows

~65% fewer rows in that run

Locate symbol definitions

842 lines matching "Symbol"

83 true type/method declarations

~90% noise eliminated

Read one function body

cat displays 180+ lines of the whole file

source extracts the 12-line function

~93% fewer source lines in that run

Gather common symbol context

Separate node, source, caller, callee, and test queries

context bundles those fields

Five evidence types in one response

Key Features

Machine and Agent Workflows — explore provides bounded first-call discovery with ranked lexical matches, explicit symbol selection, source, callers, callees, tests, and exact identity-resolved impact; focused callers, callees, broader impact, reverse test coverage, stable identity, plan, review, flow, validation, and policy commands remain available. The MCP server registers 69 endpoints including four session lifecycle tools. Full command reference →

Federated Workspaces — model multiple checked-out repositories through independently fingerprinted repository graphs plus a small deterministic cross-repository overlay. Resolution scopes support alternative fleets such as OSS/CE without merging repository ownership. P0 resolves Go modules, ordinary cross-repository Go calls, and first-class HTTP contracts for workspace-wide status, query, path, and impact analysis. The four read-only workspace MCP tools return the same native result values as CLI --json; member refresh and overlay publication remain explicit CLI mutations. Workspace guide →

Native MCP Server — all 65 repository query, analysis, and workflow capabilities have project-MCP equivalents for Claude, Cursor, Copilot, and other MCP clients; four additional endpoints cover session lifecycle (69 project tools total). A separate workspace server provides status, query, path, and impact with the same native results as the corresponding CLI operations. The normal mapping is CLI <command> to MCP gograph_<command>; contract, boundaries --create, and session actions use the documented special mappings. CLI-only process/host/artifact operations are build, validate, doctor, gate, snapshot, plugin/hook installation, project/workspace MCP startup, workspace build/member refresh, and help. The standalone version command has no MCP tool, but gograph_capabilities reports the running server version. Transport presentation differs where appropriate, but paired operations share functional semantics. Complete CLI/MCP matrix →

Explicit Freshness Model — CLI graph-backed analysis reads the last trusted persisted graph. Its JSON envelope includes gograph.graph-state.v1, separating source (persisted/in_memory), freshness (current/stale), completeness (complete/partial), precision (ast/precise/fallback), refresh outcome, and persistence outcome; bounded diagnostics remain on the operation that produced them. Text stats and stale report the same persisted state. gograph stale compares selected source content digests plus the effective build/module fingerprint; mtimes are diagnostic only for current indexes. It is a tri-state predicate: exit 0 means current, 2 means stale, and 1 means an operational or JSON serialization error; a missing or unsupported source-policy marker is an explicit status-1 rebuild requirement. MCP source-analysis tools check the same freshness per call, adopt a newer persisted precise graph, and incrementally rebuild changed package ASTs in memory using the latest requested analysis mode. Refresh-backed tools preserve their compatibility text and add gograph.mcp-result.v1 (source/context instead use gograph.read.v1 with the answer or refusal) structured content plus _meta.gograph_graph_state. Failed precise enrichment can serve a clearly marked current in-memory fallback, while an ordinary refresh failure can serve the last trusted stale graph; neither degraded result is silently published, and a mismatched effective Go environment still fails closed. MCP stale, default changes, and stats inspect the trusted persisted snapshot, or the startup auto-build fallback when no usable artifact exists. With --persist-refresh, that snapshot advances after a successful refresh; publication failures leave the fresh in-memory graph usable and explicitly report persistence.outcome=failed with a persistence diagnostic for retry.

Compact Composite Workflows — explore, context, plan, and explain combine source and graph evidence that would otherwise require several separate queries. explore is additive: specialized commands remain the complete, stable interfaces for focused analysis. Actual tool-call and token savings depend on the repository and task.

Narrow by Design — never runs target repository binaries or tests and does not intentionally scan .env, key, certificate, or credential files. Linked directories and linked/special recognized Go build inputs are excluded; unrelated non-Go regular-file links are outside Go-tool preflight. On-demand source and snippet reads use a repository-rooted filesystem handle and accept only regular .go files without symlink components. Linked/non-regular Go module/workspace metadata, sums, and vendor/modules.txt are rejected before toolchain use. Applicable go.work members may be siblings inside the nearest real Git checkout and otherwise stay beneath the workspace directory; their directories plus module metadata are preflighted before cmd/go. Default/relative policy configs are project-confined; documented absolute config/output arguments are explicit operator-selected local locations. AI worktree directories (.claude/, .cursor/, .agents/) are excluded. The installed Go toolchain resolves effective build context during indexing; precise repository package loading and external go doc run only after a preflight that rejects source-tree links cmd/go may inspect across the selected root plus its effective module root, or the workspace root and member trees, excluding .git and .gograph. Dependency and toolchain resolution remain open-world under the user's Go environment.

Architecture Enforcement — boundary rules, API drift detection, complexity gates, dead code sweeps, god-object detection, coupling analysis. Run in CI with gograph gate.

Security Flow Analysis — flow follows potential HTTP request, decoded JSON, and environment data across assignments and function calls to SQL query text, process execution, filesystem paths, and outbound HTTP targets. Findings include severity, confidence, and source-to-sink path steps; MCP exposes the same analysis as gograph_flow.

Integrity-Aware Indexing — publication refuses a linked or non-directory .gograph; graph.json is staged and replaced last only after a successful parse (the same-directory rename is atomic on Unix-like systems), records complete/partial build health and ast/precise/precise_fallback analysis status, and exposes both through gograph stats. gate refuses to evaluate a stale graph.

Agent Compliance Auditing — session telemetry tracks whether agents run plan before edits and review after. Grades agent behavior A–F with actionable recommendations.

Audit sessions belong to an explicit caller. gograph session create task prints the session ID; pass it on subsequent CLI commands with --session-id ID or GOGRAPH_SESSION=ID. The flag overrides the environment. Selected analytical commands retain the --intention requirement and existing audit grades. Agent shells usually do not keep GOGRAPH_SESSION between commands, so a CLI command without a selector uses the repository's only active session when this host's CLI created it; that covers build, plan, review, and session end. When several sessions are active, or the only one is MCP-owned, from another host, or lacks owner metadata, nothing is adopted: read-only commands then require no intention and never write to another caller's audit. gograph session end ID ends a named session. A session its job forgot cannot block later jobs: every CLI command and MCP call first ends other callers' abandoned sessions, meaning CLI sessions with no activity for GOGRAPH_SESSION_IDLE_LIMIT (a Go duration, default 2h; 0 or off disables) and sessions of MCP servers that have exited on this host. It prints each one it ends on stderr. Refused calls do not count as activity, and a call's own selected session is never ended. The forgotten owner's next call reports that its session was ended as abandoned. Independent callers may create separate sessions concurrently. Repository writes and session end/cleanup refuse while another caller owns an active session, naming that session. Ending an owned session remains possible while other owners are active. Unset GOGRAPH_SESSION after ending it.

MCP tools accept session_id and intention per request. Use the ID returned by gograph_session_create; analytical owner calls require a rationale. The server does not inherit GOGRAPH_SESSION, so sharing one MCP process does not merge callers. Default in-memory refresh remains read-only; --persist-refresh calls are guarded as writes. Session IDs are cooperative attribution selectors, not credentials or an OS-user security boundary. Older active sessions can be selected explicitly by their existing ID. See the session design.

Command Reference

Query and composed-analysis commands support --json; version --json and validate ... --json use their dedicated machine schemas. The exact --files-only surface is listed in the command reference. Operational commands such as build, wiki, gate, snapshot, installation, and help use text output; doctor and workspace build/status/query/path/impact also accept --json, and session audit additionally supports raw JSON. CLI --mermaid renders callers, callees, impact, endpoint, dependents, deps, path, and coupling as fenced Mermaid. Their MCP equivalents accept mermaid=true and return the same Markdown-fenced Mermaid text; without it, each tool retains its normal response format.

Category

Commands

What it does

Indexing

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

Parse AST, optionally require precise success or prioritize lower heap use, write graph, check freshness and health.

Machine Validation

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

Versioned exact structural predicates with tri-state outcomes.

Navigation

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

Find symbols, trace call chains, extract source.

Context

context, explain, focus, endpoint

Bundled structural data in one call. Token savers.

Change Analysis

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

Pre-edit planning, post-edit review, risk analysis, blast radius, drift.

Architecture

boundaries, coupling, complexity, godobj, orphans, arity

Quality gates, dead code, coupling, god objects.

Types & Structs

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

Struct fields, interface satisfaction, type usage.

Infrastructure

routes [term] [--module MODULE] [--include-tests] [--limit N] [--cursor CURSOR], sql [term] [--table T] [--verb V] [--access read|write|ddl] [--function F] [--module M] [--no-tests] [--limit N] [--cursor C], envs, errors, concurrency, globals, httpcalls, deps [--transitive], dependents, imports

Bounded CLI/MCP route and PostgreSQL static SQL pages with cursor continuation, module selectors, explicit test controls, and structured filtering; plus env vars, concurrency, outbound HTTP calls, and imports.

Security

flow [term] [--source kind] [--sink kind] [--config path] [--no-tests] [--max-work N] [--context-depth N]

Potential untrusted-data paths to SQL, process, filesystem, and outbound HTTP sinks.

Testing

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

Direct and transitive reverse exact/possible static test attribution, one-sweep gap census, full stable-ID output, helpers, mock implementations.

Error Tracing

errorflow [--no-tests], trace

Reverse-BFS from error strings to HTTP entry points.

Diagnostics

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

Install/PATH plus current graph freshness/capability diagnostics, hotspots, return usage, API signatures, Mermaid diagrams.

CI/CD

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

Policy checks, threshold enforcement, metric snapshots.

Telemetry

session create|end|audit|cleanup

Agent compliance tracking and grading (A–F).

LLM-Wiki

wiki [--output dir]

Generate llm-wiki/ and prune obsolete generator-owned package pages while preserving custom pages and packages/README.md.

Summary

summary [--json]

Single-call codebase briefing: top 3 hotspots, worst instability package, highest complexity function, orphan count, god-object count. Replaces 5 separate calls.

Stable IDs

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

Print and re-resolve module/package/receiver/name identity that survives line shifts and file moves inside a package; package disambiguates external-test collisions.

Reverse Attribution

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

Transitive product-symbol set for one unambiguous test, with stable-ID paths and exact/possible propagation. Static evidence only—not runtime or branch coverage.

Tests reaching a symbol

tests <symbol> --transitive [--exact-only] [--package name] [--json]

Versioned reverse attribution listing every test with a representative stable-ID path to one product symbol. Default tests remains direct for compatibility.

Untested

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

Called production symbols without an exact transitive test path. Precise builds devirtualize only proven concrete receivers; open interface paths remain test_resolution=possible. JSON includes stable_id; --wide prints it without truncation.

Doc

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

go doc wrapper — signature + doc comment for any stdlib or third-party symbol. No graph required. Closes the gap when call chains leave the project.

Precise implementers results merge type-checked production types with AST-discovered test-file fakes; --test-only/MCP test_only=true returns only the latter. Direct tests lookup accepts Receiver.Method (including pointer receivers) or a stable ID. usages covers signature/field/interface references and Foo{...} construction. Precise indexes also include package variables and constants referenced in expressions; literals remains the focused construction-only view.

SQL extraction includes direct literals and statically resolvable local or same-file package const/var declarations, straight-line assignments, and bounded string concatenations. Runtime-generated SQL remains excluded. Route and SQL JSON are paged row censuses; --files-only follows all pages but emits a complete deduplicated file census, not every row.

Full command reference with examples: gograph.identuum.ai/docs/command-reference

Define boundaries in .gograph/boundaries.json:

{
  "layers": [
    { "name": "domain", "packages": ["internal/domain/**"], "may_import": [] },
    { "name": "handler", "packages": ["internal/handler/**"], "may_import": ["internal/service/**", "internal/domain/**"] }
  ]
}

Run gograph stale (and rebuild when stale) before gograph boundaries; the CLI evaluates the persisted graph and exits with code 1 on violation. The default policy is .gograph/boundaries.json; use --config PATH for another regular, repository-confined policy. MCP uses the same evaluation after its normal source refresh. Works in CI/CD.

gograph flow includes test files by default; add --no-tests for production-only results. It automatically reads .gograph/flow.json when present, or accepts --config <path> for another JSON file inside the graph root. Sanitizers apply to a function's return value and can be scoped to selected sink kinds:

{
  "sanitizers": [
    { "function": "security.CleanPath", "for": ["filesystem"] },
    { "function": "security.ValidateURL", "for": ["outbound_http"] }
  ]
}

Omit for to trust the return value for every sink kind. function accepts the call spelling or a fully-qualified symbol ID; use the fully-qualified form when names collide. A validator that returns only bool or error does not sanitize the original input; wrap validation in a function that returns the trusted value if that is the intended policy.

AI Agent Integration

Official MCP Registry (preview): MCPB-capable clients can discover io.github.ozgurcd/gograph. The bundle asks for the root directory of the Go project and launches the bundled executable with separate arguments equivalent to gograph mcp <project-directory>. Releases provide macOS, Linux, and Windows bundles for both amd64 and arm64. The current Registry package schema cannot select by CPU architecture, so choose the asset whose filename matches the host; do not assume a client will select it automatically. All analysis still runs locally over stdio, with no hosted gograph service or remote telemetry.

The Registry bundle and installer-generated MCP registrations intentionally omit --persist-refresh, keeping disk publication off by default. Use a custom local MCP command if you explicitly want that behavior.

Desktop config, shared rules, and Claude Code hook setup:

gograph add-claude-plugin

This registers the Claude Desktop MCP server, injects shared CLAUDE.md steering rules, and installs a Claude Code PreToolUse hook. The hook redirects Go-symbol searches only when an effective search target belongs to a repository with a .gograph index, so unindexed folders in multi-root workspaces remain unaffected. For Claude Code MCP registration, also run the command printed by the installer: claude mcp add gograph -- gograph mcp .. The installer exits non-zero when any installation step fails.

Alternative — install via Claude Code plugin marketplace:

/plugin marketplace add ozgurcd/gograph
/plugin install gograph@gograph

Discovers gograph through Claude Code's plugin marketplace and ships a SKILL.md that auto-activates on Go work, teaching the agent the workflow (doctor --json → capabilities → stats → plan → context → edit → review), when a durable precise CLI build is useful, when to use structural queries, and when to verify with gopls or targeted text/source search.

You still need the gograph binary installed (brew install --cask ozgurcd/tap/gograph or go install github.com/ozgurcd/gograph/cmd/gograph@latest). Use gograph add-claude-plugin for Claude Desktop MCP wiring plus shared rules and the Claude Code hook; register the Claude Code MCP server with the printed claude mcp add command. Use the plugin marketplace when you prefer discovery from Claude Code's plugin UI.

Other agents (Cursor, Copilot, Antigravity, etc.):

gograph mcp .                     # stdio server; refreshes stay in memory
gograph mcp . --persist-refresh   # opt in to publishing refreshed artifacts
gograph mcp . --tags=integration  # retain the same tagged context on every refresh
gograph mcp . --memory-mode=low --max-memory=1GiB  # same low-memory refresh policy as CLI builds

Add to your .cursorrules or AI system prompt:

Before answering architecture or repository questions, inspect the available gograph_* MCP tools and run gograph capabilities. Prefer gograph for supported structural queries; use gopls or targeted source/text search when results are ambiguous, precision fell back, or a known source call is missing.

Query and composed-analysis commands support --json for machine-readable output:

gograph callers "YourSymbol" --json
# → {"schema_version": "1", "command": "callers", "status": "ok", "count": 2, "results": [...]}

For full integration guides, see docs/coding-agent-usage.md.

Zero-cost orientation with llm-wiki/: Run gograph wiki once per session to generate a directory of machine-first markdown pages — overview, architecture diagram, hotspots, routes, env vars, error sites, concurrency, per-package docs, and the full API surface. Agents read these pages instead of issuing dozens of individual tool calls:

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

Add generated wiki output to .gitignore when it is disposable. Do not overwrite a repository's maintained or Scrinium-protected agent-rules.md; propose governed changes through that repository's documented workflow. Regeneration removes only obsolete package pages that match Gograph's generated signature; custom package pages and packages/README.md are preserved.

Example Output

When you run gograph build ., the generated GRAPH_REPORT.md gives your AI a condensed context map:

External Dependencies (Tech Stack)

Module

Version

github.com/gin-gonic/gin

v1.9.1

github.com/jackc/pgx/v5

v5.5.5

Important Symbols (Top by outgoing calls)

Symbol

Kind

File

Line

Calls out

(Server).Start

method

server.go

42

18

ValidateAuth

function

auth.go

12

14


How does gograph complement gopls?

gopls is the Go project's compiler-backed language server. It provides live workspace diagnostics, navigation, references, implementations, refactoring support, and an experimental MCP server. It should remain the first choice for editor and compiler-aware workspace operations.

gograph adds a different layer for repository and agent workflows:

  1. Persisted snapshots — CLI analysis can inspect a stable graph artifact, while MCP refreshes source-analysis state and preserves the requested precision mode.

  2. Repository-level analyses — change impact, reachability, routes, SQL, environment reads, security-flow candidates, coupling, and policy gates are represented together.

  3. Composed responses — context, plan, review, and summary package related evidence for agent workflows rather than exposing only one language operation at a time.

Use gopls for live compiler-backed navigation and refactoring, rg for text and non-Go searches, and gograph when a persisted repository graph or composed change-analysis workflow is useful. See the benchmark guidance for how to measure these different workflows without assuming one tool is a drop-in replacement for another.

  • Default mode uses Go AST parsing and best-effort heuristics. Tolerates incomplete or non-compiling repositories.

  • Repository source boundary excludes linked directories plus linked/special recognized Go build inputs before build selection, while unrelated regular-file or dangling non-Go links do not block precision. It supplies confined bytes to the AST parser and confines later source, caller/callee snippet, complexity, and changed-file reads to regular repository files. Linked/non-regular go.mod, go.sum, go.work, go.work.sum, and vendor/modules.txt metadata is rejected before gograph or the Go toolchain reads it. Applicable go.work use paths may select sibling modules beneath the nearest real Git checkout; without one they remain beneath their workspace directory. Nested Git boundaries are not crossed, and member directories, go.mod, and optional go.sum are validated before cmd/go. Precise loading and doc preflight the selected root plus its effective module root, or the workspace root and every member tree; .git and .gograph are excluded from that source-tree walk. Persisted graph.json is also read through this boundary, .gograph must be a real directory, and an explicitly symlinked repository root is allowed. Missing or unsupported source-policy markers and artifacts larger than 512 MiB are rebuild-required, and serialized graph roots are never trusted. Saved baseline graphs must be regular non-linked files inside the selected project with the exact marker and size bound. Default/relative check and flow configs, boundaries, gate config, and repository-controlled session/snapshot/wiki mutations reject linked path components; documented absolute config/wiki locations are explicit operator selections. Use the current binary for untrusted repositories.

  • Precise mode attempts type-checked production enrichment and needs compilable, build-selected packages for CHA/SSA results. SSA bodies are built for selected repository packages, not the full transitive dependency closure; imported types and local external-call references remain available without dependency-body call graphs or their source-less wrapper noise. If enrichment fails or omits an indexed non-test source file, the command warns, publishes the AST graph, and records precise_fallback; if a fresh successful precise artifact already covers the same sources, a failed retry keeps that artifact instead. Default fallback remains exit zero for compatibility; --strict requires --precise and returns non-zero after publication or retention. Successful and AST-only builds record precise and ast respectively. Test packages are loaded in a separate non-fatal typed pass: broken tests yield typed_partial test-call attribution without downgrading successful production precision. Typed-only test targets are recomputed rather than reused as parser facts, preventing edge multiplication across unchanged precise builds.

  • Low-memory mode changes execution policy, not analysis meaning. It uses aggressive GC, releases completed production type/SSA state before typed-test loading, and honors an optional soft Go runtime memory target. The target is neither an RSS ceiling nor a guarantee that all repositories can complete within that amount; Gograph reports fallback/failure normally rather than silently omitting precise facts.

  • A precise interface invocation whose SSA receiver is proven to contain one concrete dynamic type is devirtualized to one exact ordinary call. Otherwise it is represented by one call edge per valid named in-repository CHA target. A single visible implementation is never treated as proof. callers Interface.Method (including inherited and promoted methods) expands through recorded implementers and deduplicates shared source expressions. Compiler-generated promoted-method forwarding remains traversal-only.

  • Open CHA dispatch is conservative rather than points-to precise: it may retain implementations that cannot occur in one runtime configuration. Reflection, unsafe, plugins, unresolved function values, test-only implementations, unnamed concrete types, and module-external implementations can still be incomplete. Precise test attribution also proves single-assignment, non-escaping concrete interface locals; other interface targets remain explicitly possible, and typed_partial means some tests stayed on parser heuristics.

  • Callback references are retained only when they resolve to repository callables, and exact call edges are deduplicated before serialization.

  • Mutation queries ignore ordinary local assignments and retain owning type information when statically known, so Type.Field disambiguates same-named fields.

  • Synchronization extraction requires a receiver tied to a known sync type. Error messages come from panic, errors.New, and fmt.Errorf, including import aliases.

  • Heuristic extractors (routes, SQL, parser-only tests, and error mapping) are navigation aids, not authoritative program analysis. SQL classification is limited to static PostgreSQL literals, reports exact/partial/unknown, resolves CTEs to their terminal operation, preserves data-modifying CTE write evidence, and does not claim coverage of runtime-generated SQL. Typed test attribution is still static evidence rather than runtime coverage proof.

  • Security flow analysis is interprocedural and path-insensitive, with call/return context for the 3 most recent call sites by default (context depth up to 16; deeper returns that lose their call site are kept at low confidence), bounded by a size-derived work budget that reports incomplete runs explicitly. Default graphs resolve direct local/imported functions; build . --precise supplies stronger method/interface targets. It does not model reflection, globals, arbitrary heap aliases, or every dynamic call. Unresolved external transformations are retained with low confidence; every finding requires source review.

  • No multi-language parsing

  • No AI/model API calls

  • No embeddings or SaaS backend

  • No remote telemetry or hosted analytics (optional audit sessions write local metadata only)

  • No replacement for compiler/type-checker correctness

Contributing

Pull requests welcome! See CONTRIBUTING.md for build, test, and contribution guidelines.

Language Support: gograph currently parses Go only. The architecture is extensible — if you want to add Python, TypeScript, Rust, etc., please open an issue first.

License

MIT — see LICENSE.

gograph MCP server

Available Tools

69 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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.5/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, and the description is consistent with them: "Read-only apart from reading the selected graph or extracting a temporary archive that is removed after the call" clarifies exactly what touches disk and that the archive is cleaned up. It adds real context beyond the annotations (freshness check before the call, refresh in the requested analysis mode, CHA/SSA retry for precise modes), though the sentence about the .json baseline's "linked path component" and "source-policy marker" is too opaque to be actionable.

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 action, then clearly labeled WHEN TO USE / NOT TO USE / RETURNS blocks, which makes it quick to scan. It runs long and the middle sentences about .json baselines and precise_fallback retries are dense, though each does carry behavioral information rather than 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?

For a four-parameter tool with full schema coverage and clear safety annotations, the definition covers purpose, triggers, exclusions, side effects, and the return shape (baseline/breaking flags, added/removed arrays, affected_tests, affected_mocks, findings, and the empty-groups convention). The only shortfall is the unexplained source-policy/linked-component constraint on .json baselines, which an agent cannot act on as written.

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 earns a bump by explaining the two-mode behavior of `since` beyond the schema text: a .json path loads a saved graph and its serialized root is ignored, while any other value is validated as a Git ref and expanded via git archive into a temporary baseline. The `root` and `session_id` parameters are not discussed in the description, but the schema already covers them thoroughly.

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: "Detect public API surface drift by comparing exported Go symbols between the current working tree and a baseline." It also explicitly names the siblings it is not (gograph_public, gograph_skeleton) for the no-baseline case, so an agent can route correctly 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?

Provides an explicit WHEN TO USE (before releasing or merging a PR to catch breaking-change regressions: exported symbols added, removed, renamed) and an explicit NOT TO USE with the alternative tools named. Both the trigger and the exclusion are stated, leaving nothing to inference.

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

gograph_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)
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.3/5.0
Behavior4/5

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

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so 'Read-only; no side effects' largely restates structured data. What does add value is the note that the server checks freshness before the call and the description of the return payload (parameter count, signature, file location), which the agent would otherwise have to infer in the absence of an output schema.

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 cleanly labeled WHEN TO USE / NOT TO USE / RETURNS blocks, which scan well. Minor waste: the 'Read-only; no side effects' clause duplicates the annotations, and the freshness sentence is vague about what actually happens.

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?

For a four-parameter, no-required-arg analysis tool with no output schema, the definition covers purpose, exclusions, threshold behavior, and return shape, so an agent can call it correctly. The only soft spot is the unexplained freshness-check remark, which does not affect 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 baseline is 3. The description restates the `min` threshold semantics already spelled out in the schema property and adds only the CLI --min correspondence; the root, intention, and session_id parameters are left entirely 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 and resource ('Find functions and methods with at least a threshold number of parameters') and ties it to a named smell, which tells an agent exactly what class of result to expect. It also distinguishes itself from the nearest similarly-shaped siblings by naming gograph_fields and gograph_godobj as the wrong tool 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?

Explicit WHEN TO USE ('During code smell audits') and NOT TO USE clauses with named alternatives make the routing decision unambiguous. This is the highest-value part of the definition given how many gograph_* analysis siblings exist.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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 safety is covered; the description nevertheless adds real context: the config path is confined to the analyzed project, every path component and the final regular file are resolved through the rooted repository boundary, and a missing config should be created via gograph_boundaries_create. It also discloses the return shape ('structured pass state and boundary violations'). It stops short of explaining what 'refresh source analysis' does to the index or whether pagination via limit/cursor matters for violation enumeration.

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 action, then constraints, then WHEN TO USE / NOT TO USE / RETURNS blocks. Nearly every sentence carries decision-relevant information; the boundary-resolution sentence is the densest and slightly over-explains a constraint the schema also encodes, keeping it from a 5.

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?

For a six-parameter, all-optional analytic call with rich schema coverage and no output schema, the description supplies the missing decision layer: purpose, trigger context, alternatives, and a one-line return summary. Only minor gaps remain (what the refresh step costs, how violations relate to pagination), which are unlikely to cause a misinvocation.

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 each of the six parameters is already documented in depth (root must be this server's repo or a worktree, limit 1-200 with byte budget, config default, cursor semantics, session/intention selectors). The description only reinforces the config parameter's default and boundary constraints, which the schema already states ('in-project', 'regular, non-linked'). Baseline 3 applies 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 pair and resource: 'Refresh source analysis and check package imports against a boundaries.json configuration.' It also names the sibling that creates the config (gograph_boundaries_create) and the siblings for unconstrained exploration (gograph_deps, gograph_coupling), so the agent can place it among ~70 tools 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 ('CI gates or post-edit reviews to enforce layer separation') and NOT TO USE with named alternatives ('unconstrained dependency exploration, use gograph_deps or gograph_coupling'). Both the positive trigger and the exclusion are stated, leaving nothing to inference.

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

gograph_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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
configNoOptional in-project output path, absolute or repository-relative; linked components and existing entries are refused (default .gograph/boundaries.json)
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and openWorldHint=false, so 'Mutating and non-idempotent; no network access' largely restates them. The value-add is the disclosed refusal behavior — repository-rooted regular-file creation that rejects linked paths and refuses to overwrite an existing config — which tells the agent how failure modes arise.

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 statement of purpose and default path, followed by labeled WHEN TO USE / NOT TO USE / RETURNS blocks that are easy to scan. There is minor redundancy with the schema on the default path and refusal rules, 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?

No output schema exists, and the RETURNS line supplies the return contract (written config path, or an error when the path is unsafe or already exists). Combined with the adoption workflow guidance, an agent has everything needed to invoke 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 all four parameters are already documented. The description adds only the default config path and the refusal rule for the output path, both of which are already present in the 'config' schema text, so it does not meaningfully exceed the schema baseline.

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 gives a specific verb and resource ('Create a baseline architecture boundary configuration from the repository's current package imports') and immediately pins down the default output location, so an agent knows exactly what artifact is produced and where it lands.

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 ('Once when adopting boundary checks in an existing repository, then review and tighten the generated rules') and NOT TO USE with a named alternative ('use gograph_boundaries' for verification), which cleanly separates it from the sibling tool with a nearly identical name.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is covered; the description still adds a non-obvious behavior not in annotations, namely that the server refreshes source analysis before the call. It also discloses the depth-driven expansion and the mermaid output switch. It does not mention cost/latency of the refresh or pagination behavior under the limit/cursor pair, keeping it 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.

Conciseness5/5

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

Four short, labeled segments (core behavior, WHEN TO USE, NOT TO USE, RETURNS) with the primary action and default fan-out front-loaded. No redundant restatement of the tool name and no filler sentences.

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, and the RETURNS section compensates by naming callee symbols, package paths, file locations, call-site line numbers, and the mermaid variant. Combined with the annotation-backed safety profile and the routing guidance, 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 description coverage is 100%, so every parameter including root, cursor, session_id and intention is already documented in-schema; the baseline is 3. The description adds only marginal meaning beyond that — clarifying that depth 2-10 expands the graph and that mermaid=true swaps the response format for flowchart text. Useful framing but not compensating for any documented gap.

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 called by the specified function') and immediately pins the direction of traversal as downstream fan-out. It explicitly contrasts itself with gograph_callers (upstream) and gograph_deps (package trees), so an agent can discriminate 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?

Provides an explicit WHEN TO USE ('understand a function's downstream dependencies') and a NOT TO USE clause naming the two alternative tools with the condition that selects each. This is the strongest form of routing guidance in the sibling set.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already establish read-only, idempotent, and non-destructive behavior, yet the description adds real context: default one-hop fan-in, depth 2-10 semantics, interface dispatch expansion through all recorded implementations with a shared source call site reported once, and a pre-call source-analysis refresh. These are behavioral facts not recoverable 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.

Conciseness5/5

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

Front-loaded with purpose and default scope, then clearly demarcated WHEN TO USE, NOT TO USE, and RETURNS segments. Every sentence carries information; nothing is redundant with the schema or 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?

For a 10-parameter analysis tool with no output schema, the description covers the return shape (caller symbols, package paths, file locations, call-site line numbers, Mermaid alternative), the default depth, and the interface-expansion edge case. The remaining parameters are fully documented in the schema, so 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 3 is the baseline, and the description earns a bump by explaining what depth actually does (2-10 expands callers-of-callers vs. the default one-hop) and that mermaid switches the response to flowchart text. It does not add meaning for root, cursor, limit, no_tests, or session parameters 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 opening sentence gives a specific verb and resource: 'Find functions and methods that call the specified function or interface method.' It immediately distinguishes itself from the sibling gograph_callees (which returns the opposite direction) and from gograph_impact (which handles broader blast radius).

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 renaming, removing, or changing a signature) and NOT TO USE clauses naming both alternatives with the condition that selects them (unbounded upstream blast radius → gograph_impact; downstream callees → 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_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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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, and openWorldHint=false, so the safety profile is covered; the description nonetheless adds the non-obvious prerequisite that no graph state is needed once the server is up, plus the caching guidance. It partially restates the read-only/no-side-effects claim already in annotations, and does not discuss cost or size of the returned catalog, which keeps it below 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 sentence followed by labeled WHEN TO USE / NOT TO USE / RETURNS blocks that scan well. Minor waste: 'Read-only; no side effects' duplicates the annotations, and RETURNS restates the version/tool-list already given in sentence one.

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 zero-required-parameter orientation tool with no output schema, the description supplies the return shape (version, tool names, one-line purposes, workflow sequences, known limitations), the prerequisite, and the calling cadence. Nothing an agent needs before calling 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% with all three optional parameters fully documented in-schema (root, intention, session_id), so the baseline of 3 applies. The description says nothing about these parameters — notably it omits that root scopes the answer to a checkout — but the schema already carries that meaning.

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 set: lists the server version, every registered MCP tool, their purposes, and recommended workflows. This is clearly a meta/introspection tool, which no sibling (gograph_callers, gograph_explain, etc.) duplicates, so an agent can place it immediately.

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 (once per session to record the instrument and orient before analytical queries) and NOT TO USE (do not repeat after capabilities are cached) sections, plus a stated prerequisite — the project-scoped server must have started. Timing and exclusion are both unambiguous.

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. Traversal consumers refuse deleted declarations requiring historical caller evidence. Review instead includes changes --git HEAD declaration evidence and names unavailable historical callers, tests and risk. Incomplete comparisons and missing/ambiguous current identities remain errors. Rebuild before traversing newly added symbols.

NameRequiredDescriptionDefault
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
git_refNoOptional git reference to compare against (e.g., 'main', 'HEAD~5', 'v1.4.50')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.1/5.0
Behavior5/5

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

Well beyond the annotations, which already cover read-only/idempotent/no-destructive: the description discloses the two operating modes (no git_ref reads persisted graph.json without refreshing; with git_ref refreshes), that no application code is compiled, that deselected files are excluded rather than deleted, that parse failures yield diagnostics and never deletion proof, and that missing legacy fingerprints resolve to unknown. It also states refusal behavior for unsafe inputs and the exit-2 convention for incomplete evaluation.

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

Conciseness3/5

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

The purpose is front-loaded and the WHEN/NOT/RETURNS structure is helpful, but the middle is a wall of compressed fragments ('confined declaration baseline', 'Traversal consumers refuse deleted declarations requiring historical caller evidence') that read as internal design notes rather than agent-facing guidance. Several sentences could be merged or dropped without losing actionable 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?

With no output schema, the description does the right thing by enumerating the return shape (complete/partial/cannot_evaluate, diagnostics, changed_files, symbol row categories) and the incomplete-evaluation failure modes. A few concepts — what a 'confined declaration baseline' is, and what distinguishes 'excluded' from 'unknown' in practice — remain underspecified for a tool with this many modes.

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 semantics the schema does not: git_ref's presence switches the tool between a no-refresh artifact read and a refresh, and root scoping determines which checkout's graph answers. intention and session_id are left entirely to their schema text, which is acceptable given the full 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 states a specific verb and resource — 'Compare Go declaration fingerprints, including bodies' — and immediately distinguishes the semantics from line-level diffing ('without marking every symbol in an edited file modified'). The jargon 'fingerprints' and the dense follow-on sentences make the agent work harder than necessary to confirm the core operation, but the operation is unmistakably identifiable.

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?

Explicit 'WHEN TO USE' (after editing, before impact/review) and 'NOT TO USE' (line-level diffs; complete census when evaluation is partial) sections are present, plus a routing note pointing to review for changes --git HEAD evidence. It never names the actual sibling tool identifiers (gograph_review, gograph_impact), so the agent must infer the mapping, and the NOT-TO-USE clause is phrased awkwardly enough to require re-reading.

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. Traversal consumers refuse deleted declarations requiring historical caller evidence. Review instead includes changes --git HEAD declaration evidence and names unavailable historical callers, tests and risk. Incomplete comparisons and missing/ambiguous current identities remain errors. Rebuild before traversing newly added symbols.

NameRequiredDescriptionDefault
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.
uncommittedNoIf true, include uncommitted changes in the analysis scope

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive), yet the description still adds real behavior: config path confinement rules, how baselines are validated (in-project .json with policy marker, otherwise treated as a Git ref), that serialized root is ignored, that incomplete comparisons and ambiguous identities are errors, and that a rebuild is needed before traversing new symbols. Some of the mid-text sentences ('Traversal consumers refuse deleted declarations... Review instead includes changes --git HEAD...') are cryptic and hard for an agent to act on.

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

Conciseness3/5

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

The WHEN TO USE / NOT TO USE / RETURNS markers give useful skeleton, but ordering is poor: path-validation and baseline-builder rules precede the usage section and belong with the parameters. Several sentences are jargon-dense and some, like the traversal/historical-caller passage, consume space without helping an agent decide or invoke.

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?

For a complex aggregate with no output schema, it covers scope, return shape (pass/warn/fail status, findings, summary counts), error conditions, and uncommitted-mode semantics. What is missing is a clear statement of what the checks config controls and how results are grouped, but overall an agent has enough 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 every parameter is already documented in the schema, making 3 the baseline. The description partially restates config and since semantics and adds one genuine detail (the saved graph's serialized root is ignored), but it adds no new meaning for root, intention, session_id, or uncommitted.

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 compound action ('Refresh source analysis and run static policy checks') and enumerates the concrete check families it aggregates (boundaries, API drift, coverage, orphans, globals, arity, complexity). An agent can immediately tell this is the aggregate policy-run tool rather than any single sibling like gograph_boundaries or gograph_arity.

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?

It gives an explicit WHEN TO USE (PR review, pre-commit) and NOT TO USE with a named alternative ('use CLI gograph gate' for CI exit enforcement), which is unusually strong routing guidance. It does not say when to prefer this aggregate over the individual sibling tools (gograph_coverage, gograph_orphans, etc.), which is the one ambiguity left.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
symbolNoOptional Go function or method symbol name substring to filter the complexity report (e.g., 'Build')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.6/5.0
Behavior5/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 goes well beyond that by disclosing sort order, the severity taxonomy, the UNKNOWN/-1 sentinel for unreadable or unparseable repository source, and a freshness check with refresh plus CHA/SSA retry under precise/precise_fallback modes. These are non-obvious behaviors an agent could not infer from the annotations, and none of them contradict the declared read-only, idempotent nature.

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 front-loaded: purpose, then the UNKNOWN edge case, then WHEN/NOT TO USE and RETURNS blocks. The one soft spot is the dense mid-paragraph sentence about freshness checking and CHA/SSA retry, which packs internal implementation jargon into a run-on clause that an agent must parse to extract the actionable point (results are fresh and safe to trust).

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 contract and does so: a structured list of functions with complexity score and severity label, sorted descending, empty when the filter matches nothing, plus the -1/UNKNOWN sentinel. Given four optional parameters, full schema coverage, and complete safety annotations, nothing an agent needs in order to call this 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 baseline is 3 per the rubric. The description restates the `symbol` substring behavior ('filters to a specific function or set of functions') without adding format or matching semantics beyond what the schema already says, and it never mentions `root`, `intention`, or `session_id`, leaving those entirely to the schema — which does document them adequately.

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 opening sentence names a specific verb and resource — 'Report estimated cyclomatic complexity for Go functions' — and immediately states the output ordering and severity labeling. The NOT TO USE block names the exact siblings to route away to (gograph_coupling, gograph_deps for import metrics; gograph_godobj for God Objects), so an agent can separate this tool from a large family of similarly named gograph_* tools 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?

The description provides an explicit WHEN TO USE list (quality audits, decomposition candidates, CI complexity budgets) and an explicit NOT TO USE list with the alternative tool named for each excluded case. This is the strongest form of routing guidance: both the positive trigger and the negative trigger are stated, leaving little to inference.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description only restates 'Read-only; no side effects', which earns no credit. It does add real behavior beyond annotations: a server-side freshness check with refresh in the current analysis mode, CHA/SSA retry on precise graphs after source changes, an empty result when nothing is indexed, and the indexing gaps for receives/selects. Pagination hint ('next_cursor for the same graph snapshot') lives in the schema rather than the description, which keeps this from a 4-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 with the purpose, then cleanly delimited WHEN TO USE / NOT TO USE / RETURNS blocks that are easy to scan. The `term` example is redundant with the schema, and the freshness/CHA-SSA sentence is dense, but no sentence is 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?

No output schema exists, and the description compensates with a RETURNS section giving file locations, line numbers, primitive kind, and empty-when-none semantics. With six optional parameters at full schema coverage and the freshness/refresh behavior disclosed, an agent has everything needed to call this 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's only parameter content is 'Optional `term` filter (e.g., "mutex", "goroutine", "channel")', which duplicates the schema's own examples almost verbatim; no added meaning for root, limit, cursor, intention, or session_id.

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?

Names a specific verb and resource ('Find indexed concurrency sites') and enumerates exactly what counts as a site: `go` statements, channel sends, and calls on sync.Mutex/RWMutex, WaitGroup, and Once. It also states negatives (channel receives and selects not indexed), which lets an agent predict results without trial 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?

Explicit 'WHEN TO USE' (race safety audits, async flow, pre-refactor synchronization mapping) paired with an explicit 'NOT TO USE' that names the sibling alternatives gograph_callers/gograph_callees for sequential flow. The agent has a direct routing rule between this tool and its nearest substitutes.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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/destructiveHint, so the description's "Read-only; no side effects" is redundant, but it adds genuinely non-structured behavior: the server checks freshness before the call, refreshes into the requested analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes. That is useful operational context an agent would otherwise not know; it stops short of discussing cost/latency of the re-analysis.

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, then clearly delimited WHEN TO USE / NOT TO USE / RETURNS blocks, so it scans fast. The freshness/retry sentence is somewhat dense jargon and could be one clause shorter, keeping it just below maximum.

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 6-parameter, read-only query tool with no output schema, it covers what is found, how matches are defined, when to prefer siblings, that results can be empty, and the return shape (names, signatures, package paths, file locations). Nothing an agent needs to call this correctly 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 3 is the baseline, but the description adds matching semantics the schema does not carry: the struct is identified by appearing in a function's return type, and results are empty when no factory is found. It still says nothing extra about root, cursor, limit, session_id, or intention, which the schema already documents.

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?

"Find all factory and constructor functions that instantiate and return a named Go struct" gives a specific verb plus a precise resource definition, and the parenthetical even states the matching rule (return type includes the struct name). It explicitly names the two nearest siblings it is not (gograph_literals, gograph_fields), so the agent can disambiguate 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?

Provides an explicit WHEN TO USE section with a concrete scenario (finding the canonical construction path, or before changing struct initialization) and an explicit NOT TO USE section routing to gograph_literals for composite literals and gograph_fields for fields. Symmetric when/when-not with named alternatives is the top of this scale.

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. Traversal consumers refuse deleted declarations requiring historical caller evidence. Review instead includes changes --git HEAD declaration evidence and names unavailable historical callers, tests and risk. Incomplete comparisons and missing/ambiguous current identities remain errors. Rebuild before traversing newly added symbols.

NameRequiredDescriptionDefault
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.
uncommittedNoIf true, return context for all uncommitted modified symbols bundled in one response.

TDQS

A4.4/5.0
Behavior3/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 given. The description still adds real behavioral context beyond them: freshness checking/refresh of precise and precise_fallback graphs, possible local command telemetry during an active audit session, partial-context source_error with graph_state.read_diagnostic, and refusal to traverse deleted declarations. Some of this is dense jargon (CHA/SSA retry) rather than actionable agent guidance, so it stops short of the top score.

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?

Strongly front-loaded: purpose first, then WHEN TO USE, NOT TO USE, and RETURNS sections. The RETURNS block, however, is a wall of run-on edge-case clauses ('Traversal consumers refuse deleted declarations requiring historical caller evidence', 'Incomplete comparisons and missing/ambiguous current identities remain errors') that cost more parsing effort than they repay.

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 carries the return contract itself and does so thoroughly: node/nodes[], source, callers[], callees[], tests[], test_results[], role in text and gograph.read.v1, the contexts[] variant, and the named error/diagnostic paths. It also flags the rebuild prerequisite for newly added symbols, leaving little an agent needs before calling.

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 baseline is 3; the description still adds meaning the schema does not — uncommitted=true compares declarations against HEAD including selected untracked files and returns a contexts[] array with count:0 when nothing is modified, and it notes that missing symbols are named errors while exact controls matching strictness. root/session_id/intention semantics are left entirely 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?

Opens with a specific verb and resource ('Fetch a pre-flight context bundle for a single Go symbol') and enumerates exactly what the bundle contains (AST metadata, source, callers, callees, tests, role classification). This is clearly distinguishable from siblings like gograph_node or gograph_source that return single facets.

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: As the first call before editing a symbol — eliminates 4–5 separate tool roundtrips' plus a 'NOT TO USE' clause that names the correct alternatives and their conditions (gograph_focus for package orientation, gograph_impact for transitive blast radius). Routing is fully determined.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
mermaidNoReturn Mermaid flowchart text instead of structured JSON
packageNoOptional package name substring to filter results
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.
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

A3.7/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior, so 'Read-only; no side effects' adds nothing. The genuinely useful addition is that the server refreshes source analysis before the call, which signals freshness and latency cost, plus the note that coupling returns Mermaid text when mermaid=true.

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 metric definition, then scope controls, then WHEN TO USE and RETURNS blocks. Efficient, though 'Read-only; no side effects' duplicates the annotations and is wasted space in an otherwise dense description.

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 seven optional parameters and no output schema, the description covers what is measured, scope controls, and the return format including the Mermaid variant. The main gap is that the session_id/intention parameters, which are non-obvious for analytical calls, get no mention in the description.

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 restates the surface semantics ('package filters by substring; include_stdlib and internal_only control scope') but does not add the nuanced relationship between internal_only and include_stdlib that the schema spells out, nor anything about root, session_id, or intention.

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?

States a specific verb and resource with named outputs: fan-in (Ca), fan-out (Ce), and instability I=Ce/(Ca+Ce) per package. It does not name overlapping siblings such as gograph_deps, gograph_imports, or gograph_boundaries, so the agent must infer the distinction from the definitions of those tools.

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

Usage Guidelines3/5

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

The 'WHEN TO USE: To evaluate package isolation' line gives a usage context but no exclusions or named alternatives, despite several siblings (gograph_deps, gograph_imports, gograph_boundaries) that could plausibly serve similar needs. The agent is told when, but not when not.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
testYesExact test name or canonical stable test symbol ID
packageNoOptional exact Go package name used only to disambiguate matching test symbols
intentionNoTechnical rationale, required for analytical calls selecting an active session.
exact_onlyNoReturn only symbols reached entirely through exact/static edges
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.6/5.0
Behavior4/5

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

Beyond the readOnly/idempotent annotations, the description discloses that the server refreshes the graph first, that parser-only or CHA edges downgrade a symbol and its descendants to possible, that same-named tests yield status=ambiguous and are never merged, and that package disambiguates foo_test collisions. These are genuinely useful behavioral traits. Minor deduction for the redundant 'Read-only; no side effects' restating 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?

Content is front-loaded with the core definition followed by precision semantics, disambiguation, and labeled WHEN/NOT/RETURNS blocks. It is dense but nearly every sentence carries information; the trailing 'Read-only; no side effects' is the one line that duplicates structured annotation data rather than adding to 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?

This is a complex analytical tool with six parameters and no output schema, and the description still covers precision model, ambiguity handling, exclusions, and the returned gograph.coverage.v1 field set. Nothing an agent needs to invoke or interpret it correctly 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?

With 100% schema coverage the baseline is 3, but the description adds real meaning: the purpose of package as a narrow disambiguator for the in-package versus external foo_test collision, and the effect of exact_only=true in omitting possible results. The root parameter is left entirely to the schema, which is acceptable but the only unaddressed surface.

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 names a specific verb, resource, and scope: the transitive set of production symbols statically reachable from one test function. It is clearly separable from siblings like gograph_tests, gograph_untested, and gograph_trace, and the WHEN TO USE line reinforces the distinction.

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 state the positive case (map a test to structurally exercised symbols) and the exclusion (do not claim runtime or branch coverage). It also routes the agent to alternatives on ambiguity, telling it to retry with stable IDs from matched_tests or gograph_identity, and explains when to set exact_only.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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)
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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/destructiveHint=false, so the 'read-only; no side effects' line is somewhat redundant. The value-add is the disclosure that the MCP server refreshes source analysis before the call and that mermaid=true changes the response format entirely. Pagination mechanics are left to the schema rather than described.

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?

Labeled WHEN/NOT/RETURNS structure is easy to scan and the identity statement is front-loaded. Slightly verbose in places ('Read-only; no side effects' repeats the annotations) but no sentence is wasted 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?

For a 7-parameter read-only query tool with no output schema, the description covers purpose, entry/exit conditions, result shape, and the analysis-refresh side effect. Missing only result ordering and pagination behavior, which the schema's limit/cursor fields largely cover.

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 only adds meaning for 'mermaid' (returns flowchart text) and 'package' implicitly (accepts 'auth' or a full import path is in schema, not description). Root/limit/cursor/session parameters receive no additional explanation.

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 immediately anchors it relative to a named sibling ('inverse of gograph_deps'). An agent can distinguish this from gograph_deps and gograph_callers without inspecting 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' (single function's callers, route to gograph_callers) sections. Both the positive trigger and the exclusion with a named alternative are given.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
mermaidNoReturn Mermaid flowchart text instead of structured JSON
packageYesThe target package path or name to inspect (e.g., 'internal/search', 'internal/cli')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.
transitiveNoIf true, return the full transitive import closure via Breadth-First Search (BFS)

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, idempotentHint=true, and destructiveHint=false, so 'Read-only; no side effects' just repeats machine-readable data. The description does add real context that the annotations cannot convey: the server refreshes source analysis before the call, which implies freshness and possible latency. It also states that the tool returns found:false when the package is absent, which is a useful behavioral note.

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?

It is compact and front-loaded: purpose first, then the options, then labeled WHEN TO USE, NOT TO USE, and RETURNS sections. Every sentence carries information except 'Read-only; no side effects', which repeats the annotations but is a minor 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?

It covers six parameters with full schema coverage, and it spells out both the return shape (direct[] and transitive[] arrays, Mermaid text, found:false) and the main behavioral trait (the server refreshes analysis first). For a read-only query tool with no output schema, nothing an agent needs in order 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.

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, and the description adds meaning beyond it: it gives transitive=false as the default and describes its effect (direct imports versus the BFS closure), and it links mermaid=true to flowchart output. The remaining parameters (root, session_id, intention) are fully documented in their own 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 names a specific verb and resource ('List the import dependencies of a named package') and immediately distinguishes the tool from gograph_dependents, the reverse-lookup sibling. An agent can pick this one 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?

It gives an explicit WHEN TO USE case ('auditing package layering') and a NOT TO USE case that routes the agent to gograph_dependents for reverse lookup. This is exactly the when/when-not/alternative structure that makes a definition selectable.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
group_byNoGrouping level: 'package' (default), 'module', 'service', or 'file'
intentionNoTechnical rationale, required for analytical calls selecting an active session.
max_depthNoMaximum BFS depth from graph roots (0 = unlimited)
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.
include_stdlibNoIf true, include Go standard library packages in the diagram

TDQS

A4.4/5.0
Behavior4/5

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

The annotations already establish readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so "Read-only; no side effects" largely restates structured data. The description does add behavior the annotations cannot express: it returns Mermaid text rather than a file, and it discloses a scale caveat (use max_depth or coarser grouping for large graphs). What it omits is whether "refresh source analysis" triggers an index rebuild and how long that takes, which matters for a tool whose name implies work beyond formatting.

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?

Four sentences, front-loaded with the core action before the labeled WHEN TO USE, NOT TO USE, and RETURNS sections. The labeled structure makes it scannable, and no sentence is filler — even the scale caveat prevents a foreseeable failure.

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 six optional parameters, no required inputs, and no output schema, the description adequately covers purpose, selection, tuning, and return type (Mermaid text). The remaining gap is operational: it never mentions that regenerating analysis may take time or that output size is bounded, leaving the agent to discover volumetrics on large repos by trial.

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?

Every parameter is documented in the schema at 100% coverage, so the baseline is 3 and the schema carries most of the semantic load. The description only adds scenario-level meaning for group_by (module vs file) and max_depth (large graphs); root's worktree constraint, session_id, intention, and include_stdlib are left entirely 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?

The description opens with a specific verb and resource: "Refresh source analysis and generate a Mermaid architecture diagram of the package dependency graph." It also explicitly excludes sibling territory ("call-graph traversal or single-package focus"), so an agent can separate it from gograph_deps, gograph_callers, or gograph_explore without reading 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?

It provides explicit positive triggers (onboarding, architecture review, communicating package structure) and explicit negative scope ("NOT TO USE: For call-graph traversal or single-package focus"). It further routes parameter choice by scenario — group_by=module for monorepos, group_by=file for drill-downs — which is decision guidance rather than mere option listing.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
queryYesThe go doc query string. Examples: 'fmt.Errorf', 'net/http.HandleFunc', 'io.Reader', 'github.com/jackc/pgx/v5.Conn.QueryRow'
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld/non-destructive, yet the description still adds real substance: it says the handler does not read the graph, requires a started server with a usable artifact, rejects filesystem-shaped queries, and resolves dependencies open-world. The preflight rules are dense and partly opaque ('a special recognized Go build input'), so the added context is valuable but not fully legible.

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

Conciseness3/5

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

The WHEN TO USE / NOT TO USE / RETURNS scaffolding is well front-loaded and scannable. However, the middle is one long run-on enumeration of preflight refusals (source-tree links, .git/.gograph exclusions, go.mod/go.sum/go.work, workspace member boundaries) that costs far more reading effort than it returns for a fetch-doc tool.

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, but the description compensates by specifying the return shape ({query, output} in a one-element array) and the error conditions (unsafe query/repo, symbol not found, go unavailable). With root-resolution rules and prerequisites covered, only the opaque safety phrasing leaves a small gap.

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% and each parameter (root, intention, session_id) already carries a detailed description, including an alias note for cwd. The description adds only the shape of the `query` value via the `go doc <query>` framing, so the schema is doing the heavy lifting and 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 concrete verb and resource ('Fetch Go documentation ... by running `go doc <query>`') and enumerates the three query scopes (package, stdlib symbol, third-party symbol). It also explicitly separates itself from gograph_source and gograph_context, so the agent can route without opening sibling 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 labeled WHEN TO USE ('When a call chain reaches code outside the project') and NOT TO USE ('For project-internal symbols') sections that name the exact alternative tools. This is the strongest part of the definition — the selection decision is fully determined.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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 "Read-only; no side effects" adds nothing. However, the description discloses non-obvious server behavior the annotations do not: freshness is checked and refreshed in the requested analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes, which explains otherwise puzzling latency or result shifts.

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 one-line purpose, then segments WHEN TO USE, NOT TO USE, and RETURNS, so each block is scannable. The freshness/CHA/SSA sentence is jargon-dense but conveys real behavior; the "Read-only; no side effects" clause duplicates annotations and is the only clearly wasted phrase.

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 RETURNS block correctly takes on return-shape duty by naming parent struct names, package paths, and file locations, plus the empty-result contract. Minor gap: it does not say whether embedding is reported only for direct parents or followed transitively through nested embeddings, which matters for blast-radius use.

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 root, limit, cursor, struct, intention, and session_id are all documented in the input schema. The description adds no parameter-level meaning (e.g., exact-name matching vs qualified names, or how pagination interacts with embedding results), 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 and resource ("Find all Go structs that embed the named struct via anonymous field composition") and immediately narrows the mechanism to anonymous field composition, which separates it from field-reference and interface queries. An agent can distinguish it from gograph_implementers and gograph_usages 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 covers both exploratory (understanding how a base type is extended) and pre-mutation (blast radius before modifying a shared struct) cases. The NOT TO USE block names the correct alternatives by tool name and the exact condition that selects each.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.
include_testsNoInclude routes registered in *_test.go files

TDQS

A4.2/5.0
Behavior3/5

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

The description adds real context beyond the annotations: a content-digest freshness check, incremental AST refresh, and a repository-wide CHA/SSA retry path after source changes, plus the caveat that dynamically computed prefixes remain unresolved. These are meaningful operational traits that annotations (readOnly/idempotent) do not convey. However, the freshness/retry paragraph is dense, partially opaque, and never says whether the call can be slow or how it behaves when analysis is refused, so the disclosure is informative but uneven.

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 correctly: capability first, then prefix-resolution behavior, then WHEN/NOT TO USE, then RETURNS, then parameter notes. Information density is high, though the freshness/CHA-SSA sentence is a long embedded clause that a reader may need twice. Slight trimming would improve it without losing content.

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 seven-parameter analytical tool with no output schema, the description supplies the missing return contract (array of slices with route/handler/chain/SQL/env fields, plus the found:false suggestion), coverage of query forms and depth semantics, and the freshness/fallback behavior. An agent has enough to call it correctly on the first attempt.

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 seven parameters, and the description mostly restates them (query forms, depth default 5). It does add one genuinely useful nuance not spelled out in the schema — that unresolved dynamic prefixes can still be reached via suffix or handler — but it never mentions root, mermaid, include_tests, intention, or session_id, leaving that to 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?

Opens with a specific verb and scope: 'Build a full vertical slice for one HTTP route', then enumerates the exact components of the slice (handler symbol, BFS call chain, SQL queries, env vars). It is immediately distinguishable from gograph_routes (list all routes) and gograph_source (raw handler code), which are named 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?

Contains explicit WHEN TO USE ('auditing what an API endpoint does end-to-end') and NOT TO USE clauses that route the agent to two named siblings, gograph_routes for discovery and gograph_source for raw code. There is also a sequencing hint ('use gograph_routes first to find the pattern').

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so "Read-only; no side effects" is largely redundant. However, the description adds genuinely non-obvious behavior: the server checks freshness before the call, refreshes in the requested analysis mode, and retries CHA/SSA for precise and precise_fallback graphs after source changes. That freshness/retry detail is the kind of context annotations cannot carry.

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 structured WHEN TO USE / NOT TO USE / RETURNS blocks, so an agent can scan quickly. The freshness sentence ("precise and precise_fallback graphs retry CHA/SSA after source changes") is dense internal terminology that costs a little more than it returns for callers who only need to know results are current.

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?

Six optional parameters are fully documented in the schema, and with no output schema the description supplies a RETURNS block covering key names, calling function, file/line, and the empty-result case. Combined with the freshness note and the static-analysis caveat, 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 only restates the `term` substring filter with an example that already appears verbatim in the schema for `term`, and says nothing about `root`, `limit`, `cursor`, `session_id`, or `intention`, leaving the schema to do all parameter work.

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 environment variable reads") and names the concrete detection surfaces (os.Getenv, os.LookupEnv, config frameworks) plus the enclosing-function context. It is clearly distinguishable from siblings such as gograph_sql and gograph_strings, which scan other artifact types.

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?

There is an explicit WHEN TO USE block (deployment config manifests, required env var documentation, secret-read auditing at startup) and an explicit NOT TO USE block that routes runtime-value needs and database queries elsewhere, naming gograph_sql directly. 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_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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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)
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations it discloses non-obvious behavior: a freshness check with refresh in the requested analysis mode, CHA/SSA retry after source changes in precise/precise_fallback graphs, and the heuristic caveat that no SSA or full data-flow tracking is performed. The 'read-only; no side effects' line repeats the annotations, but the added operational detail far outweighs that redundancy.

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 action, then cleanly sectioned into WHEN TO USE, NOT TO USE, and RETURNS. Dense and largely earning its space, though the retry/analysis-mode sentence is heavy for a read tool and the side-effects line duplicates 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?

With no output schema, the description fully covers returns: definition sites, return sites, propagation path chains, related test names, and the empty-paths case. It also flags the analysis-fidelity limit, so an agent knows what the result can and cannot prove.

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 parameter meaning is already documented. The description adds only the query-over-term preference, which is a useful but narrow increment over the schema's own '(preferred over term)' note. Baseline 3 applies when the schema carries the parameter burden.

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 (trace) and resource (a named error sentinel or message string) with scope: definition sites, return sites, and upward propagation to HTTP/CLI entry points. It names the sibling tools it is not (gograph_callers, gograph_impact, gograph_errors), 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 section frames the end-to-end error audit use case with a concrete example (ErrNotFound), and NOT TO USE names the exact alternatives for general upstream traversal and for listing all errors. Both the use and the exclusion 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_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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.4/5.0
Behavior4/5

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

The annotations already declare readOnly/idempotent/non-destructive, so 'Read-only; no side effects' earns no credit, but the description adds genuinely new behavior: the server checks freshness before the call, refreshes in the requested analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes. That tells the agent results reflect post-change source and explains latency/retry characteristics not visible in 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-loaded with the core purpose, then cleanly sectioned into behavior, WHEN TO USE, NOT TO USE, and RETURNS. Slightly redundant in repeating the annotations' read-only/non-destructive guarantee, but overall dense 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?

With seven parameters and no output schema, the description compensates by supplying a RETURNS section (message text, file path, line number, empty when no matches) plus freshness/refresh semantics. That is everything an agent needs to call it and interpret results 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 root, limit, cursor, no_tests, intention, and session_id are already fully documented. The description only restates the optional `term` substring filter with the same examples the schema gives, adding no new meaning. Baseline 3 is correct when the schema carries the parameter 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 and resource ('Find all error and panic sites') and enumerates exactly what counts as a site: errors.New, fmt.Errorf, sentinel var declarations, and panic calls. It also names the sibling it is not (gograph_errorflow), so an agent can discriminate 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 lists three concrete scenarios (cataloging error codes and panic paths, standardizing messages, checking whether a string already exists) and an explicit NOT TO USE that routes propagation tracing to gograph_errorflow. 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_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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
symbolYesThe name or ID of the symbol to explain (supports short name 'CreateUser', dot-notation 'graph.Graph', or fully-qualified ID)
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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 (readOnlyHint, idempotentHint, destructiveHint false), yet the description adds genuinely new behavior: the server checks freshness before the call, refreshes in the requested analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes. It also discloses the {"found":false} failure shape for symbols absent from the graph. Slightly more on what refresh means for latency/consistency would push this higher.

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 TO USE, NOT TO USE, and RETURNS blocks makes it easy to scan. The opening enumeration of ten content categories is long but each item conveys real scope, so little is wasted; the freshness/CHA-SSA sentence is the densest part.

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 aggregate tool with no output schema, the description supplies everything an agent needs: what is produced, when to choose it over siblings, freshness/refresh semantics, and the not-found return case. No significant gap remains.

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 four parameters (root, symbol, intention, session_id) are already well documented in the schema. The description adds no additional meaning about symbol formats, root scoping, or session selection, 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 description opens with a specific verb and resource ("Generate a synthesized, LLM-ready narrative for a Go symbol") and enumerates exactly what the document contains (role, callers, callees, complexity, SQL, env vars, HTTP routes, concurrency, tests, interface satisfaction). This makes it clearly distinguishable from single-aspect siblings like gograph_callers or gograph_complexity: this is the aggregate view.

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 names three concrete scenarios (onboarding, PR documentation, architectural assessment without multiple calls) and a NOT TO USE section routes to two named alternatives with their conditions (gograph_source for raw source, gograph_impact for targeted 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_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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A3.8/5.0
Behavior3/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, so the safety profile is covered; the description's 'Read-only; no persistent side effects' largely repeats it. It does add genuine behavioral context beyond annotations — the server refreshes source analysis before the call, question-like text is treated lexically rather than model-interpreted, and possible dispatch is excluded from bundled identity impact and deep traversals. That is useful, but the return-format sentence overlaps with what a RETURNS line normally covers and there is no output schema to anchor it.

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?

It is front-loaded with the core action, then modes, then constraints, then a clearly labeled RETURNS clause, so an agent can stop reading early. It is dense with clauses ('Possible dispatch is excluded from bundled identity impact and deep traversals' is a mouthful), but almost every sentence carries distinct information rather than 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?

For an eight-parameter fan-out tool with no output schema, the description supplies the mode matrix, default limits, interaction rules, freshness behavior, and a RETURNS line naming the shared gograph.explore.v1 payload with totals and omission metadata. Nothing an agent needs to invoke it correctly — or to interpret what comes back — 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 coverage is 100%, so the schema already documents all eight parameters, and the description's per-parameter restatements (compact, deep, limit defaults) mostly duplicate it. The one thing it contributes beyond the schema is the interaction rule that an explicit limit overrides the mode defaults, which the schema only implies. Baseline 3 is appropriate when the schema carries the weight.

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') plus a bounding constraint ('one bounded call'), and the body enumerates exactly what the bundle contains (ranked matches, source, callers/callees, tests, impact). It does not name the sibling tools it overlaps with, only gesturing at 'focused tools remain authoritative', so an agent cannot map it to gograph_callers/gograph_impact/gograph_source by name.

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?

Mode selection is spelled out clearly: compact for low-token discovery, deep for expanded evidence, standard as the implied middle, with mutual exclusivity and limit-override rules stated. What is missing is explicit routing advice such as 'use gograph_callers instead when you only need callers' — the phrase 'Focused tools remain authoritative for complete output' hints at alternatives without identifying any.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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, and the description still adds real value: it discloses that the server checks freshness before the call, refreshes in the requested analysis mode, and retries CHA/SSA on precise graphs after source changes. It also states the empty-result condition when the struct is not found. What it omits is how the freshness latency or staleness window manifests to the caller, so it stops short of the top mark.

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 clearly labeled WHEN TO USE, NOT TO USE, and RETURNS blocks, so an agent can scan it quickly. The freshness/CHA-SSA sentence is dense jargon packed into the second sentence and could be trimmed, but no section is 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?

With no output schema, the RETURNS section correctly supplies the return shape and the empty-result sentinel, which is what an agent most needs. The one gap is that pagination is unmentioned in the description even though limit and cursor exist, so a caller with a large struct must infer paging from the schema alone.

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 root, limit, cursor, struct, intention, and session_id are all already self-documenting. The description names the target ('named Go struct') but adds no format or resolution rules for the struct identifier beyond what the schema states ('exact name ... e.g., Config, User'). Baseline 3 applies when the schema carries the 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?

The description opens with a specific verb and resource ('Extract all declared fields from a named Go struct') and enumerates exactly what comes back: field names, Go types, and raw tag strings. An agent can distinguish this from sibling introspection 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 cases (tag mapping, layout inspection, pre-add enumeration) and explicit NOT TO USE routing to named siblings: gograph_node/gograph_source for methods and gograph_literals for initialization sites. Both the positive and negative cases are covered.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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, yet the description still adds real context: freshness checking before the call, mode-specific refresh with CHA/SSA retry after source changes, and that an empty result means the package has no test helper infrastructure. It does not address pagination behavior under the byte budget or how helper symbols are classified, 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-loaded with purpose, then clearly labeled WHEN TO USE / NOT TO USE / RETURNS blocks that scan well. The sentence about freshness refresh and CHA/SSA retry is server-internal detail that adds length without influencing tool choice, so it is not perfectly economical.

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 RETURNS section carries the return-value burden, describing what symbols come back and the empty-case meaning. Combined with the freshness note and the explicit exclusions, an agent has everything needed to call this 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, root, limit, cursor, session_id and intention are all documented in the schema. The description adds no syntax, format, or filtering semantics 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 — 'Find test helper structs and factory/builder functions declared in *_test.go files for a named package' — narrowing scope to helper infrastructure rather than all test code. It explicitly contrasts with gograph_tests (test functions) and points to filesystem search for external test data, so an agent can separate it from the nearest siblings.

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 writing new tests, to avoid duplicating existing builders/factories/setup structs) and NOT TO USE clauses that name the alternative tool for each excluded case. Nothing about selection 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_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 call/return context for the 3 most recent call sites by default (context depth up to 16; deeper returns that lose their call site are kept at low confidence), bounded by a size-derived work budget that reports incomplete runs explicitly. RETURNS: Structured findings with source, sink, severity, confidence, and path steps. Configure trusted return-value sanitizers in .gograph/flow.json or with config.

NameRequiredDescriptionDefault
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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
max_workNoOptional propagation work budget; defaults to a value derived from the number of flow facts. An exhausted budget returns completeness.complete=false with partial findings.
no_testsNoExclude functions in *_test.go files
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.
context_depthNoOptional call-site frames kept per value (default 3, max 16). Deeper settings are more precise and need more work.

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, no side effects, but the description goes well beyond them: it discloses that the server refreshes source analysis before the call, that the analysis is path-insensitive, that call/return context defaults to 3 frames (max 16) with deeper returns degrading to low confidence, and that a size-derived work budget can return an explicitly incomplete run. That is substantive operational context an agent cannot get 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 purpose, then clearly labeled WHEN TO USE / NOT TO USE / RETURNS blocks. The NOT TO USE sentence is dense and packs several caveats (path-insensitivity, context depth, work budget) into one long construction, which slightly hurts scannability but every clause carries 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?

For a 10-parameter analytical tool with no output schema, the description covers what it does, prerequisites, explicit limitations, what the findings contain (source, sink, severity, confidence, path steps), and how to configure sanitizers. An agent has everything needed to decide and invoke 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 description coverage is 100%, so the schema already carries parameter meaning. The description nonetheless adds value by explaining that trusted return-value sanitizers are configured via .gograph/flow.json or the config parameter, and by naming the confidence/completeness consequences of the context_depth and max_work settings, which the schema states only briefly.

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 pair ('Find potential untrusted-data paths') and enumerates both source kinds (HTTP request objects, decoded JSON, environment variables) and sink kinds (SQL text, process execution args, filesystem paths, outbound HTTP). This is a specific taint-flow analysis, clearly distinguishable from a generic path or trace 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?

It has explicit WHEN TO USE ('during a security review or before changing request parsing, command execution, file access, SQL construction, or URL handling') and NOT TO USE sections, plus a stated prerequisite to run `gograph build . --precise` first. Alternatives aren't named by sibling, but the exclusion criteria do the routing work.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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 behavior: the server checks freshness and refreshes in the requested analysis mode, precise/precise_fallback graphs retry CHA/SSA after source changes, and the result is empty when the package is not found. It stops short of explaining pagination/limit/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.

Conciseness4/5

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

Front-loaded with the core action, then cleanly sectioned into WHEN TO USE, NOT TO USE, and RETURNS. The freshness/CHA-SSA sentence is dense but carries real information; overall it is appropriately sized for a six-parameter tool with no output schema.

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?

For a tool with no output schema, the RETURNS section compensates by describing the shape of the result and the empty-package case. Pagination and session/intention semantics are left entirely to the schema, which is a minor gap given the schema's thoroughness.

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 every parameter including root, limit, cursor, package, intention, and session_id is already documented in the schema. The description adds no syntax or format 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?

The description opens with a specific verb and resource ('Extract a comprehensive structural summary of one Go package') and enumerates exactly what is returned: files, defined symbols, internal call edges, and package-level imports. It also names the sibling tools it is not (gograph_context, gograph_source, gograph_query), so an agent can distinguish it 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 ('orienting to an unfamiliar package before editing it') and NOT TO USE clauses that route to specific alternatives for single-symbol detail and global keyword search. Both the positive trigger and the exclusions are stated, leaving nothing to inference.

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

gograph_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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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 non-open-world, and the description reinforces 'Read-only; no side effects' without contradicting them. It adds genuine behavior beyond annotations: pre-call freshness checking, graph-mode refresh, and CHA/SSA retry after source changes. The CHA/SSA sentence is implementation jargon that adds less selection value than the rest, keeping it just 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?

Purpose is front-loaded, and the WHEN/NOT/RETURNS structure is easy to scan. The freshness/CHA/SSA sentence is dense, jargon-heavy, and the least actionable part of the definition, adding mild bloat to an otherwise tight 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?

Despite no output schema, the RETURNS section specifies variable names, types, mutating functions, and the empty-result case. With six parameters (one required) and pagination already documented in the schema, plus freshness behavior disclosed, an agent has everything needed to call this 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 root, limit, cursor, package, intention, and session_id are already fully documented in the schema. The description only implies the 'package' scoping; it adds no syntax, path-format, or pagination guidance beyond what the schema provides, which is the expected 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?

Opens with a specific verb+resource: 'Find package-level variable declarations (var blocks) and the functions that mutate them in a specific package.' This is clearly distinguishable from the many sibling graph tools (e.g., gograph_envs, gograph_fields, gograph_usages) because it names both the declaration kind and the mutation-tracking output.

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 (auditing mutable global state, thread-safety hazards, singletons before a concurrency refactor) and an explicit NOT TO USE clause that routes local-scope questions away and env variable reads to gograph_envs by name.

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)
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
callsNoMinimum outgoing call count (default: 15)
fieldsNoMinimum field count (default: 8)
methodsNoMinimum method count (default: 5)
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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/non-destructive, and 'Read-only; no side effects' merely restates them. However the description adds genuine behavioral context beyond annotations: a freshness check with automatic refresh, CHA/SSA retry on precise graphs after source changes, and the qualification/ranking rule (any exceeded threshold qualifies, combined excess ranks). That is meaningful for interpreting and trusting results.

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 labeled WHEN TO USE / NOT TO USE / RETURNS sections that are easy to scan. The freshness/refresh sentence is dense and slightly verbose, but overall every part contributes.

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 7 optional parameters and no output schema, the description supplies the missing return-value information via RETURNS (ranked candidates with method/field/call counts, empty when nothing exceeds thresholds). Nothing needed to call it 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 coverage is 100%, so each parameter is already documented in the schema. The description adds real value about how thresholds interact (any enabled threshold qualifies, combined excess determines rank) but otherwise repeats the defaults already in 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?

Names a specific verb and target ('Detect God Object anti-pattern candidates') and states the scoring dimensions: method count, field count, outgoing call count. It also names the sibling tools it is NOT (gograph_fields, gograph_complexity), so an agent can disambiguate 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 ('during architecture reviews to find monolithic structs that should be decomposed') and NOT TO USE with two named alternatives and the conditions that select them. Little 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_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)
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.
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

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, yet the description still adds real value: it discloses that the server checks freshness and refreshes in the requested analysis mode, and that precise/precise_fallback graphs retry CHA/SSA after source changes. The CHA/SSA phrasing is jargon-heavy and stops short of stating latency or staleness consequences, so it falls just 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 with the core ranking statement and organized into WHEN TO USE / NOT TO USE / RETURNS blocks that are easy to scan. The freshness/CHA-SSA sentence interrupts the flow with implementation detail an agent rarely needs when choosing the tool, slightly diluting an otherwise tight definition.

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?

Though there is no output schema, the RETURNS line specifies the shape ('ranked list of function names with fan-in count and package location'), which is exactly what the missing output schema would have covered. Combined with the exclusion of test-file edges and the configurable result count, 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 top, root, intention and session_id are already documented in the schema; the description largely restates the `top` default and the include_tests behavior that the schema already carries. It adds no new meaning for root, intention or session_id, 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 ('Rank functions by incoming call count (fan-in)') plus the analytic intent ('identify the most-depended-on symbols'). The NOT TO USE clause explicitly names gograph_focus, gograph_coupling and gograph_complexity as the tools for adjacent questions, so an agent can disambiguate 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?

Provides an explicit WHEN TO USE ('deciding where to invest refactoring effort or documentation') tied to the semantics of high fan-in, and an explicit NOT TO USE routed to named alternatives. Both the positive and negative selection conditions are spelled out rather than implied.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already establish read-only, idempotent, closed-world behavior, and the description adds real operational context on top: the server refreshes source analysis before the call, runtime environment values are never read, and construction is not dispatch proof. It also discloses that unresolved destinations surface as workspace diagnostics and that workspace http_clients mappings can resolve bases or env:KEY, which are non-obvious behaviors an agent needs.

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 scope statement is front-loaded and every sentence carries information about inference limits, resolution behavior, or return shape. It is dense and jargon-heavy, which costs some readability, but there is no filler or repetition.

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?

For a static-analysis tool with six optional parameters, pagination, and session plumbing, the description covers scope, exclusions, refresh behavior, and return fields (file/line, dynamic base/suffix evidence, total/returned/truncated/next_cursor). Session and intention semantics are left to the 100%-covered schema, so the remaining gap is minor.

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 six parameters, and the baseline is 3. The description's note that the optional term matches method, URL/base, or function largely restates the schema, and it adds only the framing of results as a bounded page, which mildly clarifies limit/cursor without new syntax detail.

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 and resource: a bounded page of HTTP evidence from imported, unshadowed net/http Get/Post/PostForm/Head calls plus possible NewRequest/NewRequestWithContext construction. It also states explicit scope limits (client receiver methods and arbitrary URL-building functions are not inferred) and points to gograph_routes for server-side routes, so it is distinguishable from siblings 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 Guidelines4/5

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

It provides a clear usage context (client-side outbound HTTP evidence) and one explicit alternative: 'For server routes use gograph_routes.' It also states what the tool will not infer, which implicitly tells the agent when to look elsewhere. It does not, however, route the agent away from other plausible siblings such as gograph_endpoint, gograph_api, or gograph_envs.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
symbolYesExact symbol name, package/receiver-qualified spelling, or canonical stable ID
packageNoOptional exact Go package name used to disambiguate matching symbols
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.3/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 still adds substantive context: the server refreshes the graph first, ambiguous short names return every candidate and are never silently resolved, and the exact durability rules for canonical IDs (survives line shifts and file moves within a package; breaks on package/module moves, receiver changes, renames). These are behavioral facts an agent cannot get from the annotations or schema.

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 action, then the ID-stability rules, then labeled WHEN TO USE and RETURNS sections, which makes it scannable. It is dense throughout and the ID-durability enumeration is wordy, but no sentence is 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 correctly supplies the return contract: gograph.identity.v1 JSON with status values exact, ambiguous, or not_found plus deterministic matches. Combined with the ambiguity policy and the root/package scoping notes, 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.

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 beyond the schema: it explains why the optional package qualifier exists (the uncommon in-package versus external foo_test ID collision) rather than just restating it. It also clarifies what forms the symbol parameter accepts (exact name, qualified spelling, canonical ID), reinforcing the schema text.

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 description opens with a precise verb+resource: resolve a symbol spelling or canonical stable ID to a location-independent identity plus current source location. That is far more specific than most siblings and implies the difference from lookup-style tools like gograph_node or gograph_usages. It never names a sibling tool to contrast against, so it stops short of the top bar.

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' line gives two concrete triggers: before persisting cross-document references, and to re-resolve an existing stable ID. That is clear positive guidance with real context. There are no explicit when-not-to-use conditions or named alternatives (e.g., when to prefer gograph_node or gograph_source instead).

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. Traversal consumers refuse deleted declarations requiring historical caller evidence. Review instead includes changes --git HEAD declaration evidence and names unavailable historical callers, tests and risk. Incomplete comparisons and missing/ambiguous current identities remain errors. Rebuild before traversing newly added symbols.

NameRequiredDescriptionDefault
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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
intentionNoTechnical rationale, required for analytical calls selecting an active session.
exact_onlyNoExclude any path that depends on possible call evidence; default false retains explicitly labeled possible results
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.
uncommittedNoIf true, compute blast radius of all uncommitted modified symbols

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), yet the description still adds real value: a freshness check before the call, the exact-vs-possible evidence distinction with dotted Mermaid edges, comparison against HEAD including selected untracked Go files, refusal of deleted declarations, and the instruction to rebuild before traversing new symbols. The middle section is muddied by a garbled sentence beginning 'Review instead includes changes --git HEAD declaration evidence', which reads as leakage about a sibling tool and weakens otherwise strong disclosure.

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

Conciseness3/5

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

The structure is strong and front-loaded — purpose, freshness, modes, when/when-not, returns, edge cases — and every early sentence earns its place. However the final third becomes a dense run-on of edge-case rules ('Traversal consumers refuse deleted declarations requiring historical caller evidence...') plus the garbled 'Review instead includes' sentence, which costs the reader more than it returns.

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?

For a 10-parameter, zero-required tool with no output schema, the description covers the essentials: what comes back (transitive upstream symbols, a bounded native page including empty pages, Mermaid text), error conditions for incomplete comparisons and missing identities, and the freshness prerequisite. The only real gap is that session/intention parameters, which gate analytical calls, are left entirely to the 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?

Schema coverage is 100%, so the baseline is 3, but the description adds semantics the schema cannot express: the three modes are mutually exclusive entry points mapped to `symbol`, `uncommitted`, and `since`, and it clarifies that mermaid swaps the response shape entirely. It does not add anything for root, limit, cursor, session_id, or intention beyond what the schema already documents.

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 opening sentence gives a specific verb and resource — 'Traverse the call graph backwards to find every symbol that transitively calls the target' — and immediately frames it as 'the full upstream blast radius of a change'. It explicitly distinguishes itself from the sibling gograph_callers by scoping that tool to 'direct one-hop callers only', 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?

Dedicated 'WHEN TO USE' and 'NOT TO USE' blocks name both the triggering situation (before refactoring a core function) and the alternative tool (gograph_callers) with the condition that selects it. The three invocation modes (symbol, uncommitted=true, since) are enumerated, which covers the main decision points an agent faces.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
interfaceYesThe name of the interface (e.g., 'AuthService')
test_onlyNoIf true, return only structs defined in test or mock files (replaces gograph_mocks)
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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, but the description adds real behavior: test-file AST implementations are merged with type-checked production results, freshness is checked and refreshed in the requested analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes. This is genuine context an agent could not infer, though freshness details are server-level rather than tool-level and pagination-by-byte-budget is left to the schema.

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 purpose is front-loaded, followed by behavior, then WHEN/NOT/ RETURNS in clearly separable blocks, so an agent can stop reading early. The freshness/CHA-SSA sentences are the densest and least actionable part, costing a point against an otherwise tight structure.

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, and the description compensates with a RETURNS block specifying implementing struct names with package paths and file locations plus the empty-result case. Combined with the test_only merge semantics and the inverse-tool pointer, an agent has everything needed to call this correctly for a 7-parameter analytical 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 root, limit, cursor, session_id, intention, and test_only. The description adds only a use-case gloss for test_only ('*_test.go files (mocks/stubs)'), which largely restates the schema's own 'test or mock files (replaces gograph_mocks)' wording, 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 first sentence gives a specific verb and resource — 'Find all concrete structs that implement a named Go interface' — and the description explicitly names the inverse tool (gograph_interfaces) and the unrelated sibling (gograph_fields), so an agent can separate it from neighbors 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?

It carries explicit WHEN TO USE scenarios (polymorphism tracing, DI points, mock discovery) and an explicit NOT TO USE clause routing to gograph_interfaces for the inverse direction and gograph_fields for fields. It also states the discriminating condition for test_only=true (mocks/stubs), 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_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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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, and the description reinforces 'Read-only; no side effects.' It adds genuinely new behavioral context beyond annotations: the server checks freshness and refreshes in the requested analysis mode, and precise graphs retry CHA/SSA after source changes. The CHA/SSA sentence is jargon-heavy and its practical implication for the caller is left implicit, which keeps this 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-loaded with the core action, then cleanly sectioned into WHEN TO USE, NOT TO USE, and RETURNS, which is easy for an agent to parse. The freshness/CHA/SSA sentence is the one piece of internal machinery jargon that could be trimmed or made actionable.

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 purpose, selection criteria, exclusions with named alternatives, and return shape (including the empty-result case) for a tool with no output schema. Combined with a fully documented schema, 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 every parameter (root, limit, cursor, package, intention, session_id) is already documented in the schema. The description reinforces that the package must be an exact import path but adds no syntax, format, or edge-case detail beyond that. Baseline 3 applies 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 files and packages ... that import a specific package by its exact import path.' It also scopes the direction of the edge (importers, not imports), which is exactly the distinction an agent needs against the 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?

Provides explicit WHEN TO USE (isolating third-party library usage before removal/replacement, tracing internal package consumption) and NOT TO USE clauses that name the correct alternatives: gograph_deps for outgoing imports and gograph_dependents for reverse lookup by short name. This is the strongest form of routing guidance.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.6/5.0
Behavior5/5

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

The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, but the description contributes real behavior beyond them: the server checks freshness before the call, refreshes in the requested analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes. It also sets expectations for the empty-result case, which an agent needs in order to interpret a null answer correctly rather than assuming failure.

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 definition and inverse relationship come first, then WHEN/NOT WHEN, then RETURNS, with labeled sections that are easy to scan. Minor waste remains — 'Read-only; no side effects' repeats what readOnlyHint and destructiveHint=false already say, and the CHA/SSA retry detail is more machinery than an agent needs to choose and call the 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?

There is no output schema, so the description must describe return values, and it does: interface names, method signatures, file locations, and the empty-set case. Combined with full schema coverage for the six parameters and annotations covering the safety profile, 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 description coverage is 100%, so root, limit, cursor, struct, intention, and session_id are all documented in the input schema itself. The description only restates that a struct name is the input, adding no new syntax, naming, or resolution rules beyond 'e.g. AuthService' already in the schema. Baseline 3 is appropriate when the schema carries the parameter burden.

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 Go interfaces satisfied by a named concrete struct') and immediately frames it as the inverse of gograph_implementers. The formal definition — every interface whose method set is a subset of the struct's methods — makes the semantics unambiguous and distinguishable from every sibling in a 60+ tool namespace.

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 gives a concrete scenario (before refactoring a method, to see which contracts break) and an explicit NOT TO USE section routes the agent to gograph_implementers for the inverse query and to gograph_node/gograph_public for interface declarations. That is exactly the when/when-not/alternatives structure the top score requires.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, but the description adds genuinely new behavioral context: the server performs a freshness check and refresh in the requested analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes, which explains possible latency and result consistency. The one redundant sentence is 'Read-only; no side effects,' which merely restates the annotations, but it does not undermine the 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?

The description is front-loaded with the core purpose, then cleanly divides into WHEN TO USE, NOT TO USE and RETURNS sections, making it easy to scan. It is somewhat longer than necessary — the freshness/CHA/SSA sentence is implementation detail that could be trimmed — but no section 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?

Although no output schema exists, the RETURNS section describes exactly what comes back (file paths and line numbers, empty when the struct has no direct initialization sites), and pagination is handled by limit/cursor in the schema. Combined with explicit exclusions 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 baseline is 3; every parameter including root, limit, cursor, intention and session_id is already documented in the schema. The description only clarifies the meaning of 'struct' implicitly via 'named struct' and does not add format or scoping detail beyond what the schema states.

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 every composite-literal initialization site for a named Go struct — and even paraphrases the syntax (Foo{...}) so the agent knows exactly what code pattern is matched. It explicitly contrasts itself with gograph_constructors, which handles factory functions, so the two siblings are distinguishable 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 an explicit WHEN TO USE scenario (before adding a required field, to scope migration blast radius) and an explicit NOT TO USE clause naming the alternatives for adjacent cases (gograph_envs or grep for magic values, gograph_constructors for factory functions). 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_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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
interfaceYesThe name of the interface (e.g., 'AuthService')
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.3/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), yet the description adds real value: it discloses that the server checks graph freshness before the call, refreshes in the requested analysis mode, and that precise/precise_fallback graphs retry CHA/SSA after source changes. That is meaningful non-obvious behavior an agent would otherwise not know. It stops short of 5 only because pagination/byte-budget behavior is left entirely to the schema.

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 structured with explicit WHEN TO USE / NOT TO USE / RETURNS segments and the purpose front-loaded. The freshness-and-CHA/SSA sentence is dense and somewhat internal, but it still earns its place as behavioral disclosure; only minor trimming would improve it.

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 RETURNS line describes what comes back (test-file struct names with file locations, empty when no mocks exist), which compensates. Combined with the explicit alternative routing and freshness disclosure, an agent has enough to call this correctly; only per-parameter usage nuance is absent.

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 six parameters are already documented in structured form, including root, limit, cursor, session_id and interface. The description adds no syntax or format detail beyond that (e.g., no guidance on interface naming, aliasing, or cursor reuse), 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 (find), a precise resource scope (structs in *_test.go files), and the concept (test doubles, mocks, stubs) in one front-loaded sentence. It also pins its identity by declaring it equivalent to gograph_implementers with test_only=true, so an agent can distinguish it from the many sibling graph tools immediately.

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 (finding existing mocks before writing a new one) and NOT TO USE (production implementers → gograph_implementers without test_only; new code → prefer gograph_implementers with test_only=true). Both the alternative and the condition selecting it 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_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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.5/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, so 'Read-only; no side effects' is largely redundant. The description earns credit elsewhere: it discloses that a precise graph widens detection to ++/+=, pointer aliasing, atomic/sync/wrapper and channel mutations, and that analysis re-runs after source edits — genuine behavior an agent could not 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?

The WHEN TO USE / NOT TO USE / RETURNS structure is front-loaded and scannable, with no filler sentences. The single weak spot is the redundant 'Read-only; no side effects' phrase that repeats the annotation block, and the analysis-mode sentence is dense enough to need a second read.

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 six parameters, one required, and no output schema, the description carries the return-value burden and does so via the RETURNS line covering mutation locations and indirect mutator method names. Paging behavior and the root/session parameters are only handled in the schema, but nothing essential for correct invocation 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 real meaning to the required 'field' parameter by documenting the qualified Type.Field form and explaining why it matters (excluding same-named fields on unrelated types). Pagination, root and session parameters are left entirely 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?

The first sentence states a specific verb ('Find') and resource ('struct-field and package-global mutation sites'), and the exclusions sharpen the boundary further (local-variable assignments are out of scope). The NOT TO USE clause names the two sibling tools it could be confused with, gograph_fields and gograph_literals, so an agent can disambiguate 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 ('diagnosing state changes or auditing mutability') and NOT TO USE sections route the agent directly, and the alternatives are named rather than implied. The added note about the analysis mode and re-running after source edits tells the caller the condition under which results will change.

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')
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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 structurally. The description adds genuinely non-obvious behavior: the server checks freshness and refreshes in the requested analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes, plus an empty result when the name is not found. These are real operational traits beyond the annotations, though the CHA/SSA retry sentence is terse enough to be somewhat opaque.

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 clear labeled sections (WHEN TO USE / NOT TO USE / RETURNS), which is easy for an agent to parse. Slightly verbose in the freshness/CHA-SSA sentence, but nothing is truly wasted.

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?

For a read tool with a rich schema and no output schema, the description covers purpose, alternatives, behavioral caveats, and return shape, which is close to complete. It does not mention pagination behavior or next_cursor despite the schema exposing limit/cursor, a minor gap for an agent handling multi-page 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 all six parameters — including root scoping, limit/cursor paging, intention, and session_id — are already documented in the schema. The description adds no parameter-level detail beyond 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?

States a specific verb and resource ("Fetch AST metadata for a named symbol, package, or file") and enumerates the returned fields: kind, file path, line number, signature, doc comment, struct fields. It explicitly positions itself relative to siblings ("lighter than gograph_source for metadata-only lookups"), so an agent can discriminate it 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?

Contains explicit WHEN TO USE and NOT TO USE sections with named alternatives: gograph_source for full source, gograph_callers/gograph_callees for call relationships. The selection condition (metadata-only vs. source body) is spelled out rather than implied.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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), yet the description still adds real behavior: full BFS reachability semantics, a freshness check performed before the call, and CHA/SSA retry on precise graphs after source changes. That retry/freshness disclosure is genuinely non-obvious and not derivable from structured fields; the only weak spot is the redundant 'Read-only; no side effects' clause.

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, then cleanly partitioned into WHEN TO USE / NOT TO USE / RETURNS blocks. Dense but every sentence carries signal except the 'Read-only; no side effects' restatement of 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?

With no output schema, the description compensates by describing the return payload (orphan symbols with package paths and file locations) and the empty-result meaning. Root semantics, freshness behavior, and pagination-via-schema together leave nothing an agent needs 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 root, limit, cursor, intention, and session_id are already fully explained in the schema, including the alias and page-budget caveat. The description adds nothing parameter-specific, which is acceptable at this coverage level but earns only the baseline.

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 unreachable from...') and then enumerates exactly which roots count — main/init, test/benchmark/fuzz, HTTP route handlers, externally callable exports — plus the internal/ exclusion. That precision lets an agent distinguish it from gograph_usages and gograph_callers 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 ('code cleanup or dead-code audits') and NOT TO USE ('checking one symbol's usages') with the two named alternatives. Both the positive condition and the exclusion are stated, which is the top of the scale.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
mermaidNoReturn Mermaid flowchart text instead of structured JSON
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the description's "Read-only; no side effects" is redundant. The genuinely additive parts are the path-ranking rules, the deterministic tie-breaker, and the note that the server refreshes source analysis before the call, which is useful freshness context not available in annotations.

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

Conciseness4/5

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

Front-loads the core action, then uses labeled WHEN TO USE / NOT TO USE / RETURNS sections that are easy to scan. The ranking-criteria sentence is dense but each clause conveys a real ordering rule; slightly more compact phrasing would earn 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?

With six parameters, no output schema, and full annotation coverage, the description covers purpose, routing, ranking semantics, refresh behavior, and return shape (from, to, found, steps[], mermaid variant). Nothing material is missing 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 all six parameters including root, session_id, and intention are already documented in the schema. The description adds only the mermaid=true output mode, which the schema already states. Baseline 3 applies when the schema carries the parameter burden.

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") and immediately contrasts it with the sibling gograph_impact in the NOT TO USE clause. An agent can distinguish this from impact/callers/callees analysis 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 ("confirm reachability between non-adjacent symbols") and NOT TO USE ("all transitive upstream callers — use gograph_impact") sections naming the alternative tool. This is the strongest form of routing guidance.

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. Traversal consumers refuse deleted declarations requiring historical caller evidence. Review instead includes changes --git HEAD declaration evidence and names unavailable historical callers, tests and risk. Incomplete comparisons and missing/ambiguous current identities remain errors. Rebuild before traversing newly added symbols.

NameRequiredDescriptionDefault
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
symbolNoThe name of the symbol you intend to modify (supports short name 'ValidateToken', dot-notation 'graph.Graph', or fully-qualified ID)
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.
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.4/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/non-destructive, and the description adds real behavioral context on top: the server checks and refreshes graph freshness before the call, precise modes retry CHA/SSA after source changes, uncommitted modes compare against HEAD including untracked Go files, and traversal consumers refuse deleted declarations. The later sentences about review/incomplete comparisons are dense and somewhat ambiguous, 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.

Conciseness3/5

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

Purpose and the WHEN/NOT TO USE routing are well front-loaded, but the middle and tail are crowded with mode-specific prose ('Traversal consumers refuse deleted declarations...', 'Review instead includes changes --git HEAD declaration evidence...') that is hard to parse and partly duplicates sibling-tool description territory.

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 shape itself and does so concretely (inspect_first[], tests[], routes[], env[], risk object, optional inspect_contexts[]). It also covers error conditions and mode semantics; the remaining gap is that root/session prerequisites are documented only in the schema, not the description.

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; the description still adds meaning beyond the schema by explaining that with_context=true bundles full source/callers/callees per symbol and eliminates follow-up calls, and that uncommitted=true produces a repo-wide plan for all uncommitted changes. It does not add much for symbol, root, intention, or session_id, which is why it is a 4 rather than 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?

The description opens with a concrete verb+resource ('Generate a structured pre-edit plan for a target symbol') and then enumerates exactly what the plan contains: inspect-first symbols, covering tests, routes, env vars, and risk flags. It explicitly separates itself from gograph_review, so an agent can route between the two 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?

It gives an explicit WHEN TO USE (multi-file refactoring or architectural changes) and NOT TO USE (trivial single-line fixes; post-edit verification, pointing to gograph_review). It also names a concrete alternative invocation pattern: set with_context=true 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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so 'Read-only; no side effects' adds nothing. The genuinely new information is the freshness check and the fact that precise/precise_fallback graphs retry CHA/SSA after source changes, which hints at call-time cost — but this is stated in dense internal jargon and doesn't clarify latency or failure 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?

Well front-loaded and organized into labeled WHEN TO USE / NOT TO USE / RETURNS blocks that are easy to scan. The freshness/CHA-SSA sentence is verbose and jargon-heavy, costing some efficiency, but the description is proportionate for a six-parameter analytical tool.

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 RETURNS clause usefully describes the payload (symbol names with kinds and file locations) and the empty-result case. It is close to complete, though it omits how paging interacts with the cursor and whether results are ordered.

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 every parameter including root, limit, cursor, session_id, and intention is already documented in the schema. The description adds no parameter-level guidance (e.g., how package names resolve versus paths, or when root must be set) and only addresses return shape.

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 all exported (public) symbols of a specific package') and enumerates the symbol kinds returned, so an agent knows exactly what this returns. It also distinguishes itself from siblings by naming gograph_node/gograph_focus for private symbols and gograph_api for drift detection.

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 clauses give three concrete scenarios (reviewing a public contract, building integration docs, checking exposure to callers), and NOT TO USE clauses name the exact alternative tools and the conditions that select them. Nothing about routing 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_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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
termNoOne keyword search term (e.g. 'AuthService' or a route path such as '/api/v1/users/{id}')
limitNoMaximum rows per page; the byte budget may return fewer.
queryNoAlias of term
termsNoOptional list of keyword terms combined with OR semantics
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
no_testsNoExclude rows located in *_test.go files, matching CLI --no-tests
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly=true, idempotent=true, destructive=false, so the safety profile is pre-covered. The description still adds genuinely new behavior: the server refreshes source analysis before the call (implicit latency/freshness trait) and that results are empty when no terms match. 'Read-only; no persistent side effects' merely restates the annotations, which is the only wasted 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 purpose, then a compressed WHEN/NOT/RETURNS block structure that is easy to scan. Minor waste in repeating 'Read-only; no persistent side effects' after the annotations already say so, and the CLI equivalence clauses are borderline redundant.

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?

Nine parameters with no required fields and no output schema is a real complexity burden, but the description supplies a RETURNS section, term semantics, alternative routing, and the pre-call refresh caveat, so an agent can call it correctly. Nothing material is missing for a read-only search 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 all nine parameters (root, term/query/terms aliases, limit, cursor, no_tests, intention, session_id) are already fully documented in structured data. The description adds only the OR-combination rule for multiple terms and the CLI `query term...` equivalence, which is useful but thin over an already-complete 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?

Specific verb and resource: 'Search the graph index for symbols, packages, files, and import edges' matched by keyword substrings. It goes further and names the sibling alternatives (gograph_source, gograph_node, gograph_deps) with the condition that selects each, so the tool is distinguishable without inspecting 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 when you have a keyword or feature name but do not know its package') and NOT TO USE clauses naming two concrete alternative tools plus gograph_deps for dependency trees. Also states OR semantics for multiple terms, so routing and invocation behavior are both unambiguous.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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 (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so the description adds value beyond them by disclosing the freshness check, the re-analysis in the requested mode, and CHA/SSA retry after source changes — telling the agent the call may be slower and that results reflect current source. The empty-result behavior is also stated, though nothing is said about cost or pagination interaction beyond the schema.

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 structured and front-loaded: purpose, then freshness behavior, then WHEN/NOT TO USE, then RETURNS. The CHA/SSA retry sentence is somewhat internal implementation detail but is short and does convey a latency caveat; no other sentence is wasted.

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, and the description compensates by summarizing the return shape (call sites with usage classification) and the empty case. Combined with the when-to-use routing and read-only assurances, an agent has everything needed to call this 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 six parameters (root, function, limit, cursor, session_id, intention) are already documented in the schema. The description only mirrors the 'named function' notion and adds no format, aliasing, or session-selection guidance beyond what the schema provides, making the baseline 3 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 and resource ('Show how each caller uses the return value(s) of a named function') and enumerates the exact classification vocabulary (discarded, assigned, partially ignored, returned upstream, passed directly). This is clearly separable from siblings like gograph_callers or gograph_errorflow 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 explicit WHEN TO USE ('Before changing a function's return signature') and NOT TO USE clauses that name the two most confusable alternatives and the condition selecting each. An agent has no inference left to do about routing.

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. Traversal consumers refuse deleted declarations requiring historical caller evidence. Review instead includes changes --git HEAD declaration evidence and names unavailable historical callers, tests and risk. Incomplete comparisons and missing/ambiguous current identities remain errors. Rebuild before traversing newly added symbols.

NameRequiredDescriptionDefault
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
symbolNoThe name of the target symbol to run the design review for (e.g. 'AuthService')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.
uncommittedNoSet to true to review all uncommitted/modified changes in the repository

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/non-destructive annotations, it discloses freshness handling (server checks freshness and refreshes in the current analysis mode; CHA/SSA retried after source changes on precise graphs), how uncommitted mode compares declarations against HEAD including selected untracked Go files, and how incomplete comparisons and ambiguous identities become errors. The 'Read-only; no side effects' line merely restates annotations but does not contradict them.

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?

Purpose, preconditions, WHEN/NOT TO USE, and RETURNS are front-loaded and clearly delimited. However, the middle section on CHA/SSA retries and 'traversal consumers refuse deleted declarations requiring historical caller evidence' is jargon-dense and hard to parse quickly, and the final 'Rebuild before traversing newly added symbols' reads as an operational aside.

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 usefully enumerates the returned JSON fields (changed_symbols[], tests[], routes[], env[], errors[], risk{...}), plus freshness, error handling, and mode behavior — enough for a 5-parameter analytical tool. The remaining gap is that the deleted-declaration and historical-caller handling is stated ambiguously rather than as a clear agent-facing rule.

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 cross-parameter constraint the schema cannot express (symbol XOR uncommitted=true) and explains repository-scoped semantics of the root parameter ('must be this server's repository or one of its git worktrees'). It does not elaborate on intention/session_id, which remain schema-documented only.

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 — summarising the scope and risk profile of a change — and enumerates the concrete dimensions covered (changed symbols, covering tests, routes, env vars, SQL involvement). This clearly distinguishes it from nearby siblings such as gograph_changes and gograph_risk, which cover narrower slices.

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 provides explicit WHEN TO USE guidance (post-edit verification before committing, or uncommitted=true to review all unstaged changes) and explicit NOT TO USE guidance naming the correct alternatives (gograph_boundaries for constraint enforcement, gograph_plan for pre-edit planning). A precondition is also stated: requires either symbol or uncommitted=true.

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

gograph_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. Traversal consumers refuse deleted declarations requiring historical caller evidence. Review instead includes changes --git HEAD declaration evidence and names unavailable historical callers, tests and risk. Incomplete comparisons and missing/ambiguous current identities remain errors. Rebuild before traversing newly added symbols.

NameRequiredDescriptionDefault
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
symbolNoThe name of the target symbol to run the risk evaluation for (e.g. 'AuthService')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.
uncommittedNoSet to true to evaluate risk for all uncommitted/modified changes in the repository

TDQS

A4.2/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 repeating 'Read-only; no side effects' adds nothing; the value is in disclosing freshness checks, mode-dependent graph refresh, CHA/SSA retry after source changes, and that traversal refuses deleted declarations. The closing sentences about review evidence and historical callers are muddled relative to this tool, which blurs rather than sharpens the behavioral picture.

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

Conciseness3/5

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

The opening purpose, WHEN/NOT TO USE, and RETURNS blocks are well front-loaded and scannable. However, the middle and trailing sentences about graph freshness, traversal consumers, and review evidence are dense and partly off-topic, diluting an otherwise tight definition.

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 correctly supplies a RETURNS block describing title, results[] with scores/verdicts/breakdown metrics, and optional message, plus the error posture for incomplete comparisons and missing identities. What is missing is clarity on the uncommitted-mode behaviors, which are stated in a compressed and confusing way rather than omitted.

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 only real added meaning is the mutual requirement 'either symbol or uncommitted=true', which the schema does not express (required is empty); root, intention, and session_id are fully documented in the schema and get no elaboration 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 first sentence states a specific verb and resource (evaluate change risk profile of symbols or uncommitted changes) and the second enumerates the exact inputs fused into a normalized 0-100 score and verdict. It also names the two nearest siblings (gograph_review, gograph_plan) and what they do instead, so an agent can separate this from them without reading 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' (before committing edits / when planning changes) and 'NOT TO USE' clauses with named alternatives ('use gograph_review', 'use gograph_plan'). The precondition 'Requires either symbol or uncommitted=true' further pins down when the call is valid.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
termNoOptional case-insensitive substring matched against method/path, handler, or file. Path parameters match in any spelling: :id, {id}, and *id are equivalent
limitNoMaximum rows in this page, 1-200 (default: 100); the 64 KiB byte budget may return fewer
queryNoAlias of term
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)
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.
include_testsNoInclude routes registered in *_test.go files; false 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, and destructiveHint=false, so the safety profile is covered by structured data and the trailing "Read-only; no side effects" largely repeats it. The description does add genuinely non-obvious behavior beyond annotations: a 64 KiB per-page cap that prevents out-of-band spilling, a source-analysis refresh before each call, deterministic paging, and specific prefix-composition rules (Gin/Echo/Fiber Group, Chi Route) with the caveat that dynamically computed prefixes stay unresolved. Return shape detail lives in the prose rather than an output schema, which adds value, but some of the length is spent restating parameters the schema already documents.

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 behavior, then structured into WHEN TO USE / NOT TO USE / RETURNS blocks that are easy to scan. A few sentences duplicate schema content (the limit range, the module resolution forms) and could be trimmed 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?

Nine parameters with no output schema, yet the RETURNS section names the payload contract (gograph.routes.v1 with total, returned, truncated, routes[], and next_cursor), and paging, byte budget, refresh timing, and unresolved-prefix limitations are all disclosed. Nothing an agent needs to call this correctly or interpret pagination 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%, and the description largely restates schema fields (term matching, limit range and default, module resolution forms, include_tests behavior). It adds some meaning beyond the schema, notably that next_cursor continues "the same filtered census" (filters must be reused), which the schema states only as "reuse the same filters." Baseline 3 is appropriate when the schema already carries the parameter detail.

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+scope: "List a deterministic bounded page of HTTP routes with methods, URL patterns, handler names, and source locations." It also explicitly distinguishes itself from gograph_endpoint, so an agent can choose between the two 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 ("inventory one service/module or find a route before gograph_endpoint") and NOT TO USE ("for a handler's downstream call chain, use gograph_endpoint") sections naming the alternative and 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_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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.5/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 'Read-only; no side effects' is largely redundant. What does add value is the disclosure that the server checks freshness and refreshes in the requested analysis mode, and that precise/precise_fallback graphs retry CHA/SSA after source changes. Pagination/cursor behavior is left to the schema.

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?

Organized into purpose, freshness note, WHEN/NOT/RETURNS blocks, so the routing information is easy to scan. The 'Read-only; no side effects' sentence duplicates annotations, and the CHA/SSA retry sentence is dense, but nothing is 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?

With no output schema present, the RETURNS block usefully describes struct names, package paths, file locations, and the empty-result case. For a six-parameter tool with a freshness/refresh mechanism, the presence of root and cursor behavior is only implied through the schema rather than the description.

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; the description goes beyond it by giving concrete tag patterns (`db:"table_name"`, `gorm:"table:table_name"`), which tells the agent exactly what forms of `table` will match and clarifies the schema's 'table or schema name' phrasing. It says nothing extra about root, limit, or cursor, but those are already well documented.

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) narrowed by a precise mechanism: struct tags mapping to a database table, with tag syntax examples. It explicitly separates itself from gograph_fields and gograph_query, so an agent can pick it 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?

Has explicit WHEN TO USE (tracing which Go types represent a table, pre-migration model checks) and NOT TO USE (non-tagged query-result structs) clauses naming the substitute tools. Nothing about selection 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.
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoOptional session ID to audit. If not supplied, audits the most recent session in the repository.

TDQS

A3.9/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), and the description adds genuine context beyond that: session IDs are strictly validated, only regular repository-confined logs are read, and no prerequisites exist beyond the running server. The path-confinement and validation notes are exactly the kind of behavioral disclosure that matters here. It does not describe pagination or size limits on the audit output.

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 purpose is front-loaded in the first sentence, followed by a security note, a WHEN TO USE section, and a RETURNS section — a clean, scannable structure. A few sentences are near-redundant with the schema (session ID validation, repository confinement), costing a bit of tightness but not clarity.

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?

For a no-output-schema, all-optional-parameter read tool, the description supplies the trigger, the prerequisites, the return shape in prose, and the security boundary. An agent could call it correctly from this alone. Only minor gaps remain, such as whether a graded session persists or is recomputed on each call.

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 all four parameters already carry descriptions, including the root/checkout confinement rule and the intention rationale requirement. The description only echoes this with 'Session IDs are strictly validated,' adding little parameter-level meaning 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.

Purpose4/5

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

The description names a specific verb (review/grade) and a specific resource (agent compliance against Plan, Review, and Composability/Efficiency rules, plus tool success rates). This is clearly distinct from data-graph siblings like gograph_review or gograph_plan. It stops short of naming the closest sibling (gograph_session_end) explicitly, but the 'after ending a session' framing does much of that work.

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: After ending a session to obtain compliance metrics and recommendations' gives a concrete trigger point in the workflow. It also removes a common blocker with 'No additional prerequisite once the MCP server is running.' There is no explicit when-not guidance or named alternative for auditing a session without ending it, which keeps this below 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

Archive stale and inactive session telemetry without following linked repository paths; never deletes. Each pass moves files into .gograph/to_delete//. First ends other callers' CLI-owned sessions idle past the idle limit (GOGRAPH_SESSION_IDLE_LIMIT, default 2h) or MCP-owned sessions whose server process exited on this host (owners without metadata or on another host are kept), listing each, and archives an unselected legacy active_session.json; then archives logs with end records; preserves the selected active log and refuses while any other caller is still live. MCP annotations mark this operation mutating and destructive. No prerequisites. WHEN TO USE: Call after auditing to keep the repository clean. RETURNS: Each ended session, any archived legacy pointer, and the number of session logs moved with the archive folder, or Nothing to archive.

NameRequiredDescriptionDefault
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4/5.0
Behavior4/5

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

Goes well past the annotations by disclosing that files move to .gograph/_to_delete/<UTC time>_<suffix>/ rather than being deleted, the idle-limit env var and default, exactly which sessions are ended versus kept, the legacy active_session.json handling, and the refusal when another caller is live. The explicit note that 'MCP annotations mark this operation mutating and destructive' reconciles the destructiveHint with the 'never deletes' guarantee instead of contradicting it.

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

Conciseness3/5

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

The core guarantee is front-loaded, which is good, but the central sentence is a long run-on stacking multiple phases and parentheticals that is hard to parse in one pass. 'MCP annotations mark this operation mutating and destructive' largely restates the annotations and costs space.

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 three optional parameters, no output schema, and no enum constraints, the definition covers what an agent needs: preconditions, the two-phase behavior, safety guarantees, and a RETURNS section listing ended sessions, archived legacy pointer, log count and folder, or 'Nothing to archive'. Minor ambiguity remains about how root interacts with a caller's session selection, but the schema covers that.

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 root, intention, and session_id are already fully documented in the schema, including the cwd alias and the meaning of omission. The description only obliquely touches selection semantics ('an unselected legacy active_session.json', 'preserves the selected active log') without adding format or constraint detail 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?

States a specific verb and resource ('Archive stale and inactive session telemetry') plus the defining scope constraint ('without following linked repository paths; never deletes'), which separates it cleanly from siblings like gograph_session_end and gograph_session_audit. The archive destination path makes the operation concrete rather than abstract.

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: Call after auditing to keep the repository clean' gives a clear trigger and implicitly routes from gograph_session_audit, and 'refuses while any other caller is still live' supplies a precondition. It stops short of naming the sibling to use instead when the caller is not ready to archive, so it is clear context without explicit exclusions.

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. Pass the returned ID as session_id on this caller's later requests. Independent callers may create alongside other active sessions. RETURNS: Message with the caller session ID.

NameRequiredDescriptionDefault
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.
custom_wordNoOptional custom word prefix to incorporate in the timestamped session ID (e.g. 'implement_feature')

TDQS

A3.9/5.0
Behavior4/5

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

Beyond the annotations, the description discloses where state lands (regular, repository-confined files under .gograph/sessions) and a concrete refusal behavior (linked storage is rejected), which are real operational traits an agent cannot get from structured fields. It also states the returned session ID must be passed on later requests. The sentence 'MCP annotations mark it mutating and non-idempotent' merely restates readOnlyHint=false and idempotentHint=false, adding no new information.

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 front-loaded with purpose, then scoped by WHEN TO USE and RETURNS labels, which makes it easy to scan. One sentence is pure redundancy ('MCP annotations mark it mutating and non-idempotent') and could be cut without loss. Overall it is appropriately sized for a session-creation tool.

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 correctly supplies return information ('Message with the caller session ID'), and all four optional parameters are covered by the schema. Storage location, refusal behavior, and the session-ID handoff are all present. It lacks any statement about session lifetime or how the session terminates, which matters for a create tool that has dedicated end/cleanup siblings.

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 explains root, intention, session_id, and custom_word in detail. The description adds only one piece of parameter meaning beyond that, tying the returned ID to the session_id field on subsequent calls. It says nothing about the custom_word prefix or the intention rationale, so it neither compensates for nor enriches the schema meaningfully.

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 description opens with a specific verb and resource: 'Start a telemetry audit session for tracking agent compliance and tool success metrics,' which is far more informative than the bare name. It does not explicitly name its lifecycle siblings (gograph_session_end, gograph_session_audit, gograph_session_cleanup), so an agent must infer the entry-point role from the 'Call once at the start' guidance rather than from a direct contrast.

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: Call once at the start of a multi-step coding task' plus 'No prerequisites once the MCP server is running' gives clear triggering context and preconditions. It also clarifies that independent callers may create sessions alongside existing ones. It stops short of an explicit exclusion (e.g., do not create for single-shot queries) or of naming the corresponding end/audit tools, so it is strong but not fully routable.

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 only the explicitly selected caller session, append its end record, and remove its active marker 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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A3.9/5.0
Behavior3/5

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

Beyond the annotations it discloses useful behavior: the write is confined to repository regular files, an end record is appended, and the active marker is removed, plus the note that no extra prerequisite exists once the server runs. However, one sentence simply restates what the annotations already declare (mutating, non-idempotent), so its added behavioral value is modest rather than rich.

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 action and uses clear WHEN TO USE / NOT TO USE / RETURNS structure. It loses a little to the sentence that merely echoes the annotation flags instead of adding new 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?

For a 3-parameter, zero-required tool with full schema coverage and annotations present, the description covers purpose, timing, exclusions and the shape of the return message. It could mention session_cleanup as the alternative for bulk teardown, but 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 coverage is 100%, so the schema already documents root, intention and session_id in detail. The description only reinforces the selector concept ('explicitly selected caller session') without adding format or edge-case 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 names a specific verb and resource ('End only the explicitly selected caller session'), spells out the concrete effects (append its end record, remove its active marker), and scopes it to a single caller session, which separates it from siblings like gograph_session_cleanup or gograph_session_audit.

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?

It gives an explicit 'WHEN TO USE: Call once after you have completed all edits and post-edit reviews' plus a 'NOT TO USE: When no session is active' exclusion, which is clear routing guidance. It stops short of naming a sibling alternative for the overlapping lifecycle cases, so it falls just 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_skeletonA
Read-onlyIdempotent

Emit API signatures with function bodies stripped — struct definitions, interface declarations, and function/method signatures only. Supply file for one exact repository-relative indexed file; omit it for the full repository. Unknown files return an error. 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: whole-repository output can be very large. WHEN TO USE: For a file's declarations or a compact map of the entire codebase's shape. NOT TO USE: For full implementations (use gograph_source); for a single package (use gograph_public). RETURNS: Multi-line text of stripped declarations and package names.

NameRequiredDescriptionDefault
fileNoOptional repository-relative indexed file; selects only that file's package and declarations. Unknown files are errors, never a repository fallback.
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/non-destructive, and the description adds substantial context beyond them: pre-call freshness checking, refresh in the requested analysis mode, CHA/SSA retry after source changes for precise graphs, hard errors on unknown files, and an explicit warning that whole-repository output can be very large.

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 modes, then labeled WHEN TO USE / NOT TO USE / RETURNS sections — easy to scan. The freshness/CHA/SSA sentence is jargon-dense and only marginally decision-relevant for an agent choosing a tool, so it costs some conciseness.

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, four-optional-parameter tool with no output schema, the description covers selection modes, failure behavior, output format, size risk, and freshness semantics. Nothing needed 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.

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. The description goes slightly further by explaining the file/omit duality (one exact indexed file vs. full repository) and the error-not-fallback behavior, but root, intention, and session_id semantics are left entirely 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?

The description states a specific verb and output shape: emit API signatures with function bodies stripped, enumerating the declaration kinds (structs, interfaces, function/method signatures). It is immediately distinguishable from gograph_source (implementations) and gograph_public (single package).

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 ('a file's declarations or a compact map of the entire codebase's shape') and NOT TO USE clauses that name the correct alternatives with the condition selecting each. The file-omit semantics also make the two invocation modes unambiguous.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
symbolYesThe name of the symbol to retrieve source for (supports short name 'ValidateToken', dot-notation 'graph.Graph', or fully-qualified ID)
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses the freshness check performed before the call, mode-specific CHA/SSA retry behavior, that reads are confined to regular .go files beneath the analyzed repo, that symlink path components are rejected, and a concrete 65536-byte size ceiling. It also enumerates the named refusal modes, which is behavior an agent cannot infer from readOnlyHint/idempotentHint alone.

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 what the tool returns, then ushers usage guidance into labeled WHEN/NOT/RETURNS blocks, which is easy to scan. It is dense with internal detail (precise vs precise_fallback graph retry semantics) that slightly exceeds what a caller needs to select and invoke the 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?

There is no output schema, and the description compensates by describing the return payload (raw source blocks with file paths and line numbers, plus gograph.read.v1 structured content) and every refusal outcome. For a read tool with a 4-parameter surface, nothing needed 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.

Parameters4/5

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

Schema coverage is already 100%, so baseline is 3; the description earns an extra point by explaining what the symbol parameter produces when resolution is ambiguous (a named refusal listing candidates) and by tying range/oversize failures to the read. It does not elaborate on root, intention, or session_id, leaving those entirely 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 and resource ('Retrieve verbatim Go source') and enumerates exactly what kinds of symbols it covers (function, method, struct, interface, type, variable, constant, with complete bodies or declarations). An agent can distinguish this from gograph_node or gograph_skeleton 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?

Provides explicit WHEN TO USE ('need a specific implementation or declaration in full without loading a large file') and NOT TO USE clauses that name the correct alternatives for each excluded case (gograph_callers/gograph_callees for hierarchy, gograph_node for AST metadata without source). 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_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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
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
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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, non-destructive, idempotent, closed-world, and the description corroborates rather than contradicts them. Beyond that it discloses non-obvious behavior: server-side freshness checks and mode-specific refresh before the call, CTE resolution to the real operation, data-modifying CTEs retaining write evidence, UPSERT normalized to INSERT, and explicit rather than guessed classification for unsupported cases.

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?

Purpose is front-loaded and labeled sections (WHEN TO USE / NOT TO USE / RETURNS) make scanning easy; nearly every clause carries information. The extraction-coverage sentence is dense and run-on, bundling several distinct behaviors into one long clause, which slightly hurts legibility.

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 12-parameter tool with no output schema, the definition still describes the return envelope (total/returned/truncated/next_cursor plus queries[]) and the paging contract via cursor. Combined with the extraction-scope and filter-composition rules, an agent has everything needed to call it 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 schema already documents each parameter, but the description adds cross-parameter semantics the schema does not state: filters in different categories AND-compose while repeated values within tables/verbs/accesses OR-compose, and no_tests exists only for backward-compatible defaults. It also implies cursor reuse must preserve the same filters, though it does not restate the extraction-scope limits (straight-line assignments, bounded concatenation) per parameter.

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 ('Return one bounded gograph.sql.v1 page of static PostgreSQL query literals') and enumerates exactly what each result carries: operation, access class, tables, enclosing function, module, source location. It also explicitly distinguishes itself from gograph_schema, so an agent can route correctly 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?

Provides explicit 'WHEN TO USE' (auditing DB interactions, write paths, queries touching a table) and 'NOT TO USE' with named alternatives (gograph_schema for ORM struct mappings, and a stated exclusion for runtime-generated SQL). This is exactly the when/when-not/alternative structure the top score requires.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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/non-destructive, yet the description adds real behavior: it deliberately does not refresh first, falls back to the startup auto-build result when the artifact is missing/unreadable/unsafe, and uses an mtime fallback for legacy indexes. The 'Read-only; no side effects' clause partly duplicates the annotations, and return-shape behavior such as graph_age semantics is only lightly sketched, keeping this just below 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 with the core comparison, then qualifications, then WHEN/NOT/RETURNS blocks in a predictable order. The opening sentence is dense and multi-clause, but no sentence is filler aside from the redundant read-only restatement.

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 list (is_stale, graph_age, newest source metadata, changed_files, build_context_changed) fills that gap, and the fallback/degraded-mode discussion covers the edge cases an agent would otherwise misread as errors. Nothing needed to invoke or interpret the result 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% with three self-documenting parameters (root, intention, session_id), so the baseline is 3. The description adds no parameter-level meaning beyond the schema, though its mention of 'repository-confined' and effective build context loosely reinforces what root selects.

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: comparing the persisted .gograph/graph.json index against the current file inventory, build context, and source digests. It scopes exactly what is compared and what 'stale' means, so an agent can separate it from gograph_changes or gograph_check 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 (deciding whether snapshot analysis or enrichment needs rebuilding) and NOT TO USE (module dependency freshness; changed symbols -> gograph_changes), naming the alternative sibling directly. The condition selecting this tool versus that one is stated rather than implied.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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, destructiveHint=false and closed-world, so safety is partly covered; the description still adds meaningful behavior by stating it does not refresh source analysis and by describing the startup-fallback path and what degrades in that case. It stops short of describing error responses or how a partial versus complete index should change downstream decisions, which is the remaining gap.

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

Conciseness3/5

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

The WHEN/NOT/RETURNS scaffolding is well front-loaded, but the opening sentence is a long run-on packing fallback conditions and a colon-list of counters into one breath. No sentence is wasted, yet the density hurts scannability versus splitting the payload list out.

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 burden of explaining returns and does so by enumerating the health fields and counters plus a RETURNS summary. Combined with the fallback conditions and the non-refreshing 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 root, intention and session_id are already fully documented with their scoping and alias rules. The description adds no parameter-level meaning beyond that, which is the expected baseline when the schema does the work.

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 ('report trusted persisted-index health and counts') and enumerates the exact payload: timestamps, complete/partial status, analysis mode, package counts, entity totals. It also names the sibling tools it is not (gograph_node, gograph_complexity), so an agent can distinguish it 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 ('validate the snapshot/fallback before relying on its data') and an explicit NOT TO USE with two named alternatives for live symbol profiling. The fallback trigger conditions (graph.json missing, unreadable, unsafe, unsupported source policy) further tell the agent when this is the right call.

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

gograph_stringsA
Read-onlyIdempotent

Search Go string literals in the indexed source files for one or more case-insensitive substrings (OR semantics), returning file, line, the literal, and its enclosing function. Route-shaped terms match any path-parameter spelling (:id, {id}, *id). Source is read through the confined repository reader; unreadable files are named in a warning. The MCP server refreshes source analysis before the call. Read-only; no side effects. WHEN TO USE: To find raw route strings, URLs, SQL fragments, header names, or messages that are not symbols, instead of grep. NOT TO USE: For symbols (use gograph_query) or registered routes with handlers (use gograph_routes). RETURNS: gograph.results.v1 rows of kind string with total/returned/truncated/next_cursor.

NameRequiredDescriptionDefault
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
termNoSubstring to find inside string literals (e.g. '/api/setup/license')
limitNoMaximum rows per page; the byte budget may return fewer.
queryNoAlias of term
termsNoOptional list of substrings combined with OR semantics
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
no_testsNoExclude *_test.go files
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, yet the description adds real behavior beyond them: the confined repository reader, unreadable files surfaced as warnings, and a source-analysis refresh before the call. It also discloses matching semantics (case-insensitive, multi-term OR, path-parameter spellings ':id', '{id}', '*id') that the agent cannot 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.

Conciseness5/5

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

Front-loaded with the action, then behavior, then labeled WHEN TO USE / NOT TO USE / RETURNS sections. Every clause carries information; nothing is redundant filler despite the length.

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?

Nine parameters are all covered by schema descriptions, and although there is no output schema, the description supplies the row shape and pagination envelope (total/returned/truncated/next_cursor). A complex search tool with no required parameters is fully specified 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 itself documents term, terms, limit, cursor, no_tests, root, intention, and session_id. The description adds only the OR-combination semantics for multiple substrings and confirms pagination fields, so it contributes marginally beyond the schema – baseline territory.

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 ("Search Go string literals in the indexed source files") plus the exact fields returned (file, line, literal, enclosing function). It explicitly names what it is not ("not symbols" -> gograph_query, registered routes with handlers -> gograph_routes), which separates it from the many gograph_* siblings.

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 (raw route strings, URLs, SQL fragments, header names, messages) with "instead of grep", and an explicit NOT TO USE clause routing to gograph_query and gograph_routes. The alternative selection condition is unambiguous.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

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), so "Read-only; no side effects" is only a restatement. What earns credit is behavior not in any structured field: the server checks graph freshness before the call, refreshes in the requested analysis mode, and precise/precise_fallback graphs retry CHA/SSA after source changes — important because it tells the agent results may reflect a rebuild and may be slower. It stops short of latency expectations or cost 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 summary first, then WHEN TO USE / NOT TO USE / RETURNS in a scannable structure with no filler. The freshness/CHA-SSA sentence is information-dense and slows the read, and "Read-only; no side effects" duplicates the annotations, but overall nearly every clause carries signal.

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 enumerating the returned JSON keys (symbols, packages, hotspots[], worst_instability, top_complexity, orphan_count, god_object_count). Combined with the freshness caveat and zero required parameters, 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 root, intention, and session_id are already fully documented in the schema, including the worktree constraint and alias. The description adds nothing about parameter behavior (e.g., how the freshness check interacts with root, or when intention is required), 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 ("Single-call codebase briefing") and enumerates exactly what is included: top 3 hotspots, worst instability package, highest cyclomatic complexity function, orphan count, god-object count. It also explicitly names the five sibling tools it consolidates (gograph_hotspot + gograph_coupling + gograph_orphans + gograph_complexity + gograph_godobj), so an agent can place it precisely in a 60+ tool namespace.

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 ("At the very start of any session") with the cost tradeoff stated (5 calls → 1), plus an explicit NOT TO USE clause that routes drill-down requests to the dedicated tools. Both the selection and deselection conditions are given, which is the top of this scale.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
symbolNoThe symbol name to find tests for (optional)
packageNoWith transitive=true, optional exact Go package name used to disambiguate the selected symbol
intentionNoTechnical rationale, required for analytical calls selecting an active session.
exact_onlyNoWith transitive=true, omit paths containing possible edges
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.
transitiveNoReturn reverse-transitive test attribution; requires symbol

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the 'Read-only; no side effects' sentence is redundant. The description does add genuine non-schema behavior: the server checks freshness and refreshes in the requested analysis mode before the call, and the return contract switches between direct rows and gograph.tests.v1 depending on transitive. Those additions are useful but partly duplicate the schema's own parameter descriptions.

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

Conciseness3/5

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

Front-loaded and organized with WHEN TO USE / NOT TO USE / RETURNS sections, but the prose is dense and contains redundancy: 'By default this preserves the direct-edge result contract' is restated in RETURNS, and transitive/exact_only/package are re-explained after the schema already documents them. Some sentences could be compressed without loss.

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 seven entirely optional parameters and no output schema, the definition correctly explains the no-symbol behavior, the two result modes, and the versioned report fields (exact/possible resolution, depth, representative stable-ID path). The default direct-result row shape is only gestured at ('preserves the direct-edge result contract'), leaving a small gap given there is no output 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 coverage is 100%, so the baseline is 3. The description adds some real semantics — `symbol` accepts Receiver.Method form including pointer receivers or a full stable symbol ID, `transitive` requires a symbol, `exact_only` only applies with transitive, and `package` disambiguates the selected product symbol — which is a modest increment over the schema text rather than a substantive expansion.

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 opening sentence gives a specific verb (find) and resource (test functions in *_test.go files) plus the scope of what counts ('statically exercise a named symbol') and the no-symbol fallback (list all attributed test edges). It is clearly separable from gograph_untested and gograph_fixtures, which are named later in the description.

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 block ('Before editing a function — transitive=true for router/callback-mediated coverage, direct mode for concrete test call sites') and an explicit NOT TO USE block naming gograph_fixtures and clarifying that this is not runtime coverage. When-not guidance and alternatives are both present.

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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
termYesError string or symbol name to trace (e.g. 'ErrNotFound', 'permission denied')
no_testsNoIf true, skip collecting related test functions
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.3/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), so the description's job is to add context — and it does, disclosing that it refreshes in-memory analysis and that tracing is heuristic (results may be approximate) rather than exact. The 'no side effects' claim sits slightly awkwardly next to the cache refresh, but that is an internal state update, not a contradiction of destructiveHint=false.

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 alias relationship and core behavior are front-loaded in the opening sentence, and the WHEN TO USE / RETURNS labels make it scannable. The read-only sentence partially duplicates annotations, which is the only 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 5 parameters fully documented and no output schema, the description is nearly complete; it points to gograph_errorflow for the return shape rather than restating it, which is reasonable for an alias. An agent still has to consult the sibling to know the output structure, a small residual gap.

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 every parameter (root, term, no_tests, intention, session_id) is documented in the schema, including the root alias and refusal behavior. The description adds no parameter-level meaning on top of 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?

The description names a specific verb and resource ('traces an error string'), the scope ('from its definition up through the call chain to HTTP handlers'), and explicitly identifies itself as an alias for gograph_errorflow, which lets an agent place it among 60+ siblings immediately.

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 clause is explicit: 'Prefer gograph_errorflow; this alias exists for compatibility.' That names both the alternative and the condition that selects it, 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_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)
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
excludeNoRepository-relative path globs to exclude; use prefix/** for all descendants
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations by disclosing a freshness precheck, the exact-vs-possible resolution model with propagation to descendants, the visibility of possible rows via test_resolution and possible_test_count, and the static-vs-runtime attribution caveat. Only 'Read-only; no side effects' restates annotations, and it is a minor fraction of the text.

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 action, then semantics, then WHEN/NOT TO USE, then RETURNS — a clean structure with no filler sentences. It is dense and technical but each clause carries information; slightly more compression of the semantic-model sentences would be possible.

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?

For a 6-parameter tool with no output schema, the RETURNS block enumerates the JSON row fields and sort order, and the exact/possible distinction is fully explained. The one gap is that session_id/intention caller-selection semantics are left entirely to the 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?

Schema coverage is 100%, so the baseline is 3; the description still adds meaning by explaining that exclude globs match repository-relative source paths lexically and mirror repeatable CLI --exclude flags, plus the caller_count sort order implied for top. It does not, however, explain the root, session_id, or intention selection behavior.

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 scope ('Sweep the full graph in one pass') and a precise output concept ('called production functions and methods without an exact transitive static path from any test'). This is clearly distinguishable from siblings like gograph_tests, gograph_callers, and gograph_coverage.

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 test census or pre-release hardening; it replaces N forward coverage or direct gograph_tests probes') and NOT TO USE ('For running tests or proving branch execution'), naming both the alternative tools and the condition that selects them.

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. Also answers struct fields: 'Type.Field', 'pkg.Type.Field', or a bare field name returns the declaration plus every field_read, field_write, field_address, and field_literal site, attributed to the declaring struct so promoted fields resolve; typed rows come from precise builds of production packages, while AST graphs return labelled name-only possible_field_use rows. RETURNS: File paths and line locations where the type or field appears; empty when the type is not referenced.

NameRequiredDescriptionDefault
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
typeYesThe type name (e.g., 'AuthService') or struct field ('Config.Limit', or a bare field name) to search for
limitNoMaximum rows per page; the byte budget may return fewer.
cursorNoOpaque next_cursor for the same graph snapshot and result selection.
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well past the annotations by disclosing freshness checking before the call, mode-dependent refresh, CHA/SSA retry behavior after source changes, and the precise-vs-AST result differences (typed rows vs labelled name-only possible_field_use rows). It also explains field attribution to the declaring struct so promoted fields resolve, which is real behavioral context an agent cannot get from readOnlyHint/idempotentHint.

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?

Purpose statement is front-loaded and the WHEN/NOT/RETURNS blocks give a scannable structure. It is dense and slightly padded — 'Read-only; no side effects' merely restates the annotations, and the CHA/SSA retry detail is heavy for a routing decision — but no sentence is truly wasted.

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 return-value responsibility and does so: file paths and line locations, plus the empty-result case when the type is unreferenced, and row-shape differences by graph type. Combined with 100% schema coverage for the six parameters, 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 baseline is 3, but the description adds meaning beyond the schema for the key 'type' parameter: the three accepted field syntaxes are restated in a resolution context, and it explains that a bare field name resolves via the declaring struct with promoted-field handling. It does not touch root, limit, cursor, intention, or session_id, which remain schema-only.

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 every place a named Go type appears') and enumerates the exact syntactic positions searched: parameter lists, return signatures, struct fields, interface methods, and composite literals. It clearly separates itself from gograph_callers, gograph_literals, and gograph_impact by name, so an agent can route 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 ('before changing an interface or type definition — see the consumption and construction blast radius') and NOT TO USE clauses that name three alternatives plus the precise condition selecting each (call sites -> gograph_callers, literal-only -> gograph_literals, transitive callers -> gograph_impact). 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
rootNoAbsolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.
outputNoWiki directory: relative paths are graph-rooted; an absolute path explicitly selects a real local output root (default 'llm-wiki')
intentionNoTechnical rationale, required for analytical calls selecting an active session.
session_idNoCaller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds real context: freshness checks with automatic refresh, CHA/SSA retry on source changes in precise modes, confinement of writes beneath the chosen output root, and that existing regular files may be overwritten. It stops short of describing pagination or output volume, but for a destructive write tool this is substantially more than the annotations carry.

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?

It is long, but the structure is front-loaded and scannable: artifact list first, then safety/semantics, then WHEN TO USE / NOT TO USE / RETURNS. Some sentences (the freshness/retry passage) are dense and slightly redundant with the schema, but each block carries decision-relevant 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 correctly supplies a RETURNS section ('JSON manifest of written page filenames and a count') plus the failure modes (graph cannot be loaded, unsafe or uncreatable output directory). Combined with the overwrite and path-confinement rules, an agent has everything needed to call this 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; however the description adds genuinely new meaning beyond the schema for the output parameter — that relative paths are graph-rooted while rejecting linked components, and that an absolute path must resolve to a real directory. It also ties root to 'this server's repository or a git worktree', clarifying the refusal behavior.

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 gives a specific verb and resource ('Generate the llm-wiki/ directory of machine-first markdown pages from the static graph') and then enumerates the exact artifacts (overview.md, architecture.md, hotspots.md, packages/<name>.md). This makes it immediately distinguishable from the symbol-lookup siblings it names.

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 ('at the start of an agent session on an unfamiliar codebase — run once') and NOT TO USE ('for targeted symbol lookups, use gograph_context or gograph_source') sections route the agent to alternatives with the selecting condition stated.

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. 69 tool updatesv1.7.18
    • Changedgograph_api3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_arity3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_boundaries3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_boundaries_create3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_callees3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_callers3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_capabilities3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_changes3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_check3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_complexity3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_concurrency3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_constructors3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_context3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_coupling3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_coverage3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_dependents3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_deps3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_diagram3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_doc3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_embeds3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_endpoint3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_envs3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_errorflow3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_errors3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_explain3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_explore3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_fields3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_fixtures3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_flow5 fields changed
      • addedInput schema / properties / context_depth
        Added value: +{
        +  "description": "Optional call-site frames kept per value (default 3, max 16). Deeper settings are more precise and need more work.",
        +  "type": "number"
        +}
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / max_work
        Added value: +{
        +  "description": "Optional propagation work budget; defaults to a value derived from the number of flow facts. An exhausted budget returns completeness.complete=false with partial findings.",
        +  "type": "number"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_focus3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_globals3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_godobj3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_hotspot3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_httpcalls3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_identity3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_impact3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_implementers3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_imports3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_interfaces3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_literals3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_mocks3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_mutate3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_node3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_orphans3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_path3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_plan3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_public3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_query6 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / no_tests
        Added value: +{
        +  "description": "Exclude rows located in *_test.go files, matching CLI --no-tests",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / query
        Added value: +{
        +  "description": "Alias of term",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
      • changedInput schema / properties / term / description
        Previous value: -"One keyword search term (e.g. 'AuthService')"New value: +"One keyword search term (e.g. 'AuthService' or a route path such as '/api/v1/users/{id}')"
    • Changedgograph_returnusage3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_review3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_risk3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_routes5 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / query
        Added value: +{
        +  "description": "Alias of term",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
      • changedInput schema / properties / term / description
        Previous value: -"Optional case-insensitive substring matched against method/path, handler, or file"New value: +"Optional case-insensitive substring matched against method/path, handler, or file. Path parameters match in any spelling: :id, {id}, and *id are equivalent"
    • Changedgograph_schema3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_session_audit2 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
    • Changedgograph_session_cleanup3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_session_create3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_session_end3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_skeleton4 fields changed
      • addedInput schema / properties / file
        Added value: +{
        +  "description": "Optional repository-relative indexed file; selects only that file's package and declarations. Unknown files are errors, never a repository fallback.",
        +  "type": "string"
        +}
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_source3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_sql3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_stale3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_stats3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Addedgograph_strings
    • Changedgograph_summary3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_tests3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_trace3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_untested3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
    • Changedgograph_usages4 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
      • changedInput schema / properties / type / description
        Previous value: -"The type name to search for (e.g., 'AuthService', 'Repository')"New value: +"The type name (e.g., 'AuthService') or struct field ('Config.Limit', or a bare field name) to search for"
    • Changedgograph_wiki3 fields changed
      • addedInput schema / properties / intention
        Added value: +{
        +  "description": "Technical rationale, required for analytical calls selecting an active session.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Absolute path of the checkout you are working in (your cwd or git worktree). Must be this server's repository or one of its git worktrees; the answer then comes from that checkout's own graph. A path elsewhere is refused. Alias: cwd. Omit only when the configured checkout is the one you mean.",
        +  "type": "string"
        +}
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Caller selector returned by session_create. Omission means an independent caller; never inherits server environment or another caller's session.",
        +  "type": "string"
        +}
  2. 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"
        +}
  3. 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"
        +}
  4. 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."
  5. 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')"
  6. 9 tool updatesv1.5.4
    • Addedgograph_api
    • Addedgograph_arity
    • Addedgograph_boundaries
    • Addedgograph_boundaries_create
    • Addedgograph_callees
    • Addedgograph_callers
    • Addedgograph_capabilities
    • Addedgograph_imports
    • Addedgograph_literals
  7. 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
  8. 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
  9. 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
  10. 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

A3.9/5.0

Scored across 69 tools

Disambiguation3/5

The set covers many distinct static-analysis questions and most descriptions include explicit WHEN TO USE / NOT TO USE guidance, which helps agents choose correctly. However, there are real overlaps: gograph_trace is an alias of gograph_errorflow, gograph_mocks duplicates gograph_implementers(test_only=true), and context/explore/explain/plan plus summary-versus-individual-metrics tools require careful reading to select. The large surface amplifies misselection risk.

Naming Consistency4/5

All tools use a predictable gograph_ prefix with snake_case, with no mixed camelCase or chaotic conventions. Most names are domain nouns rather than strict verb_noun, and a few use suffix verbs such as boundaries_create and session_create, but the convention remains readable and consistent.

Tool Count1/5

With 69 tools, the server is far beyond the 3-15 well-scoped range and exceeds the 50+ extreme threshold. Even for a broad Go graph-analysis domain, the surface is heavily bloated with aliases, aggregate tools, and fine-grained variants that could be consolidated.

Completeness5/5

The surface covers call graphs, package dependencies, structs/interfaces, tests and coverage, HTTP routes, SQL, environment variables, errors, concurrency, complexity, architecture boundaries, API drift, change/risk/review workflows, sessions, and wiki generation. For the static-analysis domain, the lifecycle of querying and reporting is comprehensively covered.

Maintenance

ActivityActive
ResponsivenessUsually handled

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,023 PyPI
    816
    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