Skip to main content
Glama

Docs Navigation MCP

A local-first MCP server for navigating and maintaining arbitrary hierarchical documentation.

It exposes documentation as sources containing nodes. Nodes can have arbitrary depth, duplicate titles, raw content, and multiple parents. The server provides no semantic search or built-in reasoning; the connected LLM decides how to navigate and maintain the documentation.

Run with npx

Node.js 20 or newer is required.

npx -y @myriadcodelabs/docs-navigation-mcp

Before the npm release, or when intentionally running the current GitHub revision:

npx -y github:muhammadismailkhan0009/docs-navigation-mcp

Git installs run the package's prepare script so the TypeScript source is built before execution.

By default, documentation is stored under:

~/.docs-navigation-mcp/repository

To choose one or more documentation repositories:

DOCNAV_REPOSITORIES=/path/to/docs-repo \
npx -y @myriadcodelabs/docs-navigation-mcp

On Linux/macOS, multiple repositories are separated by ::

DOCNAV_REPOSITORIES="/path/to/nim:/path/to/uiflow" \
npx -y @myriadcodelabs/docs-navigation-mcp

The first configured repository is the creation target for new sources. Existing sources are updated in whichever configured repository owns them.

Related MCP server: pdf-context

MCP client configuration

A typical stdio MCP configuration looks like:

{
  "mcpServers": {
    "docs-navigation": {
      "command": "npx",
      "args": ["-y", "@myriadcodelabs/docs-navigation-mcp"],
      "env": {
        "DOCNAV_REPOSITORIES": "/path/to/docs-repo"
      }
    }
  }
}

Streamable HTTP with mcp-proxy

If mcp-proxy is installed locally:

DOCNAV_REPOSITORIES=/path/to/docs-repo \
mcp-proxy \
  --server stream \
  --host 127.0.0.1 \
  --port 8765 \
  --streamEndpoint /mcp \
  -- npx -y @myriadcodelabs/docs-navigation-mcp

The MCP endpoint is then:

http://127.0.0.1:8765/mcp

Intended agent workflow

Docs Navigation is a persistent prepared-documentation store, not a crawler.

For normal documentation retrieval, agents should prefer the stored corpus before crawling the web or creating a separate local documentation cache:

  1. docs.sources.list — discover which prepared documentation corpora are already available.

  2. docs.nodes.list_children — navigate the selected corpus hierarchy until the relevant nodes are found.

  3. docs.nodes.fetch_content — read the exact stored raw documentation for those node IDs.

External crawling is only needed when required documentation is absent or intentionally being refreshed. In that case, obtain authoritative material externally and ingest it into Docs Navigation.

Retrieval tools

  • docs.sources.list — start here; list prepared documentation sources.

  • docs.nodes.list_children — navigate immediate children of a source root or node.

  • docs.nodes.fetch_content — fetch exact stored raw content for known node IDs.

Ingestion and maintenance tools

  • docs.sources.create — create an empty documentation corpus for deliberate ingestion.

  • docs.nodes.add — persist new structured documentation nodes and raw content.

  • docs.nodes.update — refresh node content, metadata, or hierarchy.

  • docs.nodes.remove — remove stored nodes, optionally recursively.

  • docs.sources.remove — remove an entire documentation corpus.

Storage format

Each documentation repository uses a Git-friendly layout:

sources/
└── source_<uuid>/
    ├── source.json
    ├── nodes/
    │   └── node_<uuid>.json
    └── content/
        └── node_<uuid>.content

Raw documentation is stored unchanged in .content files. JSON files contain navigation metadata only, so documentation repositories can be copied, cloned, versioned, or hosted on GitHub without a dedicated backend.

Local documentation viewer

Starting Docs Navigation MCP also starts a read-only local browser for inspecting the exact sources, node hierarchy, and raw content stored in the configured documentation repositories.

The same command runs both surfaces:

npx -y @myriadcodelabs/docs-navigation-mcp
  • MCP traffic uses stdio for the connected client.

  • The viewer is available at:

http://127.0.0.1:47831

Both surfaces use the same FilesystemDocumentationStore and the same repository configuration:

DOCNAV_REPOSITORIES="/path/to/nim:/path/to/uiflow" \
npx -y @myriadcodelabs/docs-navigation-mcp

Optional viewer configuration:

DOCNAV_UI_HOST=127.0.0.1
DOCNAV_UI_PORT=47831

The UI is intentionally read-only. Documentation ingestion, updates, and removal remain MCP operations. Use the viewer to inspect what agents have already stored; use the docs.* MCP tools to change the corpus.

