Skip to main content
Glama
TonyPansera

merlin-perceval-mcp

by TonyPansera

merlin-perceval-mcp

An MCP server that gives AI coding agents accurate, up-to-date knowledge of MerLin, Quandela's photonic quantum machine learning framework for PyTorch, and Perceval, the photonic SDK it is built on.

MerLin is young and moving fast, and it post-dates the training cutoff of most models. This server replaces guessing with the real documentation, the real signatures and the real example notebooks.

Nothing is stored locally

The server ships no vendored documentation and writes nothing to disk. Every answer is fetched at call time from the published documentation sites, GitHub and PyPI, and cached only in memory for the life of the process.

It also does not hardcode a version. On each call it reads the docs landing page, follows the redirect that names the current version, and serves that. When MerLin 0.5 ships, this server serves 0.5 — no update, no re-index, no maintenance.

That leaves exactly one failure mode: upstream changing how it publishes. A scheduled canary workflow runs the live tests weekly and opens an issue if the published layout ever moves.

Related MCP server: Documentation Retrieval MCP Server (DOCRET)

Install

git clone https://github.com/TonyPansera/merlin-perceval-mcp.git
cd merlin-perceval mcp
python -m venv .venv && .venv/bin/pip install -e .

Requires Python 3.10+. The only runtime dependencies are mcp and httpx. The server never imports the libraries it documents.

Connect the mcp

Claude code

claude mcp add merlin -- .venv/bin/merlin-perceval-mcp

Tools

Every tool takes library, either "merlin" (the default) or "perceval".

Tool

What it does

search_docs

Full-text search across the documentation; returns pages, URLs and matching sections.

get_doc_page

The full published source of one page — reStructuredText, code blocks intact.

search_api

Find documented symbols by name across classes, functions, methods and modules.

get_api_doc

Exact signature, docstring and public methods of one symbol, parsed from real source.

get_source

The library's actual source code, narrowed to one class or function.

list_examples

The curated example gallery, with summaries and tags.

get_example

An example notebook rendered as markdown with runnable code cells.

get_release_notes

Recent upstream release notes, the best guide to what changed.

There is also a docs://{library}/index resource listing every documentation page, and a merlin_quickstart prompt that walks an agent through grounding its code in the docs.

A typical session: search_docs("angle encoding") → get_doc_page(...) → get_api_doc("QuantumLayer") → get_example("notebooks/FirstQuantumLayers") → write code that actually runs.

Configuration

All optional.

Variable

Default

Purpose

MERLIN_MCP_MERLIN_VERSION

auto-discovered

Pin the MerLin docs version, e.g. 0.3.

MERLIN_MCP_PERCEVAL_VERSION

auto-discovered

Pin the Perceval docs version, e.g. v1.1.

MERLIN_MCP_CACHE_TTL

3600

Seconds to cache indexes and inventories.

MERLIN_MCP_PAGE_CACHE_TTL

900

Seconds to cache pages and source files.

MERLIN_MCP_NOT_FOUND_TTL

60

Seconds to remember a 404. Kept short so a page missing during a docs redeploy is not reported as absent for the whole cache lifetime.

MERLIN_MCP_MAX_RESPONSE_BYTES

33554432

Hard cap on any single response body, and on inventory decompression.

MERLIN_MCP_TIMEOUT

30

HTTP timeout in seconds.

MERLIN_MCP_LOG_LEVEL

WARNING

Logging level. Logs go to stderr, leaving stdout free for the protocol. Also settable with --log-level.

GITHUB_TOKEN

unset

Raises the GitHub API rate limit. Rarely needed: the server makes at most a couple of API calls per repository per hour, and reads all file contents through raw.githubusercontent.com, which is not rate limited.

Development

.venv/bin/pip install -e '.[dev]'
.venv/bin/pytest              # offline: every HTTP call is mocked
.venv/bin/pytest -m network   # live: hits the real docs sites and repositories
.venv/bin/ruff check . && .venv/bin/mypy

The offline suite builds its upstream payloads in memory, so there are no recorded fixtures to keep in sync and it passes with the network unplugged.

How it works

