Skip to main content
Glama
README.md
# Obsidian RAG — Semantic Note Search

Local semantic search for your Obsidian vault, powered by [BAAI/bge-m3](https://huggingface.co/BAAI/bge-m3) embeddings and ChromaDB.

## Features

- **Semantic search** — find notes by meaning, not just keywords
- **Markdown-aware chunking** — splits by heading hierarchy for better context
- **Apple Silicon acceleration** — MPS support for M-series Macs
- **Multiple interfaces** — CLI, REST API, and MCP server (for Claude/Cursor)
- **Multilingual** — full Chinese-English support via bge-m3

## Quick Start

```bash
# Install
pip install -e .

# Index your vault
export OBSIDIAN_VAULT_PATH="/path/to/your/vault"
python -m obsidian_rag index "$OBSIDIAN_VAULT_PATH" --full

# Search
python -m obsidian_rag search "your question"

# Start API server (for web UI or integrations)
python -m obsidian_rag api
```

## Architecture

```
Obsidian vault (.md files)
  → chunker.py: split by Markdown headings
  → embeddings.py: BAAI/bge-m3 (MPS accelerated)
  → ChromaDB: cosine similarity vector store
  → Interfaces:
      ├── CLI: python -m obsidian_rag search "query"
      ├── REST API: FastAPI on :8787
      └── MCP: Claude Code / Cursor integration
```

## Tech Stack

| Component | Choice |
|-----------|--------|
| Embedding model | BAAI/bge-m3 (1024d, multilingual) |
| Vector DB | ChromaDB (local, cosine space) |
| API | FastAPI + Uvicorn |
| AI integration | MCP (Model Context Protocol) |

## MCP Configuration

For Claude Code (`.mcp.json`):
```json
{
  "mcpServers": {
    "obsidian-rag": {
      "command": "python",
      "args": ["-m", "obsidian_rag.server"],
      "env": {
        "OBSIDIAN_VAULT_PATH": "/path/to/your/vault"
      }
    }
  }
}
```