token-savior
Token Savior is an MCP server that gives AI coding agents structural code navigation, persistent memory, and Bash-output handling to cut token usage.
Project management: list/switch/register workspace roots, reindex, summarize a project, list indexed files, inspect file structure.
Code navigation: locate symbols, fetch function/class source, list functions/classes/imports, regex or semantic
search_codebase, search that reports enclosing symbols, full-context bundles, call chains, routes, entry points, feature-file tracing.Dependency & impact analysis: outgoing deps, incoming dependents, transitive change impact, file-level import edges, import cycles, semantic/AST duplicate finder, complexity/performance hotspots, dead-code audit.
Structural editing: replace a symbol's source, exact string edits scoped to a symbol, insert near a symbol, move a symbol across files with import fixes, add a field to a model, plus a pre-edit context bundle.
Git & change review: git status, symbol-level changed-symbol summary, commit/review narrative builder, checkpoint create/list/restore/delete/prune/compare, breaking-API-change detection vs a ref.
Testing & actions: infer impacted pytest files, run impacted tests, discover conventional build/test/lint actions, run a discovered action with bounded output/timeout.
Config & infra audits: audit .env/.yaml/.toml/.json for duplicates/secrets/orphans, inspect Dockerfiles, condense SQL migration schemas, trace an env var across code and configs.
Persistent memory: save/search/read/archive observations, compact memory index, build and query thematic corpora, store/search/list reasoning traces, and a single admin dispatcher for status, dedup, distill, ROI GC, vector reindex, etc.
Capture sandbox: store verbose tool outputs, BM25-search them, read ranges, aggregate/extract stats, list, and purge.
Agent meta-tools: discover missed Token Savior opportunities from transcripts, report usage/telemetry stats, semantically find the right tool, and run JS scripts in a Node sandbox that chains multiple TS tools in one round-trip.
Synchronizes the codebase index by monitoring git status and diffs, and provides symbol-level impact analysis since specific git references.
Indexes documentation files via heading detection to allow section-based navigation and querying.
Identifies and executes specific tests impacted by symbol changes, providing compact summaries instead of raw logs.
Provides structural indexing and surgical source code retrieval for Python projects, including functions, classes, and dependency mapping.
Indexes Rust projects to extract and query symbols such as functions, structs, traits, and impl blocks.
Enables structural analysis and symbol extraction for TypeScript and JavaScript, covering functions, interfaces, and type aliases.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@token-saviorWhat is the impact of changing the LLMClient class?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
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 |
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?
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:
CHANGELOG.md for the full history
Releases for the tagged builds
PyPI for what
pipwill actually give you
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.jsonts 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.jsonlCompactor catalog (34)
Family | Compactors |
git |
|
gh |
|
test/lint |
|
cloud |
|
docker |
|
packaging |
|
shell catch-alls |
|
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, JSONFindings: 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 openclawDetects 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 |
| 15 | ~1.5 KT | Recommended default -- Pareto win on tsbench |
| adaptive | ~1-2 KT | Per-client telemetry-based (experimental) |
| 6 | ~0.6 KT | Minimal hot loop |
| 51 | ~4 KT | Legacy -- broader surface |
| 1 | ~0.3 KT | Bash layer only (rewriter + capture) -- you already run symbol nav elsewhere |
| 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. |
Symbol-graph navigation | Direct, with | Run TS as | |
codebase-memory | Persistent code graph | With the memory engine |
|
Ponytail, Caveman | Output-side compression (code and prose) | Partial: Token Savior ships an opt-in Ponytail-style discipline ( | 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 |
| 41M chars (full read) | 67 chars | -99.9% |
| grep + cat chain | 4.5K chars | direct |
| 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-recallClaude Code one-liner
claude mcp add token-savior -- /path/to/venv/bin/token-saviorDevelopment
git clone https://github.com/Mibayy/token-savior
cd token-savior
python3 -m venv .venv
.venv/bin/pip install -e ".[mcp,dev]"
pytest tests/ -qSuite 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 commandsThe 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 -> aimport cycle, and a dead function whose name contains a live one.Eight read-only tasks, scored mechanically against an
expectedlist and aforbiddenlist. 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_tscontrol 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 agentsOn 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 |
| 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 |
| — | Single-root alternative to |
| — | Deliberate active-project override (Token Savior's own contract — no host sets it). Registered if valid, wins over every other boot signal |
| off (bool, | Freeze the active project: explicit |
|
| Tool profile. |
| off (on in | Strip verbose tool schemas from the manifest |
| off (bool) | Session instructions in the style of Ponytail: smallest complete change scoped by |
| on (bool) | The |
|
| Hot-tool count exposed by the telemetry-driven |
| off | Let a Thompson-sampling bandit pick the detail level of |
|
| Ceiling on a |
|
| Discipline guard: whole-file |
| on |
|
| off | Disable the memory engine (clean-context workloads) |
| off | Skip read-side capture sandboxing and drop the capture tools from the manifest (no profile flips this; |
| off | Disable code-mode tools |
|
| Node binary used by the code-mode sandbox |
| off (bool) | Don't expose observations as |
| off (bool) | Pre-build project slots at startup |
| off (bool) | Skip the |
| off (bool, | Delegate the cold |
|
| Unix socket of the |
| auto-detected | Client label ( |
| — | Free-form label attached to session telemetry |
Indexing
Var | Default | Purpose |
| built-in list | Colon-separated globs; replaces the default include list |
| built-in list | Colon-separated globs; replaces the default exclude list |
| — | Colon-separated globs appended to the default excludes |
| — | Colon-separated globs appended at the indexer level |
|
| Max file size (bytes) to index |
|
| Max files per project |
|
| File watcher: |
| off | Force the polling watcher backend |
Claude Code hooks
Var | Default | Purpose |
|
| Minimum tool-output size to sandbox |
| off | Strong-replace: tell the agent to ignore the inline output and |
|
| Captures older than this are purged on the next |
| off | PostToolUse compactors. Preserves output across compaction; does NOT shrink the current turn (see note above) |
|
| Hybrid mode: compact-result size above which the full original is also sandboxed |
|
| Hybrid mode: compact-result size below which the sandbox is always skipped |
| off | Enable the PreToolUse Bash command rewriter |
| — | JSONL audit log of every rewrite |
| off | SessionStart memory hook emits only the Memory Index block |
Memory extras
Var | Default | Purpose |
| off | Port for the observation web viewer (unset = disabled) |
| off | LLM auto-extraction of memory observations (Anthropic API key required) |
|
| Auto-extraction model override |
| off | Auto-save memory observations |
| — | Critical-observation feed |
Storage, dashboard, debugging
Var | Default | Purpose |
|
| Telemetry + stats directory |
|
| Dashboard bind host |
|
| Dashboard port |
| off (bool) | Dashboard also lists projects under temp dirs |
| off | Debug logging |
| 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 toolsadd_field_to_modelBDestructive
Add a field to a model/class/interface. Supports .prisma, .py (dataclass, SQLAlchemy), .ts/.tsx.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Insert after the line containing this string. | |
| model | Yes | Model/class/interface name. | |
| project | No | Project name/path (default: active). | |
| file_path | No | Optional file path to disambiguate. | |
| field_name | Yes | Name of the new field. | |
| field_type | Yes | Type of the field (e.g. 'String', 'DateTime?', 'number'). |
TDQS
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.
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.
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.
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.
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.
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_configBRead-onlyIdempotent
Audit config files (.env/.yaml/.toml/.json): duplicates, secrets, orphans.
| Name | Required | Description | Default |
|---|---|---|---|
| checks | No | Checks to run | |
| project | No | Project name/path (default: active). | |
| severity | No | Severity filter | |
| file_path | No | Specific config file | |
| max_issues | No | Cap total issues shown (default 10, 0 = unlimited). Raise for full audit. |
TDQS
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.
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.
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.
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.
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.
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_dockerBRead-onlyIdempotent
Audit Dockerfiles: base images, stages, exposed ports, ENV/ARG, cross-ref with config files.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). |
TDQS
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.
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.
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.
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.
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.
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_summaryCRead-onlyIdempotent
Compact commit/review narrative with stats, hotspots, suggested type.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). | |
| max_files | No | Default 20. | |
| changed_files | Yes | ||
| max_symbols_per_file | No | Default 20. |
TDQS
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.
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.
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.
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.
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.
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_aggregateCRead-onlyIdempotent
Aggregate over a capture: stats|count_lines|unique_lines|extract:|count:.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| pattern | No | Regex when transform is 'extract' or 'count' without inline regex. | |
| transform | No | stats (default) | count_lines | unique_lines | extract | count | extract:<regex> | count:<regex> |
TDQS
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.
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.
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.
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.
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.
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_getBRead-onlyIdempotent
Read a capture (range: head/tail/all/preview/line:N-M).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Capture id (from search/list). | |
| range | No | head | tail | all | preview | line:start-end | relevant:<question> (keeps only the lines relevant to the question, lossless — 'all' still returns everything). Default preview. | |
| max_bytes | No | Cap returned content size. |
TDQS
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.
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.
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.
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.
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.
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_listCRead-onlyIdempotent
List recent captures (newest first).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 50). | |
| tool_name | No | ||
| session_id | No | ||
| project_root | No |
TDQS
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.
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.
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.
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.
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.
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_purgeADestructiveIdempotent
Delete captures by age/session/project (filter required).
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | ||
| project_root | No | ||
| older_than_sec | No | Delete captures older than this many seconds. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| meta | No | Free-form metadata stored alongside the capture. | |
| output | Yes | Full raw output to capture. | |
| tool_name | Yes | Logical tool name (e.g. 'Bash', 'WebFetch', 'mcp__playwright__snapshot'). | |
| session_id | No | Optional session id to scope retrieval. | |
| args_summary | No | Short human description of the call (URL, command, query). | |
| project_root | No | Optional active project root. |
TDQS
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.
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.
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.
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.
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.
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.
capture_searchBRead-onlyIdempotent
BM25 search across sandboxed tool outputs. Returns id, snippet, bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 20). | |
| query | Yes | FTS5 query (terms ANDed by default). | |
| tool_name | No | Restrict to a single source tool. | |
| session_id | No | ||
| project_root | No |
TDQS
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 retrieval mechanism (BM25) and the result fields (id, snippet, bytes), which is useful behavioral context, but says nothing about ranking behavior, pagination, or what tokens the FTS5 query accepts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the mechanism and scope, and the return fields are stated compactly. Nothing is padded, though it is arguably terse to the point of leaving gaps rather than being efficiently complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does useful work by naming the return fields. However, for a 5-parameter tool it omits how the capture store is populated, how session_id/project_root scope results, and how it relates to its capture_* siblings, leaving the definition only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 60%, and session_id and project_root have no schema descriptions at all. The description adds no parameter meaning and does not compensate for the undocumented fields, so an agent cannot tell how scoping by session or project works.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and algorithm (BM25 search) and a scope (sandboxed tool outputs), which separates it from capture_get/capture_list. It does not, however, distinguish it from the other search siblings such as memory_search, search_codebase, or corpus_query, so an agent must infer which search corpus applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, and no reference to alternative tools. Given several search-shaped siblings (memory_search, corpus_query, search_codebase, ts_search), the absence of routing guidance is a real gap.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | Operation to perform (default 'list'). | |
| project | No | Project name/path (default: active). | |
| keep_last | No | For op=prune: how many recent checkpoints to keep (default 10). | |
| max_files | No | For op=compare: max files compared (default 20). | |
| file_paths | No | For op=create: project files to snapshot. | |
| checkpoint_id | No | For op=restore/delete/compare: checkpoint identifier. |
TDQS
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.
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.
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.
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.
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.
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_buildBIdempotent
Build a thematic corpus from observations filtered by type / tags / symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Unique per project. | |
| project | No | Project name/path (default: active). | |
| filter_tags | No | ||
| filter_type | No | ||
| filter_symbol | No |
TDQS
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.
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.
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.
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.
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.
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_queryBRead-onlyIdempotent
Format all observations of a named corpus as markdown context + a question, ready for answering.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Corpus name previously built via corpus_build. | |
| project | No | Project name/path (default: active). | |
| question | Yes | Question to answer with the corpus context. |
TDQS
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.
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.
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.
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.
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.
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_changesBRead-onlyIdempotent
Breaking API changes vs a git ref: removed funcs/params, added required params, signature changes.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). | |
| since_ref | No | Git ref to compare against (default: "HEAD~1"). Can be a commit SHA, branch, or tag. |
TDQS
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.
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.
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.
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.
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.
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_actionsARead-onlyIdempotent
Detect conventional project actions from build files (tests, lint, build, run) without executing.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). |
TDQS
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.
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.
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.
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.
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.
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_symbolADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). | |
| file_path | No | Optional file path to disambiguate symbols. | |
| new_string | Yes | Replacement text. | |
| old_string | Yes | Exact text to find inside the symbol body (must be unique within the symbol unless replace_all=true). | |
| replace_all | No | If true, replace every occurrence in the symbol body (default false). | |
| symbol_name | Yes | Function/method/class name to edit inside. |
TDQS
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.
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.
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.
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.
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.
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_codeARead-onlyIdempotent
Project-wide audit of unreferenced functions/classes (zero callers, excludes entry points, tests, route handlers).
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). | |
| max_results | No | Maximum number of dead symbols to report (default: 20). Header always shows true total; raise for full audit. |
TDQS
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.
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.
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.
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.
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.
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_hotspotsBRead-onlyIdempotent
Rank functions by hotspot kind. complexity (all langs) | allocation (Java) | performance (Java).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Hotspot category (default 'complexity'). | |
| project | No | Project name/path (default: active). | |
| min_score | No | Minimum score to include (default: 0 for complexity, 1 for Java kinds). | |
| max_results | No | Maximum number of functions to report (default: 20). |
TDQS
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.
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.
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.
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.
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.
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_filesARead-onlyIdempotent
Infer pytest files likely impacted by changed files or symbols.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). | |
| max_tests | No | Default 20. | |
| symbol_names | No | ||
| changed_files | No |
TDQS
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.
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.
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.
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.
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.
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_cyclesBRead-onlyIdempotent
Detect import cycles (strongly-connected components) in the file-level import graph (Tarjan's).
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). | |
| max_cycles | No | Maximum number of cycles to return (default 20, 0 = unlimited). |
TDQS
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.
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.
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.
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.
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.
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_duplicatesARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | ast (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. | |
| project | No | Project name/path (default: active). | |
| min_lines | No | Skip functions shorter than this (default 2). Applies to method='ast'. | |
| max_groups | No | Max duplicate groups to return (default 10). Raise for full audit. | |
| min_similarity | No | Cosine threshold for method='embedding' (default 0.90). Lower = more recall + more noise. |
TDQS
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.
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.
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.
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.
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.
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_symbolARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| hints | No | Add a `_hints` key with next-step tool calls (default true). | |
| kinds | No | Symbol kinds to search. Default: function+class (plus variable when TOKEN_SAVIOR_VARIABLES=search). | |
| level | No | 0 full, 1 no preview, 2 minimal. | |
| names | No | Batch mode: list of names (max 10). Returns {name: result} dict. Mutually exclusive with 'name'. | |
| query | No | Alias de `name`. | |
| symbol | No | Alias de `name`. | |
| project | No | Project name/path (default: active). | |
| compress | No | Compact rows (default true). | |
| symbol_name | No | Alias de `name`. |
TDQS
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.
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.
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.
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.
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.
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_chainBRead-onlyIdempotent
Shortest dependency path between two symbols (BFS through the dep graph).
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Per-hop verbosity: 0=full (source_preview), 1=sig+file, 2=minimal name+file+line. Default 2. | |
| project | No | Project name/path (default: active). | |
| to_name | Yes | Target symbol name. | |
| from_name | Yes | Starting symbol name. |
TDQS
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.
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.
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.
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.
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.
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_symbolsBRead-onlyIdempotent
Symbol-level summary of worktree changes (or HEAD vs ref).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Compare base (omit=worktree). | |
| project | No | Project name/path (default: active). | |
| max_files | No | Default 20. | |
| max_symbols_per_file | No | Default 20. |
TDQS
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.
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.
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.
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.
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.
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_impactBRead-onlyIdempotent
Impact analysis: direct + transitive dependents of a symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| project | No | Project name/path (default: active). | |
| max_direct | No | 0=all. | |
| max_transitive | No | 0=all. | |
| max_total_chars | No | Default 50000. |
TDQS
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.
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.
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.
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.
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.
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_classesBRead-onlyIdempotent
List classes (name, lines, methods, bases, file).
| Name | Required | Description | Default |
|---|---|---|---|
| hints | No | Append a `_hints` entry with next-step tool calls (default true). | |
| project | No | Project name/path (default: active). | |
| compress | No | Compact rows (default true). | |
| file_path | No | Filter to file (omit=all). | |
| max_results | No | Default 100. 0=unlimited. Truncated results carry a trailing `_truncated` marker with total count. |
TDQS
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.
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.
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.
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.
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.
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_sourceCRead-onlyIdempotent
Fetch a class source body (including methods).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| hints | No | Append a one-line get_full_context hint (default true). | |
| level | No | ||
| names | No | Batch mode: list of names (max 10). Returns {name: result} dict. Mutually exclusive with 'name'. | |
| project | No | Project name/path (default: active). | |
| file_path | No | ||
| max_lines | No | Cap lines (0=all, level=0 only). | |
| class_name | No | Alias de `name`. | |
| force_full | No | Bypass symbol cache. | |
| symbol_name | No | Alias de `name`. |
TDQS
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.
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.
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.
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.
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.
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_schemaARead-onlyIdempotent
Condensed SQL-migration snapshot: tables (cols, types, nullability, defaults), PKs, FKs, indexes, RLS policies.
| Name | Required | Description | Default |
|---|---|---|---|
| tables | No | Optional filter: only return these table names. | |
| dialect | No | SQL dialect -- currently only 'postgres' is implemented. | |
| project | No | Project name/path (default: active). | |
| migrations_dir | No | Relative or absolute path to the migrations directory (default: auto-detect). |
TDQS
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.
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.
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.
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.
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.
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_dependenciesARead-onlyIdempotent
Outgoing deps of a symbol: what X calls/uses (downstream).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| depth | No | Transitive BFS depth (default 1). | |
| project | No | Project name/path (default: active). | |
| compress | No | Compact rows (default true). | |
| max_results | No | Default 100. 0=unlimited. Truncated results carry a trailing `_truncated` marker with total count. |
TDQS
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.
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.
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.
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.
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.
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_dependentsBRead-onlyIdempotent
Incoming deps: who calls/uses X, direct references only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| project | No | Project name/path (default: active). | |
| compress | No | Compact rows (default true). | |
| max_results | No | 0=all. | |
| max_total_chars | No | Default 50000. |
TDQS
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.
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.
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.
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.
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.
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_diagnosticsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| checker | No | Force a checker instead of detecting it. | |
| project | No | Project name/path (default: active). | |
| timeout | No | Seconds before giving up (default 180). | |
| file_path | No | Restrict to one file (suffix match). | |
| max_files | No | Files reported (default 15). | |
| max_per_file | No | Diagnostics kept per file (default 10). |
TDQS
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.
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.
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.
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.
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.
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_contextARead-onlyIdempotent
Pre-edit bundle: source + direct deps + callers + same-file siblings + impacted tests.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| symbol | No | Alias de `name`. | |
| project | No | Project name/path (default: active). | |
| max_deps | No | Default 10. | |
| max_callers | No | Default 10. | |
| symbol_name | No | Alias de `name`. |
TDQS
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.
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.
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.
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.
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.
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_pointsBRead-onlyIdempotent
Score functions by likelihood of being execution entry points: routes, handlers, main, exported APIs.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). | |
| max_results | No | Maximum number of entry points to return (default 20). |
TDQS
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.
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.
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.
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.
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.
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_usageARead-onlyIdempotent
Cross-reference an env var across code, .env files, and workflow configs. Shows where it's defined, read, written.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). | |
| var_name | Yes | Environment variable name (e.g. HELLOASSO_CLIENT_ID). | |
| max_results | No | Max results (0 = all, default 0). |
TDQS
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.
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.
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.
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.
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.
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_filesBRead-onlyIdempotent
Files matching a feature keyword + traced imports, classified by role (core, test, config).
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | ||
| project | No | Project name/path (default: active). | |
| max_results | No | 0=all. |
TDQS
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.
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.
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.
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.
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.
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_dependenciesBRead-onlyIdempotent
Files imported by this file (outgoing file-level import edges).
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). | |
| file_path | Yes | Relative path to the file. | |
| max_results | No | Maximum number of results to return (0 = unlimited, default 0). |
TDQS
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.
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.
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.
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.
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.
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_dependentsBRead-onlyIdempotent
Files that import this file (incoming file-level import edges).
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). | |
| file_path | Yes | Relative path to the file. | |
| max_results | No | Maximum number of results to return (0 = unlimited, default 0). |
TDQS
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.
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.
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.
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.
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.
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_contextCRead-onlyIdempotent
Symbol bundle: location + source + deps/dependents (depth=1) or + change_impact (depth=2).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | compact (default): source head 80 lines + deps/dependents as names only. full: raw payload. | |
| name | No | Symbol name (function, method, class). | |
| depth | No | 0=symbol+source, 1=+deps/dependents (default), 2=+change_impact. | |
| names | No | Batch mode: list of names (max 10). Returns {name: result} dict. Mutually exclusive with 'name'. | |
| intent | No | 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'). | |
| symbol | No | Alias de `name`. Symbol name (function, method, class). | |
| project | No | Project name/path (default: active). | |
| max_lines | No | Cap source lines (default 200). | |
| symbol_name | No | Alias de `name`. Symbol name (function, method, class). |
TDQS
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.
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.
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.
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.
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.
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_functionsARead-onlyIdempotent
List functions in a file (file_path=...) or across the project.
| Name | Required | Description | Default |
|---|---|---|---|
| hints | No | Append a `_hints` entry with next-step tool calls (default true). | |
| project | No | Project name/path (default: active). | |
| compress | No | Compact rows (default true). | |
| file_path | No | Filter to file (omit=all). | |
| max_results | No | Default 100. 0=unlimited. Truncated results carry a trailing `_truncated` marker with total count. |
TDQS
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.
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.
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.
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.
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.
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_sourceBRead-onlyIdempotent
Full source of a function or method by name, no path needed: reads the symbol instead of the whole file.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Function or method (e.g. 'MyClass.method'). | |
| hints | No | Append a one-line get_full_context hint (default true). | |
| level | No | ||
| names | No | Batch mode: list of names (max 10). Returns {name: result} dict. Mutually exclusive with 'name'. | |
| project | No | Project name/path (default: active). | |
| function | No | Alias de `name`. Function or method (e.g. 'MyClass.method'). | |
| file_path | No | ||
| max_lines | No | Cap lines (0=all, level=0 only). | |
| force_full | No | Bypass symbol cache. | |
| symbol_name | No | Alias de `name`. Function or method (e.g. 'MyClass.method'). |
TDQS
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.
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.
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.
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.
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.
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_statusBRead-onlyIdempotent
Structured git status: branch, ahead/behind, staged, unstaged, untracked.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). |
TDQS
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.
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.
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.
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.
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.
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_importsBRead-onlyIdempotent
List imports (module, names, line).
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). | |
| compress | No | Compact rows (default true). | |
| file_path | No | Filter to file (omit=all). | |
| max_results | No | Default 100. 0=unlimited. Truncated results carry a trailing `_truncated` marker with total count. |
TDQS
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.
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.
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.
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.
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.
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_summaryBRead-onlyIdempotent
Project overview: file count, packages, top classes/functions, infra dirs.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). |
TDQS
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.
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.
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.
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.
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.
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_routesBRead-onlyIdempotent
Detect API routes and pages in a Next.js App Router project: path, file, HTTP methods, type.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). | |
| max_results | No | Max routes to return (0 = all, default 0). |
TDQS
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.
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.
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.
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.
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.
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_statsCRead-onlyIdempotent
Unified stats dispatcher. category = usage (default) | session_budget | tca | dcp | linucb | warmstart | leiden | speculation | lattice.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). | |
| category | No | Which stats subsystem to report (default 'usage'). | |
| context_type | No | For category=lattice: filter to one context (navigation/edit/review/unknown). | |
| budget_tokens | No | For category=session_budget: soft budget cap (default 200000). |
TDQS
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.
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.
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.
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.
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.
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_summaryBRead-onlyIdempotent
Structure of one file (functions, classes, imports, line counts), or project-wide if file omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). | |
| file_path | No | Relative path to a file in the project. Omit for project-level summary. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Alias de `content`. | |
| name | No | Alias de `symbol_name`. | |
| source | No | Alias de `content`. | |
| content | No | ||
| project | No | Project name/path (default: active). | |
| position | No | 'before' or 'after' (default after). | |
| file_path | No | ||
| new_source | No | Alias de `content`. | |
| symbol_name | No |
TDQS
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.
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.
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.
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.
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.
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_filesBRead-onlyIdempotent
List indexed files, optionally filtered by glob.
| Name | Required | Description | Default |
|---|---|---|---|
| glob | No | Alias de `pattern`. Glob pattern to filter files (uses fnmatch). | |
| query | No | Alias de `pattern`. Glob pattern to filter files (uses fnmatch). | |
| pattern | No | Glob pattern to filter files (uses fnmatch). | |
| project | No | Project name/path (default: active). | |
| max_results | No | Maximum number of results to return (0 = unlimited, default 0). |
TDQS
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.
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.
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.
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.
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.
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_projectsARead-onlyIdempotent
List all registered workspace projects with index status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_adminBDestructive
Single dispatch for all memory admin / maintenance ops (status, doctor, dedup_sweep, distill, roi_gc, consistency, vector_reindex, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | Which memory-admin sub-operation to run. | |
| limit | No | Pagination/limit (where applicable). | |
| dry_run | No | Preview-only mode for sweeps/garbage collectors. | |
| rebuild | No | vector_reindex: re-embed rows that already have a vector, not just the missing ones. | |
| project_root | No | Filter by project (where applicable). |
TDQS
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.
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.
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.
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.
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.
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_deleteADestructiveIdempotent
Soft-delete an observation by ID (sets archived=1).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Observation ID to archive. | |
| project | No | Project name/path (default: active). |
TDQS
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.
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.
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.
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.
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.
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_getARead-onlyIdempotent
Layer 3: full observation content by IDs (~200 tokens/result). Final progressive-disclosure layer.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Observation IDs. Each item may be an integer (42), a digit string ("42"), or a citation URI ("ts://obs/42"). | |
| full | No | If false (default), content trimmed to 80 chars. If true, full content. | |
| project | No | Project name/path (default: active). |
TDQS
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.
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.
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.
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.
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.
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_indexBRead-onlyIdempotent
Layer 1: compact index of recent observations — ID, type, title, importance, age, citation URI.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entries to return (default 30). | |
| project | No | Project name/path (default: active). | |
| type_filter | No | Filter by observation type (optional). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| why | No | ||
| tags | No | ||
| type | Yes | ||
| facts | No | Optional atomic facts (JSON array or bullet list). | |
| title | Yes | ||
| symbol | No | ||
| content | Yes | ||
| context | No | ||
| project | No | Project name/path (default: active). | |
| concepts | No | Optional conceptual tags (JSON array or comma list). | |
| ttl_days | No | ||
| file_path | No | ||
| is_global | No | ||
| narrative | No | Optional free-form narrative explaining the obs in prose. | |
| importance | No | 1-10 | |
| session_id | No | ||
| how_to_apply | No |
TDQS
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.
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.
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.
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.
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.
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.
memory_searchBRead-onlyIdempotent
Layer 2 FTS5 search over memory observations, compact rows with snippets (~60 tokens/result).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 20. | |
| query | Yes | FTS5 (AND/OR/NOT/phrase). | |
| project | No | Project name/path (default: active). | |
| type_filter | No |
TDQS
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 useful output-shape context ('compact rows with snippets, ~60 tokens/result') that helps the agent budget results, but says nothing about ordering, pagination, or result count behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, efficiently conveying mechanism and result shape. Slightly terse relative to the ambiguity in the sibling landscape, but well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should carry return-value burden; it partially does by noting compact rows, snippets, and token cost, but omits ordering and result fields. For a search tool with 4 params and no output schema, this is adequate but leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, with the FTS5 query syntax and defaults documented in the schema itself. The description adds no parameter detail and leaves type_filter (the uncovered 25%) undocumented in both places, so it neither compensates nor detracts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (memory observations), qualified by 'Layer 2 FTS5', which is concrete enough to identify the mechanism. However, it does not distinguish itself from the many other search siblings (reasoning_search, capture_search, ts_search, search_codebase), so the agent must infer scope 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.
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 alternative tool is named. Given the crowded sibling set of search tools, the absence of routing guidance is a real gap; usage is only weakly implied by the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_symbolADestructive
Move a symbol to a different file, updating imports in all call sites.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Symbol name to move. | |
| project | No | Project name/path (default: active). | |
| target_file | Yes | Relative path to the target file. | |
| create_if_missing | No | Create target file if it doesn't exist (default true). |
TDQS
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.
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.
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.
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.
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.
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_linesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Last line, inclusive. Omit for start+59. | |
| file | No | Alias de `file_path`. Path to an indexed file (relative to project root). | |
| line | No | Alias de `start`. First line, 1-indexed, inclusive. | |
| path | No | Alias de `file_path`. Path to an indexed file (relative to project root). | |
| hints | No | Append the enclosing symbol (default true). | |
| start | No | First line, 1-indexed, inclusive. | |
| numbers | No | Prefix each line with its number (default true). | |
| project | No | Project name/path (default: active). | |
| end_line | No | Alias de `end`. Last line, inclusive. Omit for start+59. | |
| file_path | No | Path to an indexed file (relative to project root). | |
| max_lines | No | Cap on returned lines (default 400, 0=uncapped). | |
| start_line | No | Alias de `start`. First line, 1-indexed, inclusive. |
TDQS
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.
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.
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.
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.
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.
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_listBRead-onlyIdempotent
List stored reasoning chains by access_count then recency.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 50). | |
| project | No | Project name/path (default: active). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | ||
| steps | Yes | [{tool,args,observation},...] | |
| project | No | Project name/path (default: active). | |
| ttl_days | No | ||
| conclusion | Yes | ||
| confidence | No | 0.0-1.0 (default 0.8). | |
| evidence_obs_ids | No |
TDQS
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.
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.
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.
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.
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.
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.
reasoning_searchBRead-onlyIdempotent
Search stored reasoning chains by goal similarity (FTS5 + Jaccard).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 5). | |
| query | Yes | Goal-like query text. | |
| project | No | Project name/path (default: active). | |
| threshold | No | Minimum Jaccard similarity (default 0.3). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and closed-world, so the safety profile is covered. The description adds the useful detail that matching is similarity-based (FTS5 + Jaccard), hinting at ranked, non-exact results, but says nothing about result format or scoring output since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every clause (what is searched, how it is ranked) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with fully documented params and annotations covering safety, this is adequate, but the absence of any return-shape or ranking-output explanation (no output schema exists) leaves a gap an agent might need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (query, limit, project, threshold) are already documented in the schema, making 3 the baseline. The description adds only the ranking mechanism, not extra parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (stored reasoning chains), plus the matching mechanism (FTS5 + Jaccard). It is distinguishable from generic siblings like search_codebase or memory_search by naming 'reasoning chains', but it does not explicitly contrast with reasoning_list or reasoning_save.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance. The phrase 'by goal similarity' implies the query should be goal-like, but the description never says when to prefer this over siblings like reasoning_list or memory_search, nor any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reindexCIdempotent
Rebuild the project index.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Rebuild even if no mtime changes detected. | |
| project | No | Project name/path (default: active). |
TDQS
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.
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.
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.
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.
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.
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_sourceBDestructive
Rewrite a whole function or class by name, no Read needed.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Alias de `new_source`. Replacement source for the symbol. | |
| name | No | Alias de `symbol_name`. Function, method, class, or section name to replace. | |
| source | No | Alias de `new_source`. Replacement source for the symbol. | |
| content | No | Alias de `new_source`. Replacement source for the symbol. | |
| project | No | Project name/path (default: active). | |
| file_path | No | Optional file path to disambiguate symbols. | |
| new_source | No | Replacement source for the symbol. | |
| symbol_name | No | Function, method, class, or section name to replace. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| compact | No | ||
| project | No | Project name/path (default: active). | |
| max_tests | No | ||
| timeout_sec | No | ||
| symbol_names | No | ||
| changed_files | No | ||
| include_output | No | ||
| max_output_chars | No |
TDQS
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.
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.
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.
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.
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.
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_actionBDestructive
Run a discovered project action by id (bounded output, bounded timeout).
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name/path (default: active). | |
| action_id | Yes | e.g. 'python:test', 'npm:test'. | |
| timeout_sec | No | Default 120. | |
| include_output | No | ||
| max_output_chars | No | Default 12000. |
TDQS
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.
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.
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.
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.
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.
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_codebaseARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Alias de `pattern`. Regex pattern (regex mode) or natural-language description (semantic mode). | |
| query | No | Alias de `pattern`. Regex pattern (regex mode) or natural-language description (semantic mode). | |
| regex | No | Alias de `pattern`. Regex pattern (regex mode) or natural-language description (semantic mode). | |
| pattern | No | Regex pattern (regex mode) or natural-language description (semantic mode). | |
| project | No | Project name/path (default: active). | |
| semantic | No | If true, interpret `pattern` as a description and rank symbols by embedding cosine similarity. Returns enriched hits with signature/docstring/score. Default false (regex). | |
| max_results | No | Maximum number of results to return (default 100, 0 = unlimited). | |
| ignore_generated | No | Skip generated/minified files (default true). Regex mode only. |
TDQS
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.
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.
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.
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.
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.
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_symbolsBRead-onlyIdempotent
Regex search that returns the enclosing function/class for each match, in addition to file:line.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | Regular expression pattern to search for. | |
| project | No | Project name/path (default: active). | |
| max_results | No | Maximum number of results to return (default 100, 0 = unlimited). |
TDQS
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.
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.
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.
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.
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.
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_rootAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Alias de `path`. Absolute path to the project root directory. | |
| path | No | Absolute path to the project root directory. | |
| root | No | Alias de `path`. Absolute path to the project root directory. | |
| force | No | Rebuild the index even if the project is already registered. | |
| project | No | Alias de `path`. Absolute path to the project root directory. |
TDQS
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.
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.
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.
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.
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.
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_projectCIdempotent
Switch the active project.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Project name (basename of path) or full path. | |
| path | No | Alias de `name`. Project name (basename of path) or full path. | |
| root | No | Alias de `name`. Project name (basename of path) or full path. | |
| project | No | Alias de `name`. Project name (basename of path) or full path. |
TDQS
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.
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.
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.
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.
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.
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_discoverARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Cap the number of findings returned (table/json only; default unlimited). | |
| format | No | Output format. 'table' (default) / 'json' = ranked missed-opportunity Findings. 'adoption' / 'adoption_json' = TS vs native adoption summary. | |
| project | No | Filter to sanitized project dirs whose name contains this substring (e.g. '-root'). Omit to scan ALL transcript projects under ~/.claude/projects/. | |
| since_days | No | Only consider events newer than now - since_days (default 7). |
TDQS
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.
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.
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.
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.
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.
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_executeADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| js | No | Alias de `script`. JS function body. Use `await tools.foo(args)` then `return value`. | |
| body | No | Alias de `script`. JS function body. Use `await tools.foo(args)` then `return value`. | |
| code | No | Alias de `script`. JS function body. Use `await tools.foo(args)` then `return value`. | |
| script | No | JS function body. Use `await tools.foo(args)` then `return value`. | |
| timeout_ms | No | Max script wall-clock in ms (default 30000). |
TDQS
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.
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.
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.
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.
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.
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_searchARead-onlyIdempotent
Find the top-K Token Savior tools most relevant to a natural-language query via embedding cosine similarity. Use when the manifest is in 'tiny' or 'code_mode' profile or you don't know which tool fits. Returns each candidate with its full inputSchema (format='schema') or a one-line TypeScript signature (format='ts') suitable for ts_execute scripts.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Alias de `query`. Natural-language description of what you need (e.g. 'find dependents of update_user'). | |
| query | No | Natural-language description of what you need (e.g. 'find dependents of update_user'). | |
| top_k | No | How many tool candidates to return (default 5, max 12). | |
| format | No | 'schema' (default) returns JSONSchema; 'ts' returns a TypeScript signature for Code Mode scripts. Auto-set to 'ts' when profile=code_mode. | |
| pattern | No | Alias de `query`. Natural-language description of what you need (e.g. 'find dependents of update_user'). | |
| include_schema | No | If false, drop inputSchema from the response (smaller payload). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe read-only, idempotent, closed-world profile, so the bar is lower, and the description adds genuine context: it explains what is returned (full inputSchema vs a one-line TypeScript signature) and ties format to code_mode. It does not mention scoring thresholds or pagination, but for a read-only search that is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with what it does and why, then return formats. Every sentence earns its place; sizing is appropriate for a search entry-point tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by explaining the two response shapes. It is complete enough to invoke correctly; the only mild gap is not flagging that one of query/pattern/q is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented, including the query/pattern/q aliases, top_k default/max, and the format enum. The description restates top-K, format='schema'/'ts', and the code_mode auto-set, adding integration flavor but little meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Find), resource (Token Savior tools), retrieval mechanism (embedding cosine similarity), and scope (top-K for a natural-language query). This clearly distinguishes it from siblings like ts_discover, find_symbol, and search_codebase without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditions for use: 'when the manifest is in tiny or code_mode profile or you don't know which tool fits.' That is a real when-to-use trigger, though it never names the alternative tool to use when you do know which tool fits (e.g., direct lookup), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ts_stale_contextARead-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'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Cap the number of stale refs returned (default unlimited). | |
| format | No | Output format. 'table' (default) or 'json'. | |
| project | No | Filter to project dirs whose name contains this substring (omit = all recent). | |
| since_days | No | Only consider events newer than now - since_days (default 1 = the current session). |
TDQS
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.
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.
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.
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.
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.
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.
8 tool updates
v4.24.0- Changed
capture_get1 field changed- changed
Input schema / properties / range / descriptionPrevious 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."
- Changed
find_symbol1 field changed- added
Input schema / properties / queryAdded value: +{ + "description": "Alias de `name`. ", + "type": "string" +}
- Added
get_diagnostics - Changed
get_full_context1 field changed- added
Input schema / properties / intentAdded 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" +}
- Changed
memory_admin1 field changed- added
Input schema / properties / rebuildAdded value: +{ + "description": "vector_reindex: re-embed rows that already have a vector, not just the missing ones.", + "type": "boolean" +}
- Added
read_lines - Changed
ts_execute5 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "script" + ] + }, + { + "required": [ + "code" + ] + }, + { + "required": [ + "body" + ] + }, + { + "required": [ + "js" + ] + } +] - added
Input schema / properties / bodyAdded value: +{ + "description": "Alias de `script`. JS function body. Use `await tools.foo(args)` then `return value`.", + "type": "string" +} - added
Input schema / properties / codeAdded value: +{ + "description": "Alias de `script`. JS function body. Use `await tools.foo(args)` then `return value`.", + "type": "string" +} - added
Input schema / properties / jsAdded value: +{ + "description": "Alias de `script`. JS function body. Use `await tools.foo(args)` then `return value`.", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "script" -]
- Added
ts_stale_context
13 tool updates
v4.20.0- Changed
find_symbol3 fields changed- added
Input schema / properties / kindsAdded 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" +} - added
Input schema / properties / symbolAdded value: +{ + "description": "Alias de `name`. ", + "type": "string" +} - added
Input schema / properties / symbol_nameAdded value: +{ + "description": "Alias de `name`. ", + "type": "string" +}
- Changed
get_class_source2 fields changed- added
Input schema / properties / class_nameAdded value: +{ + "description": "Alias de `name`. ", + "type": "string" +} - added
Input schema / properties / symbol_nameAdded value: +{ + "description": "Alias de `name`. ", + "type": "string" +}
- Changed
get_edit_context4 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "name" + ] + }, + { + "required": [ + "symbol_name" + ] + }, + { + "required": [ + "symbol" + ] + } +] - added
Input schema / properties / symbolAdded value: +{ + "description": "Alias de `name`. ", + "type": "string" +} - added
Input schema / properties / symbol_nameAdded value: +{ + "description": "Alias de `name`. ", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "name" -]
- Changed
get_full_context2 fields changed- added
Input schema / properties / symbolAdded value: +{ + "description": "Alias de `name`. Symbol name (function, method, class).", + "type": "string" +} - added
Input schema / properties / symbol_nameAdded value: +{ + "description": "Alias de `name`. Symbol name (function, method, class).", + "type": "string" +}
- Changed
get_function_source2 fields changed- added
Input schema / properties / functionAdded value: +{ + "description": "Alias de `name`. Function or method (e.g. 'MyClass.method').", + "type": "string" +} - added
Input schema / properties / symbol_nameAdded value: +{ + "description": "Alias de `name`. Function or method (e.g. 'MyClass.method').", + "type": "string" +}
- Changed
insert_near_symbol6 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "symbol_name", + "content" + ] + }, + { + "required": [ + "symbol_name", + "source" + ] + }, + { + "required": [ + "symbol_name", + "new_source" + ] + }, + { + "required": [ + "symbol_name", + "code" + ] + }, + { + "required": [ + "name", + "content" + ] + } +] - added
Input schema / properties / codeAdded value: +{ + "description": "Alias de `content`. ", + "type": "string" +} - added
Input schema / properties / nameAdded value: +{ + "description": "Alias de `symbol_name`. ", + "type": "string" +} - added
Input schema / properties / new_sourceAdded value: +{ + "description": "Alias de `content`. ", + "type": "string" +} - added
Input schema / properties / sourceAdded value: +{ + "description": "Alias de `content`. ", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "symbol_name", - "content" -]
- Changed
list_files2 fields changed- added
Input schema / properties / globAdded value: +{ + "description": "Alias de `pattern`. Glob pattern to filter files (uses fnmatch).", + "type": "string" +} - added
Input schema / properties / queryAdded value: +{ + "description": "Alias de `pattern`. Glob pattern to filter files (uses fnmatch).", + "type": "string" +}
- Changed
replace_symbol_source6 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "symbol_name", + "new_source" + ] + }, + { + "required": [ + "symbol_name", + "content" + ] + }, + { + "required": [ + "symbol_name", + "source" + ] + }, + { + "required": [ + "symbol_name", + "code" + ] + }, + { + "required": [ + "name", + "new_source" + ] + } +] - added
Input schema / properties / codeAdded value: +{ + "description": "Alias de `new_source`. Replacement source for the symbol.", + "type": "string" +} - added
Input schema / properties / contentAdded value: +{ + "description": "Alias de `new_source`. Replacement source for the symbol.", + "type": "string" +} - added
Input schema / properties / nameAdded value: +{ + "description": "Alias de `symbol_name`. Function, method, class, or section name to replace.", + "type": "string" +} - added
Input schema / properties / sourceAdded value: +{ + "description": "Alias de `new_source`. Replacement source for the symbol.", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "symbol_name", - "new_source" -]
- Changed
search_codebase5 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "pattern" + ] + }, + { + "required": [ + "query" + ] + }, + { + "required": [ + "q" + ] + }, + { + "required": [ + "regex" + ] + } +] - added
Input schema / properties / qAdded value: +{ + "description": "Alias de `pattern`. Regex pattern (regex mode) or natural-language description (semantic mode).", + "type": "string" +} - added
Input schema / properties / queryAdded value: +{ + "description": "Alias de `pattern`. Regex pattern (regex mode) or natural-language description (semantic mode).", + "type": "string" +} - added
Input schema / properties / regexAdded value: +{ + "description": "Alias de `pattern`. Regex pattern (regex mode) or natural-language description (semantic mode).", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "pattern" -]
- Changed
set_project_root5 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "path" + ] + }, + { + "required": [ + "project" + ] + }, + { + "required": [ + "name" + ] + }, + { + "required": [ + "root" + ] + } +] - added
Input schema / properties / nameAdded value: +{ + "description": "Alias de `path`. Absolute path to the project root directory.", + "type": "string" +} - added
Input schema / properties / projectAdded value: +{ + "description": "Alias de `path`. Absolute path to the project root directory.", + "type": "string" +} - added
Input schema / properties / rootAdded value: +{ + "description": "Alias de `path`. Absolute path to the project root directory.", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "path" -]
- Changed
switch_project5 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "name" + ] + }, + { + "required": [ + "project" + ] + }, + { + "required": [ + "path" + ] + }, + { + "required": [ + "root" + ] + } +] - added
Input schema / properties / pathAdded value: +{ + "description": "Alias de `name`. Project name (basename of path) or full path.", + "type": "string" +} - added
Input schema / properties / projectAdded value: +{ + "description": "Alias de `name`. Project name (basename of path) or full path.", + "type": "string" +} - added
Input schema / properties / rootAdded value: +{ + "description": "Alias de `name`. Project name (basename of path) or full path.", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "name" -]
- Added
ts_discover - Changed
ts_search4 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "query" + ] + }, + { + "required": [ + "pattern" + ] + }, + { + "required": [ + "q" + ] + } +] - added
Input schema / properties / patternAdded value: +{ + "description": "Alias de `query`. Natural-language description of what you need (e.g. 'find dependents of update_user').", + "type": "string" +} - added
Input schema / properties / qAdded value: +{ + "description": "Alias de `query`. Natural-language description of what you need (e.g. 'find dependents of update_user').", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "query" -]
68 tool updates
v4.0.0- Added
add_field_to_model - Added
analyze_config - Added
analyze_docker - Added
build_commit_summary - Added
capture_aggregate - Added
capture_get - Added
capture_list - Added
capture_purge - Added
capture_put - Added
capture_search - Added
checkpoint - Added
corpus_build - Added
corpus_query - Added
detect_breaking_changes - Added
discover_project_actions - Added
edit_lines_in_symbol - Added
find_dead_code - Added
find_hotspots - Added
find_impacted_test_files - Added
find_import_cycles - Added
find_semantic_duplicates - Added
find_symbol - Added
get_call_chain - Added
get_change_impact - Added
get_changed_symbols - Added
get_class_source - Added
get_classes - Added
get_db_schema - Added
get_dependencies - Added
get_dependents - Added
get_edit_context - Added
get_entry_points - Added
get_env_usage - Added
get_feature_files - Added
get_file_dependencies - Added
get_file_dependents - Added
get_full_context - Added
get_function_source - Added
get_functions - Added
get_git_status - Added
get_imports - Added
get_project_summary - Added
get_routes - Added
get_stats - Added
get_structure_summary - Added
insert_near_symbol - Added
list_files - Added
list_projects - Added
memory_admin - Added
memory_delete - Added
memory_get - Added
memory_index - Added
memory_save - Added
memory_search - Added
move_symbol - Added
reasoning_list - Added
reasoning_save - Added
reasoning_search - Added
reindex - Added
replace_symbol_source - Added
run_impacted_tests - Added
run_project_action - Added
search_codebase - Added
search_in_symbols - Added
set_project_root - Added
switch_project - Added
ts_execute - Added
ts_search
8 tool updates
v1.0.5- Removed
build_commit_summary - Removed
create_checkpoint - Removed
get_changed_symbols - Removed
get_changed_symbols_since_ref - Removed
get_git_status - Removed
list_projects - Removed
summarize_patch_by_symbol - Removed
switch_project
8 tool updates
v1.0.4- Added
build_commit_summary - Added
create_checkpoint - Added
get_changed_symbols - Added
get_changed_symbols_since_ref - Added
get_git_status - Added
list_projects - Added
summarize_patch_by_symbol - Added
switch_project
17 tool updates
v1.0.2- Removed
build_commit_summary - Removed
compare_checkpoint_by_symbol - Removed
create_checkpoint - Removed
delete_checkpoint - Removed
find_impacted_test_files - Removed
get_changed_symbols - Removed
get_changed_symbols_since_ref - Removed
get_git_status - Removed
insert_near_symbol - Removed
list_checkpoints - Removed
list_projects - Removed
prune_checkpoints - Removed
replace_symbol_source - Removed
restore_checkpoint - Removed
run_impacted_tests - Removed
summarize_patch_by_symbol - Removed
switch_project
17 tool updates
v1.0.1- Added
build_commit_summary - Added
compare_checkpoint_by_symbol - Added
create_checkpoint - Added
delete_checkpoint - Added
find_impacted_test_files - Added
get_changed_symbols - Added
get_changed_symbols_since_ref - Added
get_git_status - Added
insert_near_symbol - Added
list_checkpoints - Added
list_projects - Added
prune_checkpoints - Added
replace_symbol_source - Added
restore_checkpoint - Added
run_impacted_tests - Added
summarize_patch_by_symbol - Added
switch_project
TDQS
Scored across 72 tools
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.
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.
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.
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
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
An MCP server that gives your AI access to the source code and docs of all public github repos
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
Related MCP Servers
- AlicenseAqualityBmaintenanceA 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.282,535 npm242Apache 2.0
- FlicenseNot gradedqualityCmaintenanceAn 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.-
- AlicenseNot gradedqualityDmaintenanceAn 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
- AlicenseNot gradedqualityCmaintenanceAn 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