Coador
OfficialProvides a local, deterministic knowledge base of Android projects, enabling AI agents to query architecture, Gradle configuration, modules, dependencies, testing infrastructure, UI selectors, and CI/CD without repeatedly re-reading the codebase.
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., "@CoadorFind UI selectors for the login screen."
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.
Coador
Give AI agents a map of your Android project before they start reading the code.
Coador scans an Android repository locally and deterministically - without an LLM - and builds a structured, evidence-backed knowledge base covering the project architecture, Gradle configuration, test infrastructure, UI selectors, CI/CD, and other high-value context.
Agents query that knowledge first, then inspect only the files required for the task.
Faster context. Less repeated discovery. Lower token usage.
Coador turns an Android repository into a local knowledge base that AI agents can query instead of repeatedly re-reading and rediscovering the entire project.
The key idea behind Coador is simple: the scanning itself does not use AI or an LLM.
Coador deterministically analyzes an Android project, extracts the information most useful for development and test automation, and stores it in a structured form: architecture signals, Gradle configuration, modules and dependencies, test infrastructure, UI selectors, deep links, CI/CD, test runners, fixtures, dependency-injection overrides, and other project-level knowledge.
As a result, an AI agent does not need to rediscover a large repository from scratch for every new task - searching for the right Gradle files, reconstructing the module structure, identifying the test framework, or figuring out how UI tests are organized.
Instead, the agent can query an already prepared knowledge base and retrieve a compact answer focused only on the part of the project it currently needs.
This reduces repeated repository discovery, lowers the amount of source code that has to enter the model context, and reduces unnecessary token consumption.
Why no AI in the scanner?
Coador deliberately separates fact extraction from AI interpretation.
The repository is scanned locally by specialized deterministic detectors. They do not generate architectural descriptions and do not try to guess how the project is designed. Coador records only signals that can be supported by source files, Gradle configuration, or repository structure.
For example, instead of claiming:
This project uses Clean Architecture.
Coador may report:
domain,data, andfeaturemodules were found, together with the observed dependencies between them.
The agent receives evidence rather than a pre-generated interpretation and can reason about that evidence itself.
Whenever possible, Coador also preserves the provenance of each finding: the source file and exact source lines, a file-level observation, or a value obtained from the configured Gradle model.
Related MCP server: nodespace-mcp
How it works
Coador scans an Android repository and builds a structured local profile of the project. The analysis covers nine main areas:
Layer | What it covers |
Project overview | Repository identity, structure, applications and UI signals |
Gradle and build | Build system, SDKs, variants, tasks and configuration |
Architecture | DI, networking, persistence, navigation, state and concurrency |
Modules | Module inventory, types and observed dependencies |
Configuration | Environments, build config, resources, secrets and feature flags |
Dependencies | Libraries and versions grouped by stack |
Testing | Unit and instrumentation tests, runners, fixtures and test tasks |
UI testing | Frameworks, screen objects, selectors, deep links and components |
CI/CD | Pipelines, devices, reports, artifacts, retries and notifications |
The complete catalogue currently contains 84 detectors and is generated in docs/detectors.md.
The resulting knowledge is stored locally and can be consumed both by developers and by AI tools. Developers get a CLI and human-readable Markdown views. AI agents get an MCP interface for reading the project overview, searching for information, and retrieving individual sections with supporting evidence.
Android repository
↓
Coador scan
↓
structured local knowledge base
↓
AI agent queries only the information it needs
↓
agent opens specific source files only when requiredCoador produces two kinds of findings. A signal reports an observed capability
and samples its evidence. An inventory retains collected values such as deep
links, exported components and literal UI test selectors. Inventories declare whether
they are complete, incomplete or unknown within their documented collection
boundary.
The default scan reads repository text and needs no Android toolchain. An optional
--gradle pass asks a trusted project's configured build for facts that static text
cannot resolve, such as variants declared by convention plugins. Every section says
whether its source is heuristic or gradle.
Practical example
Suppose an AI agent needs to add a new Android UI test.
Without Coador, the agent may first need to discover:
where instrumentation tests are located;
which test runner is used;
whether a shared base test exists;
how screen objects or robots are structured;
whether the project uses Espresso, Kaspresso, or Compose testing;
how authentication is handled in tests;
which selectors already exist;
whether test DI or fake dependencies are available;
how the test is executed locally and in CI.
In a large repository, answering these questions can require inspecting dozens of files before the actual task even begins.
With Coador, much of that information has already been collected and structured. The agent can query only the test infrastructure, selectors, or CI configuration it needs and then open a small number of specific source files required for the implementation.
For example, connect an agent to the recorded Now in Android revision and ask:
You: How do I add and run an instrumentation UI test in this project?
Agent: Put the test beside the existing app tests under
app/src/androidTest. Follow their Hilt/Compose setup:@HiltAndroidTest,HiltAndroidRulefirst, thencreateAndroidComposeRule<MainActivity>(). The app selectsNiaTestRunner, which startsHiltTestApplication. Shared fakes replace production bindings through@TestInstallIn. CI runs the observed task./gradlew connectedDemoDebugAndroidTest. That task is a source-backed reference, not a complete Gradle task enumeration.
The answer is compact, but each claim remains connected to evidence that the agent or developer can inspect.
Local and verifiable
By default, Coador works locally. Its standard analysis does not require:
an LLM;
an embedding model;
a vector database;
an external API;
Docker;
uploading repository source code to an external service.
The generated project profile is deterministic: the same repository state and scan configuration are expected to produce the same structured result. This makes the knowledge base suitable for keeping alongside the project, updating it with the codebase, and reviewing its changes like any other generated project artifact.
profile.json is the machine-readable source of truth. Markdown layers are a human
projection of that profile. Exact source evidence contains repository-relative paths,
one-based ranges and a snapshot digest. File-level and Gradle-model findings use
their own provenance forms without fabricated line numbers.
Generated source-derived fields pass through shared sanitization for common secrets, but sanitization is not a guarantee that private output is safe to publish. Review a generated knowledge base before sharing it. The full trust boundary is documented in SECURITY.md.
Coador collects no telemetry from scanned projects. Its default scan does not access the network. Package installation and the explicitly requested Gradle pass have their own network and trust boundaries.
Not a replacement for source code
Coador does not try to eliminate source-code inspection by AI agents. Its purpose is to eliminate repeated broad repository discovery.
When an agent needs to modify a particular feature, it still opens the relevant production and test files. What it no longer needs to do is repeatedly reconstruct the overall architecture, test infrastructure, Gradle setup, and CI workflow from scratch.
Coador acts as a pre-built map of the project: compact, structured, local, and backed by source evidence.
The map has explicit limits:
The default pass performs pattern matching rather than compilation. Missing heuristic evidence is not proof that a capability is absent.
Convention plugins, generated build logic and dynamically created variants may require the optional Gradle pass.
coador scan --gradleexecutes the target build's configuration and should be used only with a trusted project.Inventory completeness applies to the detector's documented source boundary, not to every value that could exist at runtime.
The metadata freshness fast path cannot detect a content change whose path, size and modification time were deliberately preserved; use
--forcein that case.Coador complements symbol navigation, semantic search, build tools and device automation. It does not replace them.
Installation
Coador requires Python 3.11 or newer. Run version 0.1.0 without a permanent
installation through uvx:
uvx --from coador==0.1.0 coador --versionTo use the current checkout:
git clone https://github.com/automaticqa/coador.git
cd coador
uv sync --all-extras
uv run coador --versionAn editable pip installation is also supported:
python -m pip install -e '.[dev]'CLI
The CLI exposes six commands:
Command | Purpose |
| Build or refresh the knowledge base |
| Report whether the stored knowledge is current |
| List the nine knowledge layers |
| Show a one-screen project map |
| Search sections with identifier-aware lexical ranking |
| Read one layer or section with its evidence |
Run the basic workflow from an Android repository:
coador scan
coador overview
coador search "where do the base URLs come from"
coador show 03_architecture di_frameworkEvery command supports --json. Use --kb-dir to keep generated output outside the
Android checkout. Use coador scan --force when source metadata cannot be trusted.
For a trusted project with a JDK and Gradle wrapper, coador scan --gradle adds the
configured Gradle model.
By default, generated knowledge lives here:
.coador/
.refresh.lock
manifest.json
profile.json
layers/The scanner reads Android source and build configuration without changing them. It
writes only to the selected knowledge-base directory and never edits the target
repository's .gitignore. The selected destination is excluded from scanning and
freshness fingerprints.
The .coador/ directory is designed to be committed when a team wants the project
map reviewed and available without a local rescan. Hand-written Markdown above each
layer's <!-- GENERATED:BEGIN --> marker survives refreshes.
MCP
coador mcp (also available as coador-mcp) serves one repository over MCP stdio with six kb_* tools and matching
kb:// resources. Register an explicit Android repository so the server cannot
silently follow an unrelated working directory:
codex mcp add coador -- uvx --from coador==0.1.0 coador mcp \
--repo "/absolute/path/to/your/android/project"
codex mcp listOpen Codex in the Android project, use /mcp to verify the server, and ask a project
question. A useful first prompt is:
How should I add an instrumentation test to this project? Identify the runner, application, observed test tasks, dependency overrides, helper or robot to extend, and useful selectors. Cite the repository evidence for each answer.
Configuration can also use COADOR_REPO and COADOR_KB_DIR. See
docs/mcp.md for trusted project-scoped configuration, paths with
spaces, multiple repositories, Claude Code and other MCP clients.
Examples
Start with the local synthetic example to explore the current profile schema without a network or Android toolchain. For the pinned Now in Android walkthrough, generate the current CLI view outside the downloaded checkout:
git clone https://github.com/android/nowinandroid.git
git -C nowinandroid checkout 12f80da6518e161ed16a06a68e71fb8a873576d6
uvx --from coador==0.1.0 coador scan nowinandroid --kb-dir ../nowinandroid-coador
uvx --from coador==0.1.0 coador show 07_testing instrumentation_runner \
nowinandroid --kb-dir ../nowinandroid-coador
uvx --from coador==0.1.0 coador show 07_testing test_tasks \
nowinandroid --kb-dir ../nowinandroid-coadorThe relevant output distinguishes evidence from limitations:
$ coador show 07_testing instrumentation_runner nowinandroid --kb-dir ../nowinandroid-coador
Instrumentation Runner (instrumentation_runner)
Detected: Observed: runner: androidx.test.runner.AndroidJUnitRunner, com.google.samples.apps.nowinandroid.core.testing.NiaTestRunner
source: heuristic
app/build.gradle.kts:38 testInstrumentationRunner = "com.google.samples.apps.nowinandroid.core.testing.NiaTestRunner"
limitation: Static scanning cannot resolve runner configuration supplied only by convention plugins or generated build logicThe evidence-first onboarding recipes add walkthroughs for CI instrumentation, launch targets and selectors, and Android Test Orchestrator isolation across three pinned public repositories.
Project status
Coador 0.1.0 is the first public release (2026-09-17). The package
contains 84 detectors across nine layers, a local CLI, an MCP stdio server, optional
Gradle probing, deterministic JSON/Markdown output, evidence provenance, inventory
pagination, freshness checks and recovery from damaged generated output.
The configured CI matrix targets Linux on Python 3.11–3.13 and Windows/macOS on Python 3.12. Network and real-project Gradle checks remain opt-in.
For development:
uv sync --all-extras
uv run pytest
uv run ruff check src tests
uv run ruff format --check src tests
uv run mypy
uv run python -m coador.registry --check
uv buildCOADOR_INTEGRATION=1 uv run pytest -m slow additionally clones pinned public
Android repositories; the Gradle case requires a suitable Android/JDK toolchain.
Contributors can start with the
starter contribution tasks. Optional public usage
feedback follows the privacy boundaries in docs/adoption.md.
License
MIT. See LICENSE.
Available Tools
6 toolskb_get_sectionARead-only
Read one section: what was detected, and the facts that prove it. Inventory items are paged; pass next_cursor back as cursor. Section ids come from kb_list_layers, kb_search or kb_overview.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| layer_id | Yes | ||
| section_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavior: inventory items are paged and next_cursor must be fed back as cursor. It does not mention limits, failure modes, or empty results, keeping 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?
Three tight sentences with no filler, and the core action is front-loaded. The pagination and id-source sentences are densely packed but each carries distinct information. The clause 'the facts that prove it' is slightly vague for the space it occupies.
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 spelled out, and annotations cover the safety profile. The description supplies the paging protocol and id provenance, which are the two things an agent cannot infer. Only limit and layer_id semantics are left to guesswork.
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 carries the load, and it explains cursor (pass next_cursor back) and where section_id comes from. layer_id and limit are left completely unexplained, so half the parameters remain undocumented in both schema and 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 specific verb and resource ('Read one section') and describes the payload ('what was detected, and the facts that prove it'), which is more than a restatement of the name. It also separates itself from siblings by naming kb_list_layers, kb_search and kb_overview as the sources of section ids. It stops short of 5 because what a 'section' is within a layer is never clarified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use: retrieve one section once you have its id, and obtain ids from kb_list_layers, kb_search or kb_overview. It also tells the agent how to continue paging. No explicit when-not-to-use or alternative retrieval path is given, so it is not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_list_layersBRead-only
List the layers of the knowledge base and how much each one detected.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds only that per-layer detection counts are returned, which is modest added context; it does not clarify what 'detected' means or how layers are ordered or scoped.
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. It is efficient, though its brevity comes at the cost of the ambiguity noted in purpose and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with an output schema and read-only annotations, the description covers the essentials; return values need not be explained. The undefined notion of a 'layer' and 'detected' keeps it from being fully 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?
The tool takes zero parameters, so per the rubric the baseline is 4. There is no parameter information for the description to add or omit.
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 (List) and resource (layers of the knowledge base), plus a hint at the payload ('how much each one detected'). It is distinguishable from kb_status/kb_overview only weakly, and the term 'detected' is left undefined, so it falls short of a fully unambiguous 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no indication of when to call this instead of kb_status, kb_overview, or kb_search, and states no prerequisites or exclusions. Usage must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_overviewARead-only
What kind of project this is: stack, variants, modules and testing, in one answer. Call this first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful scope context — that this is a consolidated single-answer snapshot rather than a query — but says nothing about freshness, caching, or cost of the call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler. The content summary comes first and the call-ordering imperative is placed last, where it is most likely to be acted on.
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 detail need not be restated. For a parameterless overview tool the description covers what it returns and when to call it; only freshness/staleness guidance 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?
The tool takes zero parameters, so there is no parameter semantics to document; the baseline is 4. Nothing in the description conflicts with the empty 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 the resource (project overview) and enumerates its contents — stack, variants, modules, testing — so an agent knows exactly what comes back and can distinguish it from kb_search or kb_get_section. It lacks an explicit verb, but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Call this first" is an explicit, actionable ordering directive that tells the agent when to reach for this tool over its siblings. It gives no when-not-to-use condition or named alternative, so it stops short of a full routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_refreshAIdempotent
Rescan the repository. Only needed when kb_status reports the knowledge base as missing or stale; a scan of a large project takes a few seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| evidence_limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=true, so the write/idempotent profile is covered structurally; the description usefully adds the latency characteristic of a scan, which is not in the annotations. It stops short of saying what the rescan rebuilds, whether existing content is replaced or preserved, or whether concurrent searches block during the scan.
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, the action first and the trigger condition second, with no filler. 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?
The existence of an output schema means return values need not be described, and the trigger/precondition is fully covered. However, for a tool exposing two undocumented optional parameters, the description leaves a real hole — the agent knows when to call it but not how to tune 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 0% — 'force' and 'evidence_limit' have titles and defaults but no meaning anywhere. The description never mentions either parameter, so an agent cannot tell what forcing a rescan changes or what an evidence limit controls, and must guess or omit them.
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 ('Rescan the repository') and immediately distinguishes itself from the sibling kb_status by naming it as the gate for invocation. An agent can tell what this does and when it is the right tool without opening any 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?
'Only needed when kb_status reports the knowledge base as missing or stale' gives an explicit precondition and implies the when-not case (healthy knowledge base). It also supplies a cost caveat ('a scan of a large project takes a few seconds') that helps the agent decide whether to invoke now or defer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_searchCRead-only
Search the knowledge base in plain language or by identifier (for example 'how are UI tests run', 'Hilt', 'testInstrumentationRunner').
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| layer_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds essentially nothing behavioral beyond that — no mention of ranking, result limits, or how the limit parameter affects behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the inline examples earn their space by showing the agent exactly what query strings are valid.
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?
A read-only search tool with an output schema and safety annotations needs little more, but the undocumented layer_id scoping and limit default are real gaps for a tool where narrowing results matters. Return values correctly need not be described since an output schema exists.
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 0%, so the description must compensate, and it only partially does. It meaningfully clarifies the required 'query' parameter with NL and identifier examples, but 'limit' and especially 'layer_id' scoping are left completely undocumented.
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 the knowledge base') and clarifies the two accepted query modes with concrete examples ('how are UI tests run', 'Hilt', 'testInstrumentationRunner'). It reads clearly against retrieval siblings like kb_get_section, though it does not explicitly name when to prefer it over kb_overview or kb_get_section.
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 kb_overview, kb_get_section, or kb_list_layers. Nothing tells the agent which situations call for a search versus a direct section fetch, leaving the routing decision entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_statusBRead-only
Report whether the knowledge base exists and is current.
| Name | Required | Description | Default |
|---|---|---|---|
| verify_content | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds the useful notion of 'current' (staleness detection), but says nothing about whether verification is expensive, whether it hits an external source, or what a stale result implies.
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 padding. It is efficient, though that efficiency comes partly at the cost of the missing detail noted 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 return values need no explanation. However, the undefined verify_content flag and the absent routing guidance against kb_refresh leave gaps for an agent choosing between status-check and refresh.
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?
One parameter (verify_content) at 0% schema description coverage, and the description never mentions it. With a single unexplained parameter that plausibly changes cost/behavior, the description should compensate but does not.
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 ('Report') and resource ('knowledge base') with two concrete conditions: existence and currency. An agent can distinguish it from kb_refresh (which mutates) and kb_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?
No statement of when to call this versus kb_refresh, kb_overview, or kb_list_layers, despite obvious overlap with a refresh/overview toolset. The reader must infer that this is a cheap pre-flight check.
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.
6 tool updates
v0.1.0- First observed
kb_get_section - First observed
kb_list_layers - First observed
kb_overview - First observed
kb_refresh - First observed
kb_search - First observed
kb_status
TDQS
Scored across 6 tools
Each tool has a distinct role: status checks existence, refresh rescans, overview gives project summary, list_layers shows structural layers, get_section reads detailed sections, and search finds content by query. The descriptions explicitly clarify when to use each, with no overlapping purposes.
All tools share a consistent kb_ prefix and snake_case style, making them predictable. However, the pattern mixes bare verbs (kb_search, kb_refresh) with noun forms (kb_status, kb_overview) and verb_noun forms (kb_list_layers, kb_get_section), a minor deviation from a uniform convention.
Six tools is well-scoped for a read-only knowledge base server. Each tool covers a necessary part of the discovery and retrieval workflow, with no redundant or missing operations.
The set covers the full lifecycle: checking KB status, refreshing when stale, getting an overview, listing layers, reading sections with paging, and searching. This provides complete coverage for navigating and querying the knowledge base.
Maintenance
Related MCP Connectors
Structured knowledge base for AI agent solutions. Search, explore, and retrieve build logs.
Give your AI agent a persistent map of your project's structure, dependencies, and bugs.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Codebase intelligence for agents: 152 structured artifacts across 21 programs, one call.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides on-demand access to AOSP and Jetpack source code to help AI understand Android framework internals. It features a hybrid architecture using Tree-sitter and LSP for precise code extraction, cross-file navigation, and local source indexing.11100Apache 2.0

nodespace-mcpofficial
FlicenseNot gradedqualityAmaintenanceEnables AI coding assistants to query a local knowledge base for persistent, searchable project context, reducing re-explanation and token usage.8-- AlicenseNot gradedqualityBmaintenanceEnables coding agents to query a local, versioned knowledge graph of a software project, retrieving overviews, context packs, evidence, and explanations to make informed changes.MIT
- AlicenseBqualityAmaintenanceEnables AI coding agents to build and query local repository memory, returning ranked files, context packs, relationship maps, semantic recall, and feedback-tuned search without uploading code.9735 PyPI1MIT