Skip to main content
Glama

Iggy Docs MCP

MCP server for answering questions from the Apache Iggy documentation.

Serves two corpora to any MCP client, so an AI assistant answers Iggy questions from the project's own current material rather than from training data:

  • the guides — the content/docs tree of apache/iggy-website, around seventy-five pages covering the server, every SDK, connectors, clustering, the CLI and the web UI. Keyed by site path (server/docker), linked to iggy.apache.org.

  • the Rust API — the inline /// doc comments of the SDK and core crates in apache/iggy, read from rustdoc's JSON output. Keyed under api/ (api/iggy/clients/client/IggyClient), linked to docs.rs.

The two answer different questions — the guides say how Iggy is meant to be used, the Rust API says what is actually callable — so results are labelled with the half they came from, and list_docs and search_docs take a source argument (all, website, rust-api) to restrict to one.

Search is chunked BM25, with a small vocabulary bridge (container → docker, typescript → node, ssl → tls). Code blocks are first-class content: an SDK answer usually is the code block.

Each half is ranked on its own. BM25 normalises against average chunk length, and generated API items are uniformly shorter than prose, so one pooled average would penalise every guide chunk and flatter every API one. The two lists are then interleaved 2:1 in favour of prose — an explanation usually answers the question and a signature confirms it. A query that matches one half alone returns that half in full.

Distinct from the MCP server the Iggy project itself ships, which speaks the broker protocol to a running server. This one serves documentation and needs no server running.

Modelled on PolicyMCP, an MCP server for ASF policy documents: same layout, same tool surface, same conventions.

Corpus sources

Guides (apache/iggy-website)

Two modes, checked in this order:

  1. Local checkout, when IGGY_DOCS_ROOT points at an iggy-website checkout (either the repo root or content/docs directly; the repo root resolves to content/docs, so blog posts and node_modules are never indexed). Files are read fresh on every call, so git pull is the refresh.

  2. GitHub, otherwise: the docs tree is discovered via the GitHub API and fetched from raw files, cached in ~/.cache/iggy-doc-mcp/ for seven days.

Rust API (apache/iggy)

A second local root, IGGY_RUST_ROOT, pointing at an apache/iggy checkout. There is no GitHub mode: unlike the guides, these files are generated, and generating them needs the source tree.

Only the public API of the SDK and core crates is indexed — iggy, iggy_common, iggy_binary_protocol, overridable with IGGY_RUST_CRATES. That keeps the index in the hundreds of items rather than the tens of thousands a whole-workspace private-item index would produce, which matters because every extra short item competes with the guides in search.

Doc comments are read from rustdoc's JSON, which cargo writes to target/doc/<crate>.json:

cargo +nightly rustdoc -p iggy --lib -- -Z unstable-options --output-format json

Building is never implicit — a search must not trigger a Rust build — so:

  • when the JSON is present it is parsed fresh on every call, exactly like the website checkout, and re-running cargo rustdoc is the refresh;

  • refresh_docs runs the build explicitly, once per configured crate;

  • when the JSON is absent the Rust corpus is simply empty and the guides answer alone. A configured IGGY_RUST_ROOT with nothing built under it says so rather than returning silently.

IGGY_RUST_DOC_JSON overrides where the <crate>.json files are looked for, if they are not under <root>/target/doc.

One wrinkle on the first build: it takes minutes, and some MCP clients cut a tool call off after 60 seconds, so refresh_docs may report a timeout while cargo carries on and finishes normally. Call list_docs afterwards to confirm — if the item count is in the hundreds, the build landed. Later refreshes return promptly, because cargo has nothing to redo.

Two caveats worth knowing. rustdoc's JSON format is explicitly unstable and renumbers on breaking changes; the parser handles both the current and previous spellings of the shapes it uses and warns when it meets a format_version outside its checked range, rather than silently rendering signatures as _. And --output-format json is nightly-only, though a stable toolchain will emit it under RUSTC_BOOTSTRAP=1 if you would rather not install one.

