docs-navigation-mcp
Docs Navigation MCP is a local-first MCP server that lets an LLM navigate, create, update, and remove structured documentation corpora stored across configured Git-friendly repositories.
List available documentation sources across configured repositories (
list_sources).Navigate documentation hierarchies by listing child nodes under a source or node (
list_children).Fetch exact raw stored content for one or more node IDs (
fetch_docs).Create new documentation sources as empty corpora for deliberate ingestion (
create_source).Add nodes with titles, raw content, content type, source references, positions, and multiple parent relationships (
add_nodes).Update existing nodes to refresh content, metadata, parent hierarchy, or position (
update_nodes).Remove nodes, optionally recursively while preserving descendants that still have another parent (
remove_nodes).Remove entire sources and all their stored nodes (
remove_source).Run as an MCP stdio server with a read-only local browser viewer (default
http://127.0.0.1:47831) for inspecting stored sources, hierarchy, and raw content.Support multiple documentation repositories via
DOCNAV_REPOSITORIES, using the first repository as the creation target.Store documentation in Git-friendly files (
source.json, node JSON metadata, and raw.contentfiles) so repositories can be copied, cloned, versioned, or hosted on GitHub.
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-mcpBefore the npm release, or when intentionally running the current GitHub revision:
npx -y github:muhammadismailkhan0009/docs-navigation-mcpGit installs run the package's prepare script so the TypeScript source is built before execution.
By default, documentation is stored under:
~/.docs-navigation-mcp/repositoryTo choose one or more documentation repositories:
DOCNAV_REPOSITORIES=/path/to/docs-repo \
npx -y @myriadcodelabs/docs-navigation-mcpOn Linux/macOS, multiple repositories are separated by ::
DOCNAV_REPOSITORIES="/path/to/nim:/path/to/uiflow" \
npx -y @myriadcodelabs/docs-navigation-mcpThe 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-mcpThe MCP endpoint is then:
http://127.0.0.1:8765/mcpIntended 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:
docs.sources.list— discover which prepared documentation corpora are already available.docs.nodes.list_children— navigate the selected corpus hierarchy until the relevant nodes are found.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>.contentRaw 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-mcpMCP traffic uses stdio for the connected client.
The viewer is available at:
http://127.0.0.1:47831Both surfaces use the same FilesystemDocumentationStore and the same repository configuration:
DOCNAV_REPOSITORIES="/path/to/nim:/path/to/uiflow" \
npx -y @myriadcodelabs/docs-navigation-mcpOptional viewer configuration:
DOCNAV_UI_HOST=127.0.0.1
DOCNAV_UI_PORT=47831The 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-mcpThe command starts both the MCP server and local viewer.
Development
npm install
npm run typecheck
npm test
npm run build
npm run release:checkRun the source version:
DOCNAV_REPOSITORIES=/path/to/docs-repo npm run devThis 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:
Create an npm automation/access token that can publish
@myriadcodelabs/docs-navigation-mcp.Add it to the GitHub repository as the
NPM_TOKENActions secret.Set the desired version in
package.jsonandsrc/index.ts.Commit and push the release changes.
Create and push the matching Git tag, for example:
git tag v0.3.0
git push origin v0.3.0Pushing 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 toolsadd_nodesA
Add one or more documentation nodes to an existing source.
| Name | Required | Description | Default |
|---|---|---|---|
| nodes | Yes | ||
| source_id | Yes | Canonical documentation source ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | Yes | ||
| origin | No | ||
| version | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| node_ids | Yes | ||
| source_id | Yes | Canonical documentation source ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| node_id | No | Canonical documentation node ID | |
| source_id | Yes | Canonical documentation source ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| node_ids | Yes | ||
| recursive | No | ||
| source_id | Yes | Canonical documentation source ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes | Canonical documentation source ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodes | Yes | ||
| source_id | Yes | Canonical documentation source ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. '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.
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.
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.
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.
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.
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.
8 tool updates
v0.1.0- First observed
add_nodes - First observed
create_source - First observed
fetch_docs - First observed
list_children - First observed
list_sources - First observed
remove_nodes - First observed
remove_source - First observed
update_nodes
TDQS
Scored across 8 tools
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.
All tool names follow a consistent verb_noun pattern (list_sources, add_nodes, remove_source, etc.). The convention is uniform and predictable.
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.
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
Related MCP Connectors
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Personal knowledge base MCP server with semantic search, auto-categorization, metadata extraction
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
DocBase MCP server for AI agents
Related MCP Servers
- AlicenseAqualityDmaintenanceA local-first MCP server that exposes personal notes and files as unified semantic context for AI agents via vector search and file monitoring.6MIT
- AlicenseAqualityDmaintenanceA 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.10MIT
- AlicenseNot gradedqualityAmaintenanceLocal-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
- FlicenseNot gradedqualityCmaintenanceA local-first, LLM-agnostic MCP server that lets you ask hard questions about your documents, media, and code, and get traceable answers entirely offline.-