ContextPro
Provides compiler-exact references and bounded source context for JavaScript repositories, using TypeScript compiler analysis to distinguish bindings and report reference kinds and truncation.
Supports Python reference lookup through a configured Pyright LSP, with unconfigured Python heuristics retaining distinct provenance.
Provides compiler-exact references and bounded source context for TypeScript repositories, resolving aliases, re-exports, and same-named symbols via the TypeScript compiler.
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., "@ContextProfind all compiler-exact references to parseConfig across this repo"
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.
ContextPro
Compiler-exact references and bounded source context for coding agents, in a three-tool lean profile.
ContextPro is a local MCP server for TypeScript and JavaScript repositories. When an agent asks "who calls this?", it answers with the TypeScript compiler instead of a name search: aliases, re-exports and same-named symbols are told apart, and every result states its scope and whether it was truncated. When an agent needs source, it returns budgeted slices instead of whole files.
Get started · Agent guide · Benchmarks · Documentation · Contribute · Security
What it is good at
Renames and refactors in TS/JS codebases.
exact_referencesresolves bindings with the compiler and reports per-file call totals, reference kinds and truncation, so an agent knows what it has not seen.Parallel agents on one repository. Indexes are scoped per Git worktree, check saved-file drift and reconcile in the background.
A small tool catalog. The lean profile exposes three of the 68 tools; the rest are discovered only when needed.
Inspectable evidence. Responses separate compiler-resolved references, textual candidates and heuristic fallbacks, and report freshness.
Python references work through a configured Pyright; other languages fall back to structural and textual evidence.
Related MCP server: codegraph-mcp
Honest results
ContextPro has not been shown to make agents finish tasks faster. Our own trials, published in docs/benchmarks, include the losses:
Measured | Result |
Compiler reference checks on two fixtures (barrel aliases, same-named bindings) | 24 of 24 timed queries passed |
Response size on six retrieval tasks vs a scripted | about 41% fewer response tokens, but about 6.8× slower per call |
Matched agent trials (2 read-only tasks), lean profile vs native tools | 23.8% more total input, 19.2% more wall time |
Matched agent trials (2 read-only tasks), workflow profile vs native tools | 128.7% more total input |
Eight paired coding tasks, previous ContextPro build vs connected-retrieval candidate | previous build 1/8, candidate 0/8 (six on private repositories; see connected-evidence report) |
Plain grep and file reads are often the cheapest choice when an agent already knows where to look. ContextPro is most useful when binding identity matters or the exact location is unknown. We welcome reproducible comparisons, including ones where another tool wins; see how we compare.
Get started
Use Node.js 24 LTS and npm. Install from source until a registry release is announced; the version in package.json is not proof of a published npm package.
git clone https://github.com/AlaeddineMessadi/contextpro-mcp.git
cd contextpro-mcp
npm ci
npm run build
node build/index.js doctor --root /absolute/path/to/your-project
node -p 'process.execPath'Use the printed Node executable and your checkout path in the client configuration. For example, in Claude Code's project .mcp.json:
{
"mcpServers": {
"contextpro": {
"command": "/absolute/path/to/node",
"args": ["/absolute/path/to/contextpro-mcp/build/index.js", "--root", "/absolute/path/to/your-project"],
"env": { "CONTEXTPRO_TOOL_PROFILE": "lean" }
}
}
}Replace every placeholder, add .contextpro/ to the target project's .gitignore, then restart the client. Installation instructions cover Codex, Claude Code, OpenCode, indexing and native-module recovery. Project instructions teach agents when ContextPro is useful and when to verify with native tools.
Install the project instructions as well as the server: connecting MCP exposes tools,
while AGENTS.md / CLAUDE.md teaches the agent when to use them. The detailed
workflow is available on demand through contextpro://instructions. A separate
skill is optional; it does not enable tools or repair retrieval.
A small interface for real coding work
Task | Start with | What to check |
Locate unfamiliar code and read evidence |
| Retrieval is a ranked selection, not an exhaustive search |
Read several known targets |
| Follow explicit omissions if more evidence is needed |
Find TS/JS references |
| Declared scope, reference kinds and truncation |
Inspect an exported API | Discover | Signatures do not prove behavior |
Assess a change | Discover | Text matches are candidates; recommended checks still need to run |
Preserve a decision | Discover | Keep supporting evidence and revisit stale assumptions |
Inspect compiler errors or rename a binding | Discover | TS/JS compiler or configured Pyright; inspect before |
Record executed checks |
| Run checks in the coding host; receipts become stale when inputs change |
Tool schemas are the argument reference. See the agent guide for examples, batching and context reuse.
Profile | Initial interface |
|
|
| 14 tools for discovery, reads, impact and validation |
| 39 tools: common workflows plus editing and graphs |
| All 68 registered tools, including 5 deprecated aliases |
Set CONTEXTPRO_TOOL_PROFILE in the server environment. discover_tools(enable:[...]) enables tools without executing them. If the client cannot refresh its catalog, use the supported discover_tools({root,call:{name,arguments}}) dispatcher with the returned expert schema.
Experimental connected retrieval (CONTEXTPRO_CONNECTED_CONTEXT=true) combines ranked source, one-hop imports/callers and relevant tests in context and task_pack. It remains opt-in while task-level performance is evaluated. Discover feature_brief for a cached, source-cited feature map; model-written interpretations require a separate opt-in. Query-based context packets accept previous_context_id while the agent still holds that packet; omit it after context loss. Exact target reads remain stateless. See configuration and freshness rules.
The optional context.intent hint (lookup, change, debug, review, overview, or auto) enables question-aware source and document retrieval for one query. Shared indexing/compiler work is also opt-in through contextpro daemon start and CONTEXTPRO_DAEMON=true. Evidence-backed memory and handoffs build on the existing SQLite/artifact architecture; experimental features such as local task coordination are documented in configuration. Configuration explains setup, limits and rollback; these features do not establish a measured coding-speed improvement.
Ask for the source you need
Pass the absolute active repository or worktree as root on every call. Query
budgets use max_tokens (512–12000, default 4000; estimated UTF-8 bytes divided by
four). Exact batches accept up to six targets.
This example uses ContextPro's own repository. In another project, use paths and declaration names observed in its source rather than guessed symbols.
context({
root: "/absolute/path/to/contextpro-mcp",
query: "src/core/agent-setup.ts mergeAgentInstructions preserve existing project rules",
intent: "change",
max_tokens: 2500
})
context({
root: "/absolute/path/to/contextpro-mcp",
targets: [{file: "src/core/agent-setup.ts", symbol: "mergeAgentInstructions"}],
max_tokens: 1500
})
// Use compiler references when binding identity or cross-file callers matter.
exact_references({
root: "/absolute/path/to/contextpro-mcp",
file: "src/core/agent-setup.ts",
symbol_name: "mergeAgentInstructions",
limit: 20
})These are task-dependent choices, not a checklist: stop when enough evidence is
available. If a broad query favors documentation, read the discovered source
symbol or a narrow line range directly. If references time out, continue with
bounded source/native tracing and disclose its limits; lowering limit changes
the display window, not compiler workspace scope. Read each tool's schema:
max_tokens is a context budget, not an argument for status or exact_references.
Known directory prefixes and route topics help query discovery retain the requested implementation. A named component or compound error code supplies additional local text evidence. These are bounded ranking hints, not hard directory filters or compiler-resolved references; connected dependencies may still come from elsewhere. For a UI inventory, ask explicitly for an overview. For a bug, name the affected symbol and source area. Check citations and omissions, then narrow to exact targets when needed rather than repeating the same broad query.
Evidence you can inspect
ContextPro distinguishes source evidence, compiler-resolved references, textual candidates and heuristic fallbacks. Parser and TypeScript workers run in bounded child processes so a worker failure can be reported and recovered from without inherently terminating the MCP server.
Freshness checks cover saved files, not unsaved editor buffers. Per-file reconciliation is not an atomic snapshot of a repository being edited concurrently. Reference precision depends on language and scope; configured Python uses Pyright LSP, while unconfigured Python heuristics and imported SCIP data retain their distinct provenance.
Local-first does not mean sandboxed. Tools run with your user permissions. Hosted embedding or chat providers receive the inputs sent to them, and chat-assisted operations are optional. Read the security model and provider configuration before using sensitive repositories.
Build with us
Useful contributions include small bug reproductions, language fixtures, reference-completeness tests, realistic benchmarks, clearer setup guides and performance fixes with before/after evidence.
npm run build
npm test
npm run docs:check
npm run release:check
npm run pack:checkStart with CONTRIBUTING.md, open issues or the roadmap. Maintenance explains safe cleanup and runtime-specific testing.
For questions, see support. Report vulnerabilities privately through the process in SECURITY.md. Community participation follows our code of conduct.
License and origins
ContextPro began as a fork of Context+ by ForLoop and has since been largely rewritten around compiler-backed references, worktree-scoped indexes and bounded retrieval. Upstream has been quiet since July 2026, so development continues here. It is distributed under the MIT license. The original ForLoop copyright notice is preserved. See NOTICE for attribution. References to other projects do not imply endorsement.
Available Tools
14 toolsartifact_readARead-onlyIdempotent
Load a previously generated context artifact by ID so agents can reuse earlier task packets, repo maps, and decisions without regenerating them.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Absolute project root. Required with linked worktrees; subagents must pass their own worktree root on every call. | |
| artifact_id | Yes | Artifact ID returned by repo_map, search, task_pack, change_impact, edit_scope, or decision_brief. |
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 useful framing (retrieval of prior outputs, no regeneration cost) but says nothing about failure behavior for a missing or expired ID, which is the main behavioral risk here.
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 retrieval purpose and the regeneration-avoidance rationale both earn their words.
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 read tool with complete annotations, full schema coverage, and no output schema, the description gives enough to call it correctly. Only the missing-ID behavior is arguably left unaddressed, 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%, with artifact_id documented as coming from repo_map, search, task_pack, change_impact, edit_scope, or decision_brief, and root explained for worktrees. The description only echoes the 'by ID' idea, adding no meaning 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 and resource ('Load a previously generated context artifact by ID') and explains the artifact kinds involved (task packets, repo maps, decisions). It implicitly separates itself from generators like task_pack or repo_map, though it never names 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?
The phrase 'so agents can reuse ... without regenerating them' implies the when: call this instead of re-running a generator. However, no sibling is named and there is no explicit exclusion or precondition (e.g., what to do when the artifact_id is unknown or stale).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blast_radiusARead-onlyIdempotent
Find textual usage candidates with counts by kind. Use kind:call for call-containing lines. Includes same-name symbols; use exact_references for binding-resolved TS/JS rename checks.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Return only this usage kind; totals still show all kinds. | |
| mode | No | Summary groups usages by containing symbol (default); detailed returns every matching line. | |
| root | No | Absolute project root. Required with linked worktrees; subagents must pass their own worktree root on every call. | |
| symbol_name | Yes | The function, class, or variable name to trace across the codebase. | |
| file_context | No | The file where the symbol is defined. Excludes the definition line from results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, closed-world behavior, so the description only needs to add what they cannot. It does: it discloses that matching is textual rather than semantic and that same-name symbols are included, warning the agent about false positives — a genuinely useful caveat beyond 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?
Three short sentences, front-loaded with the core purpose, then the kind hint, then the sibling routing. No filler and no repetition of schema content.
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 mentioning counts by kind and totals behavior. It leaves the summary-vs-detailed output shape to the schema, which is acceptable, but a mutation-free read tool with 5 params could say slightly more about result structure.
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 semantics: it explains what kind:call actually selects (call-containing lines) and that totals aggregate across all kinds. Mode, root, and file_context meaning come entirely from 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?
The first sentence states a specific verb and resource ('find textual usage candidates with counts by kind'), which disambiguates the metaphorical tool name. It explicitly distinguishes itself from exact_references. It does not, however, differentiate from the grep/search siblings, which do similar textual lookups.
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?
It names an alternative (exact_references) with the exact condition that selects it — binding-resolved TS/JS rename checks — and gives a concrete usage hint ('use kind:call for call-containing lines'). No guidance on when this tool is the wrong choice versus grep/search, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_toolsA
Discover or enable experts and return their schemas. If the client cannot refresh its catalog, call runs a supported read/index tool; never source edits.
| Name | Required | Description | Default |
|---|---|---|---|
| call | No | If the client cannot refresh tools, execute a supported read/index tool using its discovered schema. Pass root outside call; source edits are excluded. | |
| root | No | Absolute project root. Required with linked worktrees; subagents must pass their own worktree root on every call. | |
| limit | No | Maximum discovery matches; default 5. | |
| query | No | Purpose, e.g. rename, tests, or memory. | |
| enable | No | Exact tool names to add to this session's catalog. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is not read-only and not destructive. The description adds useful context by clarifying that enabling affects the session catalog and that the fallback `call` path runs only supported read/index tools, never source edits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the main capability. The second sentence is dense but still earns its place by covering the fallback behavior and edit exclusion.
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 discovery tool with a nested object and no output schema, the description covers the core behavior, fallback execution, and edit exclusion. It could be more explicit about return shape, but the schema carries most parameter detail.
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 explains each parameter thoroughly. The description reinforces the `call` and `enable` semantics but does not add substantial 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?
The description names specific actions (discover, enable, return schemas) and the resource (experts/tools), making the tool's role understandable. It does not explicitly distinguish itself from siblings like search or grep, 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?
It provides a conditional for the nested `call` parameter and a clear exclusion ('never source edits'), but gives no explicit guidance on when to use `discover_tools` versus alternatives such as `search`, `grep`, or `status`. Usage is implied rather than fully stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
efficiency_reportARead-onlyIdempotent
Report ContextPro's persistent, auditable context-compression estimates by tool. History stores numeric metrics only—never prompts, source code, response bodies, or file paths. Token savings are estimates, not billing data.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Absolute project root. Required with linked worktrees; subagents must pass their own worktree root on every call. | |
| scope | No | History window. Default: this MCP session. Call at task completion and quote finalSummary. | |
| format | No | Return plain text or JSON. Default: text. | |
| history_limit | No | Maximum recent saving events. Use 0 for totals only; default 10. | |
| contextpro_cost_usd | No | Optional known ContextPro operating cost for this window; deducted only when supplied. Never guess. | |
| input_cost_per_million | No | Optional model input price in USD per million tokens. When provided, returns a clearly-labelled hypothetical cost estimate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with read-only annotations already present, the description adds important behavioral context: history stores numeric metrics only and never prompts, source code, response bodies, or file paths, and token savings are estimates rather than billing data. This gives an agent the privacy and accuracy caveats needed to invoke and interpret it correctly.
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 two sentences with no wasted language, leading with what the tool reports and then immediately covering privacy and estimate caveats. Every sentence 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 reporting tool with full parameter documentation and reliable safety annotations, the description covers purpose, privacy guarantees, and estimate caveats. The main remaining gap is that no output schema exists and the description does not explain the return structure or finalSummary output, though the schema partially mentions 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%, and the parameter descriptions already explain scope windows, formatting, history limits, and cost inputs in detail. The description adds no additional parameter semantics beyond what the schema provides, so the baseline 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?
The description states a specific verb and resource: reporting ContextPro's persistent, auditable context-compression estimates by tool. It is clearly distinguishable from all sibling tools, which are code-search/indexing utilities rather than reporting tools.
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 purpose implies the usage context—auditing or reporting compression estimates—but the description does not explicitly say when to call it, when not to call it, or what alternatives exist. The schema adds a useful hint to call at task completion, but the description itself provides only implied guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exact_referencesARead-onlyIdempotent
Find who calls or references a symbol. TS/JS compiler bindings exclude same-named unrelated symbols; results label calls/imports and give per-file call totals before limits. Check scope, ambiguity and warnings. Python is heuristic; imported SCIP freshness is unverified.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Definition file; omit to infer. | |
| line | No | 1-based symbol line. Omit to infer a declaration; when several match, the response warns about the chosen candidate. Pass file and line to disambiguate. | |
| root | No | Absolute project root. Required with linked worktrees; subagents must pass their own worktree root on every call. | |
| limit | No | Shown occurrences; default 100. | |
| format | No | Default text. | |
| symbol_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds real behavioral context beyond the read-only annotations: Python results are heuristic, imported SCIP index freshness is unverified, and callers should inspect scope, ambiguity, and warnings. These accuracy caveats are exactly what an agent needs to interpret results; it stops short of describing failure modes or fallback 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?
Four efficient sentences with the core purpose front-loaded and no repetition. The phrasing is somewhat telegraphic ('Check scope, ambiguity and warnings'), which costs a little clarity but wastes no 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 six parameters and no output schema, the description does a good job covering accuracy expectations, result labeling, per-file totals, and warnings. It is nearly complete for calling the tool correctly, missing only explicit sibling routing and return-shape detail.
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 83%, so parameter documentation is already handled by the schema, which is the correct baseline of 3. The description adds only indirect meaning ('per-file call totals before limits' touches on the limit parameter) and no syntax or format details beyond structured fields.
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 opening sentence states a specific verb and resource: 'Find who calls or references a symbol.' The clause about TS/JS compiler bindings excluding same-named unrelated symbols implicitly distinguishes it from text-search siblings like grep/search, though none are named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is implied rather than explicit: 'Check scope, ambiguity and warnings' and the mention of Python being heuristic hint at when to trust results, but the description never states when to choose this over grep or search, nor any preconditions. Most disambiguation guidance lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explainARead-onlyIdempotent
Extract a specific function/class body with its dependencies, without reading the entire file. Provide symbol name to get its code + called functions. Provide file path for a structural overview.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | File to explain (overview mode if no symbol given). | |
| root | No | Absolute project root. Required with linked worktrees; subagents must pass their own worktree root on every call. | |
| depth | No | How many levels of called functions to include. Default: 1. Use 0 for just the symbol. | |
| format | No | source: body and location only, no callers/tests/dependencies. Default full. | |
| symbol | No | Function, class, or variable name to explain. | |
| symbols | No | Batch independent symbols in one call, instead of repeated reads. Use instead of symbol/file. | |
| max_tokens | No | Batch response byte/4 budget; default 4000. Whole omitted bodies are reported. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, idempotent, non-destructive, and closed-world. The description adds useful behavioral context: symbol extraction returns code plus called functions, file mode returns a structural overview, and neither requires reading the entire file. It does not cover batch behavior or token-budget truncation, but the schema covers those details.
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?
The description is three tight sentences with the core purpose front-loaded and no wasted phrasing. It has minor redundancy with the schema's file and symbol descriptions, but overall it is efficiently 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?
For a seven-parameter tool with batch mode, depth, format, and worktree-root requirements, the description covers only the two primary modes. The schema and annotations carry much of the burden, but an agent still lacks description-level guidance on batching and sibling alternatives.
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 file, root, depth, format, symbol, symbols, and max_tokens. The description adds mode meaning for symbol versus file, but does not explain depth, format, root requirements, batch symbols, or max_tokens 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 states a specific verb and resource: extract a function/class body plus dependencies without reading the whole file. It clearly distinguishes the symbol mode from the file-overview mode. It does not differentiate from siblings such as skeleton or exact_references, 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?
It explains how to trigger the two main modes: provide a symbol for code plus called functions, or provide a file path for a structural overview. It implies this is preferable to reading an entire file, but it does not give explicit when-to-use/when-not guidance against sibling tools or mention the batch symbols mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grepARead-onlyIdempotent
Fast literal or regex string search across the project's indexed file set. Use this for log-message lookups, config-key searches, error-message tracing, or any time you know the exact characters you want to find. Use 'search' instead for semantic intent queries. Skips binary files; respects .gitignore via the indexed walker.
| Name | Required | Description | Default |
|---|---|---|---|
| glob | No | Optional file glob filter, e.g. "src/**/*.ts" or "*.md". Comma-separated for multiple. | |
| root | No | Absolute project root. Required with linked worktrees; subagents must pass their own worktree root on every call. | |
| regex | No | Treat pattern as a line-based regular expression (set true for A|B alternation). Default: false, literal match. | |
| pattern | Yes | Literal string to search for (or regex when regex=true). | |
| target_path | No | Optional subdirectory to scope the search. | |
| context_chars | No | Character window within the matched line; surrounding lines are clipped to this width. 40–400, default: 160. Use context_lines for nearby lines. | |
| context_lines | No | Lines before and after each match (0–10, default: 0). Overlapping ranges are deduplicated; L<line>- marks context, L<line>:<column> marks a hit. | |
| case_sensitive | No | Match case-sensitively. Default: false. | |
| max_file_bytes | No | Skip files larger than this (bytes). Default: 1000000. | |
| max_total_matches | No | Max total matches across all files. Default: 200. | |
| max_matches_per_file | No | Max matches per file. Default: 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, yet the description still adds real value by disclosing that binary files are skipped and that .gitignore is honored through the indexed walker — scope limits an agent cannot infer from annotations. It stops short of describing how results are shaped or truncated, which leaves a small gap.
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 compact sentences, front-loaded with what the tool does, then when to use it, then the sibling alternative, then the behavioral caveat. Nothing is repeated from the schema and no sentence is 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 an 11-parameter tool with no output schema, the description covers scope, filtering rules, and the alternative tool, which is most of what is needed. The remaining gap is return-value shape — the description never says results come back as file/line/column hits, leaving that to the context_lines schema text.
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 explains glob, root, regex, context_chars, context_lines, and the match caps in detail. The description only reinforces literal-vs-regex matching and adds no format, interaction, or defaulting guidance 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?
Names a specific verb (search) plus the resource (indexed file set) and the two matching modes (literal or regex). It also explicitly separates itself from the semantic sibling by saying to use 'search' for intent queries, so an agent can choose 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 use cases (log-message lookups, config-key searches, error-message tracing) and the decision rule: exact characters here, semantic intent in 'search'. That is both a when-to-use and a named alternative with the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_record_taskA
Persist useful task outcomes with linked files, assumptions, evidence, and open risks for future sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Absolute project root. Required with linked worktrees; subagents must pass their own worktree root on every call. | |
| task | Yes | Task or issue name. | |
| files | No | Files touched or relevant to the task. | |
| format | No | Return plain text or structured JSON. Default: text. | |
| summary | Yes | What changed or was learned. | |
| evidence | No | Evidence supporting the outcome. | |
| open_risks | No | Risks that remain unresolved. | |
| supersedes | No | Previous memory IDs explicitly superseded; history is retained. | |
| assumptions | No | Assumptions made during the task. | |
| source_evidence | No | Source supporting this memory. Whole-file hashes are captured and rechecked on retrieval. | |
| validation_refs | No | Validation result artifact IDs; host-reported status is checked for current applicability. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-idempotent, non-destructive write with closed-world scope. The description reinforces the persistence intent and lists the types of content stored, but it does not add operational details such as whether records can be updated, how supersession works, or what the tool returns. With annotations covering the safety profile, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-formed sentence with no wasted words. The core action and content are front-loaded, making it easy to parse quickly.
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 write tool with 11 parameters, including supersession and source-evidence linkage, the description is minimal. The schema covers parameter details and annotations cover safety, but the description does not explain the tool's return behavior or how features like supersedes and validation_refs should be used in practice. It is adequate but leaves meaningful gaps for an agent trying to use the tool 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 all parameters are already documented in the schema. The description names several key inputs (files, assumptions, evidence, open risks) but omits others such as supersedes, source_evidence, validation_refs, root, and format. Baseline 3 is appropriate when the schema carries the parameter documentation.
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 ('Persist') and resource ('useful task outcomes') along with the kinds of content captured (files, assumptions, evidence, open risks). It is clear what the tool does, though it does not explicitly differentiate itself from any sibling tool, likely because none of the listed siblings directly 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?
The phrase 'for future sessions' implies this should be used to record outcomes that later sessions will need, but there is no explicit when-to-use or when-not-to-use guidance. No alternatives or prerequisites are mentioned, leaving the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reindexA
Re-walk, re-parse, and re-index project files into the database. Detects changed files via content hash and only re-processes what changed. Eagerly populates file and identifier embeddings unless no_embed=true or CONTEXTPRO_REINDEX_NO_EMBED is set. Use after git pull, branch switch, or external edits. Builds the import graph for related/test_map tools.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Absolute project root. Required with linked worktrees; subagents must pass their own worktree root on every call. | |
| force | No | Force re-process all files, ignoring cache. Default: false. | |
| no_embed | No | Skip corpus embedding generation. Search does not generate corpus embeddings; it uses existing vectors or lexical fallback. Configure an embedding provider and run reindex with no_embed:false to populate vectors (also unset CONTEXTPRO_REINDEX_NO_EMBED). Default: false. | |
| auto_hubs | No | Generate feature-hub labels (one chat-model call per hub). Off by default to keep reindex fast and free. Or set CONTEXTPRO_AUTO_HUBS=1. | |
| target_path | No | Scope reindex to a specific directory (relative to root). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing incremental behavior via content hash, the embedding side effect and its cost implications, the two env-var overrides, and a downstream dependency (import graph for related/test_map). It does not state what happens to stale entries or what the call returns, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four front-loaded sentences, each carrying distinct information (action, incrementality, embedding side effect, when to call). Slightly dense with env-var asides but no 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?
No output schema exists, but the description covers the mutation semantics, cost model, and triggering conditions adequately for call. It omits what the call reports back (e.g., changed-file counts) and any runtime expectations, which would complete the picture.
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 already 100%, so the baseline is 3; the description earns a notch above by explaining the no_embed flag's interaction with CONTEXTPRO_REINDEX_NO_EMBED and clarifying the default embedding behavior. The other four parameters add no extra meaning in the description beyond their schema text.
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?
Uses a precise verb sequence (re-walk, re-parse, re-index) against a specific resource (project files into the database), leaving no ambiguity about what the tool does. It does not directly name or contrast with the listed siblings (search, status, grep), 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?
Gives concrete trigger conditions: 'Use after git pull, branch switch, or external edits,' which is exactly the kind of context an agent needs. It lacks an explicit when-not-to-use or a pointer to an alternative tool for lighter-weight checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchARead-onlyIdempotent
Search the codebase by MEANING. Modes: 'file' searches file headers/symbols, 'identifier' searches function/class definitions with call chains, 'hybrid' (default) runs both and returns combined results. Uses embeddings for semantic matching plus keyword overlap scoring. For an exact known symbol name in a language with a real language server available (e.g. via an LSP-backed MCP like Serena), prefer that for go-to-definition — this tool is best for meaning-based / fuzzy discovery across the whole repo.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Search mode: 'file' for files, 'identifier' for functions/classes, 'hybrid' for both. Default: hybrid. | |
| root | No | Absolute project root. Required with linked worktrees; subagents must pass their own worktree root on every call. | |
| query | Yes | Natural language description of what you're looking for. | |
| top_k | No | Number of matches to return. Default: 5. | |
| format | No | text (default), compact JSON for agents, or verbose json for diagnostics. | |
| fusion | No | How to combine semantic + keyword scores in file mode. 'rrf' (default) fuses rank positions and is robust when signal scales differ. 'weighted' is an opt-out that blends by semantic_weight/keyword_weight. | |
| preset | No | Ranking preset. fast favors cheap lexical recall, balanced is default, exhaustive returns a wider set, semantic_only ignores keyword overlap (pure embedding similarity), keyword_only ignores embedding similarity (pure lexical match). | |
| profile | No | Include phase timings in JSON/compact output for diagnosis. | |
| inline_code | No | Inline source with file matches. 'crux' (default) returns an ~8-line relevant span, 'full' returns the matched definition body, and 'off' returns pointers only. | |
| include_kinds | No | Filter identifier kinds, e.g. ["function", "method"]. Only for identifier/hybrid mode. | |
| keyword_weight | No | Weight for keyword overlap. Default: 0.28. | |
| semantic_weight | No | Weight for embedding similarity. Default: 0.72. | |
| min_keyword_score | No | Minimum keyword score filter. Accepts 0-1 or 0-100. | |
| min_combined_score | No | Minimum final score filter. Accepts 0-1 or 0-100. | |
| min_semantic_score | No | Minimum semantic score filter. Accepts 0-1 or 0-100. | |
| include_dependencies | No | Add up to three import pointers from the top two file matches to check supporting code. | |
| require_keyword_match | No | When true, only return results with keyword overlap. | |
| require_semantic_match | No | When true, only return results with positive semantic similarity. | |
| top_calls_per_identifier | No | How many ranked call sites per identifier (identifier/hybrid mode). Default: 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is free. The description adds real behavioral context: the hybrid scoring architecture (embeddings + keyword overlap) and the cost/coverage tradeoff implied by fast vs exhaustive presets. It doesn't discuss latency or cost per call explicitly, but it goes beyond annotation restatement.
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 sentences, no filler, and the core purpose plus the mode taxonomy lead. The long final sentence carries the competitive-alternative guidance, so its length is earned rather than padding.
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 19-parameter, no-output-schema tool, the description covers the decision-relevant surface: what it searches, how modes differ, and when another tool wins. The remaining gap is that output behavior (inline code spans, dependency pointers, result shape) is left entirely to the schema field descriptions.
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 19 parameters are already documented and the baseline is 3. The description adds a conceptual model for the scoring (embeddings + keyword overlap) that makes fusion/weights/min-score parameters meaningful, but it says nothing about root/worktree handling, include_dependencies, or the inline_code output modes.
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 opens with a specific verb and resource ('Search the codebase by MEANING') and immediately enumerates the three modes with what each matches. It conceptually separates itself from exact-symbol lookup, though it never names its actual siblings (grep, exact_references, skeleton) — it references an external LSP-backed MCP instead.
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?
Clear routing guidance: prefer an LSP tool for a known symbol name, and use this tool for 'meaning-based / fuzzy discovery across the whole repo.' Mode selection guidance is present. What's missing is exclusion guidance against the concrete siblings in this server (grep, exact_references, skeleton), which would make the choice trivial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skeletonARead-onlyIdempotent
Get detailed function signatures, class methods, and type definitions of a specific file WITHOUT reading the full body. Shows the API surface and line ranges. Signatures are normalized summaries, not exact edit anchors; use context(targets:[{file,start,end}]) for source text before editing.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Absolute project root. Required with linked worktrees; subagents must pass their own worktree root on every call. | |
| file_path | Yes | Path to the file to inspect (relative to project root). | |
| exported_only | No | Only public declarations (TS/JS). Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description's job is to add behavior it can't infer — and it does: signatures are normalized summaries, line ranges are included, and the output is explicitly not safe as an exact edit anchor. It doesn't cover failure modes (unsupported file types, missing paths) or output size limits, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: what it returns, what it returns alongside (line ranges), and the critical caveat plus alternative. The most decision-relevant constraint (not an edit anchor) is front-and-center rather than 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 the burden of explaining the return value, and it does reasonably well (signatures, methods, type definitions, line ranges). Minor gaps remain around output shape details and behavior on unsupported languages or empty files, but an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (root, file_path, exported_only) are already documented, including the worktree caveat for root. The description adds no parameter-level 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 and resource ('Get detailed function signatures, class methods, and type definitions of a specific file') and adds a clear scope qualifier ('WITHOUT reading the full body'). An agent can distinguish this from body-reading siblings like search/grep/exact_references purely from the description.
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 routes the agent: this tool is for API surface, and 'use context(targets:[{file,start,end}]) for source text before editing' names the alternative and the condition that selects it. It also warns against using the output as an edit anchor, which is a concrete when-not rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusARead-onlyIdempotent
Project overview dashboard. Returns file counts, index state, memory graph stats, git branch, uncommitted changes, and recent commits. One call for complete situational awareness at the start of a session.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Absolute project root. Required with linked worktrees; subagents must pass their own worktree root on every call. | |
| format | No | Return plain text or structured JSON. Default: text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description does not need to restate the safety profile. It adds real context beyond them by showing that this is a composite aggregation across the index, memory graph, and git working tree, so the agent knows one call replaces many. It does not address staleness, cost, or whether reading git state affects anything, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose, then the payload, then the usage trigger. No redundant or filler text.
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's enumeration of returned data carries the return-value burden well. Parameters are covered at 100% in the schema, and the annotations cover safety, so nothing an agent needs to call the tool 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%, and both parameters (root, format) are already documented in the schema, including the nuanced guidance for linked worktrees and subagents. The description adds nothing about parameters, 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 ("Returns") and enumerates the exact resources: file counts, index state, memory graph stats, git branch, uncommitted changes, recent commits. That enumeration clearly separates it from siblings such as efficiency_report or reindex, which cover subsets of these areas.
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?
"One call for complete situational awareness at the start of a session" gives a clear trigger context for calling it. It does not name a when-not condition or point to alternatives, so it falls short of the explicit routing that a 5 requires.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_packARead-onlyIdempotent
Assemble the minimum useful working set for a task: ranked files, nearby tests, recent diffs, memory, and risks.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Absolute project root. Required with linked worktrees; subagents must pass their own worktree root on every call. | |
| task | Yes | Task description or engineering objective. | |
| format | No | Return plain text or structured JSON. Default: text. | |
| preset | No | balanced (default) or keyword_only for zero-provider lexical discovery. | |
| max_files | No | Maximum ranked files to include. Default: 8. | |
| graph_hops | No | Related import context: 0, 1 or 2 hops. Default 1 with CONTEXTPRO_CONNECTED_CONTEXT=true, otherwise 0. Relationships are heuristic. | |
| max_memory | No | Maximum memory hits to include. Default: 3, max: 10. | |
| max_tokens | No | Final response budget estimated as UTF-8 bytes/4, not tokenizer tokens. Default: 3000. | |
| include_tests | No | Include nearby tests. Default: true. | |
| include_memory | No | Include project memory hits. Default: true. | |
| graph_max_files | No | Maximum additional graph-related file pointers. Default: 4. | |
| previous_context_id | No | Context ID from a previous packet you still hold; return a delta. Omit after context loss to recover full context. | |
| include_recent_diffs | No | Include recent file-level diffs. Default: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral flavor by detailing the complexity of the output (e.g., 'ranked files,' 'risks'). This context goes beyond the basic safety guaranteed by the annotations (readOnlyHint: true) and gives the agent a better idea of the internal data aggregation occurring.
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?
The definition is a single, highly dense sentence that front-loads the entire value proposition. There is zero wasted language, and the structure is maximally efficient.
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?
Given the 100% schema coverage, the description provides the necessary conceptual framework and intent. It tells the agent *why* all those complex parameters (like `preset` or `graph_hops`) exist, making the definition functionally 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?
Since the schema description coverage is 100%, the schema itself defines the semantics of the parameters (e.g., max_tokens, graph_hops). The description doesn't add critical meaning beyond what is structurally defined in the input 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?
The description clearly defines the tool's function as assembling a complex, multi-component 'working set' (files, tests, memory, risks). It immediately distinguishes itself from granular sibling tools like search or grep by describing a holistic context-gathering operation.
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 sets a high-level context for usage, implying this tool is meant for high-level planning or synthesis before diving into granular tasks. While it doesn't explicitly state 'do not use search for this,' the scope of the description strongly guides the agent toward this specific, comprehensive use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_scopeARead-onlyIdempotent
After edit_scope, recommend the most relevant validation checks and commands. Pass files when you already know what changed; they take precedence over task inference.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Absolute project root. Required with linked worktrees; subagents must pass their own worktree root on every call. | |
| task | Yes | Task description or intended change. | |
| files | No | Files already changed or known to be in scope. These take precedence over task inference. | |
| format | No | Return plain text or structured JSON. Default: text. | |
| max_files | No | Maximum files to inspect when building validation guidance. Default: 5. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/ idempotent/ non-destructive/ closed-world, so safety is covered. The description adds genuine behavioral context beyond them: the files-vs-task precedence rule and the post-edit sequencing. It is silent on output shape and on rate/cost characteristics of inspecting up to max_files files, which keeps it below 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?
Two sentences, zero filler, with the workflow trigger front-loaded before the parameter-selection rule. Every clause carries decision-relevant 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 recommender with no output schema, this is nearly sufficient: the agent knows when to call it and how to bias it. The gaps are minor but real — it never describes what a 'validation check and command' result looks like, and it omits the required context that subagents must pass their own worktree root.
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; the description's only parameter guidance (files precedence over task inference) is a near-restatement of what the files property already documents. Neither 'root' (worktree requirement) nor 'max_files'/'format' get added meaning in the description.
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: 'recommend the most relevant validation checks and commands', which correctly frames this as a recommender rather than an executor despite the 'validate' name. It also anchors itself in the workflow ('After edit_scope'). It does not distinguish itself from siblings like blast_radius or explain, which could 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?
Gives clear trigger context ('After edit_scope') and a selection heuristic for the ambiguous case ('Pass files when you already know what changed; they take precedence over task inference'). No explicit when-not-to-use or named alternative sibling, so it stops 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
14 tool updates
v1.4.0- First observed
artifact_read - First observed
blast_radius - First observed
discover_tools - First observed
efficiency_report - First observed
exact_references - First observed
explain - First observed
grep - First observed
memory_record_task - First observed
reindex - First observed
search - First observed
skeleton - First observed
status - First observed
task_pack - First observed
validate_scope
TDQS
Scored across 14 tools
Most tools have distinct roles, and potentially overlapping pairs such as search/grep, exact_references/blast_radius, and skeleton/explain are explicitly differentiated in their descriptions. A few boundaries remain soft, especially between structural overview tools and usage-analysis tools, but an agent can generally choose correctly.
All names use snake_case, which keeps them readable, but the naming patterns are mixed: some are single verbs (search, grep, explain), some are nouns (skeleton, status, task_pack), some are verb_noun (discover_tools, validate_scope), and one is noun_verb_noun (memory_record_task). The set is understandable but not predictably patterned.
With 14 tools, the server is within a well-scoped range for a code-context and indexing assistant. Each tool appears to serve a specific workflow, and the count is neither thin nor excessive.
The core code-context workflows are covered: discovery, search, references, structural explanation, reindexing, status, task packing, and memory recording. However, validate_scope references an edit_scope step that is not present, and artifact/memory surfaces are incomplete because there is no obvious way to list artifacts or query memory records directly.
Maintenance
Related MCP Connectors
Source-backed prompting and coding-agent guidance with provenance and freshness checks.
Stateless TS/JS compiler facts for agents: references, imports, impact. No repo index or OAuth.
The context platform for AI agents: code search, team decisions, and grounded project context.
Retrieve citation-ready technical context and coordinate evidence-backed work between AI agents.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides structured semantic context for JavaScript/TypeScript codebases, enabling coding agents to navigate, review, and change code with explicit uncertainty.6 npm1MIT
- FlicenseNot gradedqualityAmaintenanceProvides efficient code navigation and graph-based analysis for AI agents, enabling symbol resolution, callers, implementations, and type schemas with minimal token usage.-
- AlicenseNot gradedqualityBmaintenanceEnables coding agents to explore TypeScript, JavaScript, and Prisma projects through local symbol, call, and model-usage graphs, while recalling persistent project-scoped decisions and returning focused source context.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to interrogate a local repository deterministically for symbols, dependencies, call paths, routes, tests, and Git impact, returning verified structured evidence with exact line citations instead of requiring the whole codebase to be read.258 PyPI4MIT