Related MCP server: Documentation Fetcher & RAG Search

Install

python3 -m venv .venv
. .venv/bin/activate
pip install -e .

Run

iggy-doc-mcp

For local development:

python -m iggy_doc_mcp.server

Test

pip install -e ".[dev]"
make check

Configure with Claude Desktop or Codex

On macOS the Claude Desktop config lives at ~/Library/Application Support/Claude/claude_desktop_config.json; create it if it is not there. Add the server, then quit and reopen Claude Desktop.

{
  "mcpServers": {
    "iggy-docs": {
      "command": "<path to IggyDocMCP>/.venv/bin/python",
      "args": ["-m", "iggy_doc_mcp.server"],
      "env": {
        "IGGY_DOCS_ROOT": "<path to iggy-website>",
        "IGGY_RUST_ROOT": "<path to iggy>"
      }
    }
  }
}

Omit IGGY_DOCS_ROOT to use the GitHub-fetched guides instead of a local checkout. Omit IGGY_RUST_ROOT to serve the guides alone.

Tools

  • list_docs — every documentation page, organised by section, with word counts and corpus source; source restricts to one half.

  • get_doc — full text of one page by key (e.g. server/docker, sdk/python/intro); unambiguous partial keys resolve automatically.

  • search_docs — ranked keyword search across both halves, returning excerpts with their code blocks, each labelled Guide or Rust API and linked to iggy.apache.org or docs.rs; source restricts to one half.

  • find_examples — search fenced code examples by topic and language, with source doc keys, headings and URLs.

  • extract_code_snippets — inventory code fences for snippet verification work, filtered by language or doc key.

  • get_related_docs — find pages related to a doc key using links, backlinks, shared section and shared terms.

  • explain_doc_map — guided overview of the documentation sections, likely entry points for an audience or goal, and obvious top-level gaps.

  • find_broken_links — local-checkout link scan for broken internal docs links and optional external URL checks.

  • refresh_docs — re-fetch the GitHub guides, bypassing the seven-day cache (reporting git pull as the path when a local checkout is in use), and rebuild the Rust API corpus with cargo rustdoc.

Example questions

  • What flags does the Iggy server need under Docker?

  • How do I create a consumer group from Python?

  • What is the exact signature of send_messages on the Rust client?

  • Which errors can IggyClient::connect return?

  • How do I enable TLS?

  • How is message retention configured?

  • Show me a TypeScript producer example.

Licence

Apache License 2.0. See LICENSE.

Disclaimer

This is an independent, third-party tool. It is not a release of, endorsed by, or affiliated with the Apache Software Foundation or the Apache Iggy project. Apache, Apache Iggy and Iggy are trademarks of the Apache Software Foundation.

Available Tools

9 tools
explain_doc_mapA

Explain how the Iggy documentation is organised and where to start.

This is a guided map, not a keyword search. Use it when a user asks where docs live, what reading path fits a goal, or which documentation areas look thin from the indexed corpus.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNo
audienceNoall

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It explains the tool's nature ('guided map, not a keyword search'), implies it works over the indexed corpus, and indicates the kind of output (an explanation, not raw results). This is adequate for a read-only explanation tool, though it could mention limitations 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.

Conciseness5/5

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

The description is two sentences long, with the primary action front-loaded in the first sentence and usage guidance in the second. Every sentence contributes meaning, and there is no fluff or repetition. It is efficiently structured and easy to scan.

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

Completeness4/5

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

The description covers what the tool does, when to use it, and its behavior in relation to sibling tools. With an output schema present, the return structure is already defined. The only minor gap is that it doesn't explicitly describe the expected param values or examples, but given the simple optional params and clear intent, the context is sufficiently complete.

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

Parameters3/5

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

The input schema provides no descriptions for the two parameters, so the description must compensate. It indirectly explains the 'goal' parameter by referencing 'what reading path fits a goal,' but it never explicitly states what values 'goal' or 'audience' should take. The parameter names and defaults are self-explanatory, so the description adds moderate but not full semantic value.

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