Both documentation sites are Sphinx builds, and Sphinx publishes everything needed to answer questions about a library without scraping a single rendered page:

  • objects.inv — a compressed index of every documented symbol and its URL.

  • searchindex.js — the complete inverted full-text index Sphinx builds for its own search box.

  • _sources/<page>.rst.txt — the untouched source of every page.

Signatures come from parsing the real modules on GitHub with Python's ast, which is more faithful than rendered autodoc HTML. Adding another Sphinx-documented library is one entry in the registry in config.py.

License

MIT. MerLin and Perceval are projects of Quandela, this server is an independent client of their public documentation.

Available Tools

8 tools
get_api_docB

Get the exact signature and docstring of one API symbol.

Accepts a fully qualified name ("merlin.algorithms.layer.QuantumLayer") or a bare one ("QuantumLayer"). The signature is parsed from the library's real source, so it reflects the code that will actually run, and is paired with the documentation URL.

Args: symbol: class, function, method or module name. library: "merlin" (default) or "perceval". version: docs version override, used for the documentation link.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYes
libraryNomerlin
versionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden and does add real behavioral context: the signature comes from the library's actual source and is paired with a documentation URL, which tells the agent how trustworthy the output is. It is silent on failure modes (unknown symbol), and the library-version interaction is only lightly covered.

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 core purpose is front-loaded in the first sentence, followed by input-format detail and a compact Args block. Slightly redundant in re-listing the symbol parameter, but overall tight and well ordered.

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?

For a single-symbol lookup with an output schema present, the description supplies what the agent needs: name formats, library scoping, version override, and the provenance of the returned signature. Only error behavior is unaddressed.

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?

Schema coverage is 0%, so the description must compensate, and it does: symbol is described as a class/function/method/module name, library is enumerated as "merlin" (default) or "perceval", and version is explained as a docs version override used for the documentation link. That covers all three parameters with meaning beyond their bare titles.

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?

States a precise verb+resource: retrieving the exact signature and docstring of one API symbol, with the key qualifier that the signature is parsed from real source and paired with a doc URL. This implicitly separates it from search_api (searching) and get_source (reading a file), 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.

Usage Guidelines2/5

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

The description explains accepted input forms but gives no guidance on when to choose this tool over search_api, get_source, or get_doc_page. No prerequisites or exclusions are offered, leaving tool selection to inference from the name alone.

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

get_doc_pageA

Read one documentation page in full.

Accepts a page name from search_docs ("user_guide/layer"), or a documentation URL. Returns the page's published reStructuredText source, so code blocks and directives survive intact. Long pages are windowed; the footer tells you the next offset.

Args: page: page name or URL. library: "merlin" (default) or "perceval". version: docs version override. offset: character offset to start from. limit: maximum characters to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYes
limitNo
offsetNo
libraryNomerlin
versionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/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 and does add real behavioral context: it returns published reStructuredText source (so code blocks/directives survive), and it discloses that long pages are windowed with the footer indicating the next offset. It does not mention auth/permissions or rate limits, but pagination and return-format behavior are covered.

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 behavioral facts and input contract are front-loaded, and the Args block earns its place because schema coverage is zero. The block slightly duplicates the schema structure, but there is no filler text.

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?

An output schema exists, yet the description usefully explains the return shape and pagination anyway, and it covers both library scoping and versioning. Combined with the schema, an agent has enough to invoke it correctly; only auth/version-format details are absent.

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?

Schema description coverage is 0%, so the description must compensate, and it documents all five parameters inline (page as name or URL, library options merlin/perceval, version override, offset, limit). The version entry ('docs version override') is somewhat thin and no value ranges/defaults are given, but every parameter is at least semantically grounded.

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 gives a specific verb+resource ('Read one documentation page in full') and scopes it against the sibling workflow by stating it accepts a page name produced by search_docs. An agent can distinguish this from search_docs and, by resource wording, from the API-doc and source tools without opening the schema.

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

Usage Guidelines4/5

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

It clearly tells the agent the two valid inputs (a search_docs page name like 'user_guide/layer' or a documentation URL), which implies the intended workflow after searching. It stops short of explicit exclusions ('use get_api_doc instead for API reference'), so it is clear context without routing rules.

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

get_exampleA

Read an example notebook as markdown with runnable code cells.

