Labsco
codybrom logo

DocsetMCP

β˜… 9

from codybrom

A server for accessing Dash-style documentation sets locally. Requires a local Dash installation.

πŸ”₯πŸ”₯πŸ”₯βœ“ VerifiedFreeAdvanced setup

DocsetMCP

PyPI License: MIT Python

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

✨ 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:

<details> <summary><b>Popular Languages</b></summary>
  • Python (2 & 3)
  • JavaScript / TypeScript
  • Java
  • C / C++
  • Go
  • Rust
  • Ruby
  • Swift / Objective-C
  • PHP
  • Bash
  • And many more...
</details> <details> <summary><b>Web Frameworks</b></summary>
  • React / Angular / Vue
  • Node.js / Express
  • Django / Flask
  • Ruby on Rails
  • Bootstrap
  • jQuery
  • And many more...
</details> <details> <summary><b>Developer Tools</b></summary>
  • Git (cheatsheet)
  • Docker (cheatsheet)
  • Vim (cheatsheet)
  • MySQL / PostgreSQL
  • MongoDB / Redis
  • nginx / Apache
  • And many more...
</details>

Use list_available_docsets to see all docsets installed on your system.

Discovery Workflow

DocsetMCP is designed for name-based searches, not keyword searching. Follow this workflow:

1. Start with Discovery Tools

# Find what languages are available
"List all available programming languages"

# Find docsets for your language
"Show me all Python docsets"

# See what types are available in a docset
"List all types in the apple_api_reference docset for Swift"

# Browse entries by type with letter filters
"Show me all Classes starting with 'UI' in apple_api_reference for Swift"

2. Then Search by Exact Names

# Once you know exact names, search for them
"Search for UIViewController in apple_api_reference with Swift"
"Find readFile documentation in nodejs docset"
"Show me the CarPlay framework documentation"

3. Use Drilldown Notes

When you find container types (frameworks, classes), follow the drilldown guidance:

# Container entry will show: "contains 42 additional members - use search_docs('ContainerName', max_results=50)"
"Search for SwiftData in apple_api_reference with max_results=50"

How It Works

  1. Multi-Format Support: Handles both Apple cache format and tarix compression
  2. Direct Database Access: Queries Dash's SQLite databases for fast lookups
  3. Name-Based Matching: Only returns entries where search terms match item names (no false positives)
  4. Smart Ranking: Prioritizes exact matches, then prefix matches, then substring matches
  5. Dynamic Type Ordering: Uses docset configuration files for intelligent result prioritization
  6. Container Detection: Automatically detects frameworks/classes with members and provides exploration guidance
  7. Smart Extraction: Decompresses Apple's DocC JSON or extracts HTML from tarix archives
  8. 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.

ParameterTypeDescriptionDefault
querystringExact name to search (not keywords)required
docsetstringTarget docset (e.g., 'nodejs', 'python_3')required
languagestringProgramming language filterdocset default
max_resultsintNumber of results (1-10)3

πŸ“‹ search_cheatsheet

Search Dash cheatsheets for quick command reference.

ParameterTypeDescriptionDefault
cheatsheetstringCheatsheet name (e.g., 'git', 'vim')required
querystringSearch within cheatsheet-
categorystringFilter by category-
max_resultsintNumber 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.

ParameterTypeDescriptionDefault
docsetstringTarget docsetrequired
filterstringFilter framework names-

🌍 list_languages

Discover all programming languages with available documentation.

πŸ“– list_docsets_by_language

Find all docsets that support a specific programming language.

ParameterTypeDescriptionDefault
languagestringProgramming languagerequired

🏷️ list_types

List all available types (Class, Protocol, Function, etc.) in a docset/language.

ParameterTypeDescriptionDefault
docsetstringTarget docsetrequired
languagestringProgramming language filter-

πŸ“‹ list_entries

List entries filtered by type and optional name prefix.

ParameterTypeDescriptionDefault
docsetstringTarget docsetrequired
type_namestringType to filter by (e.g., 'Class', 'Protocol')required
languagestringProgramming language filter-
name_filterstringFilter entries by name prefix-
max_resultsintNumber of results (1-100)20

πŸ“‚ list_cheatsheet_categories

List all categories within a specific cheatsheet.

ParameterTypeDescriptionDefault
cheatsheetstringCheatsheet namerequired

πŸ“„ fetch_cheatsheet

Fetch entire cheatsheet content (recommended for comprehensive access).

ParameterTypeDescriptionDefault
cheatsheetstringCheatsheet namerequired

Development

Building from Source

# Clone the repository
git clone https://github.com/codybrom/docsetmcp.git
cd docsetmcp

# Install in development mode
pip install -e .

# Install all development dependencies
pip install -r requirements.txt

# Set up pre-commit hooks
pre-commit install

Testing

# Run basic structure tests
pytest tests/test_docsets.py::TestDocsets::test_yaml_structure -v

# Run quick tests (structure + existence)
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

# Run tests in parallel
pytest tests/ -n auto -v

# Validate cheatsheets
python scripts/validate_cheatsheets.py

Code Quality

# Format Python code with Black
black docsetmcp/

# Format YAML files with yamlfix
yamlfix docsetmcp/docsets/*.yaml

# Run all pre-commit hooks
pre-commit run --all-files

# Run specific hook
pre-commit run yamlfix --all-files

# Run spell check (cspell installed automatically during setup)
npm run spell

CLI Commands

# Test version
docsetmcp --version

# List available docsets
docsetmcp --list-docsets

# Test server startup
docsetmcp --test-connection

# Test with custom paths
docsetmcp --docset-path "/custom/path" --list-docsets

Building Distribution

# Build package
python setup.py sdist bdist_wheel

# Install from source
pip install .

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

  1. 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.

  2. Caching Strategy: Extracted documentation is cached in memory (_fs_cache for Apple format, _html_cache for tarix) to improve performance on repeated queries.

  3. 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.

  4. Configuration Loading: The ConfigLoader applies smart defaults, allowing minimal YAML configs while supporting complex overrides when needed.

  5. 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.

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