Purpose5/5

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

The description opens with a clear verb and resource: 'Explain how the Iggy documentation is organised and where to start.' It immediately distinguishes itself from a keyword search by labeling itself 'a guided map,' which differentiates it from sibling tools like search_docs. The scope is precise and leaves no ambiguity about what the tool does.

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

Usage Guidelines5/5

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

The description gives explicit usage conditions: 'Use it when a user asks where docs live, what reading path fits a goal, or which documentation areas look thin from the indexed corpus.' It also states a negative condition: 'not a keyword search,' which signals when not to use it and points toward search_docs as the alternative. This is strong routing guidance.

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

extract_code_snippetsB

Return an inventory of fenced code snippets from the documentation.

The result includes the doc key, title, heading, language, line number, source URL, and code. Use this for snippet verification and docs CI design.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNo
languageNo
max_snippetsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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 clarifies that the tool returns an inventory and lists the included fields such as doc key, title, heading, language, line number, source URL, and code. It does not address filtering behavior, output limits, or empty-result handling.

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

Conciseness4/5

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

The description is compact and front-loaded with the core purpose. The result-field list and the use-case sentence add useful context without unnecessary repetition or filler.

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

Completeness2/5

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

The tool has three optional parameters, no annotations, and an output schema, yet the description leaves parameter semantics unexplained and does not guide selection versus sibling tools. The purpose and result contents are covered, but an agent still lacks critical information needed to invoke the tool effectively.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain any of the three parameters: key, language, or max_snippets. The word 'language' appears only in the result-field list, which does not help an agent understand how to populate the language parameter correctly.

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

Purpose4/5

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

The description states a specific verb ('Return an inventory') and a distinct resource ('fenced code snippets from the documentation'), making the tool's main function clear. It does not explicitly contrast with sibling tools such as find_examples, but the fenced-snippet inventory scope is sufficiently distinct.

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

Usage Guidelines4/5

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

The description names concrete use cases: 'snippet verification and docs CI design.' However, it does not state when not to use this tool or name alternatives like find_examples, so it provides clear context but no exclusionary guidance.

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

find_examplesA

Find code examples in the Iggy documentation by topic and language.

Use this when a user asks for runnable examples, SDK examples, producer or consumer samples, Docker commands, or source material for tutorials.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
languageNo
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description must convey behavioral traits on its own. It only says what the tool finds, not what happens when called (return format, filtering, pagination, safety). For a search-type tool this leaves the agent without crucial insight into the response shape.

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

Conciseness5/5

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

Two concise sentences: the first states the core purpose, the second provides clear use-case guidance. No filler or redundant phrasing; the structure is efficient and front-loaded.

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

Completeness3/5

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

The tool is relatively simple, and there is an output schema (though not shown). The description gives purpose and usage context, but with zero annotations and no parameter detail, it leaves gaps about result limits, error behavior, and how language relates to query. It is adequate but lacks full coverage for a 3-parameter tool.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It mentions 'topic and language', loosely mapping to query and language, but gives no detail on query syntax, accepted language values, or the meaning and effect of max_results. The parameter semantics remain largely inferable only from parameter names.

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

Purpose5/5

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

The description states a specific verb ('Find'), a resource ('code examples in the Iggy documentation'), and the two key dimensions ('topic and language'). This clearly distinguishes it from sibling tools like list_docs or get_doc, which are not example-specific.

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

Usage Guidelines4/5

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

The description explicitly lists when to use this tool: runnable examples, SDK examples, producer/consumer samples, Docker commands, or tutorial source material. However, it does not mention when not to use it or suggest alternatives, so it stops short of the full 5.

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

get_docA

Retrieve the full text of one Iggy documentation page.

Use list_docs to discover valid keys such as 'server/docker', 'sdk/python/intro' or 'introduction/getting-started'.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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 only says 'retrieve', implying a read-only operation, but it does not mention error behavior, rate limits, or what happens when the key is invalid. This is a low-information description for a tool with no 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.