This is the fastest way to get correct, working code: the notebooks are maintained against the current release. Cell outputs are omitted unless you ask for them.

Args: name: example name from list_examples, e.g. "notebooks/FirstQuantumLayers". library: "merlin" (default) or "perceval". include_outputs: also include printed output of each code cell. version: docs version override. offset: character offset to start from. limit: maximum characters to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
limitNo
offsetNo
libraryNomerlin
versionNo
include_outputsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses that cell outputs are omitted by default and that notebooks track the current release, which is real behavioral context. It says nothing about permissions, rate limits, or failure modes (e.g. unknown example name), leaving gaps for a tool of this kind.

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?

Purpose is front-loaded, the usage rationale follows in one sentence, and the parameter list is compact with no redundant restatement. Slightly verbose in the usage sentence but nothing that fails to earn its place.

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?

An output schema exists so return values need not be explained, and the description still adds the markdown/runnable-cell shape and the output-omission default. Parameter coverage is complete despite 0% schema coverage, so an agent can invoke this correctly without opening the schema.

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?

Schema description coverage is 0%, so the description must compensate, and it does: all six parameters are explained, including the `name` example format ('notebooks/FirstQuantumLayers'), the `library` values ('merlin' default or 'perceval'), version override, and offset/limit semantics. Only minor syntax details (e.g. valid version strings) are absent.

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?

States a specific verb and resource ('Read an example notebook') plus the rendering format ('as markdown with runnable code cells'), which separates it from the doc/api reading siblings. It also names list_examples as the source of valid `name` values, but it does not explicitly contrast itself with get_doc_page, which is the nearest ambiguous sibling.

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?

'This is the fastest way to get correct, working code: the notebooks are maintained against the current release' gives a clear reason to prefer this tool over prose docs. There is no explicit when-not or named alternative, so it stops short of a 5.

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

get_release_notesA

Read the most recent upstream release notes.

Useful for "what changed", "is this API still current" and migration questions: these libraries move fast and the release notes are where breaking changes are described.

Args: library: "merlin" (default) or "perceval". limit: how many releases to include, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
libraryNomerlin

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/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 burden. It implies a read-only upstream fetch and discloses ordering ('newest first') and the two supported libraries, and the output schema covers return values. It omits any auth, rate-limit, or caching behavior, so it adds some but not rich context.

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?

Front-loaded with the core action, followed by concrete use cases and a compact Args block. The Args section partly duplicates the schema, but given 0% schema coverage it earns its place.

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?

For a simple two-parameter read tool with an output schema, the description covers purpose, use cases, and both parameters. Only edge details like limit bounds or recency guarantees are missing.

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?

Schema coverage is 0%, so the description must compensate, and it does: library is documented as 'merlin' (default) or 'perceval', and limit as the number of releases, newest first. It does not state bounds or a maximum for limit, a minor gap.

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 and resource: 'Read the most recent upstream release notes,' with the scope ('most recent upstream') making it distinct from doc/API/source lookup siblings. It does not explicitly name a sibling to distinguish itself, but the operation is 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 gives clear usage contexts – 'what changed', 'is this API still current', and migration questions – plus the rationale (fast-moving libraries, breaking changes described in release notes). It stops short of naming alternatives or stating when not to use it.

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

get_sourceA

Read the library's real source code.

Given a dotted symbol the result is narrowed to that class or function; given a module name the whole module is returned. Use this when the documented behaviour is ambiguous and you need to see what the code does.

Args: target: dotted symbol or module, e.g. "merlin.core.circuit" or "QuantumLayer". library: "merlin" (default) or "perceval". ref: git ref to read; defaults to the repository's default branch. offset: character offset to start from. limit: maximum characters to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNo
limitNo
offsetNo
targetYes
libraryNomerlin

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

There are no annotations, so the description carries the full burden. It discloses useful behavior (symbol vs module narrowing, offset/limit paging), but omits read-only framing, truncation/output-size behavior (limit defaults to 40000), error cases, and whether it hits a network or cached source. Adds real context but leaves behavioral gaps.

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?

Front-loads the purpose in the first line, then a precise behavioral sentence, then a clean Args block. Every element earns its place; only the retained Args indentation styling is slightly less tight than prose.

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?