Human-readable viewer startup information is written to stderr so stdout remains reserved for the MCP stdio protocol. When the MCP stdio connection closes, the viewer closes with the same process.

Install globally

npm install -g @myriadcodelabs/docs-navigation-mcp
docs-navigation-mcp

The command starts both the MCP server and local viewer.

Development

npm install
npm run typecheck
npm test
npm run build
npm run release:check

Run the source version:

DOCNAV_REPOSITORIES=/path/to/docs-repo npm run dev

This starts both stdio MCP and the local viewer. The frontend source remains under web/ and is bundled into dist/ui/ during npm run build.

Publishing

The repository contains a tag-driven GitHub Actions release workflow.

Before publishing:

  1. Create an npm automation/access token that can publish @myriadcodelabs/docs-navigation-mcp.

  2. Add it to the GitHub repository as the NPM_TOKEN Actions secret.

  3. Set the desired version in package.json and src/index.ts.

  4. Commit and push the release changes.

  5. Create and push the matching Git tag, for example:

git tag v0.3.0
git push origin v0.3.0

Pushing the tag automatically:

  • verifies that the tag matches package.json,

  • runs the full release checks,

  • publishes that version to npm if it is not already present,

  • creates the matching GitHub Release with generated release notes if it does not already exist.

The workflow is safe to rerun when the npm version or GitHub Release already exists.

License

MIT

Available Tools

8 tools
add_nodesA

Add one or more documentation nodes to an existing source.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodesYes
source_idYesCanonical documentation source ID

TDQS

A3.9/5.0
Behavior3/5

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

Annotations are not provided, so the description carries the burden of behavioral disclosure. It states that nodes are added to an existing source, which implies mutation and the requirement of an existing source. However, it does not disclose details like whether adding is incremental, whether existing children are affected, or error cases (e.g., invalid source_id). Since no annotations exist, there's room for more transparency.

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 a single, concise sentence that directly states the tool's core function. It is front-loaded with the action and resource, and no extraneous details are present. Every word earns its place.

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?

Given the complexity of the input schema (nested array of nodes with optional fields), the description is minimal. There is no output schema, so the description should explain what happens on success (e.g., returns created node IDs or status). It doesn't mention required fields beyond what's in the schema (title is required). It also doesn't state limits or edge cases like max 500 nodes.

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 description mentions 'Add one or more documentation nodes', which clarifies that the nodes parameter is an array. Schema coverage is only 50%, but the description compensates by implying the batch nature of the operation. It doesn't detail each subfield, but the schema provides most property definitions. The description adds value by indicating multiple nodes can be added at once.

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 clearly states the action (add), the resource (documentation nodes), and the target (an existing source). It distinguishes from siblings like update_nodes and remove_nodes. The verb 'Add' is specific and the resource is well-defined, making the purpose unmistakable.

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

Usage Guidelines3/5

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

The description implies usage for adding nodes but does not explicitly state when to use this over update_nodes or create_source. There is no mention of prerequisites like needing to create a source first or that nodes must belong to an existing source. It lacks guidance on when not to use this tool.

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

create_sourceC

Create an empty documentation source in the primary configured repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
typeYes
originNo
versionNo

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description must carry full behavioral transparency. It only states 'create an empty documentation source,' which conveys the basic action but omits side effects, permission requirements, or reversibility. This is insufficient for a mutation tool.

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 a single, clear sentence with no filler, and the core verb and object are front-loaded. It is appropriately concise, though the brevity contributes to the lack of detail elsewhere.

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?

Given the 4 parameters, no output schema, and no annotations, the description is under-specified. It only states the basic creation action and doesn't cover return values, prerequisites, or any constraints beyond the primary repository, making it insufficient for confident use.

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 mention any of the four parameters (name, type, origin, version). It fails to explain what these parameters mean or how they affect the creation process, providing no compensatory 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 clearly states a specific verb ('create') and resource ('documentation source') with a location ('in the primary configured repository'), distinguishing it from siblings like list_sources or fetch_docs. It leaves no ambiguity about the tool's core function.

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 offers no guidance on when to use this tool versus alternatives such as add_nodes or remove_source. It only describes the action itself, leaving the agent to infer appropriate usage contexts.

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

fetch_docsC

Fetch raw documentation content for one or more exact node IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
node_idsYes
source_idYesCanonical documentation source ID

TDQS

C2.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 states that the operation fetches 'raw' content, implying a read-only, non-destructive action, but it does not describe the return format, error handling, rate limits, authentication requirements, or what happens when a node_id is invalid or not found. The term 'raw' is left vague.

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?

