Skip to main content
Glama

rag-rat

CI codecov crates.io benchmarks site

What a repository knows about itself. rag-rat is a local repo-intelligence index and MCP server for coding agents. It keeps source files read-only, writes only its own SQLite database, and answers with provenance on every result — current source, the code graph, git/GitHub history, and durable, source-anchored repo memories that persist across sessions and agents.

Explore the live VS Code Lens demo — no installation required. It surfaces clone classes, repo memories, and issue/decision context alongside the code; press Ctrl+Alt+R to reveal clone overlays.

Every coding harness already has grep and file reads. rag-rat adds the layer they do not provide: source-anchored rationale. It connects the code an agent is about to touch to its callers, callees, tests, git/GitHub history, prior decisions, invariants, risks, and duplicate-code signals — and labels every result with confidence and coverage, so an agent can judge it instead of trusting it.

sequenceDiagram
    participant Repo as Repository
    participant Engine as rag-rat engine
    participant Agent as Coding agent

    Repo->>Engine: Source · git/GitHub · repo memories
    Engine->>Engine: Index → graph → (opt) SCIP oracle → reconcile
    Agent->>Engine: where / why / who-calls / impact?
    Engine-->>Agent: source + call paths + papertrail + memories (with provenance)
    Agent->>Engine: record a finding
    Engine->>Repo: persist a source-anchored repo memory

Why

  • Provenance, not guesses. Every result carries a confidence label, coverage warnings, and the raw evidence — so a partial index or an ambiguous edge reads as exactly that.

  • Repo memories. Typed, source-anchored notes (Invariant, Decision, Risk, …) that survive refactors and surface automatically during future queries — the signal grep can't give you. They are not assistant memory: they are versioned, local, source-anchored facts about this repository that any future agent retrieves with evidence.

  • A real code graph. tree-sitter callers/callees/imports across Rust, TypeScript/TSX, Kotlin, C/C++, Python, Swift, and Go — with an optional compiler-grade SCIP oracle for configured toolchains that upgrades edges to Compiler confidence and ranks the load-bearing symbols.

  • History as evidence. Git history, lazy chunk blame, and cached GitHub issue/PR/review rationale, all queryable.

  • Issue distillation. Every closed issue and merged PR plus its fixing diff distilled into a typed decision record — root cause, the approach that landed (and the rejected alternatives), and the outcome — validated against the thread and surfaced as drive-by context on the anchored symbols.

  • Rides your existing grep. A grep-augmentation hook injects the memories and symbols behind whatever you just searched for.

  • Flags clones as you write them. A PreToolUse hook on Write/Edit/MultiEdit fingerprints the functions you're writing and warns when they're exact or near-duplicates of code already in the repo — so an agent reuses instead of re-implementing. Read-only, and a silent no-op when the index isn't ready, so it never blocks a write.

Related MCP server: agentmako

Quickstart

For Claude Code, Codex, and opencode, install the plugin. It registers the MCP server, adds the hooks, and installs a version-matched rag-rat binary on first run (the Claude Code and Codex bundles also add the skills; on opencode add them with npx @rag-rat/skills):

# Claude Code
claude plugin marketplace add cq27-dev/rag-rat
claude plugin install rag-rat@rag-rat

# Codex
codex plugin marketplace add cq27-dev/rag-rat
codex plugin add rag-rat@rag-rat

# opencode (add -g for a global install)
opencode plugin @rag-rat/plugin-opencode

After installing, approve the plugin so its tools and hooks run (opencode loads plugins without an approval step — nothing to do there):

  • Claude Code asks before each rag-rat MCP tool the first time it runs — choose "Yes, don't ask again," or pre-allow them in ~/.claude/settings.json with "permissions": { "allow": ["mcp__rag-rat__*"] }.

  • Codex shows a "Hooks need review" prompt on the first codex session started inside the repo (the plugin ships grep-augmentation, clone-check, and session-digest hooks that run outside the sandbox). Choose "Trust all and continue" to enable them. For unattended commands such as codex review, also allow the plugin's MCP tools in ~/.codex/config.toml so the run cannot stall on a per-tool approval prompt:

    [plugins."rag-rat@rag-rat".mcp_servers.rag-rat]
    default_tools_approval_mode = "approve"

    This trusts every current and future MCP tool exposed by the installed rag-rat plugin. Only enable it when you trust the plugin's source and installation origin, then restart Codex.

Then open the repository and ask:

Set up rag-rat in this repo.

The init-rag-rat skill scans the repo, explains the material choices, previews rag-rat.toml, writes and indexes only after confirmation, and offers to set up the git hooks that keep the index fresh. The MCP server starts dormant in an unconfigured repo; when setup finishes, reconnect it so it restarts fully active against the new index.

Then put it to work — the loop rag-rat is built for is in Try it.

Use this path for the standalone CLI, agents without plugin support, or building from source.

Install the CLI

The prebuilt package needs no Rust toolchain and supports Apple Silicon macOS, glibc ≥2.38 Linux (x86-64 and arm64), Windows x64, and Android/Termux arm64:

npm install -g @rag-rat/bin
# or run it without installing:
npx @rag-rat/bin --help

@rag-rat/bin fetches the full binary from the matching GitHub release. FastEmbed's ONNX Runtime is statically linked.

To build from source instead:

cargo install rag-rat
# or from a checkout:
cargo install --path crates/rag-rat-cli --bin rag-rat

The default source build needs glibc ≥2.38 and is unavailable for Intel macOS and musl/Alpine. On those platforms, including Ubuntu 22.04, use the pure-Rust embedder:

cargo install rag-rat --no-default-features --features model2vec

--no-default-features alone produces a smaller hash-only build without real embeddings. SQLite is bundled; see Platform support for toolchain details.

Initialize the repository

cd /path/to/your/repo
rag-rat init

init scans the repo, guides language and embedding choices, writes rag-rat.toml, and builds the initial index. Use rag-rat init --dry-run to preview without writing, or --yes for non-interactive defaults. Configuration reference: docs/config.md.

Add skills and connect MCP

Install the skills for Claude Code, Codex, Cursor, and 70+ other detected agents:

npx @rag-rat/skills

That installs using-rag-rat, dream-review, init-rag-rat, and configure-rag-rat-dream. See skills/README.md for per-agent flags and update, list, and remove.

The MCP server uses STDIO: the client launches rag-rat mcp from the repository so it discovers the correct rag-rat.toml and repository scope in the consolidated machine-global store.

claude mcp add --scope project rag-rat -- rag-rat mcp
codex  mcp add rag-rat -- rag-rat mcp

Or add the equivalent project configuration:

{
  "mcpServers": {
    "rag-rat": { "command": "rag-rat", "args": ["mcp"] }
  }
}

rag-rat init prints the registration command but does not register the server itself. Pass rag-rat mcp --json if the client must parse JSON; tool text defaults to TOON. Full tool schemas: docs/mcp-tools.md.

Claude Code asks once before each rag-rat MCP tool first runs. Choose "Yes, don't ask again," or allow the tool namespace in ~/.claude/settings.json:

{ "permissions": { "allow": ["mcp__rag-rat__*"] } }

Do not pin a global server to one repository's config. A user-scoped server with --config /some/repo/rag-rat.toml serves that repository everywhere. Register MCP per project and let the process discover the config from its working directory.

Try it

Once the repo is indexed, the code graph, symbols, git history, semantic search, and clone detection are ready — these answer on the first query. Repo memories start empty: they accrue as agents record findings with memory_create and then surface automatically in later answers. (Tracker issue/PR rationale needs a rag-rat papertrail sync.)

Ask your MCP client:

  • "Run impact_surface on the function I'm about to edit — its callers, callees, tests, and recent commits."

  • "Where is config reload handled?" — hybrid semantic_search over source and docs.

  • "What are the most load-bearing symbols in this repo?" — important_symbols.

  • "Does this helper duplicate anything already in the codebase?" — find_clones (and the write-time hook warns as you write it).

  • "Record an invariant on parse_config: reload must not allocate after the scheduler starts." — memory_create writes your first repo memory; it then rides along in future impact_surface / symbol_lookup results.

Or from the CLI:

rag-rat query "where is config reload handled?"
rag-rat important-symbols --limit 20
rag-rat brief --mode spine
rag-rat clusters --limit 10

The agent loop

The point isn't the tool catalog — it's the loop an agent runs around an edit, so it changes code with the callers, tests, rationale, and prior art in front of it instead of guessing:

  1. Before editing a symbol, ask impact_surface. One call returns the current source anchor, callers and callees, related tests, git/GitHub rationale, the repo memories bound to that symbol / path / call-path, and confidence + coverage warnings.

  2. Read the blast radius, then edit. The invariant a previous agent recorded, the caller three hops away, the test that pins the behavior — all surfaced before the change, not discovered after.

  3. The clone hook catches duplication at write time. If the new function reimplements code that already exists, the Write/Edit hook says so, with the existing symbol to reuse.

  4. Record what you learned. When the edit reveals a durable invariant, decision, or footgun, memory_create stores it as a source-anchored repo memory — so the next agent (or the next session) gets it in one call instead of re-deriving it.

A trimmed impact_surface answer (TOON — the default output; abbreviated here) — every field is evidence, not prose:

query:
  ref: "crates/config/src/config.rs::parse_config"
  resolution: syntactic
direct_semantic_callers[12]:
  - from_symbol: "crates/runtime/src/boot.rs::start"
    edge_kind: calls_name
    confidence: syntactic
    callsite:
      path: "crates/runtime/src/boot.rs"
      line: 88
    importance:
      label: local structural load
      score: 6.8
      bucket: high
tests_touching_symbol_path[4]:
  - path: "crates/config/src/config_tests.rs"
    reason: test_mentions_symbol_or_path
recent_commits_touching_symbol_path[1]:
  - evidence[1]: "a1b2c3d touched crates/config/src/config.rs: fix reload race during startup (#141)"
repo_memories:
  direct[2]:
    - kind: Invariant
      title: "Config reload must not allocate after the scheduler starts"
      confidence: high
      anchor_status: current
      binding_kind: symbol
    - kind: Decision
      title: "TOML over JSON5 for the config surface (#88)"
      anchor_status: current
      binding_kind: path
completeness_and_caveats:
  exact_graph_callers: 12
  memory_status:
    active: 2
    stale: 0
  caveats[1]: "Graph evidence is tree-sitter/syntactic, not compiler-grade name resolution."

And the write-time clone warning an agent sees before it duplicates logic — verbatim hook output:

▶ rag-rat clone check — code you're writing duplicates existing functions:
  • `normalize_path_for_lookup` (line 42) is ~91% similar to crates/index/src/paths.rs::canonicalize_lookup_path
Prefer reusing the existing function(s) over duplicating — impact_surface / symbol_lookup to inspect them.

The tools

rag-rat's MCP tools — the full catalog with JSON schemas lives in docs/mcp-tools.md. The ones you'll reach for most:

  • impact_surface — the coding preflight from the loop above: callers, callees, tests, git history, GitHub papertrail, and the repo memories crossing a symbol, in one call. Memories default to compact, scannable headers; pass full_memories: true for full bodies + bindings.

  • semantic_search — hybrid BM25 + vector recall over source and docs, validated against current source. Every hit reports retrieval_mode; explain=true breaks down the score.

  • symbol_lookup — exact/fuzzy symbol resolution; cfg/overload variants grouped as one logical symbol.

  • find_callers / trace_callees — reverse/forward call-graph traversal (low-signal std/macro noise filtered by default).

  • important_symbols — the load-bearing symbols by (SCIP-aware) PageRank, seeded from your current diff by default; see docs/oracle.md.

  • find_clones — exact + near-miss duplicate functions ranked by refactor ROI (the candidate graph is precomputed in the background, so it scales to large repos).

  • memory_create — record a source-anchored repo memory; dream surfaces the maintenance worklist that keeps them honest (below).

Beyond these: repo orientation (repo_brief, repo_clusters), git/GitHub rationale (commit_search, git_history_for_*, papertrail_for_*, rationale_search), the full memory graph (memory_search, memory_edges, memory_rebind, memory_doctor, …), graph-vs-compiler audit (compare_graph_to_scip), and index diagnostics (index_status, llm_status, heal_index) — all documented in docs/mcp-tools.md.

Repo memories

Repo memories are first-class local evidence — not chat memory, not cloud personalization. They are versioned, local, source-anchored facts about this repository. Each is typed (Invariant, Decision, RejectedAlternative, Risk, BugPattern, PerformanceNote, …) and source-anchored: bound to a logical symbol, concrete symbol, chunk, path+span, graph edge, call-path, commit, or GitHub ref. rag-rat tracks each anchor as current, relocated, stale, gone, or unverified, and surfaces matching memories through the memory_* tools and inline in read_chunk, symbol_lookup, find_callers, trace_callees, and impact_surface. They're how hard-won context reaches the next agent in one call instead of evaporating.

Memories are also a typed graph, not just a flat list: memory_edge_add / memory_edges connect them with relations (depends_on, relates_to, supersedes, derived_from, tracks) — a task DAG, a mind-map link between decisions, or a task that tracks a GitHub issue. Full tool list: docs/mcp-tools.md.

Self-maintaining memories

Memories rot: the code moves under them, an invariant gets superseded, a load-bearing function ships with no memory at all. dream is the maintenance loop that keeps the layer honest. It recomputes a ranked worklist of findings about the memories themselves — each with a stable id to review:

  • coverage gaps — load-bearing symbols (by the same PageRank as important_symbols) that carry no memory, so the next agent editing them gets nothing.

  • stale references — a memory citing a path or anchor that no longer resolves.

dream runs the deterministic findings on every call. Two opt-in model passes go deeper, running a small model on an ephemeral remote GPU ([llm.dream.remote]) only when work is pending: rag-rat dream --verify recomputes each memory's verdict against current source reality (has the code drifted from what the memory claims?), and --compact rewrites a verbose memory to a tighter summary. Findings those passes persist surface back through dream.

Nothing is deleted automatically. A human — or a strong agent over MCP — burns the worklist down with dream_review (accept a real gap, dismiss noise, reset a prior verdict), and verdicts survive future runs so settled findings don't come back. It's the same surface as the CLI rag-rat dream / rag-rat dream <id> --accept|--dismiss|--reset.

Compiler-grade resolution & ranking

The graph is heuristic by default. The opt-in SCIP oracle (rag-rat oracle run) upgrades edges to a Compiler tier from a real language tool, recovers calls tree-sitter missed, flags external edges, and makes important_symbols surface the genuine god-modules. For C/C++ the scip-clang oracle distinguishes declarations from definitions and sharpens call/type edges in macro-heavy or multi-target code — the difference between usable and noisy graphs on firmware, kernels, drivers, and SDKs. Turn on [oracle] auto_run and the MCP server keeps it fresh on its own (throttled, watcher-safe). Full details: docs/oracle.md.

