Skip to main content
Glama

Token Savior

One MCP server. One profile. 97.9% on tsbench at -80% tokens. Structural code navigation, persistent memory, and Bash command rewriting for AI coding agents.

PyPI Benchmark Python 3.11+ MCP CI

mibayy.github.io/token-savior -- project site + benchmark landing Benchmark source + fixtures: not currently published (see Reproducing the score below)

v4.23 in 31 seconds, measured on 2026-10-07 · watch the full video (MP4, sound on)


Benchmark -- 96 real coding tasks (Claude Opus 4.7, May 2026)

Plain Claude Code

With Token Savior

Score

141 / 180 (78.3%)

188 / 192 (97.9%)

Active tokens / task

17 221

3 395 (-80%)

Wall time / task

110.6 s

18.9 s (-83%)

Reproduces with the optimized profile (single env var). The harness that produced these numbers is described below; its repository is not public at the moment, so take the figures as reported rather than as independently verifiable.

A re-measurement was published here on 2026-08-09 and has been withdrawn on 2026-08-10. It reported new-token savings from a small replacement harness. Those numbers did not measure this server at all: across 143 benchmark sessions, exactly one called a Token Savior tool. The client running the harness had MCP deferred-tool loading enabled, so all 18 tools sat behind a ToolSearch lookup instead of appearing in the model's manifest. The model never saw them and fell back to Grep and Read — 66 greps, 30 reads, one MCP call. What varied between the "profiles" was the size of the cached prefix, not what the agent did.

The lesson is worth more than the numbers were: a benchmark of an MCP server must assert that its tools were actually called. Ours did not, so it happily compared two identical agents. That assertion now exists in the harness.

The headline figures above therefore stand as reported and unverified, as stated in the previous paragraph.

Re-measured on 2026-10-07, with the tools actually called. Same 8 tasks on a frozen copy of this repo (commit 9d15a1e, no CLAUDE.md), Claude Haiku 4.5, plain Claude Code against the auto profile with alwaysLoad. The harness checks that the Token Savior sessions really called the server.

3 passes, mean ± sd

Plain Claude Code

v4.23.0 auto

Cost, 8 tasks

$0.226 ± 0.011

$0.123 ± 0.020 (-45%, range -39% to -53%)

New tokens

92 609 ± 6 731

38 150 ± 7 618 (-59%)

Sessions that used TS

—

23 / 24

Wall time, 8 tasks

157 ± 26 s

216 ± 9 s (+40%)