Conciseness4/5

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

Two sentences with no wasted words: the first names the operation, and the second gives immediate pointer to list_docs. It is well-structured and easy to scan, though it could include a note about the return format without bloating the description.

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

Completeness3/5

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

For a single-parameter retrieval tool with an output schema, this is adequate. The description tells you exactly how to get a valid key and what the tool returns (full text). However, it lacks any mention of failure modes or what happens when the key is missing, and the output schema is not described in the description itself.

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

Parameters4/5

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

The schema provides only the key name and type with 0% comprehensive coverage. The description compensates by giving concrete examples of valid key values ('server/docker', 'sdk/python/intro') and points to list_docs for discovering keys, adding meaningful usage context beyond the raw schema.

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

Purpose5/5

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

The description states a specific verb ('Retrieve') and a specific resource ('the full text of one Iggy documentation page'), which clearly distinguishes this tool from sibling tools like search_docs or extract_code_snippets. It also provides concrete example keys, making the purpose unambiguous.

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

Usage Guidelines4/5

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

It explicitly tells the agent to use list_docs to discover valid keys, providing a clear prerequisite and usage sequence. It does not explicitly contrast with other siblings like search_docs, but it is strongly implied that this tool is for retrieving a single document while list_docs is for discovery.

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

list_docsA

List every Apache Iggy documentation page, organised by section.

The corpus has two halves. 'website' is the hand-written prose from apache/iggy-website, keyed by site path (server/docker). 'rust-api' is the inline Rust doc comments from apache/iggy, keyed under api/ and linked to docs.rs. Pass source to see one half alone; the default lists both.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoall

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

There are no annotations, so the description carries the burden. It discloses that this is a comprehensive listing operation ('List every'), how the output is organized by section, and that passing the source parameter filters to one half. It also explains the provenance of the webpage and Rust API docs, which is useful behavioral context. The description does not mention side effects because it is inherently read-only, and that is reasonably inferred from the verb 'list.'

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

Conciseness5/5

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

The description is concise: one clear first sentence and one short paragraph providing the corpus organization details. Every sentence adds meaningful information about what the tool lists and what the source parameter controls. No filler or redundant phrasing is present.

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

Completeness4/5

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

With one optional parameter and no enums, the description covers the tool's purpose, the parameter semantics, and the default behavior. The presence of an output schema means return value details need not be documented in text. The only minor gap is that the set of accepted source values is not given as an explicit enumerated list, but it is clearly inferable from the prose, so overall the context is complete enough for an agent to call the tool correctly.

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

Parameters5/5

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

The schema provides only a string parameter named 'source' with no description or enum, and schema description coverage is 0%. The description fully compensates by naming the two possible halves ('website' and 'rust-api'), explaining that the default combines both, and instructing 'Pass source to see one half alone.' This gives the agent concrete parameter values and semantics beyond the raw schema.

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

Purpose5/5

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

The description explicitly states the tool's function: 'List every Apache Iggy documentation page, organised by section.' This is a specific verb and resource, and the detail about the two corpus halves ('website' and 'rust-api') clarifies the scope. The strong contrast with sibling tools like get_doc or search_docs is evident, so an agent can distinguish it without looking at others.

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

Usage Guidelines4/5

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

The description explains how to use the tool, especially the source parameter and that the default lists all pages. It gives clear context about the two subsets of the corpus, but it does not explicitly name alternative tools or state when not to use this one. Still, the guidance is sufficient for a listing operation where no heavy alternative-picking logic is required.

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

refresh_docsA

Re-fetch the documentation corpus, bypassing the seven-day cache.

When IGGY_DOCS_ROOT points at a local iggy-website checkout this is a no-op, since local files are always read fresh; run git pull there instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries full responsibility. It reveals two important behaviors: bypassing the cache and being a no-op under specific conditions. It stops short of noting potential side effects like network latency or failure modes, but for a cache refresh this is adequate.

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