Freshness

rag-rat mcp runs a background file watcher (on by default; [watch] enabled = false or RAG_RAT_NO_WATCH=1 to disable), so graph/symbol queries reflect uncommitted edits without a commit. Indexed rows are git-context-aware: clean files are stored by commit_sha, dirty/untracked files in a worktree overlay, so one database reuses rows across branch switches while reflecting local edits. Optional git hooks (rag-rat hooks install) keep the index current on checkout/merge/rewrite/commit. read_chunk and search validate hits against current source and heal stale entries before returning.

One watcher per worktree and one writer at a time are enforced with file locks (unreliable on NFS / WSL2 /mnt mounts).

Editor Lens HTTP API

An active rag-rat mcp process also elects one authenticated Lens HTTP server per worktree. It publishes the loopback URL and bearer token to .rag-rat/sockets/lens.json; the credential file is owner-readable only on Unix. Set RAG_RAT_NO_LENS=1 to disable this embedded server, or set RAG_RAT_LENS_ORIGINS to a comma-separated exact browser-origin allowlist.

Run rag-rat serve when the HTTP API needs its own lifecycle. Loopback serving generates a token; clients read it from the discovery file. A non-loopback bind requires both an explicit token environment variable and at least one trusted browser origin:

LENS_TOKEN="$(openssl rand -hex 32)" rag-rat serve \
  --bind 0.0.0.0 --token-env LENS_TOKEN --allow-origin https://lens.example.com

Every non-preflight request uses Authorization: Bearer <token>. Allowed origins are matched exactly; wildcard CORS is never emitted. The built-in listener is plain HTTP, so terminate TLS in a trusted reverse proxy or tunnel before exposing a non-loopback server across an untrusted network.

By default every repo's index and memories live in one consolidated database per machine ($XDG_DATA_HOME/rag-rat/rag-rat.sqlite; override with RAG_RAT_DATA_DIR), so a deleted checkout or git clean -fdx no longer loses your authored memories. Set an explicit [index] database to keep a repo on its own file (deprecated), and run rag-rat consolidate to import a pre-existing .rag-rat/index.sqlite into the global store — see docs/config/database.md.

Output format

The CLI and MCP results default to TOON (Token-Oriented Object Notation) — a token-efficient encoding that renders uniform rows as a dense [N]{cols}: table (~30% smaller than compact JSON on those payloads, never larger in practice). Pass --json (CLI, either position) or launch rag-rat mcp --json (MCP) when a JSON parser must read the output.

Embedding backends

The default local embedder (FastEmbed) needs no setup, but a large repo or a stronger model is worth offloading. rag-rat speaks the OpenAI-compatible /v1/embeddings API, so a [llm.embedding.remote] block can serve embeddings from Ollama, vLLM, or michaelfeil/infinity — one client, one place to audit and secure. Two modes:

  • Connect to a server you already run (set endpoint).

  • Ephemeral — let the bundled cookbook provision a GPU worker (Modal / RunPod) just for the backfill and tear it down afterward (set cookbook); pick the backend and GPU class in config.

The init flow warns when a short-context model would truncate long code chunks and steers you to a long-context code embedder, and rag-rat auto-tunes the client concurrency against the chosen backend so the sweep finds its throughput knee. Setup and every knob: docs/config.md.

Retrieval quality

Search quality is measurable, not guesswork. rag-rat ships a commit-replay evaluation harness (rag-rat eval --replay): each recent commit becomes a case — its message is the query, the files it touched are the gold set — and search is scored on how well it recovers them. It reports recall@3 (did the right chunk land in the first three reads?), recall@10, and MRR@10, and CI tracks the trend on Bencher on main so a regression is caught before it ships.

Reach for it when comparing embedding models, changing chunking, enabling int8 vector storage (smaller on disk), or tuning a remote backend — you can prove the change didn't cost recall instead of hoping. (rag-rat eval requires a --features eval build; it is absent from the released binary.)

Benchmarks

The headline workload is indexing the whole Linux kernel (v7.0, ~63k C/H files, 9.14M graph edges). Full numbers — wall-clock, throughput, peak RSS, on-disk size, unresolved-edge taxonomy — are in docs/benchmarks.md. Performance is tracked per-push and gated per-PR; the live history is at bencher.dev/perf/rag-rat/plots (wiring: docs/bencher.md).

Security

The MCP server exposes read-only source tools. It never executes shell commands or writes your source files. It writes only the configured SQLite index — during indexing, migration, maintenance, reconciliation, repo-memory operations, and automatic stale-index healing. GitHub sync is explicit and uses gh api; normal query tools read only the local cache.

Local vs remote embedding

With the default local embedder, nothing leaves the machine — indexing and querying are entirely local. Configuring a [llm.embedding.remote] backend is what sends text off the box, in two places: the chunk text selected at index time, and the query text of each semantic search (a search embeds your query to compare it against the indexed vectors). A CONNECT backend embeds both against the configured endpoint; an ephemeral backend embeds queries against the local query_endpoint.

What the endpoint is decides how much that matters:

  • Your own server (self-hosted Ollama / vLLM / infinity) — the text stays in infrastructure you control.

  • Ephemeral Modal / RunPod workers (the cookbook path) are ephemeral compute providers running your open-source embedder, not data services that train on inputs. Both are SOC 2 Type II, encrypt in transit and at rest, isolate tenants, and tear the box and its storage down after the backfill — a data-processor relationship, reasonable for proprietary code the same way a cloud VM is.

  • A third-party embedding API you don't control is the one to actually read the terms on (retention, training on inputs).

Sensible hygiene regardless of backend: exclude secrets, generated files, and vendor trees from the indexed targets so they're never chunked or embedded, and keep secrets out of query text. Details: docs/config.md.

Platform support

rag-rat builds and tests on Linux, macOS, and Windows. Linux is covered on every PR and on every push to main; macOS and Windows are exercised on release, so cargo install rag-rat builds and links on all three. Android (aarch64, bionic) is also a release target — a prebuilt binary is attached to each release and published to @rag-rat/bin, so npx @rag-rat/bin works on Termux; see Quickstart. SQLite is bundled (compiled from source via rusqlite), so there's no system-library prerequisite, but each platform needs a C toolchain: Linux ships one; on macOS install the Xcode Command Line Tools (xcode-select --install); on Windows install the Visual Studio Build Tools with the C++ workload (MSVC). Requires Rust 1.96+; the workspace tracks that stable baseline for its dependencies (the bundled SQLite build itself requires at least Rust 1.95 for cfg_select!).

A few maintenance conveniences are Unix- or Linux-only by design and degrade quietly elsewhere — no feature of the index, query, or MCP surface is affected:

  • Hot-upgrade of a running MCP server (the SIGUSR1 in-place re-exec) is Unix-only. On Windows, restart rag-rat mcp to pick up a new binary.

  • Fleet auto-upgrade (signalling other running servers when a new binary lands) is Linux-only — it walks /proc — and is a no-op elsewhere.

  • The grep-augmentation hook uses a warm Unix-socket listener (with per-session dedupe) on Linux and macOS; on Windows it falls back to a per-call read-only query straight against the index, which works the same but without cross-call dedupe.

Commands

rag-rat init                       # guided first-run setup
rag-rat index [--changed|--discover|--full]
rag-rat doctor
rag-rat query "semantic recall"    # add --json for JSON
rag-rat important-symbols --limit 20
rag-rat brief --mode spine|churn|god_modules|refactor_candidates
rag-rat clusters --limit 10
rag-rat oracle run | status        # compiler-grade resolution (docs/oracle.md)
rag-rat models list | install <model>
rag-rat reconcile --changed-first --max-seconds 60 --batch-size 64
rag-rat papertrail sync            # add --full to force a historical healing pass
rag-rat memory list | show <id> | doctor | rebind <id>    # inspect / re-anchor repo memories
rag-rat dream [--verify|--compact] [<id> --accept|--dismiss|--reset]   # memory-maintenance worklist
rag-rat consolidate                # import a legacy per-repo index into the global store
rag-rat hooks install              # git maintenance hooks
rag-rat gc                         # prune rows for dead git contexts
rag-rat eval [--json|--update-baseline]   # CI search-quality gate; requires a `--features eval` build (absent from the released binary)
rag-rat serve                      # authenticated editor Lens HTTP API
rag-rat mcp                        # start the STDIO server

Releasing & license

Releases are automated by release-plz (the three crates ship in lockstep; see docs/releasing.md). rag-rat is MIT-licensed — see LICENSE.

Prior art

rag-rat's clone-detection design is inspired by SourcererCC's scalable token-bag candidate generation, NiCad's normalized near-miss clone-detection framing, GumTree's move-aware AST differencing, and anti-unification / least-general generalization for template extraction. Planned fragment-level mining and copy-paste bug heuristics are inspired by CP-Miner.

Available Tools

47 tools
check_library_usageA

Dependency-contract check for the code's EXTERNAL library calls, from the SCIP oracle's external symbol info. For each resolved-external call site it surfaces the dependency's CURRENT signature + docs as inline context (judge arity / misuse yourself) and ASSERTS a deprecated verdict when the docs mark it so. Filter by path, package, or deprecated_only. Requires an oracle run; returns a NoOracleRun / NoExternalSymbols status otherwise. Does NOT assert arity or removed/renamed drift (not instrumented / needs a cross-version baseline) — those stay context.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoRestrict to external call sites in this exact file or under this directory prefix (e.g. `src/net`). Omit for the whole checkout.
limitNoMax dependency-symbol entries returned; summary counts always cover the full set.
packageNoRestrict to one dependency package — the moniker's package component, e.g. `ky` / `tokio`.
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
deprecated_onlyNoOnly surface contracts flagged deprecated (the asserted verdict).

TDQS

A4.7/5.0
Behavior5/5

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

With NO annotations present, the description carries the full safety burden and delivers richly. It's transparent about behavior: it SURFACES signature+docs as 'inline context' (leaving judgment to the agent), it ASSERTS a `deprecated` verdict only when docs mark it, and it explicitly lists error/edge statuses (`NoOracleRun` / `NoExternalSymbols`). Most notably, it proactively discloses a potential misconception by stating it does NOT handle arity or drift checks and explains the reason ('not instrumented / needs a cross-version baseline').

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?

Structurally dense with zero wasted words. The multi-sentence description front-loads the core purpose, uses parentheticals to pack secondary details, and leverages bold/uppercase formatting effectively. Every clause earns its place (e.g., '(judge arity / misuse yourself)' is a compact, high-value instruction). It's information-dense but easily skimmable.

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, filterable tool with no output schema and a fully-documented parameter set, the description is exceptionally complete. It covers the key user-facing details: call context (external symbols), filtering, output semantics (deprecated verdict), and preconditions (oracle run). The worktree caveat is a nice touch that saves a user from confusion about which index the tool reads from. The explicit non-coverage of arity/drift is exactly the kind of boundary definition that prevents LLM confusion. I can't identify a meaningful gap for a tool of this scope.

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% with good inline docs for each parameter. The description adds value by conceptualizing them (`Filter by path, package, deprecated_only`), and it clarifies the return semantics (`limit` vs summary counts) that isn't obvious from the schema. It doesn't deeply re-explain each parameter but correctly treats the schema as authoritative, using the description solely to illuminate the filtering access pattern.

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?

Vividly clear: 'Dependency-contract check for the code's EXTERNAL library calls, from the SCIP oracle's external symbol info' immediately establishes the specific verb (check), resource (external library calls), and scope (vs. internal call graph). It explicitly names what it does NOT assert (arity or removed/renamed drift), effectively distinguishing itself from siblings like `find_callers` or `trace_callees`. This goes beyond a generic restatement of the 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?

The description weaves in critical usage guidance: filter options (`path`, `package`, `deprecated_only`), the `oracle run` prerequisite, and explicit non-goals ('To filter by user/workspace, use search_calls_extensive' style contrast is absent, but it clearly warns about what it does NOT do (arity checks) which a user might otherwise assume). A clear when/why-not is implied rather than contrasted against a specific sibling by name, hence a 4.

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

clones_for_symbolB

The clone class containing a symbol (by id / ref / path+line). Returns the candidate class if the symbol is fingerprinted and has clone siblings; null if it is unique or not fingerprinted.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
refNo
lineNo
pathNo
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses return values (candidate class or null) and conditions, but omits details on error handling, precedence of parameters, or whether it is a read-only operation. It adds some transparency but not comprehensive coverage.

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?

A single sentence that front-loads the purpose and includes all key conditions. Zero wasted words; every phrase contributes to understanding the tool's behavior.

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

Completeness3/5

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

Given no output schema, the description explains the return type (candidate class or null) and conditions. However, it does not describe the structure of the candidate class, parameter interaction details, or edge cases. Adequate for a simple tool but leaves gaps given five parameters.

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 only 20%, so the description must compensate. It mentions id, ref, and path+line as input forms, giving meaning to four parameters, but does not explain how they relate (alternatives vs combined) or the worktree parameter. Partial compensation for the low schema coverage.

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

Purpose4/5

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

The description clearly states the tool returns the clone class for a symbol, specifying input forms (id/ref/path+line) and conditions (fingerprinted, has siblings). It distinguishes from sibling tools like find_clones by focusing on a single class result, but does not explicitly contrast with them.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like find_clones, nor exclusions. The description implies usage (for getting a clone class of a symbol) but offers no context about prerequisites or comparisons.

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

commits_touching_queryB

Combine commit-message matches with current file-change evidence for a query — "what work relates to X?" across both messages and the files that changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
explainNo
includeNoWhat to include: `git`, `papertrail` (both on by default), `generated`, `fallback` (off by default). Omit to keep defaults; an explicit list is the exact on-set.
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
graph_limitNo
include_graphNocompact

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It mentions combining evidence but does not disclose behavioral traits like whether it performs read-only operations, potential side effects, or performance implications. It adds some context about the query scope but lacks depth for a complex tool.

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 a single sentence that is concise and front-loaded with the core purpose. It earns its place by explaining the combination of evidence types, though it could be slightly more structured with a second sentence for usage context.

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

Completeness3/5

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

Given the tool's complexity (7 parameters, no output schema, no annotations), the description is minimal. It does not explain return values, pagination, or how the graph modes affect output. The schema provides some parameter details, but the description leaves gaps for a tool that likely returns complex 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 only 29%, so the description should compensate. It does not explain parameters beyond the schema, but the schema itself has descriptions for 'include' and 'worktree'. The description adds no additional parameter semantics, so it relies on the schema, which is partially covered.

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 clearly states the tool combines commit-message matches with file-change evidence for a query, which is a specific verb+resource+scope. It distinguishes from siblings like commit_search and semantic_search by emphasizing the combination of messages and file changes, though it doesn't explicitly name alternatives.

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 description implies usage for 'what work relates to X?' but does not explicitly state when to use this tool versus alternatives like commit_search or semantic_search. It provides a clear context but lacks explicit exclusions or alternative guidance.

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