A single, well-constructed sentence with no filler. The key constraints ('raw', 'exact') are front-loaded, making it easy to parse quickly. It is appropriately concise for the information it conveys.

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?

For a fetch tool with two required parameters and no output schema, the description is incomplete. It does not state the expected return value (e.g., raw text, structured content), how multiple node_ids are handled (combined or separate), any error behavior, or prerequisite steps like listing children first. The absence of annotations and output schema makes these gaps significant.

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 only 50% per the context, and the description adds minimal meaning beyond the schema. It clarifies that node_ids must be exact, but does not explain the relationship between source_id and node_ids (e.g., whether node_ids must belong to that source). The description does not compensate for the low coverage adequately.

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 uses a specific verb ('Fetch') and resource ('raw documentation content') and specifies the scope ('exact node IDs'). It clearly distinguishes from sibling tools like list_sources (which lists sources) and list_children (which lists nodes), so an agent can tell what this tool does 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 Guidelines2/5

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

No explicit when-to-use or when-not-to-use guidance is provided. The phrase 'exact node IDs' implies that the caller must already have node IDs (likely from list_children), but the description does not state this dependency or name any alternative tools. The usage context is left entirely to inference.

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

list_childrenA

List immediate child nodes under a source root or documentation node.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
node_idNoCanonical documentation node ID
source_idYesCanonical documentation source ID

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral context. It does convey that the operation is a non-recursive read ('immediate child nodes'), but it omits behavior such as pagination via limit/cursor, response shape, and whether node_id alone is sufficient or source_id is always required.

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 entire description is one tight sentence with no filler. The key action and scope are front-loaded, making it easy to parse quickly.

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

Completeness2/5

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

No output schema or annotations exist, and the definition is too thin to fully support correct invocation. It omits how limit/cursor work, which parameter targets a 'documentation node' versus 'source root', and why source_id is required even when node_id is supplied.

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 covers only 50% of parameters; limit and cursor are undocumented there. The description clarifies the source-root/documentation-node distinction, mapping loosely to source_id and node_id, but does not explain pagination parameters or the required source_id role.

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 uses a specific verb ('List') and a specific resource ('immediate child nodes') with an explicit scope ('under a source root or documentation node'). This clearly distinguishes the tool from siblings like list_sources and fetch_docs, so an agent can tell what it does without inspecting schemas.

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

Usage Guidelines3/5

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

The intended use is implied: use this when navigating a documentation hierarchy to get direct children. However, it never explicitly contrasts with list_sources or fetch_docs, nor states any exclusions or when to prefer another tool.

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

list_sourcesA

List available documentation sources across configured local repositories.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

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

No annotations exist, so the description carries the full burden. It conveys a read-only listing action, but it does not explicitly state that no modifications occur, describe the return shape, ordering, or error cases. Behavioral detail is limited to what the verb itself implies.

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?

A single, front-loaded sentence with no filler or redundancy. Every word contributes to explaining the tool's purpose.

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 tool with no parameters and no output schema, the description is mostly sufficient. It could optionally mention what the returned list contains (e.g., names or IDs), but this is not critical given the simplicity.

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, so the baseline is 4. There is no parameter semantics for the description to add beyond the empty 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 ('List') and resource ('documentation sources across configured local repositories'). It distinguishes well from siblings like list_children and fetch_docs by naming the exact resource being listed and its scope.

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

Usage Guidelines3/5

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

The description implies when to use the tool: whenever you need to enumerate available documentation sources. However, it offers no explicit guidance on when to prefer this over alternatives like fetch_docs or list_children, nor any exclusion criteria.

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

remove_nodesB

Remove nodes. Recursive removal preserves descendants that still have another parent.

ParametersJSON Schema
NameRequiredDescriptionDefault
node_idsYes
recursiveNo
source_idYesCanonical documentation source ID

TDQS

B3.2/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 a genuinely non-obvious behavioral fact: recursive removal preserves descendants that still have another parent. However, it stays silent on what non-recursive removal does to children (orphaned refs?), reversibility, and any side effects on the source.

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 with zero filler; the action verb leads and the second sentence earns its place by disclosing the subtle recursive behavior. Tightly packed without being bloated.

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?

For a destructive tool with no annotations and no output schema, the description is too thin: it omits what happens to child nodes in non-recursive mode, whether the operation is reversible, and what the caller can expect after invocation. An agent cannot fully predict the outcome.

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 coverage is low (33%) and recursive lacks any schema description, so the description's clause about preserving descendants with another parent adds real meaning to that parameter. But it does not explain why source_id is required or how it constrains node_ids, leaving a meaningful gap at this coverage level.

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?

