Skip to main content
Glama

Obsidian MCP Server

by Bachmann1234
README.md6.6 kB
# Obsidian MCP Server A Model Context Protocol (MCP) server that provides AI assistants with full-text search access to your Obsidian vault. ## Features - **Full-text search** across all notes using Whoosh search engine - **Tag-based filtering** and search - **Frontmatter support** - extracts and indexes YAML metadata - **Wikilink parsing** - understands Obsidian's `[[note]]` syntax - **Real-time updates** - watches vault for changes and updates index automatically - **No Obsidian plugins required** - works directly with filesystem - **Fast and efficient** - pure Python implementation with optimized indexing ## Installation ### Option 1: Local Installation 1. Clone this repository: ```bash git clone <repository-url> cd obsidianMCP ``` 2. Install dependencies: ```bash # Basic installation pip install -e . # Or install from requirements pip install -r requirements.txt # For development (includes testing tools) pip install -r requirements-dev.txt # OR pip install -e ".[dev]" # For reproducible installs using lock files (requires uv) uv pip sync requirements.lock # Production dependencies only uv pip sync requirements-dev.lock # With development dependencies ``` ### Option 2: Docker 1. Clone this repository: ```bash git clone <repository-url> cd obsidianMCP ``` 2. Build the Docker image: ```bash docker build -t obsidian-mcp-server . ``` 3. Run with Docker: ```bash docker run -it --rm \ -e OBSIDIAN_VAULT_PATH=/vault \ -v /path/to/your/obsidian/vault:/vault:ro \ -v obsidian-index:/app/index \ obsidian-mcp-server ``` Or use Docker Compose: ```bash # Edit docker-compose.yml to set your vault path docker-compose up -d ``` ## Usage ### Environment Setup Set the required environment variable: ```bash export OBSIDIAN_VAULT_PATH="/path/to/your/obsidian/vault" ``` Optional environment variables: ```bash export OBSIDIAN_INDEX_PATH="/path/to/index" # Default: vault/.obsidian-mcp-index export OBSIDIAN_MAX_RESULTS=50 # Default: 50 export OBSIDIAN_AUTO_REBUILD_INDEX=true # Default: true export OBSIDIAN_INCREMENTAL_UPDATE=true # Default: true export OBSIDIAN_WATCH_CHANGES=true # Default: true export OBSIDIAN_INCLUDE_CONTENT=true # Default: true export OBSIDIAN_USE_POLLING_OBSERVER=false # Default: false (set to true for Docker/network drives) ``` ### Running the Server ```bash obsidian-mcp-server ``` Or with command line arguments: ```bash obsidian-mcp-server --vault-path /path/to/vault --max-results 100 ``` ### Claude Desktop Integration #### Local Installation Add to your Claude Desktop configuration (`~/.config/claude_desktop_config.json`): ```json { "mcpServers": { "obsidian": { "command": "obsidian-mcp-server", "env": { "OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault" } } } } ``` #### Docker Integration For Docker, you'll need to create a wrapper script since Claude Desktop needs to communicate via stdio. Create a script like: ```bash #!/bin/bash # obsidian-mcp-docker.sh docker run -i --rm \ -e OBSIDIAN_VAULT_PATH=/vault \ -v /path/to/your/obsidian/vault:/vault:ro \ -v obsidian-index:/app/index \ obsidian-mcp-server ``` Then configure Claude Desktop to use this script: ```json { "mcpServers": { "obsidian": { "command": "/path/to/obsidian-mcp-docker.sh" } } } ``` ## Available Tools ### search_notes Search through your notes using full-text search. **Parameters:** - `query` (required): Search query string - `tags` (optional): Array of tags to filter by - `limit` (optional): Maximum results (default: 10) ### get_note Retrieve the full content of a specific note. **Parameters:** - `identifier` (required): Note path or title ### list_recent_notes Get recently modified notes. **Parameters:** - `limit` (optional): Maximum results (default: 10) ### get_all_tags List all available tags in the vault. ### search_by_tag Find notes with specific tags. **Parameters:** - `tags` (required): Array of tags to search for - `limit` (optional): Maximum results (default: 20) ### get_vault_stats Get statistics about the vault and search index. ## Architecture - **Parser** (`parser.py`): Parses markdown files and extracts frontmatter, tags, and wikilinks - **Search Index** (`search.py`): Whoosh-based full-text search with metadata support - **File Watcher** (`watcher.py`): Monitors vault for changes and updates index incrementally - **MCP Server** (`server.py`): Implements the Model Context Protocol interface - **Configuration** (`config.py`): Handles configuration from environment variables ## Development ### Running Tests ```bash # Run all tests pytest # Run with coverage pytest --cov=src/obsidian_mcp # Generate HTML coverage report pytest --cov=src/obsidian_mcp --cov-report=html # Run specific test file pytest tests/test_parser.py ``` ### Code Formatting ```bash black src/ isort src/ ``` ### Type Checking ```bash mypy src/ ``` ## Multi-Machine Usage **Perfect for users who sync vaults across multiple machines!** ### Intelligent Index Updates - **Incremental updates**: Only re-indexes files that have changed since last run - **Fast startup**: Skips full rebuild when vault hasn't changed - **Cross-machine sync**: Works with Obsidian Sync, iCloud, Dropbox, git, etc. ### How It Works 1. **First run**: Builds complete search index 2. **Subsequent runs**: Compares file modification times 3. **Only updates changed files**: Fast startup even with large vaults 4. **Handles file moves/renames**: Maintains search accuracy ### Configuration for Multi-Machine ```bash # Recommended settings for synced vaults export OBSIDIAN_INCREMENTAL_UPDATE=true # Enable smart updates export OBSIDIAN_AUTO_REBUILD_INDEX=true # Auto-rebuild if needed export OBSIDIAN_WATCH_CHANGES=true # Real-time updates while running ``` ## Troubleshooting ### Index Issues If search results seem outdated, the server automatically rebuilds the index on startup. You can also delete the index directory to force a complete rebuild. ### Multi-Machine Sync - Index files are local to each machine (not synced) - Vault content is synced between machines - Each machine maintains its own optimized index ### Permission Issues Ensure the server has read access to your Obsidian vault directory. ### Performance For large vaults (>10,000 notes), consider: - Reducing `max_results` for faster queries - Using more specific search terms - Filtering by tags to narrow results - Incremental updates are especially beneficial for large vaults ## License MIT License

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Bachmann1234/obsidianMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server