All 48 sessions succeeded. v4.22.0, measured once, saved 14% and used the tools in 5 sessions out of 8. Editing, measured on 2026-10-08 on the same repository (3 tasks in files of 1 900 to 3 700 lines, graded by running the code and the module's tests, 4 passes): every session of both arms succeeded, and cost is too noisy to call a gain (from -54% to +16% per pass). Native Edit only needs a partial Read, so there is little left to remove there.

Wall time is worse because each benchmark session starts a fresh server that indexes the repo first; a long-lived session pays that once. What moved from v4.22.0 to v4.23.0 is mostly wording: search_codebase now names the function holding each hit, and the tool descriptions say plainly which native call they replace.


Who starred this repo?

starscope

On June 30, 2026 GitHub restricted stargazer and watcher lists to repo admins and collaborators, which broke every "who starred my repo" tool at once. I rebuilt one that still works, precisely because it only reads repos you own or can push to: starscope ranks the people who starred or forked your repo by influence, and surfaces their social accounts when their GitHub profile declares them.

Numbers on this very repo, computed with it: 1,147 people, 27% with a public social account, and the most followed carries 18,922 followers. The named list is visible to the repo owner and to nobody else — the public page shows aggregates only.


Related MCP server: astllm-mcp

What's new

Release notes live where they can't drift out of sync with the code:


Quick start

pip install "token-savior-recall[mcp]"

Add to your MCP config (e.g. Claude Code):

{
  "mcpServers": {
    "token-savior-recall": {
      "command": "/path/to/venv/bin/token-savior",
      "alwaysLoad": true,
      "env": {
        "WORKSPACE_ROOTS": "/path/to/project1,/path/to/project2",
        "TOKEN_SAVIOR_CLIENT": "claude-code",
        "TOKEN_SAVIOR_PROFILE": "optimized"
      }
    }
  }
}

"alwaysLoad": true matters on Claude Code (2.1.28x and later): without it, every tool of the server sits behind ToolSearch and the model reaches for Read and Grep, which are already loaded. Measured on this project's benchmark before the option existed: one session in 143 called a Token Savior tool. With it, the manifest costs a few thousand cached tokens per session.

That's it. TOKEN_SAVIOR_PROFILE=optimized ships the Pareto-optimum config that wins tsbench. It bundles:

  • tiny_plus (15 hot tools manifest)

  • thin inputSchema (-44% manifest)

  • capture sandbox disabled

  • memory hooks gated for cross-project safety

No other tuning needed.


Activation (Bash compaction + rewriting)

Bash compaction and the PreToolUse rewriter are opt-in. Two env vars and one CLI call:

export TS_BASH_COMPACT=1       # PostToolUse output compactors (34 of them)
export TS_BASH_REWRITE=1       # PreToolUse command rewriter (10 rules)

ts init --agent claude --yes   # auto-merge hooks into ~/.claude/settings.json

ts init is idempotent. It detects existing hook entries, dedups by (matcher, command), prints a unified diff, and backs up settings.json to .bak-YYYYMMDD-HHMMSS (UTC) before writing. Supported agents: claude, cursor, gemini, codex, openclaw. Pass --dry-run to preview, or --global to write the user-level config.

Optional audit log of every rewrite:

export TS_BASH_REWRITE_LOG=$HOME/.local/state/token-savior/rewrites.jsonl

Compactor catalog (34)

Family

Compactors

git

status, diff, log, push/pull, commit, add, fetch, checkout, branch, worktree list, stash list

gh

run list, run view, pr diff, pr view, issue view, repo view

test/lint

pytest, jest, vitest, eslint, biome, cargo test, cargo build/clippy, tsc

cloud

kubectl get, kubectl logs, aws sts, aws ec2, aws lambda, aws logs, aws iam, aws dynamodb, aws s3

docker

docker ps, docker logs

packaging

npm/yarn/pnpm list, pip list/show

shell catch-alls

grep, find, cat, curl

Each compactor is a pure function (no I/O, no globals) returning a token-efficient rendering. The dispatcher returns None when no matcher fires, leaving the existing sandbox path untouched. Compound commands (cd ... && cmd) fall through to the last meaningful segment.

These run in PostToolUse, so they do not shrink the current turn. The hook fires after the tool has returned; it can add context, not remove it. The compact rendering is appended below the raw output, which stays. What you gain is persistence: the full output goes to the capture sandbox and outlives a context compaction. For an actual reduction of what reaches the model, use the PreToolUse rewriter (TS_BASH_REWRITE=1) — it edits the command before it runs.


ts_discover -- find missed TS opportunities

New MCP tool that scans your Claude Code transcripts for patterns where TS tools would have been cheaper than what the agent actually did.

ts_discover()                       # active project, last 30 days
ts_discover(project=None)           # ALL transcript projects
ts_discover(format="adoption")      # TS vs native ratio per session
ts_discover(format="adoption_json") # same, JSON

Findings: Read->Grep->Read chains, sequential find_symbol, edits without get_edit_context, memory_search without memory_index, native shell on code files. Args are pruned to load-bearing keys (PII-safe). Streams JSONL with mtime fast-skip.


ts init CLI

ts init --agent claude [--global] [--dry-run] [--yes]
ts init --agent cursor
ts init --agent gemini
ts init --agent codex
ts init --agent openclaw

Detects the target agent's settings location, deep-merges the Token Savior hook config (PostToolUse + PreToolUse), preserves existing hooks, dedups, prints a unified diff. Backs up to settings.json.bak-YYYYMMDD-HHMMSS (UTC). Re-running is a no-op.


What it does

Claude Code reads whole files to answer questions about three lines, and forgets everything the moment a session ends. Token Savior fixes both, plus a third axis: it bounds the noisy Bash output that bloats turn budgets between code reads — by rewriting the command before it runs.

It indexes your codebase by symbol -- functions, classes, imports, call graph -- so the model navigates by pointer instead of by cat. Measured reduction: 97% fewer chars injected across 170+ real sessions.

On top of that sits a persistent memory engine. Every decision, bugfix, convention, guardrail and session rollup is stored in SQLite WAL + FTS5

  • vector embeddings, ranked by Bayesian validity and ROI, and re-injected as a compact delta at the start of the next session.

And on top of that, since v4.1, sit the Bash compactors and the PreToolUse rewriter. Bench numbers above.

Which of those two actually shrinks a turn, and which does not. Measured 2026-08-09, and worth stating plainly because the distinction is not obvious:

  • The PreToolUse rewriter changes the command before it runs, so a smaller output is produced and a smaller output reaches the model. This is a real reduction in the current turn.

  • The PostToolUse compactors run after the tool has returned. A PostToolUse hook can only add context; by the time it fires, the raw output has already been sent. The compact rendering is appended, it does not replace anything. What the compactors genuinely buy you is different and still valuable: the full output is preserved in the capture sandbox and survives a context compaction, so it can be queried later instead of being re-run.

If your goal is a smaller turn, TS_BASH_REWRITE=1 is the switch that does it. If your goal is to stop losing command output across compactions, that is TS_BASH_COMPACT=1.


Profile comparison

Profile

Tools exposed

Manifest tokens

When to use

optimized

15

~1.5 KT

Recommended default -- Pareto win on tsbench

auto

adaptive

~1-2 KT

Per-client telemetry-based (experimental)

tiny

6

~0.6 KT

Minimal hot loop

lean

51

~4 KT

Legacy -- broader surface

compact-only

1

~0.3 KT

Bash layer only (rewriter + capture) -- you already run symbol nav elsewhere

full

68

~6 KT

Everything exposed

You probably want optimized.


How it composes with adjacent tools

Token Savior spans several layers, and most neighbouring tools occupy exactly one of them. Overlap is opt-out per layer, so running both is usually fine once you disable the half you already have. Thanks to @chirag127 for mapping this out in #45.

Tool

Layer

Overlap

What to do

RTK (repo currently unreachable)

PostToolUse Bash output compression

Same layer, same PostToolUse limit: neither shrinks the current turn

Pick one. TS_BASH_COMPACT=0 to defer to RTK

serena

Symbol-graph navigation

Direct, with find_symbol / get_dependents

Run TS as compact-only if serena is your navigator

codebase-memory

Persistent code graph

With the memory engine

TS_MEMORY_DISABLE=1

Ponytail, Caveman

Output-side compression (code and prose)

Partial: Token Savior ships an opt-in Ponytail-style discipline (TS_DISCIPLINE=1) wired to its tools

Complementary, no knob needed

The layers Token Savior owns that these do not: the PreToolUse Bash rewriter (it shrinks the command before it runs, not the output after), structural editing that keeps the index in sync, and the audit tools (detect_breaking_changes, find_dead_code, analyze_config).

If you only want the Bash layer, TOKEN_SAVIOR_PROFILE=compact-only advertises a single tool and leaves the compactors and rewriter running. Of those two, the rewriter is the one that reduces the current turn.


Token savings

Operation

Plain Claude

Token Savior

Reduction

find_symbol("send_message")

41M chars (full read)

67 chars

-99.9%

get_function_source("compile")

grep + cat chain

4.5K chars

direct

get_change_impact("LLMClient")

impossible

16K chars

new capability

96-task tsbench (Opus, plain vs ts)

17 221 active/task

3 395 active/task

-80%

7-day Bash output bench (v4.3)

~30 K tokens/week

~9.6 K tokens/week

~20.4 K/week


Install

pip (MCP server)

pip install "token-savior-recall[mcp]"
# Optional hybrid vector search:
pip install "token-savior-recall[mcp,memory-vector]"

uvx (no venv, no clone)

uvx token-savior-recall

Claude Code one-liner

claude mcp add token-savior -- /path/to/venv/bin/token-savior

Development

git clone https://github.com/Mibayy/token-savior
cd token-savior
python3 -m venv .venv
.venv/bin/pip install -e ".[mcp,dev]"
pytest tests/ -q

Suite size: 1898 passed, 2 skipped on main. CI green on Python 3.11 / 3.12 / 3.13.


Bench it yourself

The compactor numbers above come from replaying real Claude Code transcripts through the dispatcher. Two scripts live under scripts/:

python3 scripts/bench_compactors_real.py       # match rate + mean savings
python3 scripts/bench_compactors_unmatched.py  # top unmatched commands

The first walks ~/.claude/projects/*/*.jsonl, replays every Bash output through the registry, and reports per-family savings + overall match rate. The second buckets the unmatched commands so the next compactor target is obvious from the histogram.

Reproducing the tsbench score

Honest status, checked 2026-08-09: the benchmark repository these instructions pointed at returns 404, and so did the BENCHMARK-SUMMARY link above. Rather than leave a recipe that cannot run, here is what the harness does, so the number can be judged on its method:

  • A generated toy repo (deterministic seed) with four planted traps: a symbol defined twice, a three-level call chain, an a -> b -> c -> a import cycle, and a dead function whose name contains a live one.

  • Eight read-only tasks, scored mechanically against an expected list and a forbidden list. The forbidden list is the half that matters: an answer can contain the right target and the wrong one, and a grader that only looks for the right one would score it correct.

  • A sans_ts control arm running plain Read/Grep/Glob, without which the bench compares Token Savior profiles to each other and can never conclude "useless" — and therefore never "useful" either.

One trap worth knowing about if you rebuild it: the harness spawns claude -p, which inherits ~/.claude/settings.json. If any Token Savior PreToolUse hook is enabled on the machine, it applies to the control arm too and rigs the comparison. Neutralise them in both arms (TS_GUARD_OFF=1 TS_READ_GUARD=0 TS_BASH_REWRITE=0).


Bonus: ts CLI for non-MCP agents

For agents without MCP (Cursor, Aider, Continue, scripts, CI), the ts command exposes a subset of the tools via shell:

ts use /path/to/project
ts get my_function          # JSON output
ts search 'pattern'
ts daemon start             # ~145ms per call vs 1.5s cold fork
ts init --agent cursor      # wire up Bash hooks for non-Claude agents

On Claude Code, prefer the MCP server -- measured cheaper than CLI on Opus 4.7. The CLI is there for the portability case.


Environment variables

All optional. Values shown as =1 also accept nothing else — set exactly 1; values shown as bool accept 1/true/yes (and on where noted).

Server & tool manifest

Var

Default

Purpose

WORKSPACE_ROOTS

current dir

Comma-separated project roots to index. Codex trap: Codex whitelist-filters the MCP server environment, so an exported shell variable never arrives — set it in config.toml under [mcp_servers.token-savior] env (or env_vars)

PROJECT_ROOT

—

Single-root alternative to WORKSPACE_ROOTS

CLAUDE_PROJECT_ROOT

—

Deliberate active-project override (Token Savior's own contract — no host sets it). Registered if valid, wins over every other boot signal

TS_STICKY_ACTIVE

off (bool, on ok)

Freeze the active project: explicit project= hints and absolute path arguments still route each call, but no call repoints the shared default. For parallel agents in sibling worktrees

TOKEN_SAVIOR_PROFILE

full

Tool profile. optimized — the value the quickstart config and ts init recommend — ships the Pareto manifest, implies thin schemas, and omits the capture tools from the manifest

TS_THIN_SCHEMAS=1

off (on in optimized)

Strip verbose tool schemas from the manifest

TS_DISCIPLINE

off (bool)

Session instructions in the style of Ponytail: smallest complete change scoped by get_edit_context, reuse found by search_codebase, one closing line on what was skipped. Off by default: on tsbench they cost 3-4 % more per session with no measured gain

TS_PROMPTS

on (bool)

The review / audit / lean MCP prompts (slash commands in Claude Code). Free until called. 0 removes them

TS_AUTO_HOT_K

8

Hot-tool count exposed by the telemetry-driven auto profile (13 tools in all)

TS_LEVEL_BANDIT

off

Let a Thompson-sampling bandit pick the detail level of get_function_source / get_class_source when no level is given. Off by default: it drifted to summaries in place of source

TS_EXECUTE_MAX_CHARS

60000

Ceiling on a ts_execute result; past it the returned value is cut and the cut is reported

TS_GUARD_READ_FREE_LINES

200

Discipline guard: whole-file Read of indexed code passes up to this many lines

TOKEN_SAVIOR_CHAIN_NUDGE

on

0/false/off disables chained-tool nudges

TS_MEMORY_DISABLE=1

off

Disable the memory engine (clean-context workloads)

TS_CAPTURE_DISABLED=1

off

Skip read-side capture sandboxing and drop the capture tools from the manifest (no profile flips this; optimized only hides the capture tools)

TS_CODE_MODE_DISABLE=1

off

Disable code-mode tools

TS_CODE_MODE_NODE

node

Node binary used by the code-mode sandbox

TS_RESOURCES_DISABLED

off (bool)

Don't expose observations as ts://obs/{id} MCP resources

TS_WARM_START

off (bool)

Pre-build project slots at startup

TOKEN_SAVIOR_NO_WARMUP

off (bool)

Skip the ts_search embedding warm-up

TS_SEARCH_COLD_DELEGATE

off (bool, on ok)

Delegate the cold ts_search call to a running ts daemon

TS_SOCK

/tmp/ts.sock

Unix socket of the ts daemon (CLI + cold delegate)

TOKEN_SAVIOR_CLIENT

auto-detected

Client label (claude-code, …) for telemetry/client detection

TOKEN_SAVIOR_SESSION_LABEL

—

Free-form label attached to session telemetry

Indexing

Var

Default

Purpose

INCLUDE_PATTERNS

built-in list

Colon-separated globs; replaces the default include list

EXCLUDE_PATTERNS

built-in list

Colon-separated globs; replaces the default exclude list

EXCLUDE_EXTRA

—

Colon-separated globs appended to the default excludes

TOKEN_SAVIOR_EXCLUDE_PATTERNS

—

Colon-separated globs appended at the indexer level

TOKEN_SAVIOR_MAX_FILE_SIZE

500000

Max file size (bytes) to index

TOKEN_SAVIOR_MAX_FILES

10000

Max files per project

TOKEN_SAVIOR_WATCHER

auto

File watcher: auto / on / off

TS_WATCHER_FORCE_POLLING

off

Force the polling watcher backend

Claude Code hooks

Var

Default

Purpose

TS_CAPTURE_THRESHOLD_BYTES

4096

Minimum tool-output size to sandbox

TS_CAPTURE_REPLACE=1

off

Strong-replace: tell the agent to ignore the inline output and capture_get the URI

TS_CAPTURE_TTL_DAYS

30

Captures older than this are purged on the next capture_put; 0 disables the GC

TS_BASH_COMPACT=1

off

PostToolUse compactors. Preserves output across compaction; does NOT shrink the current turn (see note above)

TS_COMPACT_INLINE_THRESHOLD

4096

Hybrid mode: compact-result size above which the full original is also sandboxed

TS_COMPACT_TINY_THRESHOLD

256

Hybrid mode: compact-result size below which the sandbox is always skipped

TS_BASH_REWRITE=1

off

Enable the PreToolUse Bash command rewriter

TS_BASH_REWRITE_LOG

—

JSONL audit log of every rewrite

TS_HOOK_MINIMAL=1

off

SessionStart memory hook emits only the Memory Index block

Memory extras

Var

Default

Purpose

TS_VIEWER_PORT

off

Port for the observation web viewer (unset = disabled)

TS_AUTO_EXTRACT=1 + TS_API_KEY

off

LLM auto-extraction of memory observations (Anthropic API key required)

TS_MODEL

claude-sonnet-4-6

Auto-extraction model override

TOKEN_SAVIOR_MEMORY_AUTO_SAVE=1

off

Auto-save memory observations

TELEGRAM_BOT_TOKEN + TELEGRAM_CHAT_ID

—

Critical-observation feed

Storage, dashboard, debugging

Var

Default

Purpose

TOKEN_SAVIOR_STATS_DIR

~/.local/share/token-savior

Telemetry + stats directory

TOKEN_SAVIOR_DASHBOARD_HOST

127.0.0.1

Dashboard bind host

TOKEN_SAVIOR_DASHBOARD_PORT

8921

Dashboard port

TOKEN_SAVIOR_INCLUDE_TMP_PROJECTS

off (bool)

Dashboard also lists projects under temp dirs

TOKEN_SAVIOR_DEBUG=1

off

Debug logging

TOKEN_SAVIOR_TRACE

off (bool)

MCP request lifecycle tracing

Not knobs: CLAUDECODE, CLAUDE_CODE_ENTRYPOINT, CLAUDE_PROJECT_DIR, CLAUDE_CONTEXT_REMAINING_PCT, CODEX_* and HERMES_* are read for host/client detection and boot-time project hints — the environment sets them, you don't. (CLAUDE_PROJECT_DIR is what Claude Code actually exports; it always names the main checkout, never the worktree the session works in, so the launch directory outranks it when that directory is a linked worktree. CLAUDE_PROJECT_ROOT moved up into the knobs table: nothing sets it but you.)

Naming trap: TS_PROFILE in the benchmark snippets is tsbench's variable; the server reads TOKEN_SAVIOR_PROFILE.


License

MIT

Available Tools

72 tools
add_field_to_modelB
Destructive

Add a field to a model/class/interface. Supports .prisma, .py (dataclass, SQLAlchemy), .ts/.tsx.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoInsert after the line containing this string.
modelYesModel/class/interface name.
projectNoProject name/path (default: active).
file_pathNoOptional file path to disambiguate.
field_nameYesName of the new field.
field_typeYesType of the field (e.g. 'String', 'DateTime?', 'number').

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds nothing behavioral beyond that: it does not say the file is modified in place, where the field lands by default, whether the write is transactional, or what happens if the model is not found. Only format coverage is offered.

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, front-loaded with the action and then the applicable formats. Zero filler; nothing could be removed without losing 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?

For a 6-parameter, 3-required destructive mutation tool with no output schema, the description is minimal. The schema covers parameters well, but an agent gets no guidance on default placement, error behavior when the model/file cannot be resolved, or interaction with the sibling editing 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 100% and every parameter has its own description, so the schema does the heavy lifting. The description only restates the supported languages and a couple of field_type examples that already appear in the schema, adding no new semantic detail (e.g. how the default insertion point is chosen when 'after' is omitted).

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

Purpose4/5

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

States a concrete verb+resource ('Add a field to a model/class/interface') and enumerates the supported file types and frameworks (.prisma, .py dataclass/SQLAlchemy, .ts/.tsx). It is clear on its own, but it does not distinguish itself from sibling editing tools such as insert_near_symbol or edit_lines_in_symbol, which likely also mutate source structure.

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 supported-format list implies when the tool applies, but there is no explicit when-to-use guidance versus the many sibling mutation tools (insert_near_symbol, replace_symbol_source, edit_lines_in_symbol). No prerequisites, no exclusions, no alternative named.

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

analyze_configB
Read-onlyIdempotent

Audit config files (.env/.yaml/.toml/.json): duplicates, secrets, orphans.

ParametersJSON Schema
NameRequiredDescriptionDefault
checksNoChecks to run
projectNoProject name/path (default: active).
severityNoSeverity filter
file_pathNoSpecific config file
max_issuesNoCap total issues shown (default 10, 0 = unlimited). Raise for full audit.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already establish the safety profile (readOnlyHint=true, destructiveHint=false, idempotentHint=true), so the description doesn't need to restate that. It adds only the audited formats and check names, and says nothing about how secrets are reported (redacted vs raw), how the capped issue list is ordered, or what happens when no config file matches.

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 line with zero filler: verb, resource, formats, and check categories in one sentence. It is arguably clipped to the point of under-specification, but nothing is padded or redundant.

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

Completeness5/5

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

No output schema exists, yet the description does not describe the shape of the audit report (severity grouping, issue locations, how many issues are returned). For an audit tool whose whole value is the report, that leaves a real gap.

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

Parameters3/5

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

Schema coverage is 100%, so every parameter and its defaults (project default: active, max_issues default 10, 0 = unlimited) is already documented in the schema. The description names three of the five check values but omits 'loaders' and 'schema', adding no semantics beyond 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?

States a specific verb ('Audit') and resource ('config files') and narrows scope with concrete file formats (.env/.yaml/.toml/.json) and three check categories. It reads clearly apart from file-read siblings like read_lines or get_env_usage, though it never explicitly contrasts itself 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 when-to-use guidance, no prerequisites, and no routing to alternatives such as get_env_usage or analyze_docker. The agent must infer that this is the config-audit entry point purely from the name and file extensions.

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

analyze_dockerB
Read-onlyIdempotent

Audit Dockerfiles: base images, stages, exposed ports, ENV/ARG, cross-ref with config files.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is fully covered. The description adds useful scope content (which Dockerfile aspects are audited and that it cross-references config files), a modest addition beyond the structured fields. It says nothing about output format or depth of analysis.

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 with a colon-delimited enumeration; no filler and the audited dimensions are immediately visible.

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

Completeness4/5

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

For a read-only audit tool with one optional parameter and no output schema, the description adequately conveys what is inspected. It could be slightly more complete by hinting at the shape or scope of the audit result, but the annotations carry the safety profile.

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?

Only one optional parameter (project) with 100% schema coverage, so the schema already documents its meaning and default. The description adds no parameter-level detail, and the baseline for a fully documented schema is 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?

States a specific verb (audit) and resource (Dockerfiles) and enumerates what it inspects: base images, stages, exposed ports, ENV/ARG, and config cross-referencing. It is distinguishable from most siblings, though it does not name the closely related analyze_config or get_env_usage.

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 when-to-use guidance, no prerequisites, and no mention of when a sibling like analyze_config would be preferred. The Dockerfile scope is implied by the resource name but nothing routes the agent between overlapping analysis tools.

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

build_commit_summaryC
Read-onlyIdempotent

Compact commit/review narrative with stats, hotspots, suggested type.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).
max_filesNoDefault 20.
changed_filesYes
max_symbols_per_fileNoDefault 20.

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond the annotations: no mention of whether it reads git history vs. current index, how 'hotspots' are computed, or whether the narrative is deterministic.

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

Conciseness2/5

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

A single unpunctuated fragment is not concise so much as under-specified; there is no front-loading of the core action and no structure to separate purpose from output. It under-delivers rather than being tight.

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?

With no output schema, the description partially compensates by naming the output contents (stats, hotspots, suggested type), which is genuinely useful. However, for a 4-parameter tool with no usage guidance and no behavioral detail, it remains thin overall.

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 75% (project, max_files, max_symbols_per_file documented; changed_files is self-evident as required). The description adds nothing about parameters, but the schema largely carries that burden, so the baseline 3 applies.

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

Purpose3/5

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

The fragment 'Compact commit/review narrative with stats, hotspots, suggested type' conveys that a summarized commit/review artifact is produced, but it is a noun phrase with no verb and no explicit scope. It does not distinguish itself from siblings like get_project_summary, get_changed_symbols, or find_hotspots, which plausibly overlap.

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 statement of when to call this tool, what preconditions it needs (e.g., a git repo state or prior change detection), or which sibling to use instead. The agent must infer usage purely from the name.

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

capture_aggregateC
Read-onlyIdempotent

Aggregate over a capture: stats|count_lines|unique_lines|extract:|count:.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
patternNoRegex when transform is 'extract' or 'count' without inline regex.
transformNostats (default) | count_lines | unique_lines | extract | count | extract:<regex> | count:<regex>

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnly, idempotent, non-destructive, so safety is covered. The description adds no behavioral context beyond the transform vocabulary that already lives in the schema - nothing about what the id refers to, cost, or result shape for a read-only aggregation.

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 with the operation modes listed compactly. No filler, though the brevity borders on under-specification of the modes' semantics.

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 read-only tool with safety annotations and no output schema, the essentials are sparse. The description omits what the required id references and how each transform behaves, which an agent would need to call the mode variants 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 67% and the schema already documents transform and pattern. The description partially mirrors the transform enum but adds no meaning beyond it and says nothing about the required id parameter, so it does not compensate for the coverage 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?

States a specific verb (aggregate) and resource (capture) and enumerates the aggregation modes, which separates it from capture_get, capture_search, and capture_list. It is less explicit than ideal about what a 'capture' is, but the intent is readable.

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 when-to-use guidance and no alternatives named. It never explains when to pick stats vs count_lines vs extract vs count, nor how this differs from pull-oriented siblings like capture_get or capture_list, leaving selection to inference.

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

capture_getB
Read-onlyIdempotent

Read a capture (range: head/tail/all/preview/line:N-M).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCapture id (from search/list).
rangeNohead | tail | all | preview | line:start-end | relevant:<question> (keeps only the lines relevant to the question, lossless — 'all' still returns everything). Default preview.
max_bytesNoCap returned content size.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed world, so the safety profile is fully covered by structured data. The description adds nothing behavioral beyond that – no note on truncation when max_bytes clips content, no indication of what a capture contains or how large reads behave.

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 short sentence, front-loaded with verb and resource, and the range hint is placed immediately after. No wasted words, though it is arguably terse enough that the range list omits the schema's 'relevant:' mode.

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 read-only tool with 100% schema coverage and full annotations, the definition is minimally adequate. It never explains what a capture is, how it relates to the capture_search/capture_list siblings, or that max_bytes may truncate the returned content.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents id, range (including the 'relevant:<question>' mode), and max_bytes in more detail than the description. The description's range list is a partial restatement rather than added meaning, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (Read) and resource (a capture), and the parenthetical previews the range modes. It does not differentiate itself from the other capture_* siblings (capture_search, capture_list, capture_aggregate), but the purpose itself is unambiguous.

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

Usage 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 capture_search or capture_list, or versus read_lines/get_function_source for reading content. The agent must infer that 'id from search/list' means capture_get is the follow-up fetch step, but nothing states this explicitly.

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

capture_listC
Read-onlyIdempotent

List recent captures (newest first).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows (default 50).
tool_nameNo
session_idNo
project_rootNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description contributes one real behavioral fact beyond that (results are ordered newest first), but says nothing about default row counts, pagination, or what a capture record contains.

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 with zero wasted words. It is efficient, though arguably too terse for a four-parameter tool whose filtering capabilities go unstated.

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 read-only list tool with no output schema, the annotations do carry the safety burden, but the definition still omits the three filter parameters and any return-shape or pagination detail. An agent could call it, but not correctly scope it.

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 25% — just the limit parameter is documented — yet the description mentions no parameters at all. The three filter parameters (tool_name, session_id, project_root) are undocumented in both the schema and the description, so an agent cannot learn from this definition that listing can be scoped at all.

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

Purpose4/5

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

States a specific verb (List) and resource (captures) plus a meaningful ordering guarantee (newest first). However, it draws no boundary against the many sibling read tools (capture_search, capture_get, capture_aggregate), so an agent must infer the distinction from the name alone.

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 explicit when-to-use guidance and no mention of the alternatives: capture_search for filtered queries, capture_get for a single item, capture_aggregate for rollups. Usage is only implied by 'recent', leaving the agent to guess when this beats capture_search.

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

capture_purgeA
DestructiveIdempotent

Delete captures by age/session/project (filter required).

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNo
project_rootNo
older_than_secNoDelete captures older than this many seconds.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds the useful non-schema constraint that a filter is mandatory, but says nothing about irreversibility, scope of deletion, or whether results are recoverable — expected additions for a destructive purge.

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 short sentence, front-loaded with the destructive verb and the resource, with the critical constraint tucked in parentheses. Nothing is wasted.

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 destructive tool with no output schema and no required parameters, the description covers the essential precondition but omits return information and the consequence of an over-broad filter. Combined with annotations that carry the destructive hint, it is adequate but not 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 coverage is only 33%, with just older_than_sec documented, so the description must compensate. 'by age/session/project' maps loosely onto older_than_sec, session_id and project_root, giving each filter a conceptual meaning, but it does not clarify whether filters combine as AND/OR or what a missing filter means.

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

Purpose4/5

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

States a specific verb (Delete) and resource (captures) plus the three filtering dimensions (age/session/project), which is enough to distinguish it from sibling read tools like capture_list and capture_search. It stops short of naming a specific alternative, so it sits at a clear-but-undifferentiated 4.

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 parenthetical '(filter required)' is real usage guidance — it tells the agent a precondition that the schema does not enforce (0 required parameters). However, there is no when-to-use versus capture_get/memory_delete guidance and no indication of what happens if a filter is omitted despite the warning.

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

capture_putB

Sandbox a verbose tool output to FTS5 store; returns id + preview.

ParametersJSON Schema
NameRequiredDescriptionDefault
metaNoFree-form metadata stored alongside the capture.
outputYesFull raw output to capture.
tool_nameYesLogical tool name (e.g. 'Bash', 'WebFetch', 'mcp__playwright__snapshot').
session_idNoOptional session id to scope retrieval.
args_summaryNoShort human description of the call (URL, command, query).
project_rootNoOptional active project root.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and non-idempotent, so the write nature is covered structurally. The description adds value by disclosing the return payload ('returns id + preview') and the backing store (FTS5), but says nothing about durability, dedup, or how the id is later used with capture_get.

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 with no wasted words, delivering action, destination, and return value in one pass.

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 appropriately spells out the return (id + preview), and params are fully documented in the schema. Minor gap: no routing guidance to the retrieval siblings that consume the returned id.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all six parameters and the baseline is 3. The description adds no parameter-level detail (e.g., what 'preview' truncates or how tool_name keys retrieval) beyond what the schema provides.

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

Purpose4/5

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

States a specific verb (sandbox/capture) and resource (verbose tool output) and names the destination store (FTS5) plus the return shape (id + preview). An agent can tell what it does, but it does not explicitly distinguish itself from the capture_get/capture_search family by name.

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

Usage Guidelines2/5

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

The phrase 'sandbox a verbose tool output' implies the scenario, but there is no explicit when-to-use, no prerequisites, and no named alternative among the many capture_* and memory_* siblings. An agent must infer that this is the write side of the capture family.

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

checkpointB

Unified checkpoint CRUD. op = create | list (default) | restore | delete | prune | compare.

ParametersJSON Schema
NameRequiredDescriptionDefault
opNoOperation to perform (default 'list').
projectNoProject name/path (default: active).
keep_lastNoFor op=prune: how many recent checkpoints to keep (default 10).
max_filesNoFor op=compare: max files compared (default 20).
file_pathsNoFor op=create: project files to snapshot.
checkpoint_idNoFor op=restore/delete/compare: checkpoint identifier.

TDQS

B3.2/5.0
Behavior2/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, yet the description lists 'delete' and 'prune' operations, which inherently remove data, and 'restore', which can overwrite project state. The description does not clarify this tension, nor does it say what a checkpoint contains, whether restore is reversible, or what compare returns. It adds essentially nothing beyond the operation names already in the enum.

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 short sentences, purpose front-loaded and the operation list compactly encoded. 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?

For a six-parameter multi-operation tool with no output schema, the description is too thin: it never explains what a checkpoint is, what restore/prune actually do to project state, or how compare differs from a diff. Annotations only cover the safety profile, so the behavioral burden falls on the description and is largely unmet.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents each parameter's role and defaults (e.g., keep_last default 10, checkpoint_id for restore/delete/compare). The description repeats the operation set but adds no syntax, format, or interaction detail beyond the structured fields, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('Unified checkpoint CRUD') and enumerates the six operations, so the agent immediately knows the domain. It is clear and self-contained, but it does not distinguish itself from any sibling tool or clarify scope beyond 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 Guidelines3/5

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

The op enum and the '(default)' marker imply usage, and listing the operations gives a rough map of when each branch applies. However, there is no explicit when-to-use guidance, no prerequisites, and no routing to alternatives among the many sibling tools.

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

corpus_buildB
Idempotent

Build a thematic corpus from observations filtered by type / tags / symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesUnique per project.
projectNoProject name/path (default: active).
filter_tagsNo
filter_typeNo
filter_symbolNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare this is a non-readOnly, idempotent, non-destructive, closed-world write, so the safety profile is covered. The description adds the scope of what is included (type/tags/symbol) but says nothing about persistence, what happens when the name already exists, or whether an existing corpus is overwritten or fails.

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 with no wasted words. It is efficient, though arguably under-specified rather than merely concise given the five-parameter schema.

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 five-parameter write tool with no output schema and only 40% schema coverage, one sentence is thin. It omits how filters combine, the project/active-project prerequisite, error behavior on duplicate names, and any relationship to corpus_query, leaving an agent without enough to invoke it confidently.

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 only 40%: filter_tags, filter_type, and filter_symbol have no schema descriptions. The description partially compensates by mapping 'type / tags / symbol' to those three parameters, but it gives no combination semantics (AND/OR), value formats, or default behavior for the project parameter.

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

Purpose4/5

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

States a specific verb ('Build') and resource ('thematic corpus'), plus its input source ('observations') and filter facets. It is distinguishable from the 'corpus_query' sibling by verb, though the description never explicitly contrasts the two.

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 filtering facets imply the context (create a corpus from filtered observations), but there is no explicit when-to-use guidance, no mention of the paired 'corpus_query' tool, and no prerequisites such as project context or required permissions.

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

corpus_queryB
Read-onlyIdempotent

Format all observations of a named corpus as markdown context + a question, ready for answering.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCorpus name previously built via corpus_build.
projectNoProject name/path (default: active).
questionYesQuestion to answer with the corpus context.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the useful detail that the output is markdown context packaged with the question, hinting at the return shape, but says nothing about size limits, truncation, or what happens if the corpus is missing.

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 compact sentence with the core action front-loaded and no wasted words. The phrasing 'markdown context + a question' is slightly informal but efficient and clear.

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 3-parameter read-only retrieval tool with no output schema, the description covers the essentials of what is produced. However, it leaves genuine ambiguity about whether the tool answers the question or merely assembles the context, which could mislead an agent about the result.

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

Parameters3/5

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

Schema description coverage is 100%, with all three parameters documented including the corpus_build dependency and the project default. The description adds no parameter-level meaning beyond this, so the baseline 3 applies since the schema does the heavy lifting.

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

Purpose4/5

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

The description names a specific action (format observations of a named corpus as markdown context plus a question) and a clear resource. It implicitly separates this from corpus_build, which constructs the corpus, but never names that sibling explicitly. The 'ready for answering' framing usefully clarifies it prepares context rather than producing a final answer.

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 when-to-use or when-not-to-use guidance, and no exclusions or alternatives are named. The only hint of usage context is in the schema field ('previously built via corpus_build'), which is not part of the description. An agent gets no routing help from the description text itself.

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

detect_breaking_changesB
Read-onlyIdempotent

Breaking API changes vs a git ref: removed funcs/params, added required params, signature changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).
since_refNoGit ref to compare against (default: "HEAD~1"). Can be a commit SHA, branch, or tag.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description usefully narrows behavior by enumerating the breaking-change classes detected, but says nothing about scan scope (whole project vs. changed files), output format, or how the git-ref comparison is performed.

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 naming the operation, the comparison basis, and the detected categories. No filler, no repetition of the title, and the most decision-relevant information leads.

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?

With no output schema, the description should at least frame what comes back; it partially does by listing the change categories. However, it omits result scope (whole project vs. diff range), and any indication of how findings are grouped or surfaced, leaving the agent under-informed about the response for a diff-analysis 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 coverage is 100%, so both parameters (project, since_ref) are already fully documented in the schema, including defaults and accepted ref forms. The description's 'vs a git ref' phrase only loosely mirrors since_ref and adds no syntax or semantics beyond the schema; baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('detect breaking changes') and enumerates the exact change categories it flags (removed funcs/params, added required params, signature changes), so the agent knows precisely what it returns. It does not, however, distinguish itself from close siblings such as get_change_impact or get_changed_symbols, so an agent still has to guess which of the several change-analysis tools applies.

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?

The description gives no when-to-use guidance and names no alternative. Given siblings like get_changed_symbols, get_change_impact, and build_commit_summary, the absence of any routing cue (e.g. 'use this when you only care about API-breaking edits') leaves selection ambiguous.

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

discover_project_actionsA
Read-onlyIdempotent

Detect conventional project actions from build files (tests, lint, build, run) without executing.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds real behavioral value by naming the data source (build files) and asserting nothing is executed, which matters given the adjacent runner tool. No permission, cost, or caching details are added.

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 tight sentence with the action, source and constraint front-loaded. Zero filler and no restatement of the tool name.

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 single-optional-param, read-only discovery tool with no output schema, the description gives enough to call it correctly. It could hint at the shape of the detected actions (names/labels), but with no output schema that is not required.

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?

Only one parameter and schema coverage is 100%, so the schema already documents 'project' including the default-to-active behavior. The description adds nothing beyond it; baseline 3 applies when the schema does the work.

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

Purpose5/5

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

Specific verb ('Detect') plus resource ('conventional project actions from build files'), with the enumerations (tests, lint, build, run) and the key qualifier 'without executing' that distinguishes it from the run_project_action sibling. An agent can tell it apart from the sibling without opening the schema.

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

Usage Guidelines3/5

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

'Without executing' implies this is a dry discovery step that precedes execution, so the usage context is inferred rather than stated. It never names run_project_action or explicitly says 'use this first, then call the runner.' Adequate but leaves routing to inference.

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

edit_lines_in_symbolA
Destructive

Edit code without reading the file first: exact old_string -> new_string, like Edit, matched only inside one function or class. Edit refuses a file you have not Read, which in a large file means reading all of it; this needs only the symbol name. replace_all=true changes every occurrence inside that symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).
file_pathNoOptional file path to disambiguate symbols.
new_stringYesReplacement text.
old_stringYesExact text to find inside the symbol body (must be unique within the symbol unless replace_all=true).
replace_allNoIf true, replace every occurrence in the symbol body (default false).
symbol_nameYesFunction/method/class name to edit inside.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and non-idempotent, so the safety profile is covered. The description adds meaningful behavior beyond that: exact old_string→new_string matching like Edit, scoping to a single symbol, and the replace_all semantics for multiple occurrences.

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

Conciseness5/5

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

Front-loads the key differentiator ('Edit code without reading the file first') and follows with the mechanism and the replace_all behavior. Every sentence earns its place with no 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?

For a destructive edit tool with annotations covering safety, the description supplies usage, matching semantics, and scoping rules. No output schema exists, but an edit tool needs little return-value explanation. Minor gap: no mention of failure behavior when the symbol name is ambiguous or not found.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are already documented, including old_string uniqueness within the symbol and replace_all defaults. The description reinforces the matching model but adds little syntax or format detail beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (edit) and resource (lines inside a symbol/function/class), and explicitly distinguishes itself from the sibling Edit tool by noted scoping ('matched only inside one function or class'). An agent can tell it apart from replace_symbol_source and Edit without opening a schema.

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

Usage Guidelines4/5

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

Names the alternative tool (Edit) and the condition that selects it: when a large file would otherwise require reading in full. It also clarifies the constraint that matching happens only inside one symbol. It stops short of stating when NOT to use it (e.g. multi-symbol or cross-file edits), so not a full 5.

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

find_dead_codeA
Read-onlyIdempotent

Project-wide audit of unreferenced functions/classes (zero callers, excludes entry points, tests, route handlers).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).
max_resultsNoMaximum number of dead symbols to report (default: 20). Header always shows true total; raise for full audit.

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive, so the bar is lower. The description adds meaningful analytical context beyond annotations: what counts as dead (zero callers) and what is deliberately excluded (entry points, tests, route handlers). It doesn't mention cost or runtime, but this is useful transparency for a static analysis.

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 with the core definition first and the exclusion scope in a tight parenthetical. Every clause earns its place; no waste.

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

Completeness4/5

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

For a read-only, two-parameter analysis tool with full schema coverage and no output schema, the description plus annotations give an agent enough to invoke it correctly. Only the absence of when-to-use routing against sibling analysis tools keeps it short of 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%, so both parameters (project default, max_results with 'header shows true total' note) are fully documented in the schema. The description adds no parameter detail beyond what the schema already provides, so baseline 3 applies.

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

Purpose5/5

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

Names a specific analysis (audit of unreferenced functions/classes) with the defining criterion (zero callers) and explicit scope exclusions. An agent can distinguish this from siblings like find_semantic_duplicates or find_import_cycles without opening the schema.

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

Usage Guidelines3/5

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

The description implies when it applies via 'project-wide audit' and the exclusions, but never states when to prefer this over related analysis tools (find_semantic_duplicates, find_import_cycles, get_entry_points) or any prerequisites. Usage is inferable but not guided.

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

find_hotspotsB
Read-onlyIdempotent

Rank functions by hotspot kind. complexity (all langs) | allocation (Java) | performance (Java).

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoHotspot category (default 'complexity').
projectNoProject name/path (default: active).
min_scoreNoMinimum score to include (default: 0 for complexity, 1 for Java kinds).
max_resultsNoMaximum number of functions to report (default: 20).

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, covering the safety profile. The description adds nothing behavioral on top of that: no indication of sort order, scoring basis, or scope of analysis. The one extra fact (language applicability per kind) is a validity constraint rather than behavior, so it is credited under parameter semantics.

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?

Extremely compact and front-loaded — the core action leads and the kind/language mapping follows. The pipe-delimited fragment is slightly cryptic and borders on under-specification rather than conciseness, which keeps it off a 5.

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?

With 100% schema coverage, annotations, and no required parameters, the agent can invoke this correctly. Still missing for a ranking tool are the ordering of results (descending score?) and the analysis scope, which the description never addresses and the schema does not cover.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, and the description genuinely adds meaning the schema lacks: it tells the agent that 'allocation' and 'performance' only apply to Java while 'complexity' spans all languages. That is a non-obvious constraint that prevents selecting an invalid kind for a non-Java project.

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

Purpose4/5

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

States a specific verb (rank) and resource (functions) plus the hotspot categories that define the operation, so an agent knows this produces a ranked hotspot list. It is clearly distinct from siblings like get_functions or find_dead_code, though 'hotspot' itself is never defined beyond the enum values.

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 parenthetical language tags ('complexity (all langs)', 'allocation (Java)', 'performance (Java)') imply which kind to choose for a given codebase, which is real guidance. However there is no explicit when-to-use versus alternatives, no prerequisites, and no statement of when NOT to call it.

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

find_impacted_test_filesA
Read-onlyIdempotent

Infer pytest files likely impacted by changed files or symbols.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).
max_testsNoDefault 20.
symbol_namesNo
changed_filesNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the word 'likely', which usefully signals a heuristic, non-exhaustive result, but says nothing about how inference is computed or what the response contains.

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 with zero filler that states the action and the input sources immediately.

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 zero-required-parameter inference tool with no output schema, the description covers the essential 'what'. It is slightly thin on how likely-impact is determined and what the returned list looks like, but the model's read-only, heuristic nature is fairly communicated.

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 50%: project and max_tests are documented in the schema while symbol_names and changed_files are not. The description names 'changed files or symbols', partially compensating for those two undocumented parameters, but adds no format, precedence, or interaction detail.

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?

Specific verb ('Infer') and resource ('pytest files likely impacted') make the operation unambiguous. It does not, however, explicitly differentiate itself from the sibling run_impacted_tests, which an agent must infer runs rather than finds the files.

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 'changed files or symbols' implies the intended trigger context, but there is no explicit when-to-use guidance, no when-not guidance, and no reference to the closely related run_impacted_tests alternative. Usage is only inferable.

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

find_import_cyclesB
Read-onlyIdempotent

Detect import cycles (strongly-connected components) in the file-level import graph (Tarjan's).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).
max_cyclesNoMaximum number of cycles to return (default 20, 0 = unlimited).

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so safety is covered. The description adds no behavioral context beyond the algorithm name – it doesn't say how results are ordered, whether partial cycles are returned, or how max_cycles=0 affects output volume.

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 with zero filler, correctly placing the verb and the clarifying parenthetical about SCCs and the algorithm.

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 two-param read-only diagnostic with no output schema, the description covers the what but not the output shape (list of cycles? nested structure?) or result ordering. Annotations handle the safety profile, so nothing critical is missing, but the return-value gap leaves the agent unsure how to consume the result.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds no parameter meaning beyond the schema's own documentation of 'project' and 'max_cycles' defaults and the unlimited-flag.

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

Purpose4/5

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

States a specific verb (Detect) and resource (import cycles in the file-level import graph), plus names the algorithm (Tarjan's) and clarifies the output is strongly-connected components. This is much more specific than the sibling get_imports, though it doesn't explicitly contrast against it or find_dead_code.

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 siblings like get_imports, get_file_dependencies, or find_dead_code, which all touch the import graph. The agent must infer the diagnostic use case on its own.

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

find_semantic_duplicatesA
Read-onlyIdempotent

Find duplicate functions. method='ast' (fast, hash-based, catches copy-paste) or 'embedding' (Nomic cosine, catches conceptual clones, tagged sim=min..mean per cluster).

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoast (default, fast, exact) or embedding (slower, catches conceptual clones). Embedding reuses the symbol_vectors index from search_codebase(semantic=True) — first call triggers a ~2min reindex.
projectNoProject name/path (default: active).
min_linesNoSkip functions shorter than this (default 2). Applies to method='ast'.
max_groupsNoMax duplicate groups to return (default 10). Raise for full audit.
min_similarityNoCosine threshold for method='embedding' (default 0.90). Lower = more recall + more noise.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare this a safe, idempotent, non-destructive read. The description adds real behavioral texture: ast is hash-based copy-paste detection, embedding uses Nomic cosine conceptual matching, and results are tagged with a sim=min..mean range per cluster (an output-shape hint). The ~2min reindex cost for embedding lives in the schema rather than here, so it isn't double-credited.

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?

Two tightly packed sentences, with the core purpose front-loaded and the mode comparison following. No filler, though the parenthetical enumeration is dense enough to require a second read.

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?

With no output schema, the description carries the burden of explaining what comes back. It hints that embedding clusters carry sim=min..mean tags but never describes the structure of a duplicate group, so an agent must infer the return shape. Safety is covered by annotations, so the gap is moderate rather than severe.

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

Parameters3/5

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

Schema coverage is 100%, so all five parameters are already documented with defaults and tradeoffs (min_lines applies to ast, min_similarity to embedding). The description only adds semantics for the method parameter, which the schema also explains; baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource ('Find duplicate functions') and immediately distinguishes the two detection modes. An agent can tell what it does without opening the schema, though it doesn't name a sibling it supersedes (e.g. find_dead_code) to sharpen the boundary.

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?

Gives clear guidance on choosing between method='ast' and 'embedding' (fast hash-based vs conceptual clones), which is the key decision. But it offers no tool-level when-to-use or when-not guidance relative to the many sibling analysis tools, and no exclusions or prerequisites at the description level.

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

find_symbolA
Read-onlyIdempotent

Where is X defined: file, line, signature and preview in one call, the definition only where Grep returns every mention. Functions and classes first, then module constants and variables.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
hintsNoAdd a `_hints` key with next-step tool calls (default true).
kindsNoSymbol kinds to search. Default: function+class (plus variable when TOKEN_SAVIOR_VARIABLES=search).
levelNo0 full, 1 no preview, 2 minimal.
namesNoBatch mode: list of names (max 10). Returns {name: result} dict. Mutually exclusive with 'name'.
queryNoAlias de `name`.
symbolNoAlias de `name`.
projectNoProject name/path (default: active).
compressNoCompact rows (default true).
symbol_nameNoAlias de `name`.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is fully covered structurally. The description contributes result-shape context (file/line/signature/preview in one call, definition-only vs. all mentions) beyond the annotations, but adds nothing on truncation, limits, or failure behavior, so it stays at a minimum-viable 3.

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?

Essentially one dense, front-loaded sentence that leads with the core value proposition (definition location in one call) and then qualifies scope against Grep. Efficient with no filler, though the run-on structure makes it slightly harder to parse than a clean 5.

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

Completeness4/5

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

With no output schema, the description does the work of describing the return payload (file, line, signature, preview) and result ordering, which is the right compensation for a 10-parameter tool. It is complete enough to invoke, though return-format absolutes and multi-result/pagination behavior remain unaddressed.

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 90% and the schema already documents name aliases, kinds, level, names batching, hints, project, and compress. The description adds no parameter-level meaning at all (nothing about the name-alias set or batch mode), so the baseline 3 applies for high-coverage schemas.

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

Purpose4/5

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

States a concrete verb+resource ('where is X defined: file, line, signature and preview') and explicitly contrasts with Grep's every-mention behavior, so an agent knows this is a definition-locator, not a text search. It does not differentiate itself from close code-intel siblings such as search_in_symbols, get_class_source, or get_function_source, which caps it below 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?

Usage is implied rather than stated: it says results are ordered 'functions and classes first, then module constants and variables,' which hints at defaults, but there is no explicit when-to-use/when-not or named alternative (e.g., 'use get_function_source for the full body'). A 3 reflects adequate but inferential guidance.

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

get_call_chainB
Read-onlyIdempotent

Shortest dependency path between two symbols (BFS through the dep graph).

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoPer-hop verbosity: 0=full (source_preview), 1=sig+file, 2=minimal name+file+line. Default 2.
projectNoProject name/path (default: active).
to_nameYesTarget symbol name.
from_nameYesStarting symbol name.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is covered. The description adds meaningful behavioral context by specifying BFS shortest-path semantics, but says nothing about result ordering, direction, or behavior when no path exists. Given the annotation coverage, a 3 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.

Conciseness4/5

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

A single front-loaded sentence with no wasted words, stating the operation and the algorithm. It is efficient, though arguably terse enough that it could have afforded one more clause on when to use it.

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

Completeness4/5

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

With 100% schema coverage, no output schema, and simple flat parameters, the definition provides enough to invoke the tool correctly. The main gap is the absence of usage/routing guidance relative to the many dependency-analysis siblings.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (from_name, to_name, project, level) are documented in the schema itself, including the level enum semantics. The description adds no parameter-level detail, so the baseline 3 applies.

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 gives a specific resource ('dependency path between two symbols') and mechanism ('BFS through the dep graph'), which distinguishes it from siblings like get_dependencies and get_dependents that operate at a single level. It is clear what the tool computes, though it does not explicitly name an alternative for contrast.

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 reach for this tool versus get_dependencies, get_dependents, get_change_impact, or find_symbol. No prerequisites or exclusions are stated; the agent must infer usage purely from the one-line purpose.

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

get_changed_symbolsB
Read-onlyIdempotent

Symbol-level summary of worktree changes (or HEAD vs ref).

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoCompare base (omit=worktree).
projectNoProject name/path (default: active).
max_filesNoDefault 20.
max_symbols_per_fileNoDefault 20.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so safety is covered. The description adds the worktree-vs-ref distinction but omits important behavior: whether results are truncated at max_files/max_symbols_per_file and what happens when limits are hit. Adequate but thin given the low annotation burden.

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 tight sentence with the core concept front-loaded and no filler. It is efficient, though so terse that some behavioral context is lost rather than merely compressed.

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?

With no output schema, the description should carry more about the returned shape and truncation behavior implied by the max_files/max_symbols_per_file defaults. Annotations cover safety, but the agent still lacks enough to predict results for a 4-parameter analysis 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 coverage is 100%, so all four parameters are documented in the schema. The description only echoes the ref semantics ('HEAD vs ref') and clarifies nothing about max_files or max_symbols_per_file truncation, so it lands at the baseline for a fully-covered 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?

States a specific verb+resource ('Symbol-level summary of ... changes') and even names the two comparison scopes (worktree, HEAD vs ref). The 'symbol-level' qualifier usefully distinguishes it from file-level siblings like get_git_status, though no sibling is named explicitly.

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

Usage 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 pick this over get_git_status, build_commit_summary, get_change_impact, or find_hotspots, all of which touch change analysis. The parenthetical 'or HEAD vs ref' hints at a mode but doesn't state when each is appropriate.

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

get_change_impactB
Read-onlyIdempotent

Impact analysis: direct + transitive dependents of a symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
projectNoProject name/path (default: active).
max_directNo0=all.
max_transitiveNo0=all.
max_total_charsNoDefault 50000.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed-world scope, so the safety profile is covered. The description adds the useful scope detail that results include transitive dependents, but says nothing about result shape, depth caps, or symbol-name resolution.

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 clause with zero filler; the scoping fact (direct + transitive) comes first. It is arguably undersized for a five-parameter tool, which keeps it from a 5.

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 read-only analysis tool with annotations covering safety and 80% schema coverage, the minimum is met, but with no output schema the agent gets no hint about return format, result volume, or how to identify the symbol by name. Those gaps leave it merely adequate.

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 80%, so the schema documents project, max_direct, max_transitive and max_total_chars; the description adds no parameter meaning beyond that. Baseline 3 is appropriate since the schema does the heavy lifting, though the required 'name' parameter's expected format (qualified name vs path) is undocumented anywhere.

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

Purpose4/5

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

States a specific resource ('symbol') and analysis type ('direct + transitive dependents'), which is enough to separate it from the sibling get_dependents (direct-only) and get_call_chain. It is clear but terse, and does not explicitly name the sibling it is not, so it stops 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 phrase 'Impact analysis' implies the pre-change workflow (assess blast radius before editing), but there is no explicit when-to-use, no prerequisites, and no routing to alternatives like get_dependents or find_impacted_test_files. Usage is inferable rather than stated.

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

get_classesB
Read-onlyIdempotent

List classes (name, lines, methods, bases, file).

ParametersJSON Schema
NameRequiredDescriptionDefault
hintsNoAppend a `_hints` entry with next-step tool calls (default true).
projectNoProject name/path (default: active).
compressNoCompact rows (default true).
file_pathNoFilter to file (omit=all).
max_resultsNoDefault 100. 0=unlimited. Truncated results carry a trailing `_truncated` marker with total count.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description's only addition is naming the returned fields, which is mildly useful given no output schema exists, but it adds no pagination or scope behavior of its own.

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 compact sentence, front-loaded with the verb and resource, with zero wasted words. Field list is dense but earns its place by hinting at return shape absent an output schema.

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

Completeness4/5

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

For a simple read-only list tool whose annotations cover safety and whose schema covers every parameter, the description is nearly sufficient. The only shortfall is routing guidance versus sibling listing 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 100%, so all five parameters are already documented in the schema (hints, project, compress, file_path, max_results). The description adds no parameter syntax or filtering semantics beyond what the schema provides, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ("List classes") and even enumerates the returned fields (name, lines, methods, bases, file). However, it does nothing to distinguish itself from closely named siblings like get_functions or get_class_source, so an agent must infer the boundary.

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 when-to-use guidance, no exclusions, and no mention of alternatives such as get_class_source (single-class detail) or get_functions (function listing). The agent must guess the selection criteria entirely.

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

get_class_sourceC
Read-onlyIdempotent

Fetch a class source body (including methods).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
hintsNoAppend a one-line get_full_context hint (default true).
levelNo
namesNoBatch mode: list of names (max 10). Returns {name: result} dict. Mutually exclusive with 'name'.
projectNoProject name/path (default: active).
file_pathNo
max_linesNoCap lines (0=all, level=0 only).
class_nameNoAlias de `name`.
force_fullNoBypass symbol cache.
symbol_nameNoAlias de `name`.

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only the content-scope note '(including methods)' and says nothing about caching (relevant given force_full), level-based truncation, or batch return shape.

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 with zero filler. It is efficient, though arguably terse given the tool's complexity, so it stops short of 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?

For a 10-parameter tool with no output schema, aliases (class_name, symbol_name), a batch mode, caching bypass, and level-based line capping, the description is far too thin. It leaves the agent to infer most operational behavior from the schema alone.

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 70% with 10 parameters, and several key inputs ('name', 'level', 'file_path') carry no schema description at all. The description mentions none of the parameters, so it does not compensate for the coverage gap, particularly the mutually exclusive name/names batch behavior.

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

Purpose4/5

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

States a specific verb and resource ('Fetch a class source body') and scopes the content with '(including methods)', which cleanly separates it from the sibling get_function_source. It does not name the sibling explicitly, but the class-vs-function distinction is inferable from the resource.

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 when-to-use guidance, no mention of when to prefer this over get_function_source or get_full_context, and no guidance on the batch 'names' mode versus the single 'name' mode. Usage is only implied by the verb.

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

get_db_schemaA
Read-onlyIdempotent

Condensed SQL-migration snapshot: tables (cols, types, nullability, defaults), PKs, FKs, indexes, RLS policies.

ParametersJSON Schema
NameRequiredDescriptionDefault
tablesNoOptional filter: only return these table names.
dialectNoSQL dialect -- currently only 'postgres' is implemented.
projectNoProject name/path (default: active).
migrations_dirNoRelative or absolute path to the migrations directory (default: auto-detect).

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnly=true, idempotent=true, non-destructive=true and closed-world, so the safety profile is fully covered. The description adds one useful behavioral fact beyond that: the data comes from migrations ('condensed SQL-migration snapshot') rather than live introspection, which affects staleness expectations. It does not disclose truncation, size limits, or cost of the call.

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 enumerates the return contents with zero filler. Every token 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?

With no output schema, the description carries the return-value burden and does so by listing the schema elements returned. Combined with complete parameter coverage and full annotations, an agent has nearly everything needed; only the migration-vs-live distinction and result size/pagination are unstated.

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%, with each of the four parameters (tables, dialect, project, migrations_dir) fully documented including defaults and the 'postgres only' constraint. The 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?

States a specific resource (database schema) and enumerates exactly what the snapshot contains: tables with columns/types/nullability/defaults, PKs, FKs, indexes, and RLS policies. None of the sibling tools return DB schema, so an agent can distinguish this from get_structure_summary or get_file_dependencies immediately.

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 when-to-use guidance, no mention of alternatives, and no stated prerequisites. The migration-derived nature of the snapshot is implied by 'SQL-migration' but never explained as a usage condition, and there is no hint that a live-DB variant might be the alternative.

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

get_dependenciesA
Read-onlyIdempotent

Outgoing deps of a symbol: what X calls/uses (downstream).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
depthNoTransitive BFS depth (default 1).
projectNoProject name/path (default: active).
compressNoCompact rows (default true).
max_resultsNoDefault 100. 0=unlimited. Truncated results carry a trailing `_truncated` marker with total count.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered and the bar is low. The description adds the downstream semantics but says nothing about depth behavior, result volume, or truncation beyond what the schema already carries.

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 with no filler; the core concept leads and the parenthetical gloss clarifies it. It is tight, though arguably too terse for a five-parameter graph tool.

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 graph-traversal tool with five parameters and no output schema, the description leaves return shape and traversal behavior to the schema and omits any routing against the many related dependency tools. Annotations cover safety and the schema covers params, so it is minimally viable but thin.

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 80%, with depth, project, compress and max_results all self-documented in the schema (including the truncation marker). The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Outgoing deps of a symbol') and immediately glosses it as 'what X calls/uses (downstream)', which an agent can map to a concrete graph query. The 'outgoing/downstream' framing distinguishes it from the sibling get_dependents (incoming/reverse) without opening either schema.

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

Usage Guidelines3/5

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

The directional framing ('outgoing...downstream') implicitly signals when to reach for this tool versus get_dependents or get_file_dependencies, but there is no explicit when-to-use, when-not, or named alternative. Usage is implied rather than stated.

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

get_dependentsB
Read-onlyIdempotent

Incoming deps: who calls/uses X, direct references only.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
projectNoProject name/path (default: active).
compressNoCompact rows (default true).
max_resultsNo0=all.
max_total_charsNoDefault 50000.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety and repeatability are covered. The description's one additional behavioral fact is 'direct references only', which discloses the transitive-depth limit and is useful, but it says nothing about result shape or scaling/limits.

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 compact fragment that front-loads the key information with zero filler. It is arguably under-specified rather than padded, so it earns its brevity but doesn't maximize the space.

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?

With no output schema and a required 'name' param undocumented in both schema and description, the definition leaves gaps. A 'direct references only' clause helps, but the return shape (callers/referrers list) is never described, so an agent must probe to learn the output.

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 80%, so the baseline is 3. The description implies the required 'name' parameter is a symbol ('who calls/uses X'), partially compensating for that parameter having no schema description, but adds no format or example detail beyond what the schema provides.

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 gives a specific verb-scope and resource: incoming dependencies, with the qualifier 'who calls/uses X' that makes the direction unambiguous. It implicitly contrasts with the outgoing-dependency sibling get_dependencies, though it never names it, so differentiation is inferable rather than explicit.

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 'direct references only' scopes the search to non-transitive references, which is a form of usage guidance. However, it offers no explicit when-to-use/when-not or alternatives (e.g. get_dependencies for the reverse direction, get_call_chain for transitive paths), leaving routing to inference.

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

get_diagnosticsA
Read-onlyIdempotent

Type-checker errors for this project, grouped by file, each mapped to its enclosing symbol. Runs the checker the project already declares (tsc / mypy / pyright) - no new dependency. Use after an edit instead of shelling out to a build: the output is bounded and says exactly what it truncated.

ParametersJSON Schema
NameRequiredDescriptionDefault
checkerNoForce a checker instead of detecting it.
projectNoProject name/path (default: active).
timeoutNoSeconds before giving up (default 180).
file_pathNoRestrict to one file (suffix match).
max_filesNoFiles reported (default 15).
max_per_fileNoDiagnostics kept per file (default 10).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context: it reuses the project's declared checker (no new dependency) and that output is bounded with explicit truncation reporting.

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 sentences, purpose front-loaded, each carrying distinct information (what it returns, how it runs, when to use it). No filler or restated phrasing.

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

Completeness4/5

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

With no output schema, the description usefully covers the return shape (grouped by file, mapped to symbol) and truncation behavior. It could say how to raise the bounds when output is truncated, but for a read-only diagnostic that is a minor gap.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are already documented, giving a baseline of 3. The description adds only marginal meaning ('runs the checker the project already declares'), which lightly contextualizes auto-detection but adds no format or syntax detail.

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

Purpose5/5

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

States a specific verb and resource (type-checker errors) plus the output shape (grouped by file, mapped to enclosing symbol). This clearly distinguishes it from near-neighbors like get_git_status or run_impacted_tests, which report different things.

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?

Explicitly says to use it 'after an edit instead of shelling out to a build', which supplies both a trigger and an alternative. It does not state any when-not-to-use condition, so it falls just short of the full 5.

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

get_edit_contextA
Read-onlyIdempotent

Pre-edit bundle: source + direct deps + callers + same-file siblings + impacted tests.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
symbolNoAlias de `name`.
projectNoProject name/path (default: active).
max_depsNoDefault 10.
max_callersNoDefault 10.
symbol_nameNoAlias de `name`.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety and repeatability are covered. The description adds the useful fact that this is a composite/aggregated read rather than a single-resource fetch, but says nothing about cost, size limits, or truncation behavior of the bundle.

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 fragment with zero filler; the bundle contents are listed immediately. It is arguably too terse to stand alone, but no sentence is wasted.

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

Completeness4/5

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

For a read-only aggregator with no output schema and high schema coverage, the description adequately signals what comes back. The gaps are the alias-parameter semantics and any indication of bundle size or output shape, which are minor given the annotations.

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 83%, so the schema carries the parameter burden and baseline is 3. The description adds nothing about parameters, and notably does not clarify the name/symbol/symbol_name alias anyOf or how max_deps/max_callers shape the returned bundle.

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?

Names a specific artifact ('pre-edit bundle') and enumerates its five contents (source, direct deps, callers, same-file siblings, impacted tests), which is far more informative than a bare verb+resource. It distinguishes itself reasonably from siblings like find_impacted_test_files or get_dependencies, though it never explicitly says how it differs from get_full_context or get_change_impact.

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?

'Pre-edit' implies the trigger point (before making a change), but there is no explicit when/when-not statement and no named alternative. With get_full_context, get_change_impact and get_dependencies in the sibling set, the agent must guess which context-gathering tool to pick.

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

get_entry_pointsB
Read-onlyIdempotent

Score functions by likelihood of being execution entry points: routes, handlers, main, exported APIs.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).
max_resultsNoMaximum number of entry points to return (default 20).

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and closed-world, so the safety profile is covered. The description adds real value by defining the scoring heuristic behind 'entry point', but says nothing about ordering of results or how scores are presented.

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 with no filler; the enumeration of entry-point categories is dense and useful. It is arguably too terse for a scoring tool, but nothing is wasted.

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?

There is no output schema, so the description carries the burden of explaining the return value; it implies scored functions but not the result shape or sort order. For a read-only heuristic tool with a fully documented schema this is adequate but leaves a real gap around output.

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% with only two parameters, both fully documented (project default, max_results default 20). The description adds no parameter semantics 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.

Purpose4/5

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

States a specific verb (score) and resource (functions by likelihood of being execution entry points), and enumerates the categories it recognizes: routes, handlers, main, exported APIs. That is clear enough to know what it returns, though it never explicitly distinguishes itself from siblings like get_functions or get_routes.

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 when-to-use guidance, no conditions, and no named alternatives. An agent must infer that this is for locating starting points rather than listing all functions, and cannot tell from the text why it should pick this over get_routes or get_functions.

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

get_env_usageA
Read-onlyIdempotent

Cross-reference an env var across code, .env files, and workflow configs. Shows where it's defined, read, written.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).
var_nameYesEnvironment variable name (e.g. HELLOASSO_CLIENT_ID).
max_resultsNoMax results (0 = all, default 0).

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the safety profile is fully covered. The description adds value by disclosing the search scope (three source types) and what the result reveals (defined/read/written locations), which goes beyond the annotations.

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

Conciseness5/5

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

Two tight sentences, zero filler. The scope is front-loaded in the first sentence and the return content follows immediately.

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

Completeness4/5

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

For a read-only query tool with full schema coverage and no output schema, the definition is nearly complete: it explains the scope and the nature of the output. It could note default project scoping or search limitations, but the schema already covers the project default.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (project, var_name, max_results) are already documented in the schema. The description adds no syntax or format detail beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (cross-reference) and resource (env var), and scopes the search across three concrete domains: code, .env files, and workflow configs. This distinguishes it from a generic config analyzer, but it never names or contrasts with the overlapping sibling 'analyze_config', so it stops short of full differentiation.

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 the use case (locate where an env var is defined/read/written), so an agent can infer intent, but there is no explicit when-to-use guidance or exclusion relative to siblings like analyze_config or search_codebase.

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

get_feature_filesB
Read-onlyIdempotent

Files matching a feature keyword + traced imports, classified by role (core, test, config).

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYes
projectNoProject name/path (default: active).
max_resultsNo0=all.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint and openWorldHint, so safety and side-effect profile is covered. The description adds that results include traced imports and role classification, useful output context, but says nothing about pagination, limits, or return shape.

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 compact sentence with the key scope (keyword + traced imports) front-loaded. No wasted words, though it is a sentence fragment rather than a complete statement of purpose.

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?

With no output schema, the description carries return-value burden and does describe the shape (files + imports, classified by role). However, it omits how the keyword is matched and when to prefer it over search siblings, leaving a gap for a 3-param query 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 coverage is 67%; the description maps the 'feature keyword' to the required keyword param and hints at import tracing, but adds no format or syntax for project or max_results beyond what the schema supplies. Baseline 3 is appropriate.

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

Purpose4/5

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

States a specific resource (files) and scope: files matching a feature keyword plus traced imports, with role classification. An agent can grasp the concept, though it doesn't explicitly differentiate from siblings like search_codebase or get_file_dependencies.

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 when-to-use guidance and no named alternatives among many overlapping siblings (search_codebase, find_symbol, get_file_dependencies). The agent must infer the scenario from the description alone.

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

get_file_dependenciesB
Read-onlyIdempotent

Files imported by this file (outgoing file-level import edges).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).
file_pathYesRelative path to the file.
max_resultsNoMaximum number of results to return (0 = unlimited, default 0).

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description's one contribution is defining 'dependencies' as file-level import edges, which distinguishes this from symbol-level relatives, but it discloses nothing about return shape, ordering, or recursion depth.

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

Conciseness4/5

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

A single front-loaded sentence with no filler; the direction qualifier arrives immediately. It is lean to the point of being undersized for the tool's role, but every word carries meaning.

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, the description is the only place to explain what comes back, and it does not say whether results are paths, edge objects, or whether traversal is direct-only versus transitive. For a dependency-query tool sitting among several near-identical siblings, this leaves meaningful 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 100%, so project, file_path, and max_results are already fully documented. The description adds no parameter syntax, path semantics, or default behavior beyond what the schema provides, so the baseline 3 applies.

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

Purpose4/5

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

The description names a specific resource ('files imported by this file') and pins the direction with 'outgoing file-level import edges', which is the key ambiguity against siblings like get_file_dependents. It stops short of naming an alternative tool, so it is clear but not sibling-differentiating by name.

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

Usage Guidelines2/5

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

There is no when-to-use statement, no exclusion, and no mention of the many overlapping siblings (get_imports, get_dependencies, get_file_dependents, find_import_cycles). The 'outgoing' qualifier is definitional rather than guiding, leaving selection entirely to inference.

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

get_file_dependentsB
Read-onlyIdempotent

Files that import this file (incoming file-level import edges).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).
file_pathYesRelative path to the file.
max_resultsNoMaximum number of results to return (0 = unlimited, default 0).

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description contributes only the scope detail that edges are file-level and incoming; it says nothing about truncation behavior despite a max_results parameter.

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 with the core answer first and the parenthetical clarifying edge direction second. No words are wasted and there is no preamble.

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-only lookup with full annotation coverage and a fully described schema, the description identifies the return set adequately despite the absence of an output schema. It stops short of noting ordering, truncation, or empty-result behavior, which is a minor residual gap.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (project, file_path, max_results) are already documented in the schema, including the '0 = unlimited' default. The description adds no syntax, path-format, or defaulting detail beyond that, making the baseline 3 correct.

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 the returned resource and its direction precisely: 'Files that import this file (incoming file-level import edges).' That distinguishes it in spirit from the outgoing-edge sibling get_file_dependencies and the symbol-level get_dependents, but it never names those siblings explicitly, so the differentiation is inferential rather than stated.

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 when-to-use guidance, no mention of prerequisites such as the file being indexed, and no routing to the obvious alternatives (get_file_dependencies for outgoing edges, get_dependents for symbol-level callers). An agent must infer the choice 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.

get_full_contextC
Read-onlyIdempotent

Symbol bundle: location + source + deps/dependents (depth=1) or + change_impact (depth=2).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNocompact (default): source head 80 lines + deps/dependents as names only. full: raw payload.
nameNoSymbol name (function, method, class).
depthNo0=symbol+source, 1=+deps/dependents (default), 2=+change_impact.
namesNoBatch mode: list of names (max 10). Returns {name: result} dict. Mutually exclusive with 'name'.
intentNoOptional task/query. When set, long deps/dependents lists are ranked by relevance to it and trimmed to the top few with a recovery pointer — lossless (the rest stays reachable via mode='full').
symbolNoAlias de `name`. Symbol name (function, method, class).
projectNoProject name/path (default: active).
max_linesNoCap source lines (default 200).
symbol_nameNoAlias de `name`. Symbol name (function, method, class).

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description's contribution is the depth→content mapping, which is genuinely useful behavioral context but largely mirrors the depth parameter's own schema text, so it adds only modest value.

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

Conciseness4/5

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

A single front-loaded sentence with zero filler, though the telegraphic style ('Symbol bundle: location + source...') trades some clarity for brevity.

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 9-parameter tool with no output schema, the description is thin: it never addresses batch mode, the intent-ranking behavior, or what the bundle returns. The schema carries those details, so it is minimally viable rather than 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%, so the schema already documents mode, depth, intent, batch names, aliases and max_lines in detail. The description only restates the depth semantics, adding no syntax or format detail beyond the schema — baseline 3 applies.

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

Purpose3/5

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

The description names a composition (location + source + deps/dependents + change_impact) gated by depth, which is more specific than a tautology, but the shorthand 'location' is ambiguous and it does not distinguish this aggregate tool from the many sibling getters that supply the same pieces individually (get_function_source, get_dependencies, get_dependents, get_change_impact, get_edit_context).

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 when-to-use guidance, no exclusions, and no mention of alternatives. The depth parameter hints at escalating scope but the description never tells the agent when to reach for this bundle instead of the single-purpose sibling tools.

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

get_functionsA
Read-onlyIdempotent

List functions in a file (file_path=...) or across the project.

ParametersJSON Schema
NameRequiredDescriptionDefault
hintsNoAppend a `_hints` entry with next-step tool calls (default true).
projectNoProject name/path (default: active).
compressNoCompact rows (default true).
file_pathNoFilter to file (omit=all).
max_resultsNoDefault 100. 0=unlimited. Truncated results carry a trailing `_truncated` marker with total count.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds the file-vs-project scope but no further behavioral context (return shape, truncation semantics) beyond what the schema/annotations provide.

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

Conciseness5/5

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

A single front-loaded sentence with zero waste; the primary scoping distinction appears before the parenthetical detail.

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-only lister with 100% schema coverage and complete safety annotations, the definition is largely sufficient. Without an output schema, it could say what a function row contains, but that gap is minor for this tool class.

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

Parameters3/5

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

Schema coverage is 100% and every parameter is self-documented, so the schema carries the burden. The description only echoes file_path's scoping role already stated in the schema, adding no new syntax or meaning for hints, compress, project, or max_results.

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

Purpose4/5

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

States a specific verb+resource ('List functions') and scopes it two ways: a single file via file_path, or project-wide. An agent can tell it is a lister rather than a source fetcher, but it does not name the contrasting sibling (get_function_source) explicitly.

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?

Usage is implied by the two scoping modes ('in a file ... or across the project'), which hints at when each applies. However, no explicit when-to-use/when-not guidance or alternatives (e.g. get_function_source for a single body) are given.

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

get_function_sourceB
Read-onlyIdempotent

Full source of a function or method by name, no path needed: reads the symbol instead of the whole file.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFunction or method (e.g. 'MyClass.method').
hintsNoAppend a one-line get_full_context hint (default true).
levelNo
namesNoBatch mode: list of names (max 10). Returns {name: result} dict. Mutually exclusive with 'name'.
projectNoProject name/path (default: active).
functionNoAlias de `name`. Function or method (e.g. 'MyClass.method').
file_pathNo
max_linesNoCap lines (0=all, level=0 only).
force_fullNoBypass symbol cache.
symbol_nameNoAlias de `name`. Function or method (e.g. 'MyClass.method').

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so safety is covered. The description adds that lookup is symbol-based and path-free, which is useful context, but it omits notable behaviors such as batch mode, caching (force_full), and the level/hints output shaping.

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 tight sentence with the key differentiator front-loaded and zero filler. It is efficient, though almost too terse relative to the tool's 10-parameter surface.

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 tool with 10 optional parameters and no output schema, the description covers only the single-symbol lookup path and never mentions batch mode ('names'), 'level', 'max_lines', or cache bypass. An agent cannot infer these capabilities from the description alone, leaving significant 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 coverage is 80%, so most parameters are already documented. The description implies that 'name' drives lookup and file_path is unnecessary, but it adds no syntax, format, or relationship details (batch 'names', 'level', 'max_lines') beyond what the schema provides.

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

Purpose4/5

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

States a specific verb+resource (retrieve full source of a function/method) and adds scope ('by name, no path needed'), which distinguishes it from whole-file reads. It does not explicitly differentiate from siblings like get_class_source or get_functions, 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?

'reads the symbol instead of the whole file' implies the use case (targeted symbol retrieval vs file-level reading) but names no explicit alternative (e.g. get_class_source, get_functions, read_lines) and gives no when-not guidance. Usage is implied rather than stated.

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

get_git_statusB
Read-onlyIdempotent

Structured git status: branch, ahead/behind, staged, unstaged, untracked.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is fully covered. The description's value-add is the field enumeration, which substitutes for the absent output schema but is not deep behavioral context (e.g., no mention of scope or working-directory assumptions).

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 with zero filler; the return fields are listed compactly and every word carries information.

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

Completeness4/5

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

For a simple read-only tool with full annotation coverage and a one-param schema, this is nearly complete; enumerating the returned fields compensates for the missing output schema. Only minor gaps (usage context) remain.

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

Parameters3/5

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

Only one parameter and schema coverage is 100% – the schema already documents 'project' including its default. The description adds nothing beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('git status') and enumerates the returned fields (branch, ahead/behind, staged, unstaged, untracked), so an agent knows exactly what it produces. It doesn't differentiate from any sibling, but no sibling in the list overlaps with git status.

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 when-to-use, when-not-to-use, or alternative is given. The description only says what the tool returns, not when an agent should reach for it versus related tools like build_commit_summary or get_changed_symbols.

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

get_importsB
Read-onlyIdempotent

List imports (module, names, line).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).
compressNoCompact rows (default true).
file_pathNoFilter to file (omit=all).
max_resultsNoDefault 100. 0=unlimited. Truncated results carry a trailing `_truncated` marker with total count.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the safety profile is covered. The description adds nothing beyond that — truncation handling and defaults live in the schema, not the description — making this adequate but not value-adding.

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 short sentence with zero waste and the key output fields front-loaded. It is efficient, though the extreme terseness leaves no room for the context that would make it more useful.

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?

With four optional params, no output schema, and annotations covering safety, the definition is minimally complete — the schema supplies defaults and filtering behavior. It stops short of explaining scope (whole project vs. file) or how results interact with truncation, leaving some inference to the agent.

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 project, compress, file_path and max_results are all documented in the schema itself (including the truncation marker and default semantics). The description contributes no additional parameter meaning, which is the expected baseline when the schema does the work.

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

Purpose4/5

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

States a specific verb (List) and resource (imports) and even names the returned fields (module, names, line), so an agent knows exactly what comes back. It does not, however, differentiate itself from plausible siblings such as get_file_dependencies or find_import_cycles.

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 when-to-use guidance, no mention of prerequisites, and no reference to alternative tools that also expose import information. The only routing signal is the file_path 'omit=all' note buried in the schema.

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

get_project_summaryB
Read-onlyIdempotent

Project overview: file count, packages, top classes/functions, infra dirs.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds value by enumerating the aggregated contents, which is useful for a summary tool, but it says nothing about cost, latency, or scope of aggregation (whole project vs. active project).

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 compact sentence fragment that front-loads the resource ('Project overview') before the content list. No wasted words, though the telegraphic noun-list style sacrifices some readability.

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?

With no output schema, the description does the right thing by enumerating returned contents (counts, packages, top classes/functions, infra dirs), so return-value expectations are set. But in a 60+ tool set with multiple summary/stats siblings, it fails to establish when this tool is the right one, leaving a real gap for selection.

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

Parameters3/5

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

Schema coverage is 100% and the single 'project' parameter is fully documented in the schema, including its '(default: active)' behavior. The description adds no parameter-level meaning beyond what the schema already provides, so the baseline 3 applies.

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

Purpose4/5

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

States a specific resource ('project overview') and enumerates what it aggregates: file count, packages, top classes/functions, infra dirs. An agent understands the output shape. However, it does not distinguish itself from near-siblings like get_structure_summary or get_stats, which sound like they return overlapping structural summaries.

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 over get_structure_summary, get_stats, get_diagnostics, or discover_project_actions. No exclusions, no prerequisites, no alternatives named. The agent must infer usage purely from the tool name.

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

get_routesB
Read-onlyIdempotent

Detect API routes and pages in a Next.js App Router project: path, file, HTTP methods, type.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).
max_resultsNoMax routes to return (0 = all, default 0).

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and a closed-world scope, so the safety profile is covered. The description adds the output fields, but says nothing about scanning behavior, recursion scope, or pagination that would enrich the agent's expectations.

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

Conciseness5/5

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

A single front-loaded sentence that names the verb, the project type, and the returned fields with zero 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 two-optional-parameter read tool with full annotation coverage and no output schema, the description adequately covers purpose and return fields. Minor gaps remain around what 'type' and the routes-vs-pages distinction mean, but nothing blocks correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters ('project' with default active, 'max_results' with 0=all) are already documented in the schema. The description adds no parameter meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Detect') and resource ('API routes and pages in a Next.js App Router project') and even lists the returned fields (path, file, HTTP methods, type). Clear enough to distinguish, though no sibling overlaps this domain so explicit differentiation isn't demonstrated.

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?

The description implies usage ('in a Next.js App Router project') but gives no when-to-use guidance, no prerequisites, and names no alternatives such as get_entry_points or list_files. An agent gets no routing signal about when this is the right tool.

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

get_statsC
Read-onlyIdempotent

Unified stats dispatcher. category = usage (default) | session_budget | tca | dcp | linucb | warmstart | leiden | speculation | lattice.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).
categoryNoWhich stats subsystem to report (default 'usage').
context_typeNoFor category=lattice: filter to one context (navigation/edit/review/unknown).
budget_tokensNoFor category=session_budget: soft budget cap (default 200000).

TDQS

C2.3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that — it does not say whether category selection changes cost, whether results are cached/fresh, or whether project scoping affects output.

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?

It is short and front-loaded, but the second sentence is pure duplication of the schema enum and therefore does not earn its place. No wasted prose beyond that, but also no added value.

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?

This is a multi-mode dispatcher with four parameters and no output schema, so the description carries the burden of explaining the modes. It leaves every one of the nine categories undefined, so an agent cannot predict what any call returns.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents project, category, context_type, and budget_tokens, giving a baseline of 3. The description merely re-lists the category enum values, which the schema already defines, and adds no per-category semantics (e.g., what tca or linucb report).

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

Purpose2/5

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

"Unified stats dispatcher" largely restates the tool name (get_stats) without saying what statistics are produced, over what domain, or what each category means. The category list hints at breadth but none of the categories (tca, dcp, linucb, leiden, speculation, lattice) are explained, so an agent cannot tell what it will actually receive.

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 call this versus sibling reporting tools such as get_project_summary, get_diagnostics, or get_structure_summary, and no conditions distinguishing it from those. Only the default value of category is stated; the agent must infer all usage context.

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

get_structure_summaryB
Read-onlyIdempotent

Structure of one file (functions, classes, imports, line counts), or project-wide if file omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).
file_pathNoRelative path to a file in the project. Omit for project-level summary.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the aggregation scope and the file-omitted behavior, but says nothing about output shape (names vs. full source, depth of detail), which matters for a summary tool with no output schema.

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

Conciseness4/5

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

A single sentence with zero waste and the most important distinction (file vs. project scope) front-loaded. It is tight, though arguably too terse for the amount of sibling overlap it needs to resolve.

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?

With no output schema, the description should carry more of the burden of explaining what the summary actually returns. It enumerates the categories but not their form or granularity, and it leaves the relationship to the individual get_functions/get_classes/get_imports tools unexplained.

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 both parameters are already documented, including the 'omit for project-level summary' behavior that the description restates. No additional syntax, defaults, or path-format detail is added beyond what the schema provides.

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

Purpose4/5

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

States a specific resource (file/project structure) and enumerates what it surfaces (functions, classes, imports, line counts), plus the scope switch when file is omitted. It does not distinguish itself from siblings like get_functions, get_classes, get_imports, or get_project_summary, which cover overlapping ground.

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?

The only usage cue is the parameter-driven 'or project-wide if file omitted', which is about scope rather than tool selection. With four closely related siblings (get_functions, get_classes, get_imports, get_project_summary), an agent gets no guidance on when this aggregate view beats calling the individual tools.

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

insert_near_symbolC

Insert content before or after an indexed symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoAlias de `content`.
nameNoAlias de `symbol_name`.
sourceNoAlias de `content`.
contentNo
projectNoProject name/path (default: active).
positionNo'before' or 'after' (default after).
file_pathNo
new_sourceNoAlias de `content`.
symbol_nameNo

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the mutation/safety profile is covered structurally. The description adds essentially nothing beyond that profile — it neither describes what happens to existing content, nor the before/after default, nor any project-scoping behavior.

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?

One sentence, front-loaded, with no filler — structurally clean. However, for a 9-parameter aliased mutation tool the size reflects under-specification rather than genuine conciseness.

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?

The tool accepts 9 parameters with a five-branch anyOf requirement structure and four aliases of content, and the description explains none of it. With no output schema and no annotation detail beyond hints, an agent is left guessing how to satisfy the required-argument branches and what position/project defaults do.

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 67%, and the description mentions no parameter explicitly. Half of the schema's own descriptions are Spanish-language alias notes (code/source/new_source = content), and key fields like symbol_name, content, and file_path have no description anywhere. The phrase 'before or after' loosely gestures at position and 'indexed symbol' at symbol_name, but the description does not compensate for the coverage gap or explain the anyOf alias pattern.

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

Purpose4/5

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

The description names a specific verb (Insert) and resource (content before or after an indexed symbol), which is enough to distinguish it from sibling editors like replace_symbol_source, edit_lines_in_symbol, and move_symbol. It does not explicitly name or route against those alternatives, so it stops 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 Guidelines2/5

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

There is no when-to-use guidance, no statement of prerequisites, and no reference to alternative tools. An agent must infer that this is the correct choice for inserting near a symbol simply from the name and one-line description.

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

list_filesB
Read-onlyIdempotent

List indexed files, optionally filtered by glob.

ParametersJSON Schema
NameRequiredDescriptionDefault
globNoAlias de `pattern`. Glob pattern to filter files (uses fnmatch).
queryNoAlias de `pattern`. Glob pattern to filter files (uses fnmatch).
patternNoGlob pattern to filter files (uses fnmatch).
projectNoProject name/path (default: active).
max_resultsNoMaximum number of results to return (0 = unlimited, default 0).

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The word "indexed" adds a small but real signal that results come from a built index rather than the live filesystem (and may be stale), but no ordering, staleness, or pagination behavior is 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?

A single front-loaded sentence with no filler; the resource and the optional filter are stated immediately. Nothing is wasted.

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?

With full annotation coverage, a fully documented schema, and no output schema, the bar is lower, but a listing tool still benefits from noting result ordering, staleness relative to reindex, and how it relates to the search tools. Those gaps leave it merely adequate.

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 documentation carries the parameter burden and the 3-baseline applies. The description adds nothing beyond the schema — notably it does not clarify that glob/query/pattern are three aliases of the same filter, which is the most confusing aspect of this tool.

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

Purpose4/5

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

States a specific verb and resource ("List indexed files") plus the optional filter dimension. However it does not distinguish this tool from siblings like search_codebase, get_feature_files, or read_lines, which an agent could plausibly pick for similar file-discovery needs.

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 when-to-use or when-not-to-use guidance. With ~40 siblings including several file/symbol search tools, the description never says why to choose list_files over search_codebase or find_symbol, nor that it enumerates everything rather than matching content.

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

list_projectsA
Read-onlyIdempotent

List all registered workspace projects with index status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and a closed-world hint, so the safety profile is fully covered. The description adds only that 'index status' is included in results, which is modest added context beyond the structured fields.

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

Conciseness5/5

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

A single tight sentence with the core action and the useful qualifier front-loaded. Nothing is wasted and nothing is buried.

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

Completeness4/5

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

With no output schema, the description carries some burden of describing returns, and it signals that index status accompanies each project. That covers the essentials for a zero-param listing tool, though it does not enumerate the project fields returned.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; no parameter-level semantics are needed.

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 a specific verb ('List') and resource ('registered workspace projects') and adds the scope qualifier 'with index status'. It is clear what the tool returns, though it does not explicitly distinguish itself from neighbors like switch_project or get_project_summary.

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 when-to-use guidance, no prerequisites, and no mention of alternative tools such as switch_project or get_project_summary. Usage is only weakly implied by the listing verb.

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

memory_adminB
Destructive

Single dispatch for all memory admin / maintenance ops (status, doctor, dedup_sweep, distill, roi_gc, consistency, vector_reindex, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
opYesWhich memory-admin sub-operation to run.
limitNoPagination/limit (where applicable).
dry_runNoPreview-only mode for sweeps/garbage collectors.
rebuildNovector_reindex: re-embed rows that already have a vector, not just the missing ones.
project_rootNoFilter by project (where applicable).

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered structurally. The description adds only that this is a multiplexed dispatch and names a few ops, without saying which ops destroy data, whether dry_run is advisable first, or what the destructive operations affect.

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 with no filler, though the trailing 'etc.' is imprecise for an enum that is fully enumerable in the schema and slightly weakens the specification.

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 21-op dispatch tool with no output schema, the description should at least group or explain the ops; instead it names a handful and defers with 'etc.'. An agent cannot determine from this text what 'distill', 'roi_gc', 'from_bash', or 'set_global' do, leaving the definition materially incomplete.

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

Parameters3/5

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

Schema coverage is 100% and each parameter (op, limit, dry_run, rebuild, project_root) carries its own description, so the schema does the heavy lifting. The description enumerates only 7 of the 21 enum values and adds no semantics for what individual ops do, so it does not meaningfully exceed the baseline.

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

Purpose4/5

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

States a specific purpose: a single dispatch entry point for memory admin/maintenance operations, and lists representative op names (status, doctor, dedup_sweep, distill, roi_gc, consistency, vector_reindex). This distinguishes it at a high level from the memory_save/search/get/delete CRUD siblings, though it does not clarify overlap with neighbors like reindex or find_semantic_duplicates.

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 when-to-use or when-not-to-use guidance is given, and no alternatives are named. The agent is left to infer from 'admin / maintenance ops' that this is the maintenance entry point, but nothing states which sibling to prefer for overlapping tasks.

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

memory_deleteA
DestructiveIdempotent

Soft-delete an observation by ID (sets archived=1).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesObservation ID to archive.
projectNoProject name/path (default: active).

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description adds genuinely useful context beyond them: this is a soft delete (archived=1), not a permanent removal, which reframes the destructiveHint and implies reversibility. It stops short of stating how to recover an archived observation, which would complete the picture.

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 short sentence that is fully front-loaded with the operation and mechanism. Every clause earns its place with no 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?

For a simple two-parameter tool with full schema coverage and complete safety annotations, the description is nearly sufficient. The only meaningful gap is the absence of guidance on recovery or on how this differs from memory_admin.

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 both 'id' and 'project' are already documented in the schema. The description only restates 'by ID', adding no format or behavioral detail beyond the structured fields, so the baseline of 3 applies.

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 a specific verb and resource ('Soft-delete an observation by ID') and even reveals the mechanism ('sets archived=1'). It is clear what the tool does, though it does not differentiate itself from the nearby memory_admin sibling that may also manage deletion.

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 when-to-use or when-not-to-use guidance, and no mention of alternatives. An agent cannot tell from the description whether this or memory_admin should be used for archiving/removal.

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

memory_getA
Read-onlyIdempotent

Layer 3: full observation content by IDs (~200 tokens/result). Final progressive-disclosure layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesObservation IDs. Each item may be an integer (42), a digit string ("42"), or a citation URI ("ts://obs/42").
fullNoIf false (default), content trimmed to 80 chars. If true, full content.
projectNoProject name/path (default: active).

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description usefully adds the token cost estimate (~200 tokens/result), which helps an agent budget context. It does not, however, describe return shape or how trimming interacts with the 'full' flag beyond what the schema states.

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

Conciseness5/5

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

Two terse fragments, both front-loaded and information-dense: layer position first, then cost signal. Nothing extraneous.

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 tool with full schema coverage and no output schema, the description covers layer position, cost, and scope adequately. Minor gap: it never sketches what an 'observation' record contains should the agent need to interpret results.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are documented in the schema, including the 'full' trim behavior. The description adds no syntax or format detail beyond that, so baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb+resource: retrieve full observation content by IDs. 'Layer 3: ... Final progressive-disclosure layer' positions it clearly relative to memory_index and memory_search without naming them explicitly, so an agent can infer it is the terminal fetch step. It falls short of 5 because the sibling distinction is implied by layer numbering rather than stated.

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 'Final progressive-disclosure layer' implies you call this after the earlier index/search layers, but no sibling is named and no explicit when/when-not is given. Usage is inferable but not spelled out.

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

memory_indexB
Read-onlyIdempotent

Layer 1: compact index of recent observations — ID, type, title, importance, age, citation URI.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax entries to return (default 30).
projectNoProject name/path (default: active).
type_filterNoFilter by observation type (optional).

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds the useful fact that the return is a compact field subset (ID, type, title, importance, age, citation URI), but says nothing about defaults, ordering, or pagination behavior.

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 names the tool's scope before enumerating return fields. No wasted words, though the cryptic 'Layer 1:' prefix is unexplained and mildly noise.

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?

With no output schema, the description usefully enumerates the returned fields, which compensates somewhat. But it omits the recency window, ordering, and how it relates to sibling memory tools, leaving meaningful gaps for an agent choosing among memory_index, memory_search, and memory_get.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (limit, project, type_filter) are already documented in the schema. The description adds no further parameter meaning such as valid type_filter values or project path syntax, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('compact index of recent observations') and enumerates the returned fields, so the agent knows this is a listing tool. However, it doesn't distinguish itself from siblings like memory_search or memory_get, and the unexplained 'Layer 1' label adds no routing value.

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 explicit when-to-use guidance, no stated relationship to memory_search, memory_get, or memory_admin, and no exclusions. The word 'recent' implies a recency scope, but the agent must infer when this is preferable to the other memory tools.

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

memory_saveC

Persist a fact, guardrail, or note across sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault
whyNo
tagsNo
typeYes
factsNoOptional atomic facts (JSON array or bullet list).
titleYes
symbolNo
contentYes
contextNo
projectNoProject name/path (default: active).
conceptsNoOptional conceptual tags (JSON array or comma list).
ttl_daysNo
file_pathNo
is_globalNo
narrativeNoOptional free-form narrative explaining the obs in prose.
importanceNo1-10
session_idNo
how_to_applyNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the agent knows this is a non-idempotent write. The description adds the useful cross-session persistence scope but says nothing about dedup behavior, TTL handling, or global-vs-project effects implied by the non-idempotent flag.

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 with zero filler. It is efficient, though arguably too small for a 17-parameter tool rather than padded.

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 17-parameter mutation tool with low schema coverage and no output schema, one sentence leaves major gaps: what gets persisted where, required vs optional fields, and how project/global scope behaves. The description is not complete enough for safe 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?

Schema description coverage is only 29% across 17 parameters, so the description must compensate and largely does not. The mention of "fact, guardrail, note" loosely echoes enum values, but no meaning is added for the many undocumented fields (why, symbol, ttl_days, importance, is_global, etc.).

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

Purpose4/5

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

States a specific verb ("Persist") plus the resource kinds (fact, guardrail, note) and a scope ("across sessions"). This lets an agent distinguish it from read-side siblings like memory_search/memory_get. However, it does not differentiate from other write-side siblings such as reasoning_save or capture_put.

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 when-to-use or when-not guidance is given, and no alternatives are named. With several sibling write tools (reasoning_save, capture_put) an agent has no signal for choosing among them.

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

move_symbolA
Destructive

Move a symbol to a different file, updating imports in all call sites.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesSymbol name to move.
projectNoProject name/path (default: active).
target_fileYesRelative path to the target file.
create_if_missingNoCreate target file if it doesn't exist (default true).

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds useful beyond-annotation context that imports in all call sites are rewritten, but it omits reversibility, failure modes, and whether a checkpoint is advisable before this destructive move.

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 tight sentence with the action front-loaded and the side effect appended. No filler, no 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?

For a destructive cross-file refactor with no output schema, the description covers the core mutation and its import-rewriting effect, but says nothing about what happens when the symbol is ambiguous, when the target already contains a conflicting symbol, or what the agent gets back.

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 symbol, project, target_file, and create_if_missing are all already documented. The description adds no syntax, path-format, or default detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Move a symbol to a different file') plus the key side effect of rewriting imports at all call sites. It contrasts implicitly with siblings like replace_symbol_source or edit_lines_in_symbol, though it never names them, so sibling differentiation is only implied.

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 conveys implied usage (a refactor that relocates a symbol and fixes call sites), but it gives no explicit when-to-use, when-not-to-use, or named alternative such as replace_symbol_source or find_impacted_test_files. An agent must infer the context from the action itself.

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

read_linesA
Read-onlyIdempotent

Read an exact line range from a file (1-indexed, inclusive). The tool to reach for when you hold a LINE NUMBER rather than a symbol name: a traceback frame, a grep -n hit, a compiler or linter error. Replaces sed -n '105,150p' file, head, tail and cat + scroll. Names the function/class holding the first line, so "which function is line N in" takes one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoLast line, inclusive. Omit for start+59.
fileNoAlias de `file_path`. Path to an indexed file (relative to project root).
lineNoAlias de `start`. First line, 1-indexed, inclusive.
pathNoAlias de `file_path`. Path to an indexed file (relative to project root).
hintsNoAppend the enclosing symbol (default true).
startNoFirst line, 1-indexed, inclusive.
numbersNoPrefix each line with its number (default true).
projectNoProject name/path (default: active).
end_lineNoAlias de `end`. Last line, inclusive. Omit for start+59.
file_pathNoPath to an indexed file (relative to project root).
max_linesNoCap on returned lines (default 400, 0=uncapped).
start_lineNoAlias de `start`. First line, 1-indexed, inclusive.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare the full safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is low. The description adds genuine non-obvious behavior: it names the enclosing function/class for the first line, and calls out that 'which function is line N in' resolves in one call — context the annotations do not carry.

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

Conciseness5/5

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

Front-loads the core operation, then the selection condition, then the replacement mapping. Three dense sentences with zero filler; every clause carries selection or behavioral information.

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

Completeness5/5

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

For a read-only, 12-param tool whose annotations cover safety and whose schema fully documents every parameter, the description closes the remaining gaps: when to choose it and what extra output (symbol naming) it yields. No output schema is needed since the return shape is described.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3 and the schema already documents the aliases, defaults (start+59, max_lines 400), and flag meanings. The description still adds meaning by explaining what the hints output actually produces (the enclosing symbol), which the terse 'Append the enclosing symbol' schema text only implies.

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

Purpose5/5

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

States a specific verb and resource with precise scope: 'Read an exact line range from a file (1-indexed, inclusive).' It explicitly distinguishes itself from symbol-based siblings by naming the exact condition that selects it — holding a LINE NUMBER rather than a symbol name — so an agent can separate it from get_function_source or get_class_source without opening either schema.

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

Usage Guidelines5/5

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

Gives concrete triggering situations (traceback frame, grep -n hit, compiler/linter error) and names the exact shell commands it replaces (sed -n, head, tail, cat + scroll). The contrast with symbol-name tools supplies the implicit when-not, leaving nothing to inference.

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

reasoning_listB
Read-onlyIdempotent

List stored reasoning chains by access_count then recency.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows (default 50).
projectNoProject name/path (default: active).

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and closed-world scope, so the safety profile is covered. The description contributes the sort order (access_count then recency), which is genuinely useful behavioral detail, but says nothing about pagination, result count limits, or what a returned chain looks like.

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 with zero filler that front-loads the resource and the ordering rule. Nothing could be removed without losing information.

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

Completeness4/5

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

For a simple, read-only list tool with no output schema and fully documented parameters, the description covers the essentials: what is listed and in what order. It would be complete with a brief note on how it relates to reasoning_search as the retrieval alternative.

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 both parameters (limit with default 50, project defaulting to active) are already documented. The description adds no parameter-level detail beyond what the schema provides, which is the expected baseline.

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

Purpose4/5

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

States a specific verb and resource ('List stored reasoning chains') and even adds the ranking rule, so the action is unambiguous. It does not distinguish itself from the near-identical sibling reasoning_search, so an agent must infer the browse-vs-query split on its own.

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 statement of when to use this versus reasoning_search, which is the obvious alternative sibling. The only contextual cue is the ordering rule, which describes output behavior rather than usage conditions.

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

reasoning_saveB

Persist a reasoning trace (goal + steps + conclusion) for later reuse.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalYes
stepsYes[{tool,args,observation},...]
projectNoProject name/path (default: active).
ttl_daysNo
conclusionYes
confidenceNo0.0-1.0 (default 0.8).
evidence_obs_idsNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly=false, idempotent=false, and destructive=false, so the safety profile is covered. The description confirms this is a persistence operation but says nothing about idempotency implications (repeat saves create new entries), TTL/retention behavior, or confidence/evidence handling, leaving real behavioral gaps for a save 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?

A single front-loaded sentence with no filler; the core verb and payload are stated immediately. It errs toward under-specification rather than verbosity, but structurally it is clean.

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 mutation tool with no output schema, the description is thin: it does not explain TTL, confidence defaults, evidence linking, or project scoping, nor the relationship to the search/list siblings. Annotations carry the safety side, but the payload semantics remain underexplained.

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 only 43%, and the description only names the three required fields (goal, steps, conclusion) already marked required in the schema. The optional project, ttl_days, confidence, and evidence_obs_ids carry little or no documentation, and the description does not compensate for those gaps.

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

Purpose4/5

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

States a specific verb (persist) and resource (reasoning trace) and enumerates the core fields goal, steps, conclusion. The sibling family (reasoning_search, reasoning_list) makes the write-vs-read split inferable, so an agent can distinguish it without opening the schema.

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

Usage Guidelines2/5

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

"for later reuse" hints at the purpose but there is no explicit when-to-use guidance and no mention of the sibling tools reasoning_search or reasoning_list that a reuse workflow would combine with. The agent must infer when to persist versus retrieve.

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

reindexC
Idempotent

Rebuild the project index.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoRebuild even if no mtime changes detected.
projectNoProject name/path (default: active).

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already carry the behavioral profile: readOnlyHint=false, idempotentHint=true, destructiveHint=false, openWorldHint=false. The description adds nothing beyond what those flags state — no cost, duration, cache-invalidation behavior, or effect on concurrent queries. Since the bar is lower with annotations but the description contributes no extra context, a 2 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.

Conciseness4/5

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

A single front-loaded sentence with zero waste. It is efficient, though its brevity leans toward under-specification rather than deliberate economy.

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 tool that mutates an index, the description omits what the rebuild affects, whether it blocks or invalidates other lookups, and how long it may take. With only two simple params and no output schema the burden is small, but the operational impact of a rebuild is left unstated.

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%: 'force' explains the mtime bypass and 'project' documents the name/path with its default. The description adds no parameter meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

The description names a specific verb (Rebuild) and resource (the project index), so the action is unambiguous. It does not differentiate itself from potentially overlapping siblings such as memory_index, corpus_build, or checkpoint, but the core purpose is clear.

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 invoke this versus alternatives like memory_index or corpus_build, nor any note on prerequisites (e.g., an active project must exist) or when a rebuild is warranted versus skipping it. The agent is left to infer all of this.

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

replace_symbol_sourceB
Destructive

Rewrite a whole function or class by name, no Read needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoAlias de `new_source`. Replacement source for the symbol.
nameNoAlias de `symbol_name`. Function, method, class, or section name to replace.
sourceNoAlias de `new_source`. Replacement source for the symbol.
contentNoAlias de `new_source`. Replacement source for the symbol.
projectNoProject name/path (default: active).
file_pathNoOptional file path to disambiguate symbols.
new_sourceNoReplacement source for the symbol.
symbol_nameNoFunction, method, class, or section name to replace.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds that the replacement is whole-symbol ('whole function or class') and needs no prior read, which is a meaningful behavioral detail. It stops short of explaining disambiguation behavior (file_path) or what happens on multiple/zero matches.

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 tight sentence with zero waste, front-loading the verb and resource. It is appropriately sized for a focused mutation tool, though the value clause ('no Read needed') is slightly marketing-flavored rather than instructional.

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 destructive mutation tool with an 8-parameter schema (including multiple aliases) and no output schema, the description covers the core action and the whole-symbol semantics but omits alias handling, disambiguation behavior, and error/edge-case handling. Annotations cover safety, but the description is somewhat thin relative to the schema's 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?

Schema description coverage is 100%, so all eight parameters including the alias fields are already documented in the schema. The description only reinforces the 'by name' keying (symbol_name) and adds nothing about the alias params or project/file_path scoping. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb ('rewrite') and resource ('whole function or class by name'), making the operation clear. The phrase 'no Read needed' hints at the value proposition and helps distinguish it from read-oriented siblings like get_function_source. However, it doesn't explicitly contrast itself with the many other edit siblings (edit_lines_in_symbol, insert_near_symbol, move_symbol).

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 when-to-use or when-not-to-use guidance and no named alternative. The agent is left to infer from 'whole function or class' that this is for full-symbol replacement versus partial edits, but nothing states which sibling to pick instead. The implicit efficiency claim ('no Read needed') is context, not routing guidance.

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

run_impacted_testsB

Run pytest on files impacted by the current worktree changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
compactNo
projectNoProject name/path (default: active).
max_testsNo
timeout_secNo
symbol_namesNo
changed_filesNo
include_outputNo
max_output_charsNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=false), so the description only needs to add behavior beyond that. It confirms the tool shells out to pytest, but says nothing about runtime cost, the non-idempotent/non-read-only nature the annotations imply, or failure behavior.

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

Conciseness5/5

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

A single front-loaded sentence with zero filler. The action and its trigger are both stated in the first clause.

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 an 8-parameter execution tool with no output schema and only annotation-level safety hints, the description is far too thin — it neither documents parameters nor describes what the run produces or how results are surfaced to the 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?

Eight parameters with only 13% schema description coverage, so the description must carry the meaning — but it explains none of compact, max_tests, timeout_sec, symbol_names, changed_files, include_output, or max_output_chars. The tension between running on 'worktree changes' and accepting an explicit changed_files/symbol_names list is never resolved.

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

Purpose4/5

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

States a specific verb (Run) and resource (pytest on impacted files) with a clear trigger condition (current worktree changes). It implicitly separates itself from find_impacted_test_files (which only lists files) by asserting execution, but it never names that sibling or makes the distinction explicit.

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 'impacted by the current worktree changes' implies the context in which to reach for this tool, but there is no explicit when-to-use versus alternatives like find_impacted_test_files or run_project_action, and no exclusions or prerequisites stated.

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

run_project_actionB
Destructive

Run a discovered project action by id (bounded output, bounded timeout).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoProject name/path (default: active).
action_idYese.g. 'python:test', 'npm:test'.
timeout_secNoDefault 120.
include_outputNo
max_output_charsNoDefault 12000.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare the critical safety profile (destructiveHint=true, not idempotent, not read-only), so the description doesn't need to re-explain that it mutates. It adds useful boundedness context (bounded output, bounded timeout), but says nothing about what the execution does to the environment or that it runs arbitrary project commands.

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 with zero padding that states the verb, the key argument, and the two bounding guarantees.

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?

No output schema exists, so the description should hint at return shape, and for a destructive tool that runs arbitrary project actions it should note side effects or failure behavior. It covers enough to invoke correctly but leaves those 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 80%, so the schema already documents project, action_id, timeout_sec, and max_output_chars. The description's 'by id' and 'bounded output/timeout' only loosely echo those without adding format or constraint details, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (run) and resource (a discovered project action) keyed by id. It clearly differs from the read-only discovery/inspection siblings, though it does not name discover_project_actions, which is its natural upstream dependency.

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 explicit when-to-use or when-not-to-use guidance and no named alternatives. The word 'discovered' faintly implies you must first call discover_project_actions, but the workflow dependency and any preconditions are left to inference.

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

search_codebaseA
Read-onlyIdempotent

Use instead of Grep/rg on code. Each hit also names the function or class that contains it (in), so "who calls X" or "where is X used" takes one call. Regex by default; semantic=true ranks symbols by meaning.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoAlias de `pattern`. Regex pattern (regex mode) or natural-language description (semantic mode).
queryNoAlias de `pattern`. Regex pattern (regex mode) or natural-language description (semantic mode).
regexNoAlias de `pattern`. Regex pattern (regex mode) or natural-language description (semantic mode).
patternNoRegex pattern (regex mode) or natural-language description (semantic mode).
projectNoProject name/path (default: active).
semanticNoIf true, interpret `pattern` as a description and rank symbols by embedding cosine similarity. Returns enriched hits with signature/docstring/score. Default false (regex).
max_resultsNoMaximum number of results to return (default 100, 0 = unlimited).
ignore_generatedNoSkip generated/minified files (default true). Regex mode only.

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, not open-world), so the bar is lower; the description still adds real behavior: regex-by-default with a semantic ranking mode, and that each hit carries an `in` containing-symbol annotation. It stops short of describing pagination or result volume behavior.

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

Conciseness5/5

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

Three tight sentences with zero waste; the use-instead-of guidance is front-loaded and the mode behavior is secondary. Every clause carries information.

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

Completeness4/5

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

For an 8-parameter read-only search tool with no output schema, the description conveys the core mental model (regex vs semantic, enriched hits). It doesn't explain the alias redundancy or default result limits, but nothing critical to calling it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter including aliases (q/query/regex) and semantic. The description only echoes the regex-vs-semantic distinction and adds no new parameter-level detail, making the documented 3 baseline appropriate.

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

Purpose4/5

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

States a specific verb+resource (search the codebase) and immediately positions it against a known baseline ('instead of Grep/rg on code'). The added note that hits name the containing function/class via `in` clarifies the value over plain Grep, though it doesn't explicitly contrast with siblings like find_symbol or search_in_symbols.

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?

Explicitly names the alternative it replaces ('Grep/rg on code') and gives the selecting condition ('who calls X' / 'where is X used'). It also distinguishes the two modes (regex default vs semantic=true), but gives no when-not guidance or tie-breaker against similarly-scoped siblings such as search_in_symbols or find_symbol.

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

search_in_symbolsB
Read-onlyIdempotent

Regex search that returns the enclosing function/class for each match, in addition to file:line.

ParametersJSON Schema
NameRequiredDescriptionDefault
patternYesRegular expression pattern to search for.
projectNoProject name/path (default: active).
max_resultsNoMaximum number of results to return (default 100, 0 = unlimited).

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond that by disclosing the return shape (enclosing function/class plus file:line), which is useful for an agent. It stops there, adding nothing about result limits or traversal scope.

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 with zero filler. The distinguishing 'in addition to file:line' clause is placed where it matters, and nothing is wasted.

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?

With no output schema, the description does carry the burden of describing return values and does so adequately (enclosing symbol plus file:line). However, for a search tool sitting among many competing search siblings, the absence of usage/routing guidance leaves a meaningful gap in deciding when to reach for it.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents pattern, project, and max_results (including the default 100 and 0=unlimited). The description adds no parameter-level semantics beyond what the schema provides, making the baseline 3 correct.

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

Purpose4/5

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

States a specific verb (regex search) and resource (symbols/matches) and adds a differentiating output detail: it returns the enclosing function/class per match, not just file:line. This distinguishes it from a plain text search. It does not, however, explicitly name the sibling it competes with (search_codebase, ts_search), so it stops short of full sibling differentiation.

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

Usage Guidelines2/5

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

The description never says when to use this tool versus the many sibling search tools (search_codebase, ts_search, find_symbol). The 'returns enclosing function/class' phrasing implies a symbol-aware use case, but no explicit when/when-not or alternative routing is provided.

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

set_project_rootA
Idempotent

Register a new project root and switch to it. If the path is already registered, this becomes a cheap active-root switch (no reindex) unless force=true is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoAlias de `path`. Absolute path to the project root directory.
pathNoAbsolute path to the project root directory.
rootNoAlias de `path`. Absolute path to the project root directory.
forceNoRebuild the index even if the project is already registered.
projectNoAlias de `path`. Absolute path to the project root directory.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations cover the safety profile (idempotent, non-destructive, not read-only), and the description adds real value on top: reindexing is skipped for already-registered paths unless force=true. It stops short of saying what happens to the previously active root or whether the index is built for a brand-new path.

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 waste, and the primary action is front-loaded ahead of the conditional exception. Nothing needs to be cut or reordered.

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 5-param, no-output-schema tool with full annotation coverage, the description covers the essential behavior including the force override. The remaining gap is the unclear relationship to the switch_project sibling, which an agent must guess at.

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 path and its three aliases (name, project, root) are fully documented in the schema. The description's mention of force largely restates the schema's "Rebuild the index even if the project is already registered" rather than adding syntax or format detail, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: "Register a new project root and switch to it," which tells an agent exactly what happens. It does not, however, differentiate itself from the sibling switch_project or reindex, leaving the boundary between them to inference.

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 conditional behavior (already-registered path becomes a cheap switch) which implies usage, but it never says when to prefer set_project_root over switch_project, list_projects, or reindex. The usage guidance is inferred rather than stated.

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

switch_projectC
Idempotent

Switch the active project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoProject name (basename of path) or full path.
pathNoAlias de `name`. Project name (basename of path) or full path.
rootNoAlias de `name`. Project name (basename of path) or full path.
projectNoAlias de `name`. Project name (basename of path) or full path.

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare idempotentHint=true, destructiveHint=false, readOnlyHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not say whether the switch persists across calls, how it affects subsequent tool calls, or what happens if the target project is unknown.

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 short, front-loaded sentence with no filler or redundancy. It is efficiently sized for the operation, though it borders on under-specification given the tool's stateful nature.

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?

This is a stateful, session-affecting operation with no output schema and no annotations covering persistence or side effects. The description says nothing about what state actually changes, whether the effect is durable, or how failures are surfaced, leaving a significant gap for an agent that must decide when calling this is safe.

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

Parameters3/5

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

Schema description coverage is 100% and each of the four parameters is documented in the schema as an alias of 'name' (basename or full path). The description adds no additional meaning, so the baseline 3 applies.

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

Purpose3/5

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

It names a specific verb and resource ('switch' + 'active project'), so the surface meaning is clear. However, the sibling set_project_root plausibly performs an overlapping state change, and the description gives no basis for telling them apart, leaving the agent unable to disambiguate reliably.

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 when-to-use, no prerequisite (e.g., project must exist or be listed via list_projects), and no mention of alternatives such as set_project_root. The agent is given no routing guidance at all.

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

ts_discoverA
Read-onlyIdempotent

Scan Claude Code transcripts for missed Token Savior opportunities (native-call chains that should have been a single TS call) and/or report TS-vs-native adoption ratios. Scans ALL transcript projects by default; pass project= to filter. format='table' (default) or 'json' returns ranked Findings; format='adoption' or 'adoption_json' returns the TS adoption summary with trend + worst sessions. Read-only, PII-safe.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoCap the number of findings returned (table/json only; default unlimited).
formatNoOutput format. 'table' (default) / 'json' = ranked missed-opportunity Findings. 'adoption' / 'adoption_json' = TS vs native adoption summary.
projectNoFilter to sanitized project dirs whose name contains this substring (e.g. '-root'). Omit to scan ALL transcript projects under ~/.claude/projects/.
since_daysNoOnly consider events newer than now - since_days (default 7).

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is largely covered; the description still adds the 'PII-safe' guarantee and the default scan scope over ~/.claude/projects/, which are not derivable from the annotations. It does not describe cost, runtime, or volume of a full scan, so it is not a full 5.

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

Conciseness5/5

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

Three dense sentences: purpose first, then scope/default behavior, then the format-mode semantics, closing with the safety note. No filler and no repetition, and the most decision-relevant information (what it scans, how to filter, which format does what) is front-loaded.

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

Completeness5/5

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

With no output schema and zero required parameters, the description carries the return-value burden and does so: it explains that table/json yield ranked Findings and adoption modes yield a summary with trend and worst sessions. Combined with annotations covering safety, an agent has everything needed to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter is already documented in the schema, so the baseline is 3. The description restates the format modes and project filter but adds no syntax or semantics beyond what the schema provides (e.g., no guidance on since_days interaction with the adoption mode).

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

Purpose5/5

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

States a specific verb+resource ('Scan Claude Code transcripts for missed Token Savior opportunities... report TS-vs-native adoption ratios') with enough detail to distinguish it from ts_search, ts_execute, and ts_stale_context, which are the nearest siblings. The parenthetical explaining 'native-call chains that should have been a single TS call' makes the intent 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?

Clearly frames the two use cases (missed-opportunity findings vs. adoption reporting) and maps each to a format value, and it states the default scope plus how to narrow it with project=<substring>. It does not explicitly name a sibling to prefer instead or state when-not to use it, so it falls short of a full 5.

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

ts_executeA
Destructive

Run a JS script in a Node sandbox with a typed facade. The script body executes as async () => { <body> }; use await tools.<name>(args) to call any allowed tool (find_symbol, get_function_source, get_dependents, search_codebase, replace_symbol_source, etc.). Return the final value. Collapses find->read->deps chains into one round-trip.

ParametersJSON Schema
NameRequiredDescriptionDefault
jsNoAlias de `script`. JS function body. Use `await tools.foo(args)` then `return value`.
bodyNoAlias de `script`. JS function body. Use `await tools.foo(args)` then `return value`.
codeNoAlias de `script`. JS function body. Use `await tools.foo(args)` then `return value`.
scriptNoJS function body. Use `await tools.foo(args)` then `return value`.
timeout_msNoMax script wall-clock in ms (default 30000).

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description discloses the sandbox, the `async () => { <body> }` wrapping, the `await tools.<name>(args)` facade, and the return-value convention. It does not warn about error propagation or the persistence of edits made through mutating tools like replace_symbol_source, and the word 'sandbox' sits in mild tension with destructiveHint=true, but the mechanical disclosure is substantial.

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

Conciseness5/5

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

Four dense sentences, purpose front-loaded, no filler. The allowed-tool list is the only slightly open-ended element ('etc.') and it still earns its place by showing the facade's reach.

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?

There is no output schema, so the description must carry the return contract, which it does minimally ('Return the final value'). For a tool that executes arbitrary JS with destructive potential, it omits error/failure behavior and whether edits persist, leaving an agent to infer some operational details.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning by specifying that the script string is a function body that uses `await tools.foo(args)` and must `return value`. It does not clarify the four alias parameters (script/code/body/js) or the timeout default, so it does not fully supersede the schema.

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

Purpose5/5

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

States a specific verb and resource ('Run a JS script in a Node sandbox with a typed facade') and is instantly distinguishable from every sibling, none of which execute arbitrary code. The execution model is described concretely enough that an agent knows exactly what the tool does.

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 closing line 'Collapses find->read->deps chains into one round-trip' tells the agent when this tool is preferable to chaining individual calls, and the allowed-tool list shows what can be orchestrated. It stops short of naming explicit exclusions (e.g., when a single direct call is better), so it is strong but not fully prescriptive.

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

ts_stale_contextA
Read-onlyIdempotent

Scan the recent session transcript(s) and list tool results made obsolete later in the SAME session — a file read then re-read, a file read then edited, a Bash command re-run. Returns the stale refs so you can drop that content or refetch the fresh copy, keeping the context window lean. Agent-agnostic, read-only, PII-safe. format='table' (default) or 'json'.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoCap the number of stale refs returned (default unlimited).
formatNoOutput format. 'table' (default) or 'json'.
projectNoFilter to project dirs whose name contains this substring (omit = all recent).
since_daysNoOnly consider events newer than now - since_days (default 1 = the current session).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the 'read-only' phrasing adds little; however 'agent-agnostic' and 'PII-safe' deliver real extra context, and the description clarifies what a returned stale ref actually represents. It does not elaborate on pagination or ref shape.

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 tight sentences with the primary action front-loaded, the qualifying examples compressed into a dash-separated list, and the closing note on format. Nothing is wasteful or buried.

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

Completeness4/5

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

For a read-only, no-output-schema scan tool, the description covers purpose, staleness criteria, and intended use of the result. It could say slightly more about the shape of the returned refs, but an agent has enough 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 description coverage is 100%, so limit, format, project, and since_days are already fully documented. The description only restates the format default ('table' vs 'json'), adding no syntax or semantics beyond the schema. Baseline 3.

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

Purpose5/5

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

States a specific verb (scan/list) and resource (obsolete tool results in the recent session transcript), and pins down the exact staleness semantics with concrete examples (read-then-reread, read-then-edit, Bash re-run). No sibling covers this niche, so an agent can identify it distinctly from ts_search, ts_execute, or memory_* without opening the schema.

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

Usage Guidelines4/5

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

Gives clear context and payoff ('so you can drop that content or refetch the fresh copy, keeping the context window lean'), which implies when to reach for it. It never names an alternative or an explicit when-not condition, so it stops short of full routing guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv4.24.0
    • Changedcapture_get1 field changed
      • changedInput schema / properties / range / description
        Previous value: -"head | tail | all | preview | line:start-end (default preview)."New value: +"head | tail | all | preview | line:start-end | relevant:<question> (keeps only the lines relevant to the question, lossless — 'all' still returns everything). Default preview."
    • Changedfind_symbol1 field changed
      • addedInput schema / properties / query
        Added value: +{
        +  "description": "Alias de `name`. ",
        +  "type": "string"
        +}
    • Addedget_diagnostics
    • Changedget_full_context1 field changed
      • addedInput schema / properties / intent
        Added value: +{
        +  "description": "Optional task/query. When set, long deps/dependents lists are ranked by relevance to it and trimmed to the top few with a recovery pointer — lossless (the rest stays reachable via mode='full').",
        +  "type": "string"
        +}
    • Changedmemory_admin1 field changed
      • addedInput schema / properties / rebuild
        Added value: +{
        +  "description": "vector_reindex: re-embed rows that already have a vector, not just the missing ones.",
        +  "type": "boolean"
        +}
    • Addedread_lines
    • Changedts_execute5 fields changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "script"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "code"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "body"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "js"
        +    ]
        +  }
        +]
      • addedInput schema / properties / body
        Added value: +{
        +  "description": "Alias de `script`. JS function body. Use `await tools.foo(args)` then `return value`.",
        +  "type": "string"
        +}
      • addedInput schema / properties / code
        Added value: +{
        +  "description": "Alias de `script`. JS function body. Use `await tools.foo(args)` then `return value`.",
        +  "type": "string"
        +}
      • addedInput schema / properties / js
        Added value: +{
        +  "description": "Alias de `script`. JS function body. Use `await tools.foo(args)` then `return value`.",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "script"
        -]
    • Addedts_stale_context
  2. 13 tool updatesv4.20.0
    • Changedfind_symbol3 fields changed
      • addedInput schema / properties / kinds
        Added value: +{
        +  "description": "Symbol kinds to search. Default: function+class (plus variable when TOKEN_SAVIOR_VARIABLES=search).",
        +  "items": {
        +    "enum": [
        +      "function",
        +      "class",
        +      "variable"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / symbol
        Added value: +{
        +  "description": "Alias de `name`. ",
        +  "type": "string"
        +}
      • addedInput schema / properties / symbol_name
        Added value: +{
        +  "description": "Alias de `name`. ",
        +  "type": "string"
        +}
    • Changedget_class_source2 fields changed
      • addedInput schema / properties / class_name
        Added value: +{
        +  "description": "Alias de `name`. ",
        +  "type": "string"
        +}
      • addedInput schema / properties / symbol_name
        Added value: +{
        +  "description": "Alias de `name`. ",
        +  "type": "string"
        +}
    • Changedget_edit_context4 fields changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "name"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "symbol_name"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "symbol"
        +    ]
        +  }
        +]
      • addedInput schema / properties / symbol
        Added value: +{
        +  "description": "Alias de `name`. ",
        +  "type": "string"
        +}
      • addedInput schema / properties / symbol_name
        Added value: +{
        +  "description": "Alias de `name`. ",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "name"
        -]
    • Changedget_full_context2 fields changed
      • addedInput schema / properties / symbol
        Added value: +{
        +  "description": "Alias de `name`. Symbol name (function, method, class).",
        +  "type": "string"
        +}
      • addedInput schema / properties / symbol_name
        Added value: +{
        +  "description": "Alias de `name`. Symbol name (function, method, class).",
        +  "type": "string"
        +}
    • Changedget_function_source2 fields changed
      • addedInput schema / properties / function
        Added value: +{
        +  "description": "Alias de `name`. Function or method (e.g. 'MyClass.method').",
        +  "type": "string"
        +}
      • addedInput schema / properties / symbol_name
        Added value: +{
        +  "description": "Alias de `name`. Function or method (e.g. 'MyClass.method').",
        +  "type": "string"
        +}
    • Changedinsert_near_symbol6 fields changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "symbol_name",
        +      "content"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "symbol_name",
        +      "source"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "symbol_name",
        +      "new_source"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "symbol_name",
        +      "code"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "name",
        +      "content"
        +    ]
        +  }
        +]
      • addedInput schema / properties / code
        Added value: +{
        +  "description": "Alias de `content`. ",
        +  "type": "string"
        +}
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Alias de `symbol_name`. ",
        +  "type": "string"
        +}
      • addedInput schema / properties / new_source
        Added value: +{
        +  "description": "Alias de `content`. ",
        +  "type": "string"
        +}
      • addedInput schema / properties / source
        Added value: +{
        +  "description": "Alias de `content`. ",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "symbol_name",
        -  "content"
        -]
    • Changedlist_files2 fields changed
      • addedInput schema / properties / glob
        Added value: +{
        +  "description": "Alias de `pattern`. Glob pattern to filter files (uses fnmatch).",
        +  "type": "string"
        +}
      • addedInput schema / properties / query
        Added value: +{
        +  "description": "Alias de `pattern`. Glob pattern to filter files (uses fnmatch).",
        +  "type": "string"
        +}
    • Changedreplace_symbol_source6 fields changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "symbol_name",
        +      "new_source"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "symbol_name",
        +      "content"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "symbol_name",
        +      "source"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "symbol_name",
        +      "code"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "name",
        +      "new_source"
        +    ]
        +  }
        +]
      • addedInput schema / properties / code
        Added value: +{
        +  "description": "Alias de `new_source`. Replacement source for the symbol.",
        +  "type": "string"
        +}
      • addedInput schema / properties / content
        Added value: +{
        +  "description": "Alias de `new_source`. Replacement source for the symbol.",
        +  "type": "string"
        +}
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Alias de `symbol_name`. Function, method, class, or section name to replace.",
        +  "type": "string"
        +}
      • addedInput schema / properties / source
        Added value: +{
        +  "description": "Alias de `new_source`. Replacement source for the symbol.",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "symbol_name",
        -  "new_source"
        -]
    • Changedsearch_codebase5 fields changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "pattern"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "query"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "q"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "regex"
        +    ]
        +  }
        +]
      • addedInput schema / properties / q
        Added value: +{
        +  "description": "Alias de `pattern`. Regex pattern (regex mode) or natural-language description (semantic mode).",
        +  "type": "string"
        +}
      • addedInput schema / properties / query
        Added value: +{
        +  "description": "Alias de `pattern`. Regex pattern (regex mode) or natural-language description (semantic mode).",
        +  "type": "string"
        +}
      • addedInput schema / properties / regex
        Added value: +{
        +  "description": "Alias de `pattern`. Regex pattern (regex mode) or natural-language description (semantic mode).",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "pattern"
        -]
    • Changedset_project_root5 fields changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "path"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "project"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "name"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "root"
        +    ]
        +  }
        +]
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Alias de `path`. Absolute path to the project root directory.",
        +  "type": "string"
        +}
      • addedInput schema / properties / project
        Added value: +{
        +  "description": "Alias de `path`. Absolute path to the project root directory.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Alias de `path`. Absolute path to the project root directory.",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "path"
        -]
    • Changedswitch_project5 fields changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "name"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "project"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "path"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "root"
        +    ]
        +  }
        +]
      • addedInput schema / properties / path
        Added value: +{
        +  "description": "Alias de `name`. Project name (basename of path) or full path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / project
        Added value: +{
        +  "description": "Alias de `name`. Project name (basename of path) or full path.",
        +  "type": "string"
        +}
      • addedInput schema / properties / root
        Added value: +{
        +  "description": "Alias de `name`. Project name (basename of path) or full path.",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "name"
        -]
    • Addedts_discover
    • Changedts_search4 fields changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "query"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "pattern"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "q"
        +    ]
        +  }
        +]
      • addedInput schema / properties / pattern
        Added value: +{
        +  "description": "Alias de `query`. Natural-language description of what you need (e.g. 'find dependents of update_user').",
        +  "type": "string"
        +}
      • addedInput schema / properties / q
        Added value: +{
        +  "description": "Alias de `query`. Natural-language description of what you need (e.g. 'find dependents of update_user').",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "query"
        -]
  3. 68 tool updatesv4.0.0
    • Addedadd_field_to_model
    • Addedanalyze_config
    • Addedanalyze_docker
    • Addedbuild_commit_summary
    • Addedcapture_aggregate
    • Addedcapture_get
    • Addedcapture_list
    • Addedcapture_purge
    • Addedcapture_put
    • Addedcapture_search
    • Addedcheckpoint
    • Addedcorpus_build
    • Addedcorpus_query
    • Addeddetect_breaking_changes
    • Addeddiscover_project_actions
    • Addededit_lines_in_symbol
    • Addedfind_dead_code
    • Addedfind_hotspots
    • Addedfind_impacted_test_files
    • Addedfind_import_cycles
    • Addedfind_semantic_duplicates
    • Addedfind_symbol
    • Addedget_call_chain
    • Addedget_change_impact
    • Addedget_changed_symbols
    • Addedget_class_source
    • Addedget_classes
    • Addedget_db_schema
    • Addedget_dependencies
    • Addedget_dependents
    • Addedget_edit_context
    • Addedget_entry_points
    • Addedget_env_usage
    • Addedget_feature_files
    • Addedget_file_dependencies
    • Addedget_file_dependents
    • Addedget_full_context
    • Addedget_function_source
    • Addedget_functions
    • Addedget_git_status
    • Addedget_imports
    • Addedget_project_summary
    • Addedget_routes
    • Addedget_stats
    • Addedget_structure_summary
    • Addedinsert_near_symbol
    • Addedlist_files
    • Addedlist_projects
    • Addedmemory_admin
    • Addedmemory_delete
    • Addedmemory_get
    • Addedmemory_index
    • Addedmemory_save
    • Addedmemory_search
    • Addedmove_symbol
    • Addedreasoning_list
    • Addedreasoning_save
    • Addedreasoning_search
    • Addedreindex
    • Addedreplace_symbol_source
    • Addedrun_impacted_tests
    • Addedrun_project_action
    • Addedsearch_codebase
    • Addedsearch_in_symbols
    • Addedset_project_root
    • Addedswitch_project
    • Addedts_execute
    • Addedts_search
  4. 8 tool updatesv1.0.5
    • Removedbuild_commit_summary
    • Removedcreate_checkpoint
    • Removedget_changed_symbols
    • Removedget_changed_symbols_since_ref
    • Removedget_git_status
    • Removedlist_projects
    • Removedsummarize_patch_by_symbol
    • Removedswitch_project
  5. 8 tool updatesv1.0.4
    • Addedbuild_commit_summary
    • Addedcreate_checkpoint
    • Addedget_changed_symbols
    • Addedget_changed_symbols_since_ref
    • Addedget_git_status
    • Addedlist_projects
    • Addedsummarize_patch_by_symbol
    • Addedswitch_project
  6. 17 tool updatesv1.0.2
    • Removedbuild_commit_summary
    • Removedcompare_checkpoint_by_symbol
    • Removedcreate_checkpoint
    • Removeddelete_checkpoint
    • Removedfind_impacted_test_files
    • Removedget_changed_symbols
    • Removedget_changed_symbols_since_ref
    • Removedget_git_status
    • Removedinsert_near_symbol
    • Removedlist_checkpoints
    • Removedlist_projects
    • Removedprune_checkpoints
    • Removedreplace_symbol_source
    • Removedrestore_checkpoint
    • Removedrun_impacted_tests
    • Removedsummarize_patch_by_symbol
    • Removedswitch_project
  7. 17 tool updatesv1.0.1
    • Addedbuild_commit_summary
    • Addedcompare_checkpoint_by_symbol
    • Addedcreate_checkpoint
    • Addeddelete_checkpoint
    • Addedfind_impacted_test_files
    • Addedget_changed_symbols
    • Addedget_changed_symbols_since_ref
    • Addedget_git_status
    • Addedinsert_near_symbol
    • Addedlist_checkpoints
    • Addedlist_projects
    • Addedprune_checkpoints
    • Addedreplace_symbol_source
    • Addedrestore_checkpoint
    • Addedrun_impacted_tests
    • Addedsummarize_patch_by_symbol
    • Addedswitch_project

TDQS

C2.9/5.0

Scored across 72 tools

Disambiguation2/5

Multiple tool families overlap heavily: get_dependencies/get_dependents/get_change_impact/get_full_context/get_edit_context all analyze symbol relationships; search_codebase/search_in_symbols/ts_search all search code; memory_search/reasoning_search/capture_search all search stores. Descriptions help somewhat, but boundaries remain unclear and agents must memorize subtle distinctions to avoid misselection.

Naming Consistency4/5

Nearly all tools use snake_case with predictable verb_noun patterns and consistent family prefixes (get_, memory_, capture_, reasoning_, ts_, corpus_). Minor deviations like 'checkpoint' (noun-only) and 'reindex' are readable but slightly inconsistent.

Tool Count1/5

72 tools is far beyond the typical 3-15 range and meets the rubric's extreme mismatch threshold. Even for a broad code-intelligence platform, this creates an overwhelming selection burden and increases the chance of wrong tool choice.

Completeness4/5

The surface covers code navigation, editing, refactoring, dependency analysis, git status, diagnostics, memory, reasoning, captures, and project management comprehensively. Only minor gaps exist, such as dedicated file creation/deletion and git commit/push operations, but major workflows are supported.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    A Model Context Protocol server that enables Large Language Models to interact with Git repositories through a robust API, supporting operations like repository initialization, cloning, file staging, committing, and branch management.
    28
    2,535 npm
    242
    Apache 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    An MCP server for efficient code indexing and symbol retrieval using tree-sitter AST parsing to fetch specific functions or classes without loading entire files. It significantly reduces AI token costs by providing O(1) byte-offset access to code components across multiple programming languages.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that provides structure-aware code analysis (symbol trees, dependencies, docs) to reduce AI agent token consumption by up to 99%, along with Git commit intelligence.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that provides ultra-efficient code exploration through AST analysis, reducing LLM token usage by up to 95% while enabling instant call graph generation and dependency analysis for massive codebases.
    MIT