'Remove nodes' pairs a specific verb with a concrete resource, and the recursive clause adds scope. Among siblings (add_nodes, update_nodes, remove_source), the verb+resource pairing makes this clearly the node-deletion tool, 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?

No guidance on when to use this tool versus add_nodes, update_nodes, or remove_source, and no prerequisites are stated (e.g., whether nodes must belong to source_id). The recursive note describes behavior but does not tell an agent when recursive=true is the right choice.

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

remove_sourceA

Remove a documentation source and all of its stored nodes.

ParametersJSON Schema
NameRequiredDescriptionDefault
source_idYesCanonical documentation source ID

TDQS

A3.8/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 disclose the critical side effect: removing a source cascades to all stored nodes. It does not mention permanence, permissions, or downstream effects, but the most important destructive behavior is explicitly stated.

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?

A single, front-loaded sentence with no filler. The action and consequence are immediately clear, and every word contributes to the meaning.

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 one-parameter destructive tool, the description is nearly complete: it names the target, specifies the cascade effect, and the schema handles the ID format. A note about irreversibility or a pointer to list_sources would be a minor improvement.

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 coverage is 100% and the only parameter is already described as 'Canonical documentation source ID' in the schema. The description adds no additional meaning about source_id, so the baseline 3 is appropriate.

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 action (remove) on a specific resource (documentation source) and clarifies that it also removes all stored nodes. This clearly distinguishes it from sibling remove_nodes, which targets individual nodes rather than the entire source.

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?

No guidance is given about when to choose this tool over remove_nodes or how it relates to create_source/list_sources. The destructive scope is implied, but there is no explicit when-to-use or exclusion guidance.

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

update_nodesB

Update content, metadata, or hierarchy parents for existing nodes.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodesYes
source_idYesCanonical documentation source ID

TDQS

B3.1/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. 'Update' implies mutation, but the description doesn't state whether updates are partial or full replacements, whether hierarchy changes have side effects (e.g., orphaned nodes), whether there are limits (maxItems 500 is in schema but not described), or what the response looks like. For a mutation tool with zero annotation coverage, this is a significant gap.

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 a single concise sentence that front-loads the action and scope. It earns its place by summarizing the three update categories, though it could be slightly more specific about behavior.

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?

Given the tool has 2 required parameters, a nested nodes array with 7 fields, no output schema, and no annotations, the description is too thin. An agent needs to know whether updates are partial (PATCH-like) or full replacement, how parent_ids behaves, and what happens on failure. The description doesn't provide enough context for correct invocation.

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 50%: source_id and id have descriptions, but title, content, position, parent_ids, source_ref, and content_type lack descriptions. The description's phrase 'content, metadata, or hierarchy parents' maps loosely to these fields, adding some meaning beyond the schema. However, it doesn't clarify semantics like what 'position' means or how parent_ids interacts with existing parents (replace vs append).

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 ('Update') and resource ('existing nodes'), and lists the three updateable aspects: content, metadata, or hierarchy parents. This clearly distinguishes it from sibling tools like add_nodes and remove_nodes, though it doesn't explicitly name those siblings.

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

Usage Guidelines3/5

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

The description implies this tool is for modifying existing nodes, which contrasts with add_nodes (creating) and remove_nodes (deleting). However, it doesn't explicitly state when to use this tool versus alternatives, nor does it mention any prerequisites like the source_id being required or that nodes must already exist.

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 observedadd_nodes
    • First observedcreate_source
    • First observedfetch_docs
    • First observedlist_children
    • First observedlist_sources
    • First observedremove_nodes
    • First observedremove_source
    • First observedupdate_nodes

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct resource (sources vs nodes) with a clear action (list, fetch, create, add, update, remove). No overlapping purposes; an agent can reliably select the right tool.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (list_sources, add_nodes, remove_source, etc.). The convention is uniform and predictable.

Tool Count5/5

8 tools is well within the ideal range for a docs navigation server. Each tool serves a distinct purpose and the set is neither sparse nor bloated.

Completeness4/5

The surface covers source and node lifecycle (create, list, fetch, add, update, remove). Minor gap: no explicit source metadata update, but remove_source covers deletion and list_sources provides enumeration. Overall, core workflows are supported.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A local-first MCP server that ingests PDFs, extracts structure, and provides semantic search and sequential navigation tools for AI clients to query and learn from documents.
    10
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Local-first MCP server for retrieval over markdown wikilink vaults, offering hybrid vector+lexical search, note reading, neighbor expansion, and recent activity tracking with fully local embeddings and no network egress.
    MIT