dash-mcp-server-node
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dash-mcp-server-nodesearch documentation for JavaScript's Array.map"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-server-dash (Node.js)
A Model Context Protocol (MCP) server that provides tools to interact with the Dash documentation browser API.
Dash 8 is required. You can download Dash 8 at https://kapeli.com/dash.
Overview
The Dash MCP server provides tools for accessing and searching documentation directly from Dash, the macOS documentation browser. MCP clients can:
List installed docsets
Search across docsets and code snippets
Load documentation pages from search results
Enable full-text search for specific docsets
Related MCP server: DocsetMCP
Tools
list_installed_docsets
Lists all installed documentation sets in Dash
search_documentation
Searches across docsets and snippets
load_documentation_page
Loads a documentation page from a
load_urlreturned bysearch_documentation
enable_docset_fts
Enables full-text search for a specific docset
Requirements
macOS (required for Dash app)
Dash installed
Node.js 18 or higher
Configuration
Using npx
in claude_desktop_config.json
{
"mcpServers": {
"dash-api": {
"command": "npx",
"args": [
"-y",
"git+https://github.com/Kapeli/dash-mcp-server-node.git",
"dash-mcp-server"
]
}
}
}in Claude Code
claude mcp add dash-api -- npx -y "git+https://github.com/Kapeli/dash-mcp-server-node.git" dash-mcp-serverFrom source
git clone https://github.com/Kapeli/dash-mcp-server-node.git
cd dash-mcp-server-node
npm install
npm run buildin claude_desktop_config.json
{
"mcpServers": {
"dash-api": {
"command": "node",
"args": ["/absolute/path/to/dash-mcp-server-node/dist/index.js"]
}
}
}in Claude Code
claude mcp add dash-api -- node /absolute/path/to/dash-mcp-server-node/dist/index.jsDevelopment
npm install
npm run dev # watch mode
npm test # run tests
npm run lint # type checkAvailable Tools
4 toolsenable_docset_ftsC
Enable full-text search for a specific docset.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | The docset identifier (from list_installed_docsets) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the action and gives no indication of side effects, persistence, idempotency, required permissions, or what changes occur within the docset. This is a meaningful gap for a tool that enables a feature.
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 wasted words. It is concise and front-loaded with the core action and target. It could have added more behavioral or usage context without losing conciseness, but as written it is tightly structured.
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 one well-documented parameter and no output schema, the description is minimally adequate. However, it lacks context about when enabling FTS is useful, what it changes, and whether there are prerequisites beyond obtaining the identifier. These gaps make it only partially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is only one parameter, so the schema already provides the semantic baseline. The property description adds the useful origin of the identifier ('from list_installed_docsets'), but the main description does not add much beyond what the schema already states.
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 ('Enable full-text search') and a specific resource ('a specific docset'). It is clearly distinct from the sibling tools like list_installed_docsets or search_documentation, though it does not explicitly contrast itself with them.
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?
There is no guidance about when to use this tool versus alternatives, such as explaining that it should be called after list_installed_docsets and before search_documentation. The parameter description hints at a prerequisite by saying the identifier comes from list_installed_docsets, but the main description provides no usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_installed_docsetsA
List all installed documentation sets in Dash. An empty list is returned if the user has no docsets installed. Results are automatically truncated if they would exceed 25,000 tokens.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses two important behaviors: an empty list is returned when no docsets are installed, and results are auto-truncated at 25,000 tokens. This is solid context for a simple read-only list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler. The main action is front-loaded, and the edge-case behaviors are stated efficiently. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with no output schema, the description covers the essential return behaviors: empty-list handling and truncation. It does not describe the exact shape of each docset item, but this is a minor gap given the simplicity of the tool.
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 there is no parameter semantics burden. The description appropriately does not invent parameter details, and no additional meaning is needed 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 uses a specific verb-resource pair ('List all installed documentation sets in Dash') that clearly states what the tool does. It is immediately distinguishable from sibling tools like search_documentation and load_documentation_page.
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 clearly implies this is the tool for enumerating installed docsets, and the sibling names suggest alternatives for searching and loading pages. However, it does not explicitly state when to prefer this tool over the siblings or mention any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_documentation_pageA
Load a documentation page from a load_url returned by search_documentation. Returns the page content as plain text with markdown-style links.
| Name | Required | Description | Default |
|---|---|---|---|
| load_url | Yes | The load_url value from a search result (must point to the local Dash API at 127.0.0.1) |
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 clearly states the output behavior: page content returned as plain text with markdown-style links. 'Load' and 'Returns' imply a read-only operation, and there are no destructive or side-effect behaviors that need disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the purpose, input source, and output format with no filler. Every clause earns its place, and the most important information is front-loaded.
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 tool with no output schema, the description is complete: it explains where the input comes from, what the tool does, and what the caller will receive. No critical operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter is already fully documented in the schema. The description reaffirms that load_url must come from search_documentation but does not add new validation or format details beyond what the schema provides.
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 ('Load'), a specific resource ('documentation page'), and the exact source of the input ('load_url returned by search_documentation'). It clearly differentiates this tool from search_documentation and the other 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 explicitly frames usage as a follow-up to search_documentation, establishing a clear search-then-load workflow. It does not explicitly discuss when not to use list_installed_docsets or enable_docset_fts, but the referenced workflow provides sufficient context for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_documentationB
Search for documentation across docset identifiers and snippets. Results are automatically truncated if they would exceed 25,000 tokens.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query string | |
| max_results | No | Maximum number of results to return (1-1000) | |
| search_snippets | No | Whether to include snippets in search results | |
| docset_identifiers | Yes | Comma-separated list of docset identifiers to search in (from list_installed_docsets) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It does add one useful behavioral fact: 'Results are automatically truncated if they would exceed 25,000 tokens.' However, it omits other relevant behavior such as whether the search is read-only, whether FTS must be enabled first, or what the result structure looks like.
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 two sentences with no filler. The core purpose is front-loaded, and the truncation warning is a concise, valuable behavioral detail that 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?
The schema covers all parameters, and the truncation behavior is mentioned, which helps invocation. However, there is no output schema and no mention of the expected result shape, the relationship to FTS-enabled docsets, or when to prefer sibling tools, leaving moderate gaps for a tool with no annotations.
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 100%, so the baseline is 3. The description mentions 'docset identifiers and snippets' but does not add meaningful semantics beyond what the schema already provides for query, max_results, search_snippets, or docset_identifiers.
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 opens with a clear verb and object: 'Search for documentation across docset identifiers and snippets.' It is distinct from siblings like list_installed_docsets and load_documentation_page because it clearly names the search action, though it does not explicitly contrast itself with those alternatives.
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 on when to use this tool versus load_documentation_page or enable_docset_fts. The description neither states the appropriate context for searching documentation nor excludes alternative tools, leaving the agent to infer when this tool 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v1.1.0- First observed
enable_docset_fts - First observed
list_installed_docsets - First observed
load_documentation_page - First observed
search_documentation
TDQS
Scored across 4 tools
Each tool targets a distinct operation: listing installed docsets, searching documentation, enabling full-text search, and loading a documentation page. There is no meaningful overlap between any pair, so an agent can reliably select the right tool.
All tools follow a consistent snake_case verb_noun pattern: list_installed_docsets, search_documentation, enable_docset_fts, and load_documentation_page. The noun phrases are specific and the naming style is uniform throughout.
Four tools is a compact, well-scoped set for a documentation browsing server. Each tool contributes a necessary part of the workflow with no redundancy or bloat.
The core workflow is covered: list installed docsets, enable full-text search, search across documentation, and load pages. The main missing piece is a paired disable_docset_fts operation, but that is an optional control rather than a blocking gap.
Maintenance
Related MCP Connectors
Get up-to-date, version-specific documentation and code examples from official sources directly in…
DevDocs.io keyless docs index + entry search + content (Angular, MDN, Rust, etc.).
Search and read Rust documentation for the standard library and any crate on crates.io
Provides tools for searching Google Workspace documentation and much more.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides tools to interact with the Dash documentation browser API, allowing users to list installed docsets, search across documentation, and enable full-text search.4180MIT
- AlicenseNot gradedqualityCmaintenanceProvides AI assistants with instant access to local Dash documentation docsets and cheatsheets, enabling offline documentation searches across 165+ programming languages, frameworks, and developer tools directly within conversations.9MIT
- AlicenseNot gradedqualityCmaintenanceEnables searching and retrieving Godot documentation pages using fuzzy search, with support for multiple documentation versions.MIT
- AlicenseAqualityAmaintenanceProvides fast, token-efficient search over coding agent documentation (e.g., Claude Code, Cursor) using local SQLite FTS5 indexing, with tools for searching snippets, reading pages, and grepping markdown.5MIT