Wendy - Codebase Q&A Agent
Wendy's MCP server exposes eleven read-only tools that let Claude Code and other MCP clients explore a codebase and answer grounded questions about it.
Browse files —
list_fileswalks a directory (skipping hidden/junk dirs),read_filereads a file (truncated if large), andrepo_mapprints a tree-style map of the project.Search code —
searchfinds a string across all files with file paths and line numbers.Search by meaning —
semantic_searchreturns functions/classes related to a natural-language query (e.g. "auth logic") via a cached embedding index, with a configurabletop_k.Understand symbols —
list_symbolslists a file's functions and classes with line numbers, andfind_definitionlocates where a function or class is defined project-wide (tree-sitter parsing, not string matching).Explore history —
git_logshows recent commits (optionally for one file),git_blameshows who last changed each line with commit hashes, andgit_diffshows uncommitted changes.Verify claims —
verify_claimchecks a natural-language claim about the code and reports whether it is supported or contradicted, with evidence line numbers (optionally using an LLM).Scope any tool to a root — most tools take an optional
rootargument (default.) to target a subdirectory of the project.
Provides tools for exploring a codebase and its Git history, including listing files, reading files, searching, and inspecting git log, blame, diffs, and repository maps.
Wendy
A codebase Q&A agent built on Claude's tool-use API. Ask a question about a project and it explores the code itself, listing files, searching, and reading, then answers grounded in what it actually found, not what it guessed.
Current version: 0.6.0 — see CHANGELOG.md.
What it does
Autonomous exploration — given a question, decides which tool it needs and runs it, chaining multiple tools until it has enough real information.
Three tools —
list_files(walk a directory),read_file(read a file), andsearch(find a string across the whole project with line numbers).Visible reasoning — prints every step of the loop, so you can watch it think instead of trusting a black box.
Bounded loop — after 10 tool-using turns, the agent pauses to ask you to continue and prompts Claude to justify itself before going on.
Robust — a crashing tool can't kill the run, results are truncated to a sane size, binary files and junk directories are filtered out, and API errors are retried with backoff and reported cleanly.
Command-line interface — ask questions directly:
wendy "question".History-aware —
git_log,git_blame,git_diff, andrepo_mapanswer the "why did this change?" questions that plain search can't.Symbol-aware —
list_symbolsandfind_definitionuse tree-sitter to parse code into syntax trees, so "where is X defined?" returns the real definition, not a string match.Semantic search —
semantic_searchfinds code by meaning: ask "where's the auth logic?" and it returns the matching functions even when those words never appear in the code, via a cached embedding index.Claim verification —
verify_claimchecks a natural-language claim about the code (for example, "run_loop has a step limit") and reports whether it is supported or contradicted, with the evidence line numbers, instead of guessing.MCP server — all eleven tools are exposed as a Model Context Protocol server (
wendy-server), so Claude Code and other MCP clients can use them.
Related MCP server: codebase-bridge-mcp
How it works
Wendy runs a tool-use loop, the same pattern behind coding agents like Claude Code:
Send your question to Claude, along with the list of available tools.
Claude either answers, or replies with a tool request (e.g. "run
searchfordef run").Wendy executes the tool and feeds the result back into the conversation.
Repeat until Claude answers in plain text with no further tool requests.
The conversation history (the messages list) grows each iteration, so Claude
remembers everything it has already found.
To avoid runaway loops, after STEP_LIMIT (10) tool-using turns the agent
pauses and asks you whether to continue, and asks Claude to justify itself.
MCP server
Wendy's tools are also available as a Model Context Protocol server:
wendy-serverRegister it with Claude Code:
claude mcp add wendy -- /absolute/path/to/venv/bin/wendy-serverOr inspect it in a browser with the MCP Inspector:
.venv/bin/mcp dev wendy-server
Tech stack
Python 3.10+
anthropic — Claude API client (tool use)
python-dotenv — loads the API key from
.envmcp — Model Context Protocol (the MCP server interface)
tree-sitter + tree-sitter-python — symbol search (
list_symbols,find_definition)sentence-transformers — optional, for
semantic_search(see Setup)
Project structure
.
├── src/
│ └── wendy/
│ ├── agent.py # the agent: tool-use loop, CLI
│ ├── tools.py # the tools + helpers (shared by agent and server)
│ ├── server.py # MCP server exposing the tools to MCP clients
│ └── verify.py # claim verification
├── tests/
│ ├── test_agent.py # unit tests
│ └── test_verify.py # verify tests
├── docs/
│ └── CHANGELOG.md
├── pyproject.toml # packaging (hatchling) + dependencies
├── Dockerfile # container build for the MCP server
├── LICENSE
├── demo.tape # VHS source for the CLI demo
├── wendy-claude.gif # demo: Claude Code invoking the MCP server
├── .env # Anthropic API key (gitignored)
└── .gitignoreSetup
Create a virtualenv and install the package in editable mode:
python -m venv .venv .venv/bin/pip install -e .To use
semantic_search, install the extra instead (it pulls in torch):.venv/bin/pip install -e ".[semantic]"Create a
.envfile (never commit it):ANTHROPIC_API_KEY=sk-ant-api03-...Run:
wendy "what does run_agent do?"
Tests
python -m unittest discover -s testsCI runs the tests on Python 3.10, 3.12, and 3.13 on every push and pull request.
Status
Tool-use loop
Three tools (
list_files,read_file,search)CLI with step visibility
Step limit (nudge + human-in-the-loop gate)
Tool crash safety
Truncation
Noise filtering
API error handling (retry + clean messages)
MCP server (tools exposed to MCP clients)
Git history tools (
git_log,git_blame,git_diff,repo_map)Symbol search (
list_symbols,find_definitionvia tree-sitter)Semantic search (
semantic_searchvia embeddings + cached index)Claim verification (
verify_claim, supported/contradicted with evidence lines)Packaging (
pyproject.toml,wendyandwendy-serverentry points)CI (tests on Python 3.10, 3.12, 3.13)
Available Tools
11 toolsfind_definitionC
Find where a function or class is defined across the project.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| root | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: no indication of read-only nature, whether results are exact vs fuzzy, how multiple matches or missing definitions are reported, or what 'the project' resolves to. The only behavioral fact conveyed is the search 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 no filler or redundancy. It is appropriately sized for a simple lookup, though it is arguably under-specified rather than concise.
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?
An output schema exists, so return values need not be explained, but with no annotations and 0% parameter coverage the description should do more. The 'root' parameter and the name-matching behavior are undocumented anywhere the agent can see.
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 0%, so the description must compensate for both parameters, yet neither 'name' nor 'root' is mentioned. It never clarifies whether 'name' is a bare symbol name or fully qualified, nor what 'root' (default '.') controls.
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 where ... is defined') with the resource type ('a function or class') and scope ('across the project'). It is clear what the tool does, but it does not distinguish itself from siblings like list_symbols, semantic_search, or search, which an agent must choose between.
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 list_symbols, search, or semantic_search, and no mention of prerequisites (e.g., indexing or project root expectations). The agent is left to infer that this is the precise-symbol-lookup variant of the nearby tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
git_blameB
Show who last changed each line of a file, with commit hashes.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it only describes the output at a high level. It says nothing about read-only safety, whether history is required, how renames/merges are handled, or performance on large files.
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 purpose front-loaded and no filler. Every word 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?
An output schema exists, so return values needn't be explained, and the description covers the essential behavior. However, with no annotations and an undocumented parameter, an agent lacks enough context about refs, error conditions, and safety.
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 input schema has 0% description coverage, but the description implies the single 'path' parameter points at a file, adding a bit of meaning. It does not clarify whether passing a directory is valid or what path format is expected.
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 ('Show') and resource ('who last changed each line of a file'), which is enough to distinguish it from git_log and git_diff without opening schemas. It does not explicitly name a sibling, 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 guidance on when to use blame versus git_log, git_diff, or read_file, and no mention of prerequisites such as needing the file to be tracked or a ref to blame against. Usage is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
git_diffA
Show uncommitted changes, optionally limited to one file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. It communicates the safe read-only nature implicitly via "Show," but omits meaningful behavior for a diff tool: whether staged/unstaged/untracked changes are included and what the output format is. A 3 reflects adequate but incomplete disclosure.
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. Every clause earns its place by stating the operation and its optional narrowing.
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 an output schema present, the return shape needn't be described, and the single optional parameter is covered. The only shortfall is the unstated scope of "changes" (staged vs unstaged vs untracked), which an agent may want to know.
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 0%, so the only parameter semantics come from the description, which says path limits results to one file. That adds real meaning, but it doesn't clarify whether path accepts a file vs directory or relative vs absolute paths.
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 (Show) and resource (uncommitted changes) with a scoping qualifier, which cleanly separates it from commit-oriented siblings like git_log and git_blame. It stops just short of explicitly naming those siblings as alternatives.
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?
"Optionally limited to one file" implies when the path argument is useful, giving implied usage guidance. But there is no explicit when-to-use versus git_log/git_blame, nor any stated prerequisites (e.g., must be inside a repo).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
git_logB
Show the most recent git commits, optionally limited to one file.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | ||
| path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not say the operation is read-only, how results are ordered, how the commit count is bounded, or that history is truncated to the current repository/branch context. 'Most recent' is the only ordering hint.
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 action, resource, and the optional narrowing in that order, 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?
Yes, an output schema exists so return values need no explanation, and this is a low-complexity two-parameter read tool. However, with no annotations and no schema descriptions, the definition leaves the agent guessing about the meaning of 'n' and the read-only nature of the call.
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 0%, so the description must explain both parameters. It covers 'path' via 'optionally limited to one file', but the 'n' parameter (default 20) is never mentioned or explained, so it only partially compensates for the schema 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 and resource ('Show the most recent git commits') with a scoping qualifier ('optionally limited to one file'), which is enough to distinguish it from siblings like git_diff and git_blame. It never names those alternatives, so the differentiation is implicit 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?
There is no when-to-use guidance, no mention of when to reach for git_blame or git_diff instead, and no prerequisites or constraints. The reader must infer from the description alone that this is the history-viewing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesB
List files in a directory, skipping hidden and junk directories.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses one useful trait – hidden and junk directories are skipped – but says nothing about return format, ordering, recursion depth, or whether the listing is recursive or flat.
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 filtering qualifier front-loaded. No waste, though the filtering detail could be clearer.
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?
An output schema exists, so return values needn't be explained. The definition is adequate for a simple read tool but leaves path semantics and the meaning of 'junk directories' undefined, which an agent needs 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 0%, so the description must compensate for the single 'directory' parameter. It only says 'in a directory' without clarifying path format (absolute vs relative), default behavior, or what 'junk' means for filtering. No value is added over 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 ('List files in a directory') and adds a scope qualifier about filtering. However, it does not distinguish this tool from plausible siblings like search or list_symbols, which also enumerate content.
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 alternatives. An agent cannot tell from this text when list_files is preferable to search or repo_map for enumerating repository content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_symbolsC
List the functions and classes defined in a file, with line numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it says nothing about read-only nature, language coverage, error handling for unparseable files, or whether nested/inner symbols are included. Only the fact that line numbers are returned is disclosed, and output format is largely covered by the 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 efficient sentence with the resource front-loaded and no filler. It is minimal but appropriately sized for a simple query 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?
An output schema exists, so return-value details need not be explained, and for a one-parameter read tool the description is nearly adequate. However, it lacks any routing guidance against the many overlapping code-introspection siblings, leaving an agent to guess which tool fits.
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 0%, but there is a single self-evident 'path' parameter and the description implies it refers to a file. It does not clarify relative vs absolute paths or what happens if a directory is passed, so it neither compensates for the coverage gap nor adds meaning.
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 concrete verb (List) and resource (functions and classes defined in a file) plus the added detail of line numbers. It clearly separates itself from generic read_file/list_files, but does not explicitly distinguish itself from close siblings like find_definition or repo_map, which also surface code 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?
There is no when-to-use guidance, no mention of when to prefer this over find_definition (locate a specific symbol) or repo_map (whole-repo overview). The use case is only inferable from the phrase 'defined in a file'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileB
Read the contents of a file, truncated if its too large.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose a real trait most definitions omit — output is truncated when the file is too large — but says nothing about path form (relative vs absolute), error behavior on missing/unreadable files, or whether binary content is handled.
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 no filler, and the truncation caveat is placed immediately after the core action. It reads as under-specified rather than padded, so conciseness itself is not the weakness.
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?
An output schema exists, so return-shape details are not required, and the truncation note covers the main surprise a caller would hit. Still missing for a file-read tool are path-resolution semantics and failure behavior, which an agent needs to call it reliably.
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 description coverage is 0%, so the description must compensate and does not; 'path' is never defined in the description. However, the parameter is a self-evident file path, which limits the practical harm of the omission.
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 ('Read the contents of a file'), so an agent immediately knows this returns file content. It does not contrast itself with siblings like search, semantic_search, or list_files, so an agent must infer that it is for whole-file retrieval rather than querying.
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 list_files, search, or semantic_search, and no prerequisites such as whether the path must exist or be in the workspace. 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.
repo_mapC
Show a tree-style map of the project's directories and files.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Tree-style map' hints at output shape, but there is no mention of read-only semantics, depth limits, ignored files, or behavior on large repositories. For a tool with zero annotation coverage this is thin.
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 tight, front-loaded sentence with no waste. It is appropriately sized for a simple read tool, though brevity here comes at the cost of coverage elsewhere.
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?
An output schema exists, so the return format need not be restated. However, with no annotations and an unexplained root parameter, the definition leaves the agent guessing about scoping and read safety.
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 single 'root' parameter has 0% schema description coverage and the description never mentions it, so the agent gets no explanation of what a root path does or that it defaults to the current directory. The description adds nothing 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+resource: displays a tree-style map of directories and files. It is understandable on its own, though it doesn't explicitly contrast with the sibling list_files, which produces a flat listing rather than a tree.
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 versus list_files or search. Nothing indicates whether it is for orientation in an unfamiliar repo, or any size/depth limitations. The agent must infer the use case entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchC
Search all files for a string, returning matching files paths and line numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | . | |
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the return content (paths and line numbers) but says nothing about whether the search is recursive, how hidden/ignored/binary files are handled, case sensitivity, result limits, or performance cost on large trees.
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 front-loaded sentence with no filler, and the return shape is included efficiently. It is arguably too terse for the missing behavioral and parameter detail, but nothing written 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?
An output schema exists, so return values need not be explained further. However, with no annotations and 0% schema coverage, the description should cover the 'root' parameter, search scope, and traversal behavior — none of which appear.
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 0%, so the description must compensate. It only implies that 'query' is the string being searched; the 'root' parameter and its default of '.' are never mentioned, so an agent gets no guidance on scoping the search directory.
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 ('Search all files for a string') plus the return shape (matching file paths and line numbers). The phrase 'for a string' implicitly distinguishes it from the literal-string work of semantic_search, 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?
Usage is only implied: 'for a string' suggests literal matching, which contrasts weakly with the sibling semantic_search. There is no explicit statement of when to prefer this over semantic_search, and no exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_searchC
Find functions/classes semantically related to a natural-language query.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | . | |
| query | Yes | ||
| top_k | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden and does not meet it. It says nothing about read-only safety, whether the index is prebuilt or computed on the fly, latency, or how `root` scopes the search space.
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, which is structurally clean. It is arguably too terse given the undocumented parameters, but the sentence itself 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?
An output schema exists, so return values need not be explained, but the description omits how the `root` scope and `top_k` limit behave and offers no routing guidance against the many retrieval siblings (search, find_definition, list_symbols). For a 3-parameter retrieval tool with zero annotation support, that is a meaningful 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 0% across three parameters. The description clarifies only that `query` is natural language; `root` (default '.', presumably the search scope) and `top_k` (default 5, presumably the result count) get no explanation anywhere, so the description fails to 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?
The description states a specific verb ('Find'), a concrete resource target ('functions/classes'), and a distinguishing qualifier ('semantically related to a natural-language query'). It implicitly separates itself from the keyword-based `search` and symbol-based `find_definition` siblings, though it never names them 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 use semantic_search versus the sibling `search`, `find_definition`, or `list_symbols`. The only usage signal is the phrase 'semantically related', which the agent must infer means fuzzy/conceptual lookup rather than exact matching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_claimB
Check whether a natural-language claim about the code is supported or contradicted.
Returns a summary plus per-check findings with evidence line numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | . | |
| claim | Yes | ||
| use_llm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the output shape (summary plus per-check findings with evidence line numbers) and the two outcome types, which is useful. However, it says nothing about what use_llm changes, cost/latency, or scope of the scan, leaving real behavioral gaps for a tool with zero annotation coverage.
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, front-loaded with the core action followed by the return shape. Every sentence earns its place with 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?
The output schema exists, so return-value explanation is not required and the description's brief output note is adequate. But with 0% parameter coverage, no annotations, and no usage guidance, the definition is only minimally complete for a 3-parameter verification 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 description coverage is 0% and the description never mentions any of the three parameters. It implies the 'claim' input loosely, but root and use_llm are entirely undocumented in both schema and description, so the description fails to 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+resource: check whether a natural-language claim about code is supported or contradicted. This is a distinctive analysis operation not duplicated by any sibling. It does not explicitly contrast itself against siblings like semantic_search or search, but the 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?
No when-to-use guidance and no alternatives named. An agent gets no signal on when verification is preferable to search/semantic_search, nor prerequisites such as needing a repository root or the effect of use_llm.
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.
11 tool updates
v0.5.0- First observed
find_definition - First observed
git_blame - First observed
git_diff - First observed
git_log - First observed
list_files - First observed
list_symbols - First observed
read_file - First observed
repo_map - First observed
search - First observed
semantic_search - First observed
verify_claim
TDQS
Scored across 11 tools
Most tools target clearly distinct operations (file listing, reading, git history, symbol lookup, semantic query, claim verification). The main overlap is between search (literal), semantic_search (semantic), list_symbols (per-file symbols), and find_definition (cross-project definition lookup), but the descriptions draw the boundaries well enough that misselection is unlikely.
All names use snake_case consistently. Most follow a verb_noun pattern (list_files, read_file, find_definition, verify_claim), with a few noun-style names (repo_map, git_log, git_blame, git_diff) and one bare verb (search) that slightly break the pattern but remain readable and predictable.
Eleven tools is well-scoped for a codebase Q&A agent, with each tool covering a distinct retrieval capability (files, content, search, structure, git history, symbols, semantics, verification). No redundant or filler tools are apparent.
The surface covers discovery (list_files, repo_map), reading (read_file), searching (search, semantic_search), structure (list_symbols, find_definition), and history (git_log, git_blame, git_diff), plus claim verification. Minor gaps exist—no regex/glob filtering or call-graph/reference-finding—but core Q&A workflows are fully supported.
Maintenance
Related MCP Connectors
Repository knowledge graph MCP server for codebase understanding and debugging.
An MCP server that gives your AI access to the source code and docs of all public github repos
Code intelligence for LLMs. Analyze, search, and retrieve code from any public git repository.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceAgent-safe code retrieval MCP server that indexes repositories and provides semantic search, file navigation, call graph analysis, and bounded file reading tools for coding agents.4,493,868 npm3AGPL 3.0
- AlicenseAqualityDmaintenanceA read-only MCP server that lets a Claude chat explore your local repository and answer questions about it, returning synthesized answers with file:line references.31MIT
- FlicenseNot gradedqualityDmaintenanceA local-only MCP server that exposes git repository history, diffs, and status as tools for LLM clients, working entirely against a local git repo on disk.-
- AlicenseNot gradedqualityAmaintenanceLocal-first code intelligence MCP server that enables coding agents to search code, inspect structure, read exact ranges, and explore Git history with explicit token budgets.65Apache 2.0