An output schema exists, so return values need not be explained. Combined with the documented parameters and targeting behavior, the definition is nearly complete, though a note on truncation limits/read-only guarantees would close the remaining gap.

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?

Schema description coverage is 0%, so the description must compensate, and it does: it documents all five parameters (target, library, ref, offset, limit) with meaning and concrete examples (e.g. "merlin.core.circuit" or "QuantumLayer") that the bare schema lacks.

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?

States a specific verb+resource ("Read the library's real source code") and immediately clarifies the two targeting modes: a dotted symbol narrows to a class/function, a module name returns the whole module. This clearly distinguishes it from doc-oriented siblings like search_docs, get_doc_page, and get_api_doc.

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?

Gives a clear triggering condition: "Use this when the documented behaviour is ambiguous and you need to see what the code does." It does not explicitly name the alternative tools or state when NOT to use it, so it falls short of a full 5, but the context is unambiguous.

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

list_examplesA

List the runnable example notebooks shipped with the library.

For MerLin this includes the curated gallery — quickstarts, model families and the reproduced-paper implementations — each with a one-line summary and tags. Pass a name from here to get_example.

Args: library: "merlin" (default) or "perceval". topic: filter on title, summary or tag, e.g. "kernel", "MNIST", "reservoir".

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNo
libraryNomerlin

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose what the listing contains ('each with a one-line summary and tags') and notes the MerLin gallery scope, but says nothing about pagination, result limits, or that this is a read-only enumeration. Adequate but not rich.

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

Conciseness4/5

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

Front-loaded with the core purpose in the first sentence, followed by useful scope detail and a compact Args block. Slightly verbose in the MerLin gallery clause, but every sentence contributes.

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?

An output schema exists, so return values need not be explained, yet the description still gives the shape (one-line summary + tags). Both optional parameters are covered. Complete enough for a two-param listing tool, with only minor gaps around result limits.

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?

Schema description coverage is 0%, so the description must compensate. It does so well for both params: library values ('merlin' default, or 'perceval') and topic's matching scope ('title, summary or tag') plus sample values. It omits that topic is nullable/optional, but the key semantics are supplied.

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 specific verb+resource ('List the runnable example notebooks shipped with the library') and then differentiates from the sibling get_example by explaining that names from this listing are the input to that tool. An agent can distinguish it from search_docs/get_api_doc without opening a schema.

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

Usage Guidelines4/5

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

It clearly routes the agent: 'Pass a name from here to get_example', establishing the list-then-fetch workflow. It also explains the topic filter's intended use with concrete examples. It does not, however, state when to prefer this over search_docs/search_api, which is the natural adjacent alternative.

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

search_apiA

Find documented API symbols by name.

Searches the project's own symbol inventory, so it covers every documented class, function, method, module, attribute and property. Use it to discover exact dotted names, then call get_api_doc for signatures.

Args: query: part of a symbol name, e.g. "QuantumLayer", "encode", "detector". library: "merlin" (default) or "perceval". kind: restrict to one of class, function, method, module, attribute, property, data. limit: maximum number of symbols to return. version: docs version override.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
limitNo
queryYes
libraryNomerlin
versionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are supplied, so the description carries the full burden, and it does disclose meaningful behavior: the search covers the entire documented symbol inventory and 'query' is a partial/substring match rather than exact. It omits any statement about result ordering, error behavior on unknown library/version values, or whether results are paginated beyond 'limit'.

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?

Front-loads the purpose in the first sentence, then the differentiated scope, then the workflow; the Args block is cleanly formatted. The enumerated symbol-type list is somewhat long but warranted since it defines coverage. No wasted sentences.

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 five parameters, no annotations, and an output schema already present, the description supplies what the structured fields do not: scope, matching semantics, all parameter meanings, and the follow-up tool. It leaves a small gap around result pagination/ordering and failure modes for invalid library or version values.

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?

Schema description coverage is 0%, so the description must compensate, and it documents all five parameters plus the default for library ('merlin') and the valid kind values (class, function, method, module, attribute, property, data). 'version: docs version override' and 'limit: maximum number of symbols to return' are terse, leaving minor gaps, but the required 'query' parameter is illustrated with concrete examples.

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?