compare_graph_to_scipA

Cross-check the tree-sitter graph against the SCIP compiler oracle — report the edges where they DISAGREE on a callee's resolution (the compiler contradicts tree-sitter). A resolver-debugging diagnostic; requires rag-rat oracle run first to populate compiler verdicts. Reports nothing when no oracle data exists for this checkout.

ParametersJSON Schema
NameRequiredDescriptionDefault
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the transparency burden. It discloses the prerequisite oracle data, the no-data behavior (reports nothing), and the diagnostic nature of the tool. It doesn't discuss side effects, but the tool is framed as a read-only cross-check/report.

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

Conciseness5/5

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

The description is compact and front-loaded: it states the core action and resource in the first clause, then adds prerequisite and edge-case behavior. Every sentence contributes necessary information without redundancy.

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

Completeness4/5

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

Given the tool has one well-documented parameter, no annotations, and no output schema, the description covers purpose, prerequisite, and empty-result behavior. It could mention the return format or ordering of edges, but for a diagnostic tool the description is adequately complete.

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

Parameters3/5

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

Schema description coverage is 100% for the single worktree parameter, and the schema already explains absolute path, linked worktree overlay, default behavior, and silent ignoring of non-linked paths. The tool description adds nothing 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 uses a specific verb ('Cross-check') and names the exact resources involved (tree-sitter graph vs SCIP compiler oracle). It also states what the tool reports (edges where they disagree on callee resolution), which clearly distinguishes it from sibling tools like compare_graph_to_text.

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

Usage Guidelines4/5

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

The description gives clear usage context: it's a resolver-debugging diagnostic and requires 'rag-rat oracle run' to have been executed first. It does not explicitly name alternative tools or exclusions, but the intended scenario is evident.

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

compare_graph_to_textA

Cross-check a symbol's graph caller edges against a regex text search of indexed source — surfaces call sites the tree-sitter graph missed and flags likely false edges. Use when you suspect graph coverage gaps.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
refNo
limitNo
symbolNo
includeNoWhat to include: `tests` (on by default); `references`, `unresolved`, `macros`, `common_methods` (off by default). Omit to keep defaults; an explicit list is the exact on-set.
patternYes
edge_kindsNo
resolutionNo
allow_ambiguousNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description bears full responsibility for behavioral disclosure. It describes the tool's action (cross-checking, surfacing, flagging) but does not clarify side effects, auth requirements, rate limits, or whether it is a read-only operation. The description is partially informative but lacks important behavioral context.

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

Conciseness5/5

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

The description is composed of two concise, front-loaded sentences. The first sentence captures the core functionality, and the second provides usage guidance. No redundant or filler content.

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

Completeness3/5

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

Given the tool's complexity (9 parameters, no output schema), the description covers only the core concept and usage hint. It omits details about return format, parameter meanings, and prerequisites, leaving significant gaps for an agent to use it correctly.

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

Parameters2/5

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

Schema description coverage is only 11%, meaning the description should compensate by explaining key parameters. However, the description does not mention any parameters except implicitly 'regex text search' (which relates to 'pattern'). Parameters like 'symbol', 'include', 'edge_kinds' remain unexplained, relying on the sparse 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 uses specific verbs ('cross-check', 'surfaces', 'flags') and resources ('graph caller edges', 'regex text search of indexed source'), clearly distinguishing the tool from siblings like compare_graph_to_scip. The purpose is immediately clear: compare graph edges to text search to find missed call sites and false edges.

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

Usage Guidelines4/5

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

The description explicitly advises using the tool 'when you suspect graph coverage gaps', providing a clear use case. However, it does not mention when not to use or suggest alternatives like compare_graph_to_scip, which could be a similar tool for SCIP-based comparison.

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

docs_for_symbolC

Find documentation related to a symbol — markdown chunks and doc comments, preferring local context before broad docs.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
refNo
limitNo
symbolNo
includeNoWhat to include: `memories` (on by default); `references`, `unresolved`, `macros`, `common_methods`, `coverage` (all off by default). Omit to keep defaults; an explicit list is the exact on-set (so listing `macros` alone also drops the default `memories`).
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
edge_kindsNo
resolutionNo
allow_ambiguousNo

TDQS

C2.5/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It mentions a preference for local context but does not explain what that means, nor does it describe side effects, permissions, or return formats (no output schema). The lack of detail leaves the agent uninformed about how the tool behaves beyond the vague preference.

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 description is a single, front-loaded sentence with no wasted words. However, it is overly terse and sacrifices critical content for brevity. It is concise but not appropriately structured for a tool of this complexity.

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

Completeness1/5

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

Given 9 parameters, no output schema, and no annotations, the description is drastically insufficient. It does not explain how to specify the symbol, what the limit or include flags do, what edge_kinds and resolution mean, or what the returned documentation looks like. This is a severe gap for a tool with such rich schema.

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

Parameters2/5

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

Schema description coverage is only 22%, and the description adds minimal meaning beyond the schema. It implies the 'symbol' parameter but does not clarify the roles of id, ref, limit, include, worktree, edge_kinds, resolution, or allow_ambiguous. With 9 parameters, the description must compensate for the low schema coverage but fails to do so.

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 clearly states the tool finds documentation for a symbol, specifying it covers markdown chunks and doc comments. The phrase 'preferring local context before broad docs' adds a scoping nuance. It distinguishes itself from sibling tools like memory_for_symbol or symbol_lookup by focusing on documentation retrieval.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. It does not mention other tools like memory_for_symbol or find_callers, nor does it provide exclusions or prerequisites. The 'preferring local context' note is about internal behavior, not usage selection.

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

dreamA

Return the deterministic memory-maintenance worklist: coverage gaps (load-bearing symbols with no memory) + stale references (a memory citing a path that no longer resolves), ranked, each with a stable id to review. This is the pull surface for a strong agent to burn down the worklist. Recomputes the deterministic findings on each call (like rag-rat dream); it does NOT run the opt-in model verdict/compaction passes — those stay on the CLI/cron rag-rat dream --verify|--compact, and the findings they persist (e.g. memory_divergence) still surface here. Review a finding with dream_review.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoAlso surface the human-reviewed (`accepted` / `dismissed`) findings, not just the open worklist — the `rag-rat dream --all` listing, so a reviewer can see and `reset` them.
limitNoMax `coverage_gap` findings to compute (the load-bearing-symbol budget); defaults to 20.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries full burden and does exceptionally well. It discloses that the tool recomputes findings on each call (implying side effects), explicitly excludes the model/compaction passes, clarifies that persisted findings from prior runs still surface, and mentions the stable `id` for review. This gives the agent a clear picture of behavior and side effects.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the core return value, but it's slightly verbose with the 'pull surface' metaphor and a bit of redundancy between 'deterministic' and 'Recomputes the deterministic findings'. Still, every sentence adds meaningful context, so it earns a 4 rather than 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?

The tool has no output schema and no annotations, so the description must explain return value, behavior, and limitations. It covers the worklist composition (coverage gaps + stale references), ranking, stable IDs, the recompute side effect, the exclusion of model passes, and the fact that prior persisted findings surface. It also points to dream_review for follow-up, making it complete for an agent to decide when to invoke.

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 description is not required to explain parameters. The description adds no parameter-specific semantics beyond the schema, which already covers `all` and `limit` with descriptions. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool returns a deterministic memory-maintenance worklist of coverage gaps and stale references, ranked with stable IDs. It distinguishes itself from the sibling tool dream_review by pointing to it for reviewing findings, and differentiates from the broader read/memory 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?

The description explicitly identifies this as the 'pull surface' for burning down the worklist, explains it recomputes deterministic findings on each call, and clearly states it does NOT run the opt-in model verdict/compaction passes (those stay on CLI/cron). It also directs users to dream_review for reviewing findings, providing clear when-to-use and alternative guidance.

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

dream_reviewA

Apply a human verdict to ONE dream finding by id (a full id or unambiguous prefix): accept (a real gap to act on), dismiss (noise), or reset (clear a prior verdict, back to open). Dream only proposes; this is how the reviewer confirms. The verdict survives future dream runs. Mirrors rag-rat dream <id> --accept|--dismiss|--reset.

ParametersJSON Schema
NameRequiredDescriptionDefault
findingYesThe finding id from the `dream` worklist — a full id or an unambiguous git-style PREFIX.
verdictYes`accept` / `dismiss` / `reset`.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. Discloses that tool applies a human verdict (write/mutation), that the verdict survives future dream runs, and explains each verdict's effect. Does not explicitly state it's a write operation, but clear enough.

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?

Three concise sentences with no fluff. Front-loaded with the core action. Each sentence earns its place.

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 simple tool with 2 params and no output schema, description covers purpose, usage, persistence, and relationship to dream. Could mention return value but not essential for correct usage.

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%, baseline 3. Description adds value: explains finding id can be a prefix, summarizes verdicts with context (e.g., 'clear a prior accept/dismiss' for reset). Adds clarity beyond 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?

Clearly states the verb 'apply', specific resource 'dream finding' by id, and the three verdicts accept/dismiss/reset. Distinguishes from sibling 'dream' by noting 'Dream only proposes; this is how the reviewer confirms.'

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

Usage Guidelines4/5

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

Provides explicit context: 'Dream only proposes; this is how the reviewer confirms.' Implies usage after dream runs. Mentions verdict persistence. Does not explicitly state when not to use, but context is clear. Reference to CLI command helps.

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

ffi_surfaceA

Find the FFI surface: #[uniffi::export] items, exported impl members, and generated binding artifacts (detected by path). Empty in repos without FFI.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It explains the detection mechanism ('detected by path') and the key edge case ('Empty in repos without FFI'). It could further describe output format or ordering, but the essential behavioral traits are disclosed.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It states the action, scope, detection heuristic, and an important empty-result caveat in under 25 words.

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 simple read/search tool with no output schema, the description explains what is returned and the empty-case behavior. The worktree parameter semantics are covered in the schema, and the tool's scope is narrow. A fully complete description might also describe result shape or ordering, but the current level is sufficient for selection and basic invocation.

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

Parameters2/5

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

The description adds no meaning to the parameters. Schema coverage is 50%: 'worktree' is well documented in the schema, but 'limit' has no description and the tool description does not mention either parameter. The description misses an opportunity to clarify how 'limit' affects results or how 'detected by path' relates to the worktree scope.

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

Purpose5/5

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

The description uses a specific verb ('Find') and identifies a well-scoped resource ('the FFI surface') while enumerating exact constituents: '#[uniffi::export] items, exported impl members, and generated binding artifacts (detected by path)'. It clearly differentiates this from sibling tools like symbol_lookup or impact_surface by describing a distinctive FFI-specific surface.

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

Usage Guidelines4/5

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

The description gives clear context: it is for locating FFI-related declarations and artifacts, and it notes that results are empty in repositories without FFI. It does not explicitly name alternative tools or provide when-not-to-use guidance, but the intended use case is clear.

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

find_callersA

Find what calls a symbol (reverse call graph), instead of grepping for call sites. Returns call sites with confidence + target verification, a completeness / false-positive risk summary, and repo memories crossing the call path. Includes synthesized dispatches edges for message/enum (actor-channel) dispatch — the sender that constructs the variant a handler's match arm handles. Resolve the symbol with symbol_lookup first when a name is ambiguous.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
refNo
limitNo
symbolNo
includeNoWhat to include: `memories` (on by default); `references`, `unresolved`, `macros`, `common_methods`, `coverage` (all off by default). Omit to keep defaults; an explicit list is the exact on-set (so listing `macros` alone also drops the default `memories`).
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
edge_kindsNo
resolutionNo
allow_ambiguousNo

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, but the description explains what the tool returns (call sites with confidence, completeness risk, repo memories) and notes synthesized dispatch edges. It also describes the worktree parameter's behavior (silent ignoring). Does not explicitly state side effects, but as a query tool this is largely covered.

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 three sentences and information-dense, covering key behaviors, alternatives, and edge cases. It is slightly long but not wasteful; every sentence adds value.

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

Completeness4/5

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

No output schema exists, so the description must explain return content. It mentions call sites with confidence, completeness risk, repo memories, and dispatch edges. Covers worktree behavior. Reasonably complete for a query tool, though it could clarify the exact return structure.

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 low (22%), with only worktree and include having descriptions. The text mentions resolving symbols and include flags, but many parameters (id, ref, limit, edge_kinds, resolution, allow_ambiguous) lack explanation. The description adds some meaning but not enough to fully compensate for the schema gaps.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Find what calls a symbol (reverse call graph)' with a specific verb and resource, and distinguishes it from grep-based approaches. It is unambiguous and differentiates from sibling tools like trace_callees.

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 explicitly says 'instead of grepping for call sites' and advises resolving ambiguous symbols with symbol_lookup first, giving clear when-to-use and alternative guidance. Also mentions include/edge options and worktree scoping.

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

find_clonesA

Ranked candidate clone classes (unrefined; exact overlap metrics). Returns classes sorted by ROI (cross-module spread × member count × token length × load-bearing factor × cohesion), with a completeness provenance block. min_similarity (if set) must be in [0.5, 1.0] (default 0.7). A LIMITED query (limit: N) is capped at the refine budget (currently 50) — it returns at most 50 classes, all refined; pass limit: null/omit it to retrieve all classes (only the top 50 refined). completeness.refine_budget_clamped is true when a supplied limit hit that cap.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of clone classes to return, sorted by ROI descending. A supplied limit is capped at the refine budget (currently 50): `limit: N` returns at most 50 classes, all refined. Omit (null) to retrieve all classes (only the top 50 refined, the rest unrefined).
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
min_copiesNoMinimum number of copies for a class to be returned (defaults to 2).
min_similarityNoMinimum pairwise overlap/max_len similarity. Must be in the range [0.5, 1.0]; defaults to 0.7 (the θ threshold) when omitted. Out-of-range values are rejected.

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well: it discloses the ROI sorting formula, the unrefined-vs-refined semantics, the cap/clamping behavior, the completeness provenance block, and input validation ([0.5,1.0], out-of-range rejection). This is rich behavioral disclosure for a search tool; only missing details like auth or error behavior, which are less critical here.

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 a dense paragraph of about 70 words with zero fluff — every sentence earns its place (sorting, provenance, validation, cap behavior). It's front-loaded with the primary purpose. It could benefit from structural separation of the parameter constraints, but the information density is high and well-ordered.

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 4 well-documented params (100% schema coverage) and no annotations, the description covers the key behavioral gaps: return semantics without an output schema (ROI sort, provenance block, refine budget field). It's reasonably complete for a search tool that requires no parameters and has no output schema — the main omission is explicit differentiation from clones_for_symbol.

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 fully documents all four parameters (limit cap, worktree fallback behavior, min_copies default, min_similarity range). The description mostly restates this (limit clamped at 50, min_similarity range/default) while adding only the ROI context and the completeness.refine_budget_clamped field. That's marginal added value over the schema, matching the baseline 3.

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 clearly states the tool returns ranked candidate clone classes sorted by ROI, with a completeness provenance block. It's a specific verb+resource (return/find clone classes) with quantifiable scope. It distinguishes implicitly from the sibling clones_for_symbol (global vs per-symbol) but does not name the distinction explicitly, so it falls short of a 5.

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 description gives substantial procedural context: the limit cap at 50, the refine budget behavior, and the min_similarity range enforcement. However, it provides no explicit when-to-use vs alternatives guidance, no exclusions, and never contrasts with the obvious sibling clones_for_symbol — so the tool-selection guidance is missing.

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

