Skip to main content
Glama
lion9

RAG Obsidian MCP Server

by lion9
README.md
# RAG Obsidian MCP Server

Semantic search over your Obsidian vault via an MCP server. Uses ChromaDB for vector storage and `all-MiniLM-L6-v2` for embeddings.

## Prerequisites

- Python 3.13+
- [uv](https://github.com/astral-sh/uv) (recommended) or pip

## Setup

```bash
uv sync
```

Edit `config.yaml` to point to your vault:

```yaml
vault_path: "/path/to/your/Obsidian/vault"
chroma_db_path: "./data/chroma_db"
embedding_model: "all-MiniLM-L6-v2"
collection_name: "obsidian_vault"
chunk_size: 1000
chunk_overlap: 100
top_k_default: 5
```

## Indexing

### Initial index (first run)

```bash
uv run python index.py
```

This walks all `.md` files in the vault, embeds them in chunks, and stores them in ChromaDB.

### Incremental index (after adding or editing notes)

Run the same command — it skips files whose modification time hasn't changed:

```bash
uv run python index.py
```

Only new or modified notes are re-indexed. Deleted notes are removed from the database automatically.

### Force full re-index

To re-embed everything from scratch (e.g. after changing `chunk_size` or `embedding_model`):

```bash
uv run python index.py --force
```

### Override vault path

```bash
uv run python index.py --vault "/path/to/other/vault"
```

## Starting the MCP Server

Run the server in stdio mode (the transport Claude Code and other MCP clients expect):

```bash
uv run python server.py
```

### Registering with Claude Code

Add the server to your Claude Code MCP config (`.claude/settings.json` or global settings):

```json
{
  "mcpServers": {
    "obsidian-vault": {
      "command": "uv",
      "args": ["run", "python", "server.py"],
      "cwd": "/path/to/RAG_Obsidian"
    }
  }
}
```

## Available MCP Tools

| Tool | Description |
|------|-------------|
| `search_notes` | Semantic search across indexed notes. Returns top-k chunks with relevance scores and `obsidian://` deep links. |
| `read_note` | Read the full content of a note by its relative path (e.g. `Projects/MyProject.md`). |
| `list_notes` | List all notes in the vault or a subfolder. |