Names a specific verb+resource ('Find documented API symbols by name') and states the search domain precisely: the project's own symbol inventory, covering every documented class, function, method, module, attribute and property. This scope statement alone differentiates it from search_docs (page text) and get_api_doc (signatures), which are named or implied.

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?

Gives a clear two-step workflow: 'Use it to discover exact dotted names, then call get_api_doc for signatures,' which explicitly routes the agent to the correct follow-up sibling. It does not state when NOT to use it (e.g. when the agent already knows the exact symbol and should call get_api_doc directly), so it stops short of a 5.

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

search_docsA

Search the documentation full text and return the best-matching pages.

Use this first for conceptual questions ("how does angle encoding work", "noisy simulation", "remote execution on a QPU"). Each result gives a page name to pass to get_doc_page.

Args: query: free text, e.g. "train a quantum layer on MNIST". library: "merlin" (default) or "perceval". limit: maximum number of pages to return. version: docs version override; defaults to the version upstream currently publishes.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
libraryNomerlin
versionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/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. It discloses that results are ranked pages carrying a page name for the get_doc_page handoff, which is useful, but says nothing about ranking semantics, result volume beyond the limit arg, or any access/rate constraints.

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?

Front-loads the purpose, then usage, then a tidy args block. Slightly verbose with the multi-line example questions, but every line carries information the schema does not.

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?

An output schema exists, so return-value modeling is not required, and the description still adds the page-name handoff detail. Given a 4-parameter tool with zero schema description coverage, the prose covers the params adequately; only ranking/limit behavior nuance is absent.

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?

Schema coverage is 0%, so the description is the only source of parameter meaning, and it documents all four: query as free text with an example, library with its value set ('merlin' default or 'perceval'), limit as max pages, and version as an override defaulting to the upstream-published version. Minor gap: no value-set detail for version.

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?

States a specific verb (search) and resource (documentation full text) plus the return shape (best-matching pages). It is clearly distinguished from the sibling search_api, which targets API docs rather than conceptual documentation.

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 says to 'use this first for conceptual questions' and gives sample query phrasings, then routes the agent onward: 'Each result gives a page name to pass to get_doc_page.' Both the when-to-use and the next step are stated.

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.

  1. 8 tool updatesv0.1.0
    • First observedget_api_doc
    • First observedget_doc_page
    • First observedget_example
    • First observedget_release_notes
    • First observedget_source
    • First observedlist_examples
    • First observedsearch_api
    • First observedsearch_docs

TDQS

A4.1/5.0

Scored across 8 tools

Disambiguation4/5

Tools cleanly pair as search+read for three resource types (docs, API symbols, examples) plus source and release notes, and descriptions explicitly differentiate them. The only mild overlap is deciding between get_doc_page, get_api_doc, and get_source when exploring a concept, but each targets a distinct content type (prose docs, signature/docstring, raw code).

Naming Consistency5/5

Every tool follows a consistent snake_case verb_noun pattern: search_docs, get_doc_page, search_api, get_api_doc, get_source, list_examples, get_example, get_release_notes. The verbs (search/get/list) map predictably to the action performed with no convention mixing.

Tool Count5/5

Eight tools is well-scoped for a two-library documentation retrieval server, with each tool earning its place (search+read for docs/API/examples, plus source and release notes). Nothing feels redundant or padded.

Completeness5/5

The surface covers the full research lifecycle: conceptual doc search/read, exact API symbol discovery and signatures, raw source for verifying behavior, runnable examples, and release notes for migration. This is a complete knowledge-retrieval toolkit with no obvious dead ends.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    An MCP server that fetches real-time documentation for popular libraries like Langchain, Llama-Index, MCP, and OpenAI, allowing LLMs to access updated library information beyond their knowledge cut-off dates.
    1
    3
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    An intelligent MCP server that enables AI agents to crawl, index, and semantically search official framework documentation using local RAG. It prevents hallucinations by providing precise, up-to-date documentation excerpts directly into the AI's context window.
    1
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that provides tools to fetch live, version-accurate documentation, changelogs, examples, and method signatures for npm and PyPI packages, preventing AI coding agents from hallucinating stale APIs.
    11 npm
    ISC