git_blame_chunkA

Hash-bound git blame for one chunk: who last touched its lines, computed lazily and cached against the chunk hash.

ParametersJSON Schema
NameRequiredDescriptionDefault
chunk_idYes
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It discloses 'computed lazily and cached' and 'hash-bound', but doesn't mention read-only nature, potential cost, or what happens on missing chunk. It's some transparency but not comprehensive.

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?

One sentence, front-loaded with purpose. Loses a point for being slightly vague in wording (hash-bound, lazily) but overall efficient.

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

Completeness3/5

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

Tool is simple (2 params, 1 required), but no output schema and description doesn't explain return format or caching lifetime. Meets minimal bar but has gaps.

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

Parameters2/5

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

Schema has 50% coverage (worktree has a description). The description doesn't explain chunk_id beyond 'one chunk'. Baseline 3 for high coverage, but here coverage is 50% and description adds nothing about params, so it's below 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 clearly states the verb+resource:

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 description implies it is for a single chunk via 'for one chunk', but gives no guidance on when to prefer this over other tools like git_history_for_path or commit_search, and no mention of exclusions or prerequisites.

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

git_history_for_pathA

List commits that touched a current path, newest first, with additions/deletions and subjects.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
limitNo
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It conveys read-only intent via 'List' and specifies ordering (newest first) and returned fields, but does not mention side effects (non-destructive), error behavior, or permission requirements. For a simple read operation, this is adequate but not rich.

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

Conciseness5/5

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

The description is a single, compact sentence that delivers the core functionality without redundant words. It front-loads the purpose and key details, exemplifying conciseness.

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

Completeness3/5

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

For a tool with 3 parameters and no output schema, the description is brief but covers primary purpose, ordering, and output highlights. It does not elaborate on output structure, pagination, or edge cases, leaving room for ambiguity. Adequate for a simple listing tool but not comprehensive.

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

Parameters2/5

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

Schema description coverage is 33% (only worktree is described). The description only references 'path' vaguely as 'current path' and does not explain the limit parameter, its default, or the worktree parameter beyond the schema. It adds minimal value for the undocumented parameters, failing to compensate for the low coverage.

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

Purpose5/5

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

The description uses a specific verb 'List' and resource 'commits' with clear scoping to 'a current path', and notes ordering and output content (additions/deletions, subjects). It clearly distinguishes from siblings like git_history_for_symbol, which targets symbols rather than paths.

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

Usage Guidelines4/5

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

The description implies usage for path-based commit history, providing clear context about what it does. It does not explicitly state when not to use it or mention alternatives, but the sibling names (git_history_for_symbol, commits_touching_query) suggest differentiation. Lacks explicit exclusion clauses but has a clear purpose.

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

git_history_for_symbolB

Resolve a symbol, then list commits touching its file — symbol-scoped history without needing the path.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
refNo
langNo
limitNo
symbolNo
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
allow_ambiguousNo

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are present, so the description must fully disclose behavior. It mentions the two-step process (resolve symbol, list commits) but omits critical behaviors such as read-only status, error handling on unresolved symbols, handling of ambiguity (despite allow_ambiguous parameter), output format, or pagination. This is a significant gap for a read operation with no safety 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?

A single, front-loaded sentence that efficiently conveys the core action and differentiator. There is no fluff, and every word contributes to understanding.

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

Completeness2/5

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

With 7 parameters, no output schema, and no annotations, the description is far too sparse. It lacks information on return value structure, parameter interactions, error scenarios, and how limit or allow_ambiguous affect behavior. Even for a simple tool, the description leaves too much unspecified.

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

Parameters2/5

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

Schema coverage is only 14%, with only worktree having a description. The tool description adds minimal parameter context: it mentions symbol-scoped history and not needing the path, which hints at symbol and worktree, but leaves id, ref, lang, limit, and allow_ambiguous unexplained. This does not compensate for the low schema coverage.

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

Purpose5/5

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

Clearly states the tool resolves a symbol then lists commits touching its file, explicitly highlighting the distinction from path-based history via 'without needing the path'. This precisely defines the resource and action, distinguishing it from siblings like git_history_for_path.

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 description implies when to use it (when you have a symbol, not a path) but does not explicitly state when not to use it or name alternatives. It provides context but lacks direct exclusionary guidance or comparison to sibling tools like git_history_for_path or papertrail_for_symbol.

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

heal_indexA

Re-index stale already-indexed files and refresh FTS — repair when reads report drift. Writes only to the index, never to source.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It clearly states that the tool writes only to the index and never to source, and that it re-indexes stale files. This adequately discloses the key behavioral traits, though it could mention side effects like temporary index inconsistency.

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?

Two sentences, no wasted words, front-loaded with the core action. Every sentence adds essential information.

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

Completeness3/5

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

Covers purpose and write behavior but omits parameter documentation and does not describe return values or error conditions. For a simple tool with one parameter and no output schema, the missing parameter explanation is a notable gap.

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

Parameters1/5

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

Schema has one parameter (limit) with 0% description coverage. The description does not mention or explain the 'limit' parameter at all, failing to compensate for the schema's lack of documentation.

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

Purpose5/5

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

Description clearly specifies the verb (re-index, refresh, repair) and resource (stale already-indexed files, FTS), and distinguishes from sibling tools by indicating it is a maintenance/repair operation rather than a read or search tool. The phrase 'repair when reads report drift' uniquely identifies the tool's purpose.

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

Usage Guidelines4/5

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

Provides explicit usage context ('repair when reads report drift') and a behavioral boundary ('Writes only to the index, never to source'). However, it does not explicitly state when not to use or compare to alternatives like index_status or memory_doctor.

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

impact_surfaceA

