Provides semantic search capabilities across Obsidian vaults using vector embeddings, with support for multiple vault configurations, real-time file watching, and automatic index updates
mcp-obsidian
An MCP (Model Context Protocol) server for semantic search in Obsidian vaults using embedded ChromaDB vector storage. I intend on keeping this fairly minimal to keep usage with Claude simple.
Features
๐ Search with semantic, exact phrase, and temporal filtering
๐ Google-style quotes for exact phrase matching (
"exact phrase"
and-"exclude"
)๐ Date filtering to find notes by modification time
๐ Support for multiple vault configurations
๐ Real-time monitoring with automatic re-indexing
๐ Fast, incremental updates with ChromaDB backend
๐ Thread-safe operations for concurrent access
Prerequisites
Python 3.10 or higher
uv package manager
Installation
Install uv (if not already installed)
Install mcp-obsidian
Option 1: Install as a uv tool (Recommended)
Option 2: Install from source
Clone the repository:
Create and activate a virtual environment with uv:
Install the package in development mode:
This will install all dependencies including:
questionary (interactive CLI)
chromadb (vector database)
langchain-text-splitters (document chunking)
fastmcp (MCP server framework)
watchdog (file system monitoring)
Configuration
Initial Setup
Configure your Obsidian vaults:
This interactive command will:
Prompt you to select vault directories
Name each vault for easy reference
Store configuration in
~/.mcp-obsidian/config.json
Manual Configuration
You can also manually edit ~/.mcp-obsidian/config.json
:
Usage
As an MCP Server
Run the server for use with MCP-compatible clients:
The server exposes the following tools:
search
: Unified search with semantic, exact phrase, and temporal filteringreindex_vaults
: Manually trigger a re-index of all configured vaults
The vectors are stored along with the following metadata, which can be used for filtering searches:
vault
: The name of the vault containing the documenttitle
: The filename without extensionsource
: The relative path from the vault rootmodified
: Unix timestamp of the file's last modification timefile_path
: The absolute path to the source filestart_line
/end_line
: Line numbers for the chunk within the original documentchunk_index
/total_chunks
: Position of this chunk within the documentfile_hash
: MD5 hash of the file content for change detection
CLI Usage
Search directly from the command line:
Integration with Claude Desktop
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json
on macOS):
or alternatively use to configuration tool to set it up automatically:
How It Works
Indexing: The server reads all markdown files from configured vaults and creates vector embeddings using ChromaDB
Chunking: Large documents are split into smaller chunks using recursive character splitting for better search granularity
Search: Queries are converted to embeddings and matched against the document database using cosine similarity
File Watching: The server monitors vault directories for changes and automatically updates the index
License
MIT License
This server cannot be installed
local-only server
The server can only run on the client's local machine because it depends on local resources.
Enables semantic search across Obsidian vaults using vector embeddings and ChromaDB. Supports multiple vaults with real-time indexing and provides both MCP server and CLI interfaces for natural language querying of notes.