brain-mcp
A private, local AI second brain for Markdown notes, providing hybrid search and read/write tools for MCP-compatible AI clients like Claude and Cursor.
README
brain-mcp
A local, private, free AI "second brain". Point it at any folder of Markdown notes (built for Obsidian vaults, works on any Markdown folder) and it becomes a searchable knowledge base for any MCP-compatible AI client — Claude Code, Claude Desktop, Cursor, etc. Hybrid search (semantic + keyword), incremental self-healing indexing, read/write tools. No API keys. No cloud. Nothing leaves your machine.
Quick start
- Clone this repo.
- Open the folder in Claude Code.
- Say "set up the brain" (or run
/setup-brain).
That's it. The agent reads SETUP.md and does everything: installs deps, ensures
Ollama, auto-detects your Obsidian vault, registers the MCP server user-scoped,
indexes, and verifies.
Manual install (fallback)
python -m venv .venv
# Windows: .venv\Scripts\python -m pip install -r requirements.txt
# macOS/Linux: .venv/bin/pip install -r requirements.txt
# Install Ollama from https://ollama.com, then:
ollama pull nomic-embed-text
python brain_cli.py setup
How it works
Markdown notes folder (the "vault")
│
├─ chunk_file() ── split by H1/H2 headings. Frontmatter + heading prefixed
│ onto every chunk so each is self-contextual.
│ CHUNK_CHARS=1600, OVERLAP_CHARS=200. sha256 per chunk.
├─ ollama_embed() ── batches of 32 → nomic-embed-text vectors
├─ Chroma (cosine HNSW) ← embeddings + {path, heading}
└─ SQLite: chunks + chunks_fts (FTS5 porter unicode61), trigger-synced
semantic_search (Chroma) and keyword_search (FTS5) are merged with
Reciprocal Rank Fusion (k=60). hybrid_search is the primary tool.
Indexing is incremental (per-chunk sha256), self-healing (startup mtime scan,
background reindex on writes, orphan cleanup), and concurrency-safe.
MCP tools
| Tool | Purpose |
|---|---|
hybrid_search_tool(query, top_k=5) |
Primary — RRF-merged semantic + keyword search |
semantic_search_tool(query, top_k=5) |
Vector similarity only |
keyword_search_tool(query, top_k=10) |
FTS5 keyword only |
read_note_tool(path) |
Read a note's full content |
list_recent_tool(days=7) |
Recently modified notes |
append_to_note_tool(path, content) |
Append to an existing note |
create_note_tool(path, content) |
Create a new note |
save_conversation_tool(title, gist) |
Save a conversation to 06 Conversations/ |
ingest_file_tool(source) |
Ingest a URL / PDF / document as a reference note |
reindex_tool(path=None) |
Reindex one file or the whole vault |
Where data lives
The brain's own storage is decoupled from your notes. Index, database,
config, and logs live in ~/.brain/ (override with the BRAIN_HOME env var) —
never inside your notes folder.
Point at a different vault:
brain config --vault /path/to/notes # persisted to ~/.brain/config.json
# or, ephemeral:
BRAIN_VAULT=/path/to/notes brain index
Vault resolution order: BRAIN_VAULT env → ~/.brain/config.json → Obsidian
auto-detect → error.
Use it with other AI tools
setup registers the brain for Claude, then offers to also register it for
Codex, Gemini CLI, Cursor, and Windsurf. Do it any time:
brain mcp # interactive picker
brain mcp --client codex --client cursor # non-interactive
It merges into each tool's MCP config without disturbing your other servers.
Performance
The embedding model is kept resident (keep_alive=-1 on every call and
OLLAMA_KEEP_ALIVE=-1 persisted + passed to the MCP server). Without this,
Ollama unloads the model after ~4 min idle and the next tool call stalls 10–30s
on a cold reload. brain setup configures this automatically. Warm embedding
latency is ~38ms vs ~2.2s cold. (size_vram=0 in ollama ps is a known
reporting bug — judge by latency, not that field.)
Privacy
Everything runs locally. Embeddings are computed by Ollama on your machine. Chroma and SQLite are local files. No API keys, no telemetry, no cloud fallback. Nothing leaves your computer.
License
MIT — see LICENSE.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.