Pre-edit blast radius for a symbol or path: graph callers/callees, tests, docs, git history, tracker papertrail, and the repo memories crossing it, with a completeness / risk summary. Run this before changing anything non-trivial. Distilled decision records for the symbol ride along as distilled_records (labeled unreviewed, capped at 2; the cap is signalled in completeness_and_caveats.truncated_sections when more exist).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
refNo
limitNo
queryNo
symbolNo
includeNoWhat to include — `tests`, `docs`, `git`, `papertrail`, `text_fallback`, `memories`, ALL on by default (impact's value is the bundled evidence). Omit to keep them; pass an explicit list to narrow, e.g. `["git"]` for git history only. `git` bundles both the recent commits touching the symbol's file and the files that historically co-changed with it (the windowed change-coupling section).
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
resolutionNo
full_memoriesNoReturn full memory bodies + every binding + call paths instead of the default compact, scannable per-memory headers (#37). To expand ONE memory by id (e.g. the `memory_id` from a `surface="summary"` compact attachment), call `memory_show`; full detail for a symbol/path is also reachable via `memory_for_symbol` / `memory_for_path` / `memory_for_call_path`.
allow_ambiguousNo

TDQS

A3.9/5.0
Behavior4/5

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

No annotations are provided, so the description must carry the burden. It discloses the return components (completeness/risk summary, distilled_records with a cap and truncation signal) and notes that include flags default to all. It does not mention side effects, costs, or resolution modes explicitly, but the read-only nature is inferable. Overall, it gives meaningful behavioral context beyond a bare enumeration.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose and a secondary note about distilled records. It is tightly written with no fluff, and each sentence earns its place by adding distinct, valuable information.

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

Completeness2/5

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

For a complex tool with 10 parameters, no output schema, and no annotations, the description is insufficiently detailed. It mentions distilled_records and completeness_and_caveats.truncated_sections but does not describe the overall return structure or how parameters affect results. The lack of explanation for id/ref/query/symbol/resolution leaves significant gaps for an agent to invoke it correctly.

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

Parameters2/5

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

Schema coverage is only 30%, with few parameters (include, worktree, full_memories) having descriptions. The tool description does not explain any of the 10 parameters (id, ref, query, symbol, limit, resolution, allow_ambiguous, etc.) and does not clarify how they interact. The description fails to compensate for the low schema coverage, leaving parameter meaning ambiguous.

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

Purpose5/5

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

The description clearly states it computes the 'blast radius' for a symbol or path, enumerating specific types of impact (callers/callees, tests, docs, git history, papertrail, memories) and includes a completeness/risk summary. It is distinct from sibling tools like find_callers or trace_callees by being a comprehensive pre-edit graph, and the imperative 'Run this before changing anything non-trivial' reinforces its purpose.

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

Usage Guidelines4/5

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

The description gives an explicit recommendation to run before non-trivial changes, and mentions distilled decision records, but does not explicitly contrast with alternatives like find_callers or git_history_for_symbol. It implies a holistic pre-edit check without stating exclusions or specific scenarios where a more targeted tool might be preferred.

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

important_symbolsA

Rank the most load-bearing symbols by weighted PageRank over the call/type/import edge graph — what the rest of the code most depends on. Run before editing to see the spine you shouldn't reinvent or break. By DEFAULT (no personalize) it auto-seeds from your current git diff, returning importance relative to your current changes; pass personalize (names, refs, or sym_<hex> handles you're working on) to seed it explicitly, or a single "global" to force whole-repo PageRank. The result is a labeled object: mode (which scale), seed_source (seed provenance), and symbols.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax load-bearing symbols to return.
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
personalizeNoSymbols to bias importance toward (the symbols you're editing/querying) — names, refs (`path::name`), or `sym_<hex>` handles; the random surfer teleports back to these, lifting the spine *they* depend on. A `sym_<hex>` handle resolves to its logical symbol's members; otherwise the entry is resolved by ref then name (ambiguous/missing entries are skipped, never fatal). LEAVE EMPTY to auto-seed from your current git diff (the default — "importance relative to your current changes"). Pass a single `"global"` to force whole-repo PageRank instead.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description correctly carries the full burden, and it delivers: it discloses the auto-seeding default from git diff, the teleport-bias semantics, silent skipping of ambiguous/missing entries ('never fatal'), the 'global' escape hatch, and even the exact return shape (mode, seed_source, symbols). It would only be perfect if it hinted at whether the results are deterministic or ordered beyond 'ranked', but for a read-only analysis tool this is exemplary 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?

The description is long but earns its length: purpose, use-case, default behavior, customization, and output format are each covered in turn. The heavy em-dash usage makes it slightly dense to read, and the 'Result is a labeled object' section could be tightened, but every sentence carries unique information with no 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 tool with 3 params, no output schema, and no annotations, the description covers all critical ground: it resolves the three-mode complexity, documents graceful degradation, and describes the top-level result structure. The only real gap is that with no output schema present, the shape of the `symbols` array elements is never described — for a ranking tool, knowing what fields each ranked symbol has would complete the contract.

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% with rich parameter docs already, which sets the baseline at 3, and the main description genuinely adds value on top by weaving the params into a coherent behavioral model (explaining what changing `personalize` actually does to the random-surfer teleportation and how the default differs from explicit input). Slightly redundant with the parameter descriptions themselves, but it earns the extra point by clarifying the interplay between modes.

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

Purpose5/5

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

The description uses a specific verb+resource+method: 'Rank the most load-bearing symbols by weighted PageRank over the call/type/import edge graph'. It goes beyond a plain definition by clarifying the outcome ('the spine you shouldn't reinvent or break') and disambiguating from sibling graph-traversal tools like find_callers or impact_surface through its emphasis on dependency importance rather than simple connectivity.

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

Usage Guidelines4/5

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

The imperative 'Run before editing' provides clear, actionable timing for when to use the tool, and the three-fold mode explanation (diff auto-seed, explicit personalize, 'global') gives concrete usage context. However, it does not explicitly name alternatives to use instead (e.g., when to reach for impact_surface or symbol_lookup over this), leaving a small gap in the when-not-to guidance.

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

index_statusB

Index freshness vs HEAD: git/indexed head, per-language file counts, parser failures, FTS sync state, and schema version.

ParametersJSON Schema
NameRequiredDescriptionDefault
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It mentions what status categories are reported and even notes the silently-ignored worktree edge case via the schema, but it does not explicitly state whether the operation is read-only, what conditions indicate parser or FTS failure, or how return values are structured. It discloses a non-obvious behavior, which raises it above a bare description.

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

Conciseness5/5

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

The description is compact, front-loaded with the core purpose, and uses a clean list to enumerate the reported status categories. There is no filler, redundant schema repetition, or wasted clauses.

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

Completeness3/5

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

For a status/read tool this is reasonably complete: it lists the main status dimensions and the only parameter is fully documented in the schema. However, since there is no output schema and no annotations, describing the return shape or how to interpret 'freshness' would materially improve the agent's ability to use the 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% for the single optional worktree parameter, including default behavior and the silent-ignore edge case. The tool description itself adds no param-specific semantics, so the schema's high coverage keeps this at the baseline without needing extra compensation.

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 clearly identifies the tool as an index-status readout, enumerating the exact facets it exposes (git/indexed head, file counts, parser failures, FTS sync, schema version). It is not a tautology and is easy to distinguish from sibling tools like heal_index, though it lacks an explicit verb such as 'show' or 'read'.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives such as heal_index, memory_validate, or papertrail_sync_status. The only usage hint is 'status' in the name, which weakly implies it is a read-only health check, but no explicit 'use when' or 'use instead' guidance exists.

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

llm_statusA

Embedding status (local or remote/Ollama-served): model, install state, and how many chunks are embedded / missing / skipped.

ParametersJSON Schema
NameRequiredDescriptionDefault
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It does not state whether the operation is read-only, mentions side effects, auth requirements, or return format beyond the listed fields. It is a status tool, but the lack of explicit safety or behavioral notes weakens transparency.

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

Conciseness5/5

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

The description is a single sentence that front-loads the key purpose and lists the specific outputs. It is concise with no redundant or vague wording, making it efficient and easy to parse.

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 simple status tool with one optional parameter and no output schema, the description adequately covers what the tool returns (model, install state, counts). It does not explain the effect of the worktree parameter, but the schema covers that, so completeness is reasonable.

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 worktree parameter is fully described in the schema. The description adds no extra semantic detail about the parameter beyond what the schema already provides, earning the baseline score.

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

Purpose5/5

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

The description clearly states the tool reports embedding status, including model, install state, and counts of embedded/missing/skipped chunks. It uses specific context (local vs remote/Ollama) that distinguishes it from sibling status tools like index_status or papertrail_sync_status.

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 description implies usage for checking embedding status but does not explicitly state when to use this tool versus alternatives like index_status or papertrail_sync_status. No exclusions or alternative references are provided.

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

memory_createA

Record a durable, source-anchored repo memory (Invariant / Decision / Risk / BugPattern / …) bound to a symbol, chunk, path, edge/call-path, commit, or tracker ref — so the rationale resurfaces for the next agent editing that code. Capture non-obvious invariants and decisions as you discover them.

ParametersJSON Schema
NameRequiredDescriptionDefault
bindNoOptional (#463): omit to create an UNANCHORED node (a `Concept` or standalone `Task` that lives only as a graph node). When present, names exactly one code/anchor binding.
bodyYesThe memory text (the *why* + *how to apply*), max 8000 characters.
kindYes
tagsNo
titleYesOne-line summary, max 160 characters.
sourceNo
payloadNoOptional structured payload (#465) for a polymorphic node — a `Task`/`Concept`'s kind-specific JSON object (e.g. a task's priority/estimate). Must be a JSON object.
confidenceYes
created_byNo

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions 'durable' and 'source-anchored' and says rationale 'resurfaces' later, but it does not state whether creation is idempotent, what response is returned, what side effects occur (e.g., graph changes), or any prerequisites such as index health. This is a significant gap for a create operation.

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?

Two sentences, zero waste. The first sentence front-loads the purpose and scope, and the second is a direct action call. Every phrase earns its place, and the length is appropriate for the complexity.

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

Completeness3/5

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

This is a complex tool with 9 top-level parameters, a nested bind object, and no output schema. The description explains the high-level purpose but omits the return behavior and workflow guidance (e.g., how the memory will be retrievable via memory_search or memory_for_*). The schema carries much of the parameter detail, but the missing usage and output context leaves gaps.

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

Parameters3/5

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

Schema description coverage is only 44%, so the description must compensate. It does add conceptual meaning by mapping kinds (Invariant, Decision, Risk) and binding targets (symbol, chunk, path, call-path, commit, tracker) to the schema. However, it does not clarify other parameters like tags, source, created_by, or payload beyond what the schema already 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?

The description uses a specific verb ('Record') with a clear resource ('durable, source-anchored repo memory') and enumerates distinct kinds and binding targets. This clearly differentiates it from siblings like memory_update, memory_search, and memory_for_symbol, which focus on other operations.

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 phrase 'Capture non-obvious invariants and decisions as you discover them' implies the trigger for using this tool (during exploration when you find non-obvious knowledge), but it does not explicitly state when NOT to use it or which sibling tools to prefer for editing/searching. No exclusions or alternatives are named.

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

memory_doctorA

List repo memories whose anchor is stale, gone, or pending, each with suggested re-anchor targets (qualified names) — the actionable companion to memory_validate. A pending anchor is alive on an in-flight worktree branch: informational only — do NOT rebind or mark it obsolete; it re-anchors when that branch lands. Read-only; reports the last-validated status, so run memory_validate first for a fresh check. Rebind stale/gone entries with memory_rebind.

ParametersJSON Schema
NameRequiredDescriptionDefault
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full transparency burden. It discloses read-only behavior, that status is from the last validation, the special semantics of pending anchors on in-flight branches, and the silent ignore behavior of the worktree parameter via schema.

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

Conciseness5/5

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

The description is dense but well-organized, with each clause adding necessary operational detail: what it lists, what pending means, the read-only caveat, the prerequisite validation step, and the rebind action. No filler or redundancy.

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

Completeness5/5

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

For a tool with one optional parameter and no output schema, the description covers purpose, usage, prerequisites, exclusions, and behavioral nuances. It is fully actionable without missing context.

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

Parameters3/5

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

Schema description coverage is 100% for the single worktree parameter, including default behavior and silent ignore semantics. The tool description adds no additional parameter detail, but the baseline of 3 is appropriate because the schema fully documents the 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?

The description clearly states the tool lists repo memories with stale, gone, or pending anchors and provides suggested re-anchor targets. It explicitly distinguishes itself as the actionable companion to memory_validate, making its purpose and scope unambiguous.

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

Usage Guidelines5/5

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

The description gives explicit usage direction: run memory_validate first for a fresh check, use memory_rebind for stale/gone entries, and do NOT rebind or mark pending anchors obsolete. This clearly differentiates when to use this tool versus siblings.

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

memory_edge_addA

Add a typed graph edge from a source node to another node or a GitHub issue. Relations: depends_on (task DAG), relates_to (mind-map link), supersedes, derived_from, tracks (issue <- task). Give exactly ONE target: a target_node_id (with an optional target_repo_id for a cross-repo edge) or a full github ref (owner + repo + number).

ParametersJSON Schema
NameRequiredDescriptionDefault
relationYes
github_repoNo
github_ownerNo
github_numberNo
source_node_idYes
target_node_idNo
target_repo_idNo

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description adds some behavioral context: it adds an edge with a specific relation and target. But it does not disclose side effects, uniqueness constraints, permissions, or error conditions.

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

Conciseness5/5

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

The description is two sentences, front-loading the core action and then listing relations and target options concisely without extraneous words.

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

Completeness3/5

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

For a 7-parameter tool with no output schema, the description covers the main inputs and target selection but lacks return value details, error handling, or edge cases. It is adequate but has gaps.

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

Parameters4/5

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

Schema description coverage is 0%, so the description compensates by explaining the relation enum and the target options (node vs. GitHub issue). It adds meaning beyond the schema's field types and requiredness.

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

Purpose5/5

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

The description clearly states the tool adds a typed graph edge from a source node to a target (another node or GitHub issue), and lists the possible relations. This distinguishes it from siblings like memory_edge_remove or memory_edges.

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

Usage Guidelines4/5

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

The description explicitly says 'Give exactly ONE target' and explains the two options (target_node_id or GitHub fields), providing clear context. However, it does not explicitly state when not to use this tool or mention alternatives.

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

memory_edge_removeB

Remove a graph edge by its stable edge_key.

ParametersJSON Schema
NameRequiredDescriptionDefault
edge_keyYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations provided, so description must carry the burden. It does not disclose side effects, permanence, error states, or required permissions beyond the basic 'remove' action.

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?

Single sentence with no wasted words, directly front-loading the action and key parameter.

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

Completeness3/5

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

For a simple tool with one parameter and no output schema, the description is adequate but lacks context about graph behavior, error handling, or relationship to other memory tools.

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 0%, but the description adds that edge_key is 'stable', implying it is a persistent identifier. This adds some meaning beyond the schema, but no further detail on format or constraints.

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

Purpose5/5

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

The description clearly states the action ('Remove a graph edge') and the identifier used ('stable edge_key'), distinguishing it from siblings like memory_edge_add and memory_edges.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, no prerequisites, and no mention of when not to use it. The description is purely operational.

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

memory_edgesA

List a node's typed edges: direction=from returns its outgoing edges (deps / links / tracks); direction=into is the reverse traversal (e.g. tasks that track an issue, or nodes that depend on this one).

ParametersJSON Schema
NameRequiredDescriptionDefault
node_idNo
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
directionYes
github_repoNo
github_ownerNo
github_numberNo

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It explains the two traversal modes and provides examples, but does not disclose whether the operation is read-only, error behavior for missing node_id, or any side effects. It's adequate for a simple listing operation but lacks explicit safety or precondition details.

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?

Two sentences that are front-loaded with the core intent and immediately give directional semantics. No wasted words; every phrase adds value.

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

Completeness3/5

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

For a tool with 6 parameters and no output schema, the description is minimal. It explains the core directional logic but omits details like node_id requirements (though the schema's top-level description covers that), how to use github_repo/owner/number, and what happens if node_id is null. It's adequate for a simple read operation but leaves ambiguity for edge cases.

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 only 17%, so the tool description should compensate for undocumented parameters. It adds meaning for 'direction' with detailed explanations, but leaves node_id, worktree, and github_* parameters unexplained in the description itself (though worktree has a schema description). This is partial compensation, not sufficient for a 6-parameter tool.

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

Purpose5/5

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

The description clearly states it lists a node's typed edges, with explicit differentiation between outgoing (from) and incoming/reverse (into) directions. This is specific and distinct from sibling tools like memory_for_symbol or memory_edge_add, so an agent can immediately identify its purpose.

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 concrete examples for each direction ('deps / links / tracks' for from, 'tasks that track an issue' for into), which helps the agent know when to use it. However, it doesn't explicitly state when NOT to use it or contrast with alternatives like memory_edge_add/remove, so it's clear but not exhaustive.

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

memory_for_call_pathC

Return repo memories bound to a specific call-path edge sequence.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
edge_sequence_hashYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits, but it only states a simple return operation. It does not mention side effects, auth requirements, rate limits, or the silent worktree behavior (which is only in the schema). This insufficiently informs the agent about the tool's safety and constraints.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no redundancy. It efficiently states the core purpose without wasting words, though it omits important details that are penalized in other dimensions.

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

Completeness1/5

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

Given the tool has three parameters, no annotations, no output schema, and only 33% schema description coverage, the one-sentence description is grossly incomplete. It does not clarify the meaning of edge_sequence_hash, the behavior of limit, or the return format, making it insufficient for correct invocation.

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

Parameters1/5

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

Schema description coverage is only 33% (worktree), and the tool description adds no parameter explanations. edge_sequence_hash and limit remain undefined, and the description fails to compensate for the low coverage, leaving the agent without crucial parameter context.

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

Purpose5/5

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

The description clearly states the tool returns repo memories bound to a specific call-path edge sequence, using a specific verb and resource. It distinguishes itself from siblings like memory_for_symbol and memory_for_path by focusing on call-path edge sequences.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives. The description does not mention any conditions, exclusions, or alternative tools, leaving the agent to infer usage from the name alone.

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

memory_for_pathB

Return repo memories bound to a path.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
limitNo
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries full responsibility. It only states the function without disclosing any behavioral details such as whether it's read-only, permission requirements, rate limits, or side effects. Even basic characteristics like read-only nature are not mentioned, leaving a significant gap.

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 a single, direct sentence with no fluff. It is efficiently worded and front-loaded with the core action. However, given the missing information, it could have included more in the same concise style, so it doesn't fully earn a 5.

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

Completeness2/5

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

With 3 parameters, low schema coverage, no output schema, and no annotations, the description is insufficient. It does not specify the return format, how limit affects results, or any ordering/pagination behavior. The worktree parameter has a schema description, but the tool description omits mentioning it entirely, making the overall context incomplete.

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

Parameters2/5

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

Schema description coverage is only 33% (only worktree has a description). The tool description adds no information about the path or limit parameters, failing to compensate for the low coverage. The meaning of 'limit' and required 'path' are not clarified beyond their names.

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

Purpose5/5

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

The description clearly states the tool returns repo memories associated with a path. It uses specific verb 'Return' and resource 'repo memories bound to a path', effectively distinguishing it from siblings like memory_for_symbol or memory_for_call_path.

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 purpose implies usage for path-based memory lookup, but it does not explicitly state when to use this tool versus alternatives like memory_for_symbol or memory_search. No exclusions or alternative guidance are provided, though the context of sibling tools makes the intended usage somewhat clear.

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

memory_for_symbolC

Return repo memories bound to a symbol (or its logical-symbol group).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
refNo
limitNo
symbolNo
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
allow_ambiguousNo

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It only states the return operation, implying a read-only action, but provides no details on side effects, error handling, or limitations. There is no mention of how the logical-symbol group behaves or any special cases, falling short of even minimal disclosure.

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

Conciseness5/5

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

The description is a single, succinct sentence that states the core purpose without any fluff. It is perfectly concise and front-loaded, earning a full score despite its brevity.

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

Completeness2/5

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

Given six parameters, no annotations, and no output schema, the one-line description is highly insufficient. It does not explain the logical-symbol group concept, return format, parameter interactions, or any edge cases. This leaves the agent without essential context for correct usage.

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

Parameters2/5

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

Schema description coverage is only 17%, so the description must compensate for undocumented parameters. It mentions 'symbol' explicitly but does not explain id, ref, limit, or allow_ambiguous. The worktree parameter already has a schema description, but the others remain unexplained, leaving a substantial gap.

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 clearly states the tool returns repo memories bound to a symbol, with a mention of a logical-symbol group. It uses specific language ('Return memories bound to a symbol') and distinguishes from siblings like memory_for_path (path-based) and memory_search (search-based), though it doesn't explicitly name alternatives. The resource (symbol) and verb (return) are clear, earning a 4.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like memory_for_call_path or memory_search. The description only states the function, offering no context on selection criteria, prerequisites, or exclusions. This is a clear gap.

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

memory_mark_obsoleteA

Mark a repo memory obsolete — kept for audit, hidden from active recall.

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_idYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It explains the post-condition: the memory is kept for audit and hidden from active recall. However, it does not mention reversibility or side effects, which would have made it more complete.

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

Conciseness5/5

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

The description is a single sentence that is front-loaded and contains no filler. Every word earns its place, efficiently communicating the action and consequence.

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

Completeness5/5

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

For a tool with one simple parameter and no output schema, this description is complete. It covers what the tool does and the behavioral outcome. No additional context is necessary for an agent to invoke it correctly.

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

Parameters3/5

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

Schema coverage is 0% and the description does not explicitly explain the memory_id parameter. However, the single parameter is self-explanatory given the tool name and description. The description adds no meaning beyond the schema, but the parameter is trivially clear, so a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Mark a repo memory obsolete') and the resource (repo memory). It also distinguishes this from sibling tools by specifying the outcome: 'kept for audit, hidden from active recall.' This is specific and unambiguous.

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

Usage Guidelines4/5

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

The description implies when to use this tool (when a memory should no longer be actively used but must be retained for audit). It doesn't explicitly name alternatives or exclusions, but the context is clear enough to differentiate from memory_update or memory_rebind.

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

memory_rebindA

Re-anchor an existing repo memory to a different symbol, chunk, path, or other source location — use this after a symbol moves or is renamed rather than obsoleting and recreating the memory. Replaces the binding and refreshes the source_text_hash so the memory stays current.

ParametersJSON Schema
NameRequiredDescriptionDefault
bindYes
memory_idYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that it replaces the binding and refreshes the source_text_hash, but does not mention side effects, reversibility, or permissions. This is adequate but not fully transparent.

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

Conciseness5/5

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

The description consists of two concise sentences: the first states purpose and usage context, the second explains the effect. No redundant words or information.

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

Completeness3/5

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

The description covers the core purpose and when to use, but given the tool's complexity (many optional binding parameters) and lack of output schema, it does not explain how to specify the new binding or what happens if the memory doesn't exist. This leaves some gaps for an AI agent.

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

Parameters2/5

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

Schema description coverage is 0% based on context signals, and the description only vaguely references 'symbol, chunk, path, or other source location' without mapping these to specific parameters like chunk_id, path, etc. The description does little to clarify the meaning of the many optional parameters, leaving the agent to infer from names alone.

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

Purpose5/5

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

The description uses specific verb 're-anchor' and resource 'existing repo memory', clearly stating the tool updates a memory's binding after symbol moves/renames, distinguishing from obsoleting and recreating.

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

Usage Guidelines4/5

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

The description explicitly says 'use this after a symbol moves or is renamed rather than obsoleting and recreating the memory', providing clear when-to-use guidance. It does not explicitly name alternative sibling tools like memory_create or memory_update, but the context is clear enough.

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

memory_showA

Expand ONE repo memory to its FULL body by memory_id — the expand path for a compact summary. When [memory] surface = "summary" renders drive-by attachments (e.g. impact_surface) as the dream-compacted summary, call this with the attachment's memory_id to get the complete original. Surface-independent: always the full body.

ParametersJSON Schema
NameRequiredDescriptionDefault
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
memory_idYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose key behavior: it always returns the full body and works independently of the rendering surface. However, it does not cover failure modes (e.g., invalid/obsolete memory_id), error behavior, or how the full body is returned — leaving noticeable gaps for a read/expand operation.

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

Conciseness5/5

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

The description is three sentences with no filler: the first sentence states the core behavior, the second gives the concrete invocation scenario, and the third reinforces surface-independence. Every sentence adds distinct value and the key phrase 'the expand path for a compact summary' is front-loaded.

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 fairly simple two-parameter tool, the description covers what the tool is, when to call it, and what it returns ('the complete original', 'full body'). The only notable gap is that it does not describe the shape of the returned full body or error conditions, and since there is no output schema, a brief return-shape note would improve completeness.

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 only 50% and memory_id has no schema-level description; the tool description compensates by explaining that memory_id should come from the attachment's summary rendering. The worktree parameter is fully documented in the schema already, so the description does not need to repeat it, and the description's context about the 'expand path' gives memory_id meaningful semantics it would otherwise lack.

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

Purpose5/5

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

The description uses a specific verb+resource combination: 'Expand ONE repo memory to its FULL body by memory_id' — this clearly identifies both the action and the target. It also distinguishes itself from sibling memory tools by labeling itself as 'the expand path for a compact summary'.

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

Usage Guidelines4/5

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

The description gives an explicit when-to-use scenario: when a `[memory] surface = "summary"` renders drive-by attachments, call this tool with the attachment's `memory_id`. It also clarifies the tool is 'surface-independent' and 'always the full body', but does not explicitly state when-not-to-use or name alternative tools for other scenarios.

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

memory_updateC

Update a repo memory's text, status, confidence, kind, or tags by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoThe memory text (the *why* + *how to apply*), max 8000 characters.
kindNo
tagsNo
titleNoOne-line summary, max 160 characters.
statusNo
payloadNoSet the node's structured payload (#465). Omit to leave the stored payload unchanged; a JSON object replaces it.
memory_idYes
confidenceNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided; description only says 'update', implying mutation. It does not disclose whether it replaces or merges fields, authorization requirements, whether it returns the updated object, or any side effects.

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

Conciseness5/5

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

Single sentence, no fluff. All words contribute to the purpose.

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

Completeness2/5

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

No output schema, 8 parameters with limited schema coverage. Description does not explain return value, error handling, or behavior when updating multiple fields. Incomplete for a mutation 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 38% (only body and title have descriptions). The description lists the fields but adds no extra meaning beyond the schema. It doesn't explain payload or memory_id semantics, but listing fields provides some guidance.

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 states 'Update a repo memory's text, status, confidence, kind, or tags by id.' It specifies the verb (update), resource (repo memory), and lists modifiable fields. However, it does not differentiate from siblings like memory_rebind or memory_create, which may also modify memories.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as memory_rebind or memory_show. There is no mention of prerequisites or when not to use it.

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

memory_validateA

Re-anchor every repo memory against current source and mark each current / relocated / stale / gone / pending. Runs automatically after indexing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It mentions re-anchoring and marking, but does not disclose side effects, destructive nature, permissions, or idempotency. Minimal behavioral context.

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

Conciseness5/5

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

Two concise sentences, each adding value: first explains action and categories, second gives timing. No wasted words.

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

Completeness3/5

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

Lacks details on output schema and meaningful descriptions of the status categories. With no annotations, more context on side effects and return values would improve completeness.

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?

Input schema has zero parameters, so schema coverage is 100% trivially. Description adds no parameter details, but baseline for no parameters is 4.

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

Purpose5/5

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

Description clearly states the verb 're-anchor' and 'mark', the resource 'repo memory', and the outcome (current/relocated/stale/gone/pending). It distinguishes from sibling tools like memory_create or memory_update.

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?

Description implies it runs automatically after indexing, but does not explicitly state when a user should invoke it manually or provide alternatives. No guidance on when-not-to-use.

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

papertrail_for_chunkB

The 'why' behind a chunk: its current text plus the cached tracker items (issues / change requests) and review comments that reference it.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
chunk_idYes
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses that tracker items are cached (implying potential staleness), which is a useful behavioral trait beyond the schema. However, it does not explicitly state read-only behavior or describe output format/pagination.

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

Conciseness5/5

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

The description is a single, tightly worded sentence that front-loads the core concept ('why behind a chunk') and then specifies the exact contents returned. No filler or redundancy.

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

Completeness3/5

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

The description adequately conveys the tool's main output but omits usage context, alternative tool differentiation, and parameter nuances (e.g., worktree behavior). Without an output schema, more detail on return structure would be valuable.

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

Parameters2/5

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

Schema description coverage is only 33% (only worktree has an inline description). The tool description adds no details for chunk_id or limit, so the agent must rely on parameter names and defaults. This is insufficient for a 3-parameter tool with low schema coverage.

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

Purpose5/5

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

The description clearly states the tool returns a chunk's current text plus cached tracker items and review comments referencing it. This specific scope distinguishes it from sibling papertrail tools like papertrail_for_symbol or papertrail_for_commit.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as papertrail_refs_for_path or papertrail_for_symbol. The description only defines what the tool does, not the appropriate usage context or exclusions.

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

papertrail_for_commitB

Cached tracker items (issues / change requests / reviews) related to a historical commit.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
includeNoWhat to include: `fallback` (off by default).
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
commit_hashYes

TDQS

B3/5.0
Behavior3/5

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

The terms 'Cached' and 'historical' hint that this is a read-only, potentially stale lookup, which is useful given there are no annotations. However, the description does not disclose synchronization requirements, failure behavior, or output shape, so transparency is only partial.

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?

One terse sentence with no filler; it front-loads the core meaning ('Cached tracker items') and usefully enumerates the item types. Every word contributes to the tool's purpose.

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

Completeness2/5

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

With no output schema and no annotations, the description should explain more about returned items, limit semantics, and how this tool differs from the many papertrail_* siblings. The current description provides only a minimal purpose statement and leaves important context unresolved.

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

Parameters2/5

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

Schema description coverage is 50%: include and worktree are described, while limit and commit_hash are not. The description adds only the 'historical commit' nuance to commit_hash and says nothing about limit, so it does not compensate enough for the undocumented parameters.

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 clearly identifies what the tool provides: cached tracker items (issues/change requests/reviews) associated with a given commit. It distinguishes from sibling papertrail_for_chunk/symbol/path by the commit scope, though it lacks an explicit retrieval verb like 'list' or 'fetch'.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus papertrail_for_symbol, papertrail_for_chunk, papertrail_issue_search, or other related siblings. The phrase 'historical commit' implies a context, but no explicit when-to-use or when-not-to-use information is provided.

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

papertrail_for_symbolB

Resolve a symbol, then return its current context plus the cached tracker rationale (issues / change requests / reviews) referencing it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
refNo
langNo
limitNo
symbolNo
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
allow_ambiguousNo

TDQS

B3.1/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the burden. It mentions 'current context' and 'cached tracker rationale' but does not detail what 'current context' includes or what 'cached' implies regarding fresh data.

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 concise at one sentence, but the structure is a bit dense. It could be improved by breaking into two sentences for clarity, but it's still efficient.

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

Completeness2/5

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

Given the 7 parameters and no output schema, this description is incomplete. It doesn't explain return values or how parameters interact, leaving significant gaps for the agent to interpret.

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

Parameters2/5

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

With 7 parameters and only 14% schema description coverage, the description does not compensate. It doesn't explain key parameters like 'id', 'ref', 'lang', 'limit', or 'allow_ambiguous', leaving the agent without crucial usage details.

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 clearly states the primary action: 'Resolve a symbol' suggests ambiguity, but the description could be more specific about the external process that is not present in the text. The description is fairly adequate, but can be improved.

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 description mentions 'resolve a symbol' but does not specify when to use this tool versus alternatives in the sibling set. It lacks explicit guidance on when to prefer this tool over similar ones.

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

papertrail_refs_for_pathC

List cached tracker items discovered to reference a current path.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
limitNo
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.

TDQS

C2.9/5.0
Behavior1/5

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

No annotations are provided, so the description must carry the burden. It implies reading cached data but does not disclose read-only nature, side effects, error conditions, or limitations. It is silent on behavior beyond the basic listing.

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

Conciseness5/5

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

The description is a single, succinct sentence that immediately states the primary function. No filler or redundancy.

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

Completeness2/5

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

The description lacks details on output format, what 'cached tracker items' are, how path and worktree interact, and any constraints. Given the schema has three parameters and no output schema, the description is insufficient for full understanding.

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

Parameters2/5

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

The description does not clarify the meaning of 'path' or 'limit' beyond the schema's type. The 'worktree' parameter has a schema description, but the tool description adds no extra context. 'Current path' is ambiguous.

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

Purpose5/5

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

The description clearly states the action (list), the object (cached tracker items), and the scope (referencing a current path). It is distinct from sibling tools like papertrail_for_chunk or memory_for_path.

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

Usage Guidelines2/5

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

No guidance is provided on when to prefer this tool over the many similar sibling tools. It does not explain use cases, prerequisites, or alternatives.

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

papertrail_sync_statusA

Papertrail cache status: counts of issues, change requests, comments, and refs, plus last sync time.

ParametersJSON Schema
NameRequiredDescriptionDefault
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the burden of behavioral disclosure. It does not state whether the tool is read-only, whether it triggers a sync, or any side effects. The term 'status' implies a read-only query, but this is not explicit. It also does not describe what happens if the cache is stale or whether it accesses the live system. This minimal disclosure falls short, especially for a tool whose name suggests a possible side-effect (sync).

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

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the purpose ('Papertrail cache status') and then enumerates the returned items (counts, last sync time). There is no fluff or redundancy, making it highly concise and easy to parse.

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

Completeness3/5

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

For a simple status tool with one optional parameter and no output schema, the description provides the essential return contents. However, it lacks context about the scope (e.g., whether counts are for the entire repo or the specified worktree) and does not explain what 'Papertrail cache' refers to or when data might be stale. While not severely incomplete, it leaves some gaps for an agent to infer.

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

Parameters3/5

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

The input schema has 100% coverage for the single optional 'worktree' parameter, which is fully described in the schema. The tool description does not mention this parameter at all, adding no semantic value beyond the schema. Since schema coverage is high, the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: reporting Papertrail cache status with counts of issues, change requests, comments, refs, and last sync time. This is a specific verb-resource combination ('status' of 'Papertrail cache') that distinguishes it from sibling tools like papertrail_for_chunk or papertrail_issue_search, which access specific data rather than overall cache health.

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 description implies usage for checking cache sync status but does not explicitly state when to use this tool over siblings. It lacks alternatives or exclusions (e.g., no mention of using papertrail_for_chunk for detailed data). The context is clear enough but not explicitly framed as 'use this when you need to verify sync state.'

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

read_chunkA

Read the current source text for one chunk id, validated against HEAD (relocates or flags stale/gone), with compact call-graph context and bound repo memories. Use to read exact text after a search returns a chunk_id. When the chunk's symbol has distilled decision records they attach as distilled_records (labeled unreviewed, capped at 2).

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoWhat to include: `memories` (on by default). Pass `include: []` to suppress.
chunk_idYes
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
graph_limitNo
include_graphNocompact

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosing behavior. It reveals validation logic (relocates/stale/gone), the inclusion of call-graph context and memories, and the attachment of distilled decision records (labeled unreviewed, capped at 2). It does not mention side effects (though read-only is implied) or error handling specifics, but overall it provides substantial behavioral context 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?

The description is three sentences, front-loaded with the primary purpose and usage. Each sentence adds distinct value: purpose, usage, and a specific behavior (distilled_records). No redundancy or fluff, though it could be slightly more compact.

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

Completeness3/5

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

For a tool with 5 parameters, no annotations, and no output schema, the description covers core behavior but gaps remain: it does not explain worktree semantics, graph_limit constraints, or how to suppress memories (though schema covers include). The description is adequate for basic usage but not fully comprehensive given the complexity.

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

Parameters3/5

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

The description mentions the chunk_id and 'bound repo memories' (tied to the include parameter) and the compact call-graph context (related to include_graph), but does not explain parameters like worktree or graph_limit explicitly. Schema coverage is only 40%, so the description partially compensates but leaves several parameters under-explained. The distilled_records mention is output, not 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?

The description opens with a specific verb and resource: 'Read the current source text for one chunk id', immediately clarifying the tool's core function. It also includes validation specifics ('validated against HEAD (relocates or flags stale/gone)') and context features (call-graph, memories) that distinguish it from sibling tools like git_blame_chunk or papertrail_for_chunk.

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

Usage Guidelines4/5

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

Provides an explicit usage scenario: 'Use to read exact text after a search returns a chunk_id.' This clearly indicates when to invoke the tool, though it does not explicitly mention when not to use it or point to alternative tools. The context is clear enough for straightforward selection.

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

repo_briefA

Orientation for an unfamiliar repo: ranked files by mode — spine (central coupling), churn, god_modules, or refactor_candidates — with size/coupling/churn/memory signals and suggested next tools. Start here when you don't know the codebase.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNospine
limitNo
includeNoWhat to include: `memories` (on by default), `generated` (off). Omit to keep defaults.
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden, and it does so reasonably well: it says the tool ranks files, supports four modes, reports several signals, and suggests next steps. It does not explicitly state that it is read-only or discuss stale-index/performance caveats, but the orientation framing makes the non-mutating nature clear.

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?

Two compact, front-loaded sentences say what the tool does, how it ranks files, what signals are included, and when to invoke it. Every clause carries useful information; there is no fluff.

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

Completeness4/5

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

Given that the output schema is absent and there are no annotations, the description is fairly complete: it communicates the purpose, modes, result ingredients, and suggested next tools. It could be slightly more specific about how the limit, include flags, and worktree interact with the summary, but the schema already documents those.

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

Parameters4/5

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

The description adds useful meaning to the main 'mode' parameter by explaining that 'spine' means central coupling and that the other modes are churn, god_modules, and refactor_candidates. The include and worktree parameters are already well described in the schema, so the description's additional mode semantics meaningfully improve parameter understanding.

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

Purpose5/5

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

The description clearly says this is an orientation tool for an unfamiliar repo, what it does (returns ranked files by mode), and what the output contains (size/coupling/churn/memory signals and suggested next tools). 'Start here when you don't know the codebase' helps separate this from more targeted 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 Guidelines4/5

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

It explicitly tells the agent when to use it: 'Start here when you don't know the codebase.' It doesn't name specific alternative tools and say when not to use it, but the starting-point framing provides enough context for this orientation tool.

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

repo_clustersC

Map the repo into ownership clusters from path proximity, graph edges, and git co-touch — a cheap overview of subsystems and their representative files.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
includeNoWhat to include: `memories` (on by default), `generated` (off). Omit to keep defaults.
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
min_cluster_sizeNo

TDQS

C2.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It discloses the clustering methodology and implies a read-only, low-cost operation via 'cheap', but it does not disclose default behaviors (limit=10, min_cluster_size=2), how the memories/generated include flags alter results, or any 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?

A single, front-loaded sentence that stays on-topic. Every phrase contributes (methodology, cost profile, output shape), with no wasted words. It is appropriately compact for a mapper-style tool, though it could arguably have folded in a usage pointer.

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

Completeness2/5

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

No output schema and no annotations exist, making the description the agent's sole source of behavioral truth. Given the 4 parameters and no return-shape information, the description is incomplete — it omits result format, default limits, and the important memories-on-by-default include behavior.

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

Parameters2/5

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

The description adds no parameter-level meaning at all — it never mentions limit, min_cluster_size, include, or worktree. With schema description coverage at only 50%, the description fails to compensate for the two parameters (limit, min_cluster_size) left undocumented in the schema.

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 uses a specific verb ('Map') with a clear resource (the repo) and names both the methodology (path proximity, graph edges, git co-touch) and the expected output (subsystems and their representative files). It clearly differentiates from the search/view/memory siblings, but it does not distinguish itself from the closely-related repo_brief tool, which the schema explicitly references.

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

Usage Guidelines2/5

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

No explicit when-to-use or when-not-to-use guidance is provided. The phrase 'a cheap overview' weakly implies a fast-orientation use case, but no alternatives are named and no exclusions are given — particularly problematic given the near-identical repo_brief sibling exists on the same enum.

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

symbol_lookupA

Resolve a symbol name (or ref/id) to its definition(s) in Rust, TypeScript, Kotlin, C, C++, Python, or Swift — exact or fuzzy. Returns candidates with signatures, locations, logical-symbol grouping (cfg variants), and any bound repo memories. Use to disambiguate before a graph or read call. Generated bindings (codegen, ubrn FFI output) are excluded by default; pass include: ["generated"] to see them. A candidate whose symbol has distilled decision records carries them as distilled_records (labeled unreviewed, capped at 2; empty for almost every symbol).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
refNo
langNo
limitNo
symbolNo
includeNoWhat to include: `memories` (on by default) and/or `generated` (off by default — opts generated bindings back into the results). Pass `include: []` to suppress memories.
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
allow_ambiguousNo

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and delivers: it discloses the default exclusion of generated bindings, the effect of include, and the distilled_records field's labeling, cap of 2, and typical emptiness. This goes well beyond a terse summary, adding meaningful context about what the agent will observe.

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

Conciseness4/5

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

The description is front-loaded with purpose and each sentence adds a distinct piece of information: purpose, return contents, usage timing, include behavior, and distilled_records caveat. The final clause about distilled_records is slightly verbose for an edge case, but the overall structure is efficient.

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 8-parameter tool with no output schema, the description covers purpose, return contents, usage context, and one include behavior, and it differentiates from siblings. It lacks full return shape or error/edge-case details, but these may be better left to schema or additional docs.

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

Parameters3/5

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

The schema already documents include and worktree, and the prose adds the critical include syntax and rationale. However, with only 25% schema coverage, the description leaves most parameters (id, ref, lang, limit, symbol, allow_ambiguous) to be inferred, missing an opportunity to clarify their interactions and defaults.

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: 'Resolve a symbol name (or ref/id) to its definition(s)' across multiple languages, with exact or fuzzy matching. It enumerates return contents (signatures, locations, cfg grouping, bound memories) and explicitly frames its role to disambiguate before graph/read calls, distinguishing it from sibling tools like semantic_search or find_callers even without naming them.

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 concrete when-to-use guidance: 'Use to disambiguate before a graph or read call' and explains the default exclusion of generated bindings with the exact include flag syntax to override. However, it stops short of naming alternative tools or stating when NOT to use it, so it misses the full 'when-not/alternatives' bar.

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

trace_calleesA

Find what a symbol calls (forward call graph). Same evidence shape as find_callers; unresolved std/common-method noise is filtered out by default (add common_methods / unresolved to the include array to keep it).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
refNo
limitNo
symbolNo
includeNoWhat to include: `memories` (on by default); `references`, `unresolved`, `macros`, `common_methods`, `coverage` (all off by default). Omit to keep defaults; an explicit list is the exact on-set (so listing `macros` alone also drops the default `memories`).
worktreeNoAbsolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.
edge_kindsNo
resolutionNo
allow_ambiguousNo

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description must disclose behavior itself. It does so by explaining the default filtering of 'unresolved std/common-method noise' and how to opt back in via the include array. This gives actionable behavioral context beyond a simple read query. It does not mention side effects or authorization, but the tool appears to be a read-only graph query, so this level is appropriate.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose ('Find what a symbol calls (forward call graph)') and immediately follows with the most important behavioral nuance (noise filtering) plus a pointer to a sibling tool's semantics. No wasted words; each sentence carries meaningful information.

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

Completeness2/5

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

Given the tool has 9 parameters, no output schema, and no annotations, the description is sparse. It explains the overall purpose and one filtering behavior, but omits details about return shape (beyond 'same evidence shape as find_callers', which is not elaborated), default limits, or the meaning of edge_kinds/resolution. A user would need to consult the schema or other tools to fully understand usage. This is insufficient for a tool of this complexity.

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

Parameters2/5

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

Schema description coverage is only 22% (only include and worktree have descriptions in properties). The description adds detail about the include parameter's behavior (default filtering and how to override), which is valuable. However, it does not explain the remaining 7 parameters (id, ref, limit, symbol, edge_kinds, resolution, allow_ambiguous), leaving them underdocumented. The description fails to compensate for the low schema coverage, so the score is low.

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

Purpose5/5

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

The description clearly states 'Find what a symbol calls (forward call graph)', which is a specific verb+resource combination, and explicitly differentiates from the sibling find_callers by specifying direction ('forward') and noting 'Same evidence shape as find_callers'. This leaves no ambiguity about the tool's core function.

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

Usage Guidelines4/5

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

The description implies when to use it (for forward call graph exploration) and contrasts with find_callers via the phrase 'Same evidence shape as find_callers', hinting at a sibling relationship. It also explains a filtering behavior that affects usage (default noise filtering, adjustable via include). However, it does not explicitly state when not to use it or recommend an alternative for other cases, so slightly less than excellent.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 36 tool updatesv0.23.0
    • Changedcheck_library_usage3 fields changed
      • removedInput schema / properties / worktree / default
        Removed value: -null
      • changedInput schema / properties / worktree / description
        Previous value: -"Absolute path to a linked git worktree you're working in; serves that worktree's branch\noverlay over the indexed checkout. Omit for the indexed checkout."New value: +"Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error."
      • changedInput schema / properties / worktree / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
    • Changedclones_for_symbol1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedcommit_search3 fields changed
      • removedInput schema / properties / worktree / default
        Removed value: -null
      • changedInput schema / properties / worktree / description
        Previous value: -"Absolute path to a linked git worktree you're working in. When set, results are served from\nthat worktree's branch overlay (its committed + uncommitted changes) on top of the indexed\ncheckout; omit to query the indexed checkout. An unrelated/invalid path falls back to it."New value: +"Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error."
      • changedInput schema / properties / worktree / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
    • Changedcommits_touching_query3 fields changed
      • removedInput schema / properties / worktree / default
        Removed value: -null
      • changedInput schema / properties / worktree / description
        Previous value: -"Absolute path to a linked git worktree you're working in. When set, results are served from\nthat worktree's branch overlay (its committed + uncommitted changes) on top of the indexed\ncheckout; omit to query the indexed checkout. An unrelated/invalid path falls back to it."New value: +"Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error."
      • changedInput schema / properties / worktree / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
    • Changedcompare_graph_to_scip1 field changed
      • addedInput schema / properties
        Added value: +{
        +  "worktree": {
        +    "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +    "type": "string"
        +  }
        +}
    • Changeddocs_for_symbol3 fields changed
      • removedInput schema / properties / worktree / default
        Removed value: -null
      • changedInput schema / properties / worktree / description
        Previous value: -"Absolute path to a linked git worktree you're working in; serves that worktree's branch\noverlay over the indexed checkout. Omit (or pass an unrelated path) for the indexed\ncheckout."New value: +"Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error."
      • changedInput schema / properties / worktree / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
    • Changedffi_surface1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedfind_callers3 fields changed
      • removedInput schema / properties / worktree / default
        Removed value: -null
      • changedInput schema / properties / worktree / description
        Previous value: -"Absolute path to a linked git worktree you're working in; serves that worktree's branch\noverlay over the indexed checkout. Omit (or pass an unrelated path) for the indexed\ncheckout."New value: +"Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error."
      • changedInput schema / properties / worktree / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
    • Changedfind_clones1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedgit_blame_chunk1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedgit_history_for_path1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedgit_history_for_symbol1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedimpact_surface3 fields changed
      • removedInput schema / properties / worktree / default
        Removed value: -null
      • changedInput schema / properties / worktree / description
        Previous value: -"Absolute path to a linked git worktree you're working in; serves that worktree's branch\noverlay over the indexed checkout. Omit (or pass an unrelated path) for the indexed\ncheckout."New value: +"Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error."
      • changedInput schema / properties / worktree / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
    • Changedimportant_symbols1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedindex_status1 field changed
      • addedInput schema / properties
        Added value: +{
        +  "worktree": {
        +    "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +    "type": "string"
        +  }
        +}
    • Changedllm_status1 field changed
      • addedInput schema / properties
        Added value: +{
        +  "worktree": {
        +    "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +    "type": "string"
        +  }
        +}
    • Changedmemory_doctor1 field changed
      • addedInput schema / properties
        Added value: +{
        +  "worktree": {
        +    "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +    "type": "string"
        +  }
        +}
    • Changedmemory_edges1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedmemory_for_call_path1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedmemory_for_path1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedmemory_for_symbol1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedmemory_search1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedmemory_show1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedpapertrail_for_chunk1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedpapertrail_for_commit1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedpapertrail_for_symbol1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedpapertrail_issue_search3 fields changed
      • removedInput schema / properties / worktree / default
        Removed value: -null
      • changedInput schema / properties / worktree / description
        Previous value: -"Absolute path to a linked git worktree you're working in. When set, results are served from\nthat worktree's branch overlay (its committed + uncommitted changes) on top of the indexed\ncheckout; omit to query the indexed checkout. An unrelated/invalid path falls back to it."New value: +"Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error."
      • changedInput schema / properties / worktree / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
    • Changedpapertrail_refs_for_path1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedpapertrail_sync_status1 field changed
      • addedInput schema / properties
        Added value: +{
        +  "worktree": {
        +    "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +    "type": "string"
        +  }
        +}
    • Changedrationale_search3 fields changed
      • removedInput schema / properties / worktree / default
        Removed value: -null
      • changedInput schema / properties / worktree / description
        Previous value: -"Absolute path to a linked git worktree you're working in. When set, results are served from\nthat worktree's branch overlay (its committed + uncommitted changes) on top of the indexed\ncheckout; omit to query the indexed checkout. An unrelated/invalid path falls back to it."New value: +"Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error."
      • changedInput schema / properties / worktree / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
    • Changedread_chunk3 fields changed
      • removedInput schema / properties / worktree / default
        Removed value: -null
      • changedInput schema / properties / worktree / description
        Previous value: -"Absolute path to a linked git worktree you're working in; serves that worktree's branch\noverlay over the indexed checkout. Omit (or pass an unrelated path) for the indexed\ncheckout."New value: +"Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error."
      • changedInput schema / properties / worktree / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
    • Changedrepo_brief1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedrepo_clusters1 field changed
      • addedInput schema / properties / worktree
        Added value: +{
        +  "description": "Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error.",
        +  "type": "string"
        +}
    • Changedsemantic_search3 fields changed
      • removedInput schema / properties / worktree / default
        Removed value: -null
      • changedInput schema / properties / worktree / description
        Previous value: -"Absolute path to a linked git worktree you're working in. When set, results are served from\nthat worktree's branch overlay (its committed + uncommitted changes) on top of the indexed\ncheckout; omit to query the indexed checkout. An unrelated/invalid path falls back to it."New value: +"Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error."
      • changedInput schema / properties / worktree / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
    • Changedsymbol_lookup3 fields changed
      • removedInput schema / properties / worktree / default
        Removed value: -null
      • changedInput schema / properties / worktree / description
        Previous value: -"Absolute path to a linked git worktree you're working in; serves that worktree's branch\noverlay over the indexed checkout. Omit (or pass an unrelated path) for the indexed\ncheckout."New value: +"Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error."
      • changedInput schema / properties / worktree / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
    • Changedtrace_callees3 fields changed
      • removedInput schema / properties / worktree / default
        Removed value: -null
      • changedInput schema / properties / worktree / description
        Previous value: -"Absolute path to a linked git worktree you're working in; serves that worktree's branch\noverlay over the indexed checkout. Omit (or pass an unrelated path) for the indexed\ncheckout."New value: +"Absolute path of the checkout to scope reads to — pass a linked worktree to read its branch overlay. Defaults to the server's working directory. A path that is not a linked worktree of this repo is silently ignored: results then come from the indexed checkout, with no error."
      • changedInput schema / properties / worktree / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
  2. 4 tool updatesv0.22.0
    • Addeddream
    • Addedimpact_surface
    • Addedmemory_create
    • Addedmemory_mark_obsolete
  3. 4 tool updatesv0.21.1
    • Removeddream
    • Removedimpact_surface
    • Removedmemory_create
    • Removedmemory_mark_obsolete
  4. 2 tool updatesv0.21.0
    • Changedmemory_create1 field changed
      • addedInput schema / properties / title
        Added value: +{
        +  "description": "One-line summary, max 160 characters.",
        +  "type": "string"
        +}
    • Changedmemory_update1 field changed
      • addedInput schema / properties / title
        Added value: +{
        +  "description": "One-line summary, max 160 characters.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
  5. 12 tool updatesv0.18.0
    • Changedcompare_graph_to_text1 field changed
      • changedInput schema / $defs / McpGraphEdgeKind / enum
        Previous value: -[
        -  "calls_name",
        -  "constructs",
        -  "dispatches",
        -  "uses_macro",
        -  "references_type",
        -  "imports",
        -  "exports",
        -  "contains",
        -  "implements"
        -]New value: +[
        +  "calls_name",
        +  "constructs",
        +  "uses_operator",
        +  "uses_precedence_group",
        +  "dispatches",
        +  "uses_macro",
        +  "references_type",
        +  "imports",
        +  "exports",
        +  "contains",
        +  "implements"
        +]
    • Changeddocs_for_symbol1 field changed
      • changedInput schema / $defs / McpGraphEdgeKind / enum
        Previous value: -[
        -  "calls_name",
        -  "constructs",
        -  "dispatches",
        -  "uses_macro",
        -  "references_type",
        -  "imports",
        -  "exports",
        -  "contains",
        -  "implements"
        -]New value: +[
        +  "calls_name",
        +  "constructs",
        +  "uses_operator",
        +  "uses_precedence_group",
        +  "dispatches",
        +  "uses_macro",
        +  "references_type",
        +  "imports",
        +  "exports",
        +  "contains",
        +  "implements"
        +]
    • Changedfind_callers1 field changed
      • changedInput schema / $defs / McpGraphEdgeKind / enum
        Previous value: -[
        -  "calls_name",
        -  "constructs",
        -  "dispatches",
        -  "uses_macro",
        -  "references_type",
        -  "imports",
        -  "exports",
        -  "contains",
        -  "implements"
        -]New value: +[
        +  "calls_name",
        +  "constructs",
        +  "uses_operator",
        +  "uses_precedence_group",
        +  "dispatches",
        +  "uses_macro",
        +  "references_type",
        +  "imports",
        +  "exports",
        +  "contains",
        +  "implements"
        +]
    • Removedgithub_issue_search
    • Removedgithub_refs_for_path
    • Removedgithub_sync_status
    • Changedmemory_create13 fields changed
      • addedInput schema / $defs / MemoryBindArgs / additionalProperties
        Added value: +false
      • removedInput schema / $defs / MemoryBindArgs / properties / github_number
        Removed value: -{
        -  "format": "int64",
        -  "type": [
        -    "integer",
        -    "null"
        -  ]
        -}
      • removedInput schema / $defs / MemoryBindArgs / properties / github_owner
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedInput schema / $defs / MemoryBindArgs / properties / github_repo
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • addedInput schema / $defs / MemoryBindArgs / properties / item_key
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / $defs / MemoryBindArgs / properties / project
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / $defs / MemoryBindArgs / properties / tracker
        Added value: +{
        +  "description": "Tracker-item binding: all three of `tracker` (e.g. `github`), `project`\n(e.g. `owner/repo`), and `item_key` (e.g. `588`) together.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • removedInput schema / properties / bind / default / github_number
        Removed value: -null
      • removedInput schema / properties / bind / default / github_owner
        Removed value: -null
      • removedInput schema / properties / bind / default / github_repo
        Removed value: -null
      • addedInput schema / properties / bind / default / item_key
        Added value: +null
      • addedInput schema / properties / bind / default / project
        Added value: +null
      • addedInput schema / properties / bind / default / tracker
        Added value: +null
    • Changedmemory_rebind7 fields changed
      • addedInput schema / $defs / MemoryBindArgs / additionalProperties
        Added value: +false
      • removedInput schema / $defs / MemoryBindArgs / properties / github_number
        Removed value: -{
        -  "format": "int64",
        -  "type": [
        -    "integer",
        -    "null"
        -  ]
        -}
      • removedInput schema / $defs / MemoryBindArgs / properties / github_owner
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedInput schema / $defs / MemoryBindArgs / properties / github_repo
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • addedInput schema / $defs / MemoryBindArgs / properties / item_key
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / $defs / MemoryBindArgs / properties / project
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / $defs / MemoryBindArgs / properties / tracker
        Added value: +{
        +  "description": "Tracker-item binding: all three of `tracker` (e.g. `github`), `project`\n(e.g. `owner/repo`), and `item_key` (e.g. `588`) together.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Addedpapertrail_issue_search
    • Addedpapertrail_refs_for_path
    • Addedpapertrail_sync_status
    • Changedtrace_callees1 field changed
      • changedInput schema / $defs / McpGraphEdgeKind / enum
        Previous value: -[
        -  "calls_name",
        -  "constructs",
        -  "dispatches",
        -  "uses_macro",
        -  "references_type",
        -  "imports",
        -  "exports",
        -  "contains",
        -  "implements"
        -]New value: +[
        +  "calls_name",
        +  "constructs",
        +  "uses_operator",
        +  "uses_precedence_group",
        +  "dispatches",
        +  "uses_macro",
        +  "references_type",
        +  "imports",
        +  "exports",
        +  "contains",
        +  "implements"
        +]
  6. 2 tool updatesv0.16.0
    • Addedcheck_library_usage
    • Changedimpact_surface1 field changed
      • changedInput schema / properties / include / description
        Previous value: -"What to include — `tests`, `docs`, `git`, `papertrail`, `text_fallback`, `memories`, ALL on\nby default (impact's value is the bundled evidence). Omit to keep them; pass an explicit\nlist to narrow, e.g. `[\"git\"]` for git history only."New value: +"What to include — `tests`, `docs`, `git`, `papertrail`, `text_fallback`, `memories`, ALL on\nby default (impact's value is the bundled evidence). Omit to keep them; pass an explicit\nlist to narrow, e.g. `[\"git\"]` for git history only. `git` bundles both the recent commits\ntouching the symbol's file and the files that historically co-changed with it (the windowed\nchange-coupling section)."
  7. 11 tool updatesv0.10.1
    • Addeddream
    • Addeddream_review
    • Changedimpact_surface1 field changed
      • changedInput schema / properties / full_memories / description
        Previous value: -"Return full memory bodies + every binding + call paths instead of the default compact,\nscannable per-memory headers (#37). Full detail is also reachable via `memory_for_symbol` /\n`memory_for_path` / `memory_for_call_path`."New value: +"Return full memory bodies + every binding + call paths instead of the default compact,\nscannable per-memory headers (#37). To expand ONE memory by id (e.g. the `memory_id` from a\n`surface=\"summary\"` compact attachment), call `memory_show`; full detail for a symbol/path\nis also reachable via `memory_for_symbol` / `memory_for_path` / `memory_for_call_path`."
    • Addedllm_status
    • Removedlocal_ai_status
    • Changedmemory_create5 fields changed
      • changedInput schema / $defs / McpMemoryKind / enum
        Previous value: -[
        -  "Invariant",
        -  "Decision",
        -  "RejectedAlternative",
        -  "Risk",
        -  "BugPattern",
        -  "TestExpectation",
        -  "PerformanceNote",
        -  "SecurityNote",
        -  "FFIBoundary",
        -  "PlatformQuirk",
        -  "FollowUp",
        -  "OpenQuestion",
        -  "Obsolete"
        -]New value: +[
        +  "Invariant",
        +  "Decision",
        +  "RejectedAlternative",
        +  "Risk",
        +  "BugPattern",
        +  "TestExpectation",
        +  "PerformanceNote",
        +  "SecurityNote",
        +  "FFIBoundary",
        +  "PlatformQuirk",
        +  "FollowUp",
        +  "OpenQuestion",
        +  "Obsolete",
        +  "Task",
        +  "Concept"
        +]
      • addedInput schema / properties / bind / default
        Added value: +{
        +  "chunk_id": null,
        +  "commit_hash": null,
        +  "dir": null,
        +  "edge_id": null,
        +  "edge_path": null,
        +  "edge_sequence_hash": null,
        +  "end_id": null,
        +  "end_line": null,
        +  "github_number": null,
        +  "github_owner": null,
        +  "github_repo": null,
        +  "id": null,
        +  "path": null,
        +  "path_summary": null,
        +  "start_id": null,
        +  "start_line": null
        +}
      • addedInput schema / properties / bind / description
        Added value: +"Optional (#463): omit to create an UNANCHORED node (a `Concept` or standalone `Task` that\nlives only as a graph node). When present, names exactly one code/anchor binding."
      • addedInput schema / properties / payload
        Added value: +{
        +  "default": null,
        +  "description": "Optional structured payload (#465) for a polymorphic node — a `Task`/`Concept`'s\nkind-specific JSON object (e.g. a task's priority/estimate). Must be a JSON object."
        +}
      • changedInput schema / required
        Previous value: -[
        -  "kind",
        -  "title",
        -  "body",
        -  "confidence",
        -  "bind"
        -]New value: +[
        +  "kind",
        +  "title",
        +  "body",
        +  "confidence"
        +]
    • Addedmemory_edge_add
    • Addedmemory_edge_remove
    • Addedmemory_edges
    • Addedmemory_show
    • Changedmemory_update2 fields changed
      • changedInput schema / $defs / McpMemoryKind / enum
        Previous value: -[
        -  "Invariant",
        -  "Decision",
        -  "RejectedAlternative",
        -  "Risk",
        -  "BugPattern",
        -  "TestExpectation",
        -  "PerformanceNote",
        -  "SecurityNote",
        -  "FFIBoundary",
        -  "PlatformQuirk",
        -  "FollowUp",
        -  "OpenQuestion",
        -  "Obsolete"
        -]New value: +[
        +  "Invariant",
        +  "Decision",
        +  "RejectedAlternative",
        +  "Risk",
        +  "BugPattern",
        +  "TestExpectation",
        +  "PerformanceNote",
        +  "SecurityNote",
        +  "FFIBoundary",
        +  "PlatformQuirk",
        +  "FollowUp",
        +  "OpenQuestion",
        +  "Obsolete",
        +  "Task",
        +  "Concept"
        +]
      • addedInput schema / properties / payload
        Added value: +{
        +  "description": "Set the node's structured payload (#465). Omit to leave the stored payload unchanged; a\nJSON object replaces it."
        +}
  8. 40 tool updatesv0.9.0-3b4b4b7
    • First observedclones_for_symbol
    • First observedcommit_search
    • First observedcommits_touching_query
    • First observedcompare_graph_to_scip
    • First observedcompare_graph_to_text
    • First observeddocs_for_symbol
    • First observedffi_surface
    • First observedfind_callers
    • First observedfind_clones
    • First observedgit_blame_chunk
    • First observedgit_history_for_path
    • First observedgit_history_for_symbol
    • First observedgithub_issue_search
    • First observedgithub_refs_for_path
    • First observedgithub_sync_status
    • First observedheal_index
    • First observedimpact_surface
    • First observedimportant_symbols
    • First observedindex_status
    • First observedlocal_ai_status
    • First observedmemory_create
    • First observedmemory_doctor
    • First observedmemory_for_call_path
    • First observedmemory_for_path
    • First observedmemory_for_symbol
    • First observedmemory_mark_obsolete
    • First observedmemory_rebind
    • First observedmemory_search
    • First observedmemory_update
    • First observedmemory_validate
    • First observedpapertrail_for_chunk
    • First observedpapertrail_for_commit
    • First observedpapertrail_for_symbol
    • First observedrationale_search
    • First observedread_chunk
    • First observedrepo_brief
    • First observedrepo_clusters
    • First observedsemantic_search
    • First observedsymbol_lookup
    • First observedtrace_callees

TDQS

B3.1/5.0
Disambiguation3/5

Most tools have distinct anchors and the descriptions help, but the set is dense enough that several pairings blur together: memory_validate vs memory_doctor, commit_search vs commits_touching_query, and the four domain-specific search tools (semantic_search, commit_search, papertrail_issue_search, rationale_search). An agent can usually pick correctly, but with 47 tools misselection risk is real.

Naming Consistency3/5

Prefix families such as memory_* and papertrail_* are consistent, but the overall naming mixes noun phrases (symbol_lookup, repo_brief), verb phrases (heal_index, find_callers), and odd asymmetries like commit_search vs commits_touching_query. It is readable, but the convention is not uniform.

Tool Count2/5

47 tools is far beyond the typical well-scoped tool surface and pushes the server into awkward density even for a broad code-intelligence domain. Many status, graph, search, and memory subdomains could be collapsed or grouped without losing capability.

Completeness4/5

The surface covers memory CRUD, code graph queries, semantic/lexical search, git history, papertrail evidence, diagnostics, and maintenance workflows quite thoroughly. The main gaps are that some advanced checks depend on CLI-side bootstrap work like 'oracle run', and source reading is chunk-id-centric rather than offering a direct path-based read fixture.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Graph-based tool retrieval for LLM agents. Builds a tool graph from OpenAPI/MCP specs and retrieves multi-step workflows via hybrid search (BM25 + graph traversal + embedding), recovering accuracy from 12% to 82% with 79% fewer tokens. Also works as an MCP Proxy to aggregate multiple servers behind 3 meta-tools.
    6
    16
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Local-first codebase intelligence engine providing AI coding agents with a typed MCP toolset for understanding and navigating code repositories.
    100
    51
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    Provides AI coding agents with five intelligence layers (dependency graph, git history, documentation, architectural decisions, code health) via nine MCP tools, enabling deep codebase understanding and reducing exploration cost.
    10
    6,340
    AGPL 3.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Local-first repository memory for AI coding agents that indexes codebases into SQLite and exposes it through MCP tools, with a browser dashboard for architecture inspection.
    19
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cq27-dev/rag-rat'

If you have feedback or need assistance with the MCP directory API, please join our Discord server