Conciseness5/5

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

Two sentences, each earning its place: the first states the primary function, the second clarifies an important conditional exception. No redundancy or extraneous detail.

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

Completeness5/5

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

For a parameterless operation with an output schema present, the description fully covers what the tool does, when to use it, and the local-checkout caveat. The agent has everything required to decide whether to invoke it.

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

Parameters4/5

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

The tool has zero parameters and the schema is empty, so the baseline is 4. The description adds no parameter semantics because none exist; nothing further is needed.

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

Purpose5/5

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

Clearly states a specific verb ('Re-fetch') and resource ('documentation corpus'), and explains the key behavior ('bypassing the seven-day cache'). This distinguishes it from sibling read-only tools like list_docs or get_doc, which operate on the current corpus.

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

Usage Guidelines5/5

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

Explicitly describes when to use the tool (when a cached remote copy needs refreshing) and when not to use it (when IGGY_DOCS_ROOT points to a local checkout), and names the alternative action ('run git pull there instead'). This is strong practical guidance.

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

search_docsA

Search the Apache Iggy documentation for a term or phrase.

Searches both halves of the corpus: the hand-written guides on iggy.apache.org and the inline Rust doc comments from apache/iggy, whose results link to docs.rs. Each result says which half it came from, because the guides say how Iggy is meant to be used and the Rust API says what is actually callable, and those can disagree. Set source to 'website' or 'rust-api' to search one half alone.

Prefer this over answering Iggy questions from memory: the SDKs and server move quickly and the docs are the current truth.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
sourceNoall
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It openly explains that results are labeled by source, notes that guides and Rust API docs may disagree, and describes the effect of the 'source' parameter. This goes beyond a simple 'search' statement and gives useful behavioral expectations, though it stops short of describing output format or error behavior.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core action. Each subsequent sentence adds valuable context: the two-corpus behavior, source filtering, and the strong recommendation to use this tool over memory. Nothing is redundant or wasted.

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

Completeness4/5

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

Given the tool's moderate complexity and the existence of an output schema, the description is quite complete. It explains what the tool does, how to narrow the search, and why it matters. The only minor gap is the lack of mention of 'max_results' or result ordering, but the output schema likely covers result structure, so this is a minor shortfall.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It explicitly explains the 'source' parameter and implicitly covers 'query' via 'search for a term or phrase', but it gives no explanation for 'max_results'. Since only two of the three parameters are addressed, the compensation is partial, warranting a middle score.

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

Purpose5/5

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

The description states a specific verb and resource ('Search the Apache Iggy documentation') and clearly distinguishes its scope (searches both hand-written guides and Rust doc comments) from sibling tools like list_docs and get_doc. An agent can immediately understand what this tool does and what makes it unique.

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

Usage Guidelines4/5

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

The description provides clear usage context: it explicitly tells the agent to prefer searching docs over answering from memory, and explains when to use the 'source' parameter to narrow the search. However, it does not explicitly compare against sibling tools or state when not to use them, though this is implicitly clear from their names.

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

TDQS

A4.1/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: listing, fetching, searching, finding examples, extracting snippets, getting related docs, explaining structure, checking links, and refreshing. Even search_docs and find_examples are well-separated by their focus on general search versus example discovery.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (list_docs, get_doc, search_docs, find_examples, extract_code_snippets, get_related_docs, explain_doc_map, find_broken_links, refresh_docs). The pattern is predictable and easy to infer.

Tool Count5/5

Nine tools is well-scoped for a documentation server. Each tool covers a distinct aspect of doc navigation, search, extraction, and maintenance without unnecessary redundancy.

Completeness5/5

The tool surface covers the full lifecycle of documentation access: discover, retrieve, search, extract examples, find related content, understand structure, validate links, and refresh data. No obvious gaps for a read-only docs MCP.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/justinmclean/IggyDocMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server