Provides access to local Dash documentation docsets, enabling search across 165+ supported docsets, framework discovery, and cheatsheet access for offline documentation reference.
DocsetMCP
Access your local Dash documentation directly from AI assistants 🚀
DocsetMCP is a Model Context Protocol (MCP) server that seamlessly integrates your local Dash docsets with AI assistants like Claude, enabling instant access to offline documentation without leaving your conversation.
📋 Table of Contents
Why DocsetMCP?
📚 Instant Documentation: No switching, no web searches. Get straight to the docs directly in your AI conversation
🔒 Local and Private: Work with docset files on your machine
⚡ Lightning Fast: Optimized caching and direct database queries
🎯 Precise Results: Get exactly what you need with smart filtering
Quick Start
Add to your MCP config and restart your MCP client. Then try asking something like "Find me the AppIntent documentation"
✨ Features
Documentation Search
Multi-Docset Support: Search across 165+ supported docsets including Apple, NodeJS, Python, and more
Language Filtering: Target specific programming languages within docsets
Name-Based Search: Only returns entries where search terms match item names for precise results
Smart Ranking: Results ranked by match type (exact > prefix > substring) and dynamic type ordering
Container Guidance: Framework and class entries show drilldown notes for exploring members
Cheatsheet Access
Quick Reference: Instant access to Git, Vim, Docker, and 40+ other cheatsheets
Fuzzy Matching: Find cheatsheets even with partial names
Category Browsing: Explore commands by category within each cheatsheet
Search Within: Query specific commands inside any cheatsheet
Performance & Integration
Efficient Caching: In-memory caching for repeated queries
Direct Database Access: No intermediate servers or APIs
Universal: Works with Claude Desktop, Cursor, VS Code, and any MCP-compatible client
Framework Discovery: List all available frameworks/types in any docset
Container Guidance: Automatic drilldown notes for frameworks and classes with members
📦 Supported Docsets
DocsetMCP supports 165+ docsets including:
Python (2 & 3)
JavaScript / TypeScript
Java
C / C++
Go
Rust
Ruby
Swift / Objective-C
PHP
Bash
And many more...
React / Angular / Vue
Node.js / Express
Django / Flask
Ruby on Rails
Bootstrap
jQuery
And many more...
Git (cheatsheet)
Docker (cheatsheet)
Vim (cheatsheet)
MySQL / PostgreSQL
MongoDB / Redis
nginx / Apache
And many more...
Use list_available_docsets to see all docsets installed on your system.
Prerequisites
macOS (Dash is Mac-only)
Dash with desired docsets downloaded
Python 3.10 or higher
UV package manager (How to Install)
An AI assistant that supports MCP (Claude Desktop, Claude Code CLI, Cursor IDE, etc.)
Configuration
Custom Docset Locations
By default, DocsetMCP looks for docsets in Dash's standard directories:
Docsets:
~/Library/Application Support/Dash/DocSetsCheatsheets:
~/Library/Application Support/Dash/Cheat Sheets
You can customize these locations using:
Environment Variables
Command Line Arguments
Priority Order:
CLI arguments (highest priority)
Environment variables
Default Dash locations (lowest priority)
Additional Search Paths:
The --additional-docset-paths and --additional-cheatsheet-paths options allow DocsetMCP to search in multiple locations beyond the primary path. This is useful when:
You have docsets in multiple directories
You want to include third-party or custom docsets
You're sharing docsets across different tools
DocsetMCP will automatically discover and configure docsets found in these additional paths.
MCP Client Setup
Choose your MCP client below for specific setup instructions:
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
For custom docset locations:
Add to your MCP configuration (Cursor: .mcp/mcp.json in your project root:
Note: Restart your client and check your MCP settings for connection status.
Installation
No Installation Required (Recommended)
If your MCP client supports uvx, no installation is needed! The package will be automatically downloaded and run when needed. See the Quick Start or Configuration sections.
Manual Installation
If you prefer to install locally or your MCP client doesn't support uvx:
Then use docsetmcp instead of uvx docsetmcp in your configuration.
Development Installation
Clone and install:
git clone https://github.com/codybrom/docsetmcp.git cd docsetmcp pip install -e .Run tests (optional):
# Install test dependencies pip install pytest pytest-cov pytest-xdist # Run basic tests pytest tests/test_docsets.py::TestDocsets::test_yaml_structure -v # Run quick tests (structure + existence checks) pytest tests/ -k "yaml_structure or test_docset_exists" -v # Run full test suite (all docsets) pytest tests/ -v # Run with coverage pytest tests/ --cov=docsetmcp --cov-report=html -v # Validate all local cheatsheets work (integration test) python scripts/validate_cheatsheets.py
Usage Examples
Once configured, you can ask your AI assistant to search documentation naturally:
🍎 iOS/macOS Development
🌐 Web Development
🛠️ DevOps & Terminal
📊 Data Science
Advanced Usage
Discovery Workflow
DocsetMCP is designed for name-based searches, not keyword searching. Follow this workflow:
1. Start with Discovery Tools
2. Then Search by Exact Names
3. Use Drilldown Notes
When you find container types (frameworks, classes), follow the drilldown guidance:
How It Works
Multi-Format Support: Handles both Apple cache format and tarix compression
Direct Database Access: Queries Dash's SQLite databases for fast lookups
Name-Based Matching: Only returns entries where search terms match item names (no false positives)
Smart Ranking: Prioritizes exact matches, then prefix matches, then substring matches
Dynamic Type Ordering: Uses docset configuration files for intelligent result prioritization
Container Detection: Automatically detects frameworks/classes with members and provides exploration guidance
Smart Extraction: Decompresses Apple's DocC JSON or extracts HTML from tarix archives
Markdown Formatting: Converts documentation to readable Markdown
Available Tools
DocsetMCP provides eleven powerful tools for accessing your documentation:
🔍 search_docs
Search and extract documentation from any docset.
Parameter | Type | Description | Default |
| string | Exact name to search (not keywords) | required |
| string | Target docset (e.g., 'nodejs', 'python_3') | required |
| string | Programming language filter | docset default |
| int | Number of results (1-10) | 3 |
📋 search_cheatsheet
Search Dash cheatsheets for quick command reference.
Parameter | Type | Description | Default |
| string | Cheatsheet name (e.g., 'git', 'vim') | required |
| string | Search within cheatsheet | - |
| string | Filter by category | - |
| int | Number of results (1-50) | 10 |
📚 list_available_docsets
List all installed Dash docsets with their supported languages.
📝 list_available_cheatsheets
List all available Dash cheatsheets that can be searched.
🏗️ list_frameworks
List frameworks/types within a specific docset.
Parameter | Type | Description | Default |
| string | Target docset | required |
| string | Filter framework names | - |
🌍 list_languages
Discover all programming languages with available documentation.
📖 list_docsets_by_language
Find all docsets that support a specific programming language.
Parameter | Type | Description | Default |
| string | Programming language | required |
🏷️ list_types
List all available types (Class, Protocol, Function, etc.) in a docset/language.
Parameter | Type | Description | Default |
| string | Target docset | required |
| string | Programming language filter | - |
📋 list_entries
List entries filtered by type and optional name prefix.
Parameter | Type | Description | Default |
| string | Target docset | required |
| string | Type to filter by (e.g., 'Class', 'Protocol') | required |
| string | Programming language filter | - |
| string | Filter entries by name prefix | - |
| int | Number of results (1-100) | 20 |
📂 list_cheatsheet_categories
List all categories within a specific cheatsheet.
Parameter | Type | Description | Default |
| string | Cheatsheet name | required |
📄 fetch_cheatsheet
Fetch entire cheatsheet content (recommended for comprehensive access).
Parameter | Type | Description | Default |
| string | Cheatsheet name | required |
Troubleshooting
This means the docset isn't installed in Dash. To fix:
Open Dash.app
Go to Preferences → Downloads
Download the required docset
Restart your MCP client
Check installation: Run
pip show docsetmcpto verify installationTest manually: Run
uvx docsetmcpin terminal - you should see MCP outputCheck logs:
Claude Desktop: Check Console.app for Claude logs
Cursor: Check Output → MCP panel
Verify config path: Ensure config file is in the correct location
The content might not be in your local Dash cache
Try searching with different terms or partial matches
Use
list_available_docsetsto verify the docset is loadedSome docsets may use different naming conventions (e.g., 'fs' vs 'filesystem')
Python version: Ensure you have Python 3.10 or higher
UV not found: Install UV package manager from https://docs.astral.sh/uv/
Permission denied: Check file permissions on Dash docsets directory
Report bugs: Open an issue at https://github.com/codybrom/docsetmcp/issues
Development
Building from Source
Testing
Code Quality
CLI Commands
Building Distribution
Architecture
Core Components
docsetmcp/server.py: Main MCP server implementation using FastMCP. Contains the DashExtractor class that handles:
Apple cache format (SHA-1 UUID-based with brotli compression)
Tarix format (tar.gz archives)
SQLite database queries for documentation lookup
HTML to Markdown conversion
docsetmcp/config_loader.py: Configuration system that loads YAML configs for 165+ supported docsets. Provides smart defaults and handles both simple and complex configuration formats.
docsetmcp/docsets/: YAML configuration files for each supported docset, defining:
Docset paths and formats
Language variants and filters
Type priorities for search results
Key Implementation Details
Multi-Format Support: The server detects and handles both Apple's modern cache format (using SHA-1 based UUIDs) and the older tarix compression format automatically based on docset configuration.
Caching Strategy: Extracted documentation is cached in memory (_fs_cache for Apple format, _html_cache for tarix) to improve performance on repeated queries.
Search Algorithm: Uses SQLite case-insensitive LIKE queries on the optimizedIndex.dsidx database. Results are ranked by match type (exact > prefix > substring) and then by dynamic type ordering from docset configuration files. Only returns entries where the search term matches the item name.
Configuration Loading: The ConfigLoader applies smart defaults, allowing minimal YAML configs while supporting complex overrides when needed.
Container Type Detection: Framework, class, and module entries automatically include drilldown notes when they contain additional members, guiding users to search for more specific content.
Contributing
We welcome contributions! Here's how you can help:
Adding New Docset Support
Create a YAML configuration in
docsetmcp/docsets/:# docsetmcp/docsets/my_docset.yaml name: My Docset description: Brief description of the docset docset_path: My_Docset/My_Docset.docset languages: - python - javascriptTest your configuration:
pytest tests/test_docsets.py -k "my_docset" -vSubmit a pull request
Reporting Issues
Development Guidelines
Follow PEP 8 style guidelines
Add tests for new features
Update documentation as needed
Keep commits focused and descriptive
Technical Architecture
DocsetMCP leverages Dash's internal structure for efficient documentation access:
Format Support: Handles both Apple's modern cache format (SHA-1 UUID-based with brotli compression) and traditional tarix archives
Caching Strategy: In-memory caching for repeated queries
Database Access: Direct SQLite queries to Dash's optimized indexes
Content Extraction: Smart extraction with fallback strategies
Type System: Full type hints for better IDE support
License
MIT License - see LICENSE file for details.
Acknowledgments
Thanks to Kapeli for creating Dash
Built on the Model Context Protocol standard
Inspired by the MCP community and ecosystem