Obsidian MCP server: semantic search, knowledge graph, and vault editing. No plugin required.
Connect Runs on your machine
claude mcp add obsidian-brain -e VAULT_PATH=<VAULT_PATH> -e DATA_DIR=<DATA_DIR> -e EMBEDDING_PRESET=<EMBEDDING_PRESET> -e EMBEDDING_MODEL=<EMBEDDING_MODEL> -e EMBEDDING_PROVIDER=<EMBEDDING_PROVIDER> -e OLLAMA_BASE_URL=<OLLAMA_BASE_URL> -e OLLAMA_EMBEDDING_DIM=<OLLAMA_EMBEDDING_DIM> -e OLLAMA_NUM_CTX=<OLLAMA_NUM_CTX> -e OBSIDIAN_BRAIN_OLLAMA_AUTO_PULL=<OBSIDIAN_BRAIN_OLLAMA_AUTO_PULL> -e OBSIDIAN_BRAIN_OLLAMA_BYOM_AUTO_PULL=<OBSIDIAN_BRAIN_OLLAMA_BYOM_AUTO_PULL> -e OBSIDIAN_BRAIN_NO_WATCH=<OBSIDIAN_BRAIN_NO_WATCH> -e OBSIDIAN_BRAIN_NO_CATCHUP=<OBSIDIAN_BRAIN_NO_CATCHUP> -e OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS=<OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS> -e OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS=<OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS> -e OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS=<OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS> -e OBSIDIAN_BRAIN_MAX_CHUNK_TOKENS=<OBSIDIAN_BRAIN_MAX_CHUNK_TOKENS> -e OBSIDIAN_BRAIN_CONFIG_DIR=<OBSIDIAN_BRAIN_CONFIG_DIR> -e OBSIDIAN_BRAIN_DEBUG=<OBSIDIAN_BRAIN_DEBUG> -e OBSIDIAN_BRAIN_LOG_FORMAT=<OBSIDIAN_BRAIN_LOG_FORMAT> -- npx -y [email protected]
{
"mcpServers": {
"obsidian-brain": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"VAULT_PATH": "<VAULT_PATH>",
"DATA_DIR": "<DATA_DIR>",
"EMBEDDING_PRESET": "<EMBEDDING_PRESET>",
"EMBEDDING_MODEL": "<EMBEDDING_MODEL>",
"EMBEDDING_PROVIDER": "<EMBEDDING_PROVIDER>",
"OLLAMA_BASE_URL": "<OLLAMA_BASE_URL>",
"OLLAMA_EMBEDDING_DIM": "<OLLAMA_EMBEDDING_DIM>",
"OLLAMA_NUM_CTX": "<OLLAMA_NUM_CTX>",
"OBSIDIAN_BRAIN_OLLAMA_AUTO_PULL": "<OBSIDIAN_BRAIN_OLLAMA_AUTO_PULL>",
"OBSIDIAN_BRAIN_OLLAMA_BYOM_AUTO_PULL": "<OBSIDIAN_BRAIN_OLLAMA_BYOM_AUTO_PULL>",
"OBSIDIAN_BRAIN_NO_WATCH": "<OBSIDIAN_BRAIN_NO_WATCH>",
"OBSIDIAN_BRAIN_NO_CATCHUP": "<OBSIDIAN_BRAIN_NO_CATCHUP>",
"OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS": "<OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS>",
"OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS": "<OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS>",
"OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS": "<OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS>",
"OBSIDIAN_BRAIN_MAX_CHUNK_TOKENS": "<OBSIDIAN_BRAIN_MAX_CHUNK_TOKENS>",
"OBSIDIAN_BRAIN_CONFIG_DIR": "<OBSIDIAN_BRAIN_CONFIG_DIR>",
"OBSIDIAN_BRAIN_DEBUG": "<OBSIDIAN_BRAIN_DEBUG>",
"OBSIDIAN_BRAIN_LOG_FORMAT": "<OBSIDIAN_BRAIN_LOG_FORMAT>"
}
}
}
}
{
"mcpServers": {
"obsidian-brain": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"VAULT_PATH": "<VAULT_PATH>",
"DATA_DIR": "<DATA_DIR>",
"EMBEDDING_PRESET": "<EMBEDDING_PRESET>",
"EMBEDDING_MODEL": "<EMBEDDING_MODEL>",
"EMBEDDING_PROVIDER": "<EMBEDDING_PROVIDER>",
"OLLAMA_BASE_URL": "<OLLAMA_BASE_URL>",
"OLLAMA_EMBEDDING_DIM": "<OLLAMA_EMBEDDING_DIM>",
"OLLAMA_NUM_CTX": "<OLLAMA_NUM_CTX>",
"OBSIDIAN_BRAIN_OLLAMA_AUTO_PULL": "<OBSIDIAN_BRAIN_OLLAMA_AUTO_PULL>",
"OBSIDIAN_BRAIN_OLLAMA_BYOM_AUTO_PULL": "<OBSIDIAN_BRAIN_OLLAMA_BYOM_AUTO_PULL>",
"OBSIDIAN_BRAIN_NO_WATCH": "<OBSIDIAN_BRAIN_NO_WATCH>",
"OBSIDIAN_BRAIN_NO_CATCHUP": "<OBSIDIAN_BRAIN_NO_CATCHUP>",
"OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS": "<OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS>",
"OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS": "<OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS>",
"OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS": "<OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS>",
"OBSIDIAN_BRAIN_MAX_CHUNK_TOKENS": "<OBSIDIAN_BRAIN_MAX_CHUNK_TOKENS>",
"OBSIDIAN_BRAIN_CONFIG_DIR": "<OBSIDIAN_BRAIN_CONFIG_DIR>",
"OBSIDIAN_BRAIN_DEBUG": "<OBSIDIAN_BRAIN_DEBUG>",
"OBSIDIAN_BRAIN_LOG_FORMAT": "<OBSIDIAN_BRAIN_LOG_FORMAT>"
}
}
}
}
{
"servers": {
"obsidian-brain": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"VAULT_PATH": "<VAULT_PATH>",
"DATA_DIR": "<DATA_DIR>",
"EMBEDDING_PRESET": "<EMBEDDING_PRESET>",
"EMBEDDING_MODEL": "<EMBEDDING_MODEL>",
"EMBEDDING_PROVIDER": "<EMBEDDING_PROVIDER>",
"OLLAMA_BASE_URL": "<OLLAMA_BASE_URL>",
"OLLAMA_EMBEDDING_DIM": "<OLLAMA_EMBEDDING_DIM>",
"OLLAMA_NUM_CTX": "<OLLAMA_NUM_CTX>",
"OBSIDIAN_BRAIN_OLLAMA_AUTO_PULL": "<OBSIDIAN_BRAIN_OLLAMA_AUTO_PULL>",
"OBSIDIAN_BRAIN_OLLAMA_BYOM_AUTO_PULL": "<OBSIDIAN_BRAIN_OLLAMA_BYOM_AUTO_PULL>",
"OBSIDIAN_BRAIN_NO_WATCH": "<OBSIDIAN_BRAIN_NO_WATCH>",
"OBSIDIAN_BRAIN_NO_CATCHUP": "<OBSIDIAN_BRAIN_NO_CATCHUP>",
"OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS": "<OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS>",
"OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS": "<OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS>",
"OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS": "<OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS>",
"OBSIDIAN_BRAIN_MAX_CHUNK_TOKENS": "<OBSIDIAN_BRAIN_MAX_CHUNK_TOKENS>",
"OBSIDIAN_BRAIN_CONFIG_DIR": "<OBSIDIAN_BRAIN_CONFIG_DIR>",
"OBSIDIAN_BRAIN_DEBUG": "<OBSIDIAN_BRAIN_DEBUG>",
"OBSIDIAN_BRAIN_LOG_FORMAT": "<OBSIDIAN_BRAIN_LOG_FORMAT>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
VAULT_PATHRequired | Absolute path to your Obsidian vault (or any folder of .md files). |
DATA_DIROptional | Where to store the SQLite index + embedding cache. Defaults to $XDG_DATA_HOME/obsidian-brain or ~/.local/share/obsidian-brain. |
EMBEDDING_PRESETOptional | Preset name: english (default, bge-small-en-v1.5), english-fast, english-quality, multilingual, multilingual-quality, multilingual-ollama. Ignored when EMBEDDING_MODEL is set. |
EMBEDDING_MODELOptional | Power-user override: any transformers.js checkpoint or Ollama model id. Takes precedence over EMBEDDING_PRESET. Switching auto-reindexes. |
EMBEDDING_PROVIDEROptional | Embedding backend. 'transformers' (local, default) or 'ollama' (requires a running Ollama server). |
OLLAMA_BASE_URLOptional | Base URL of a local Ollama server. Only used when EMBEDDING_PROVIDER=ollama. |
OLLAMA_EMBEDDING_DIMOptional | Override the embedding dimensionality when EMBEDDING_PROVIDER=ollama. If unset, the server probes the model on startup. |
OLLAMA_NUM_CTXOptional | Override Ollama's num_ctx for embed requests. Leave UNSET to let obsidian-brain auto-detect via `/api/show`'s `context_length` (e.g. nomic-embed-text=2048, bge-m3=8192, qwen3-embedding:0.6b=32 768). Setting this manually imposes a hard cap and may silently truncate longer inputs — see https://githu… |
OBSIDIAN_BRAIN_OLLAMA_AUTO_PULLOptional | Auto-pull the configured Ollama model when /api/show returns 404 (model not present). Default ON — choosing an Ollama-backed preset is implicit consent to download its model. Streams /api/pull progress to stderr. Set to '0' to disable auto-pull entirely (master kill-switch) and fall back to the act… |
OBSIDIAN_BRAIN_OLLAMA_BYOM_AUTO_PULLOptional | Opt-in to auto-pull for BYOM (custom EMBEDDING_MODEL) Ollama models OUTSIDE Ollama's official `library/` namespace. Default OFF — third-party models (e.g. `user/custom-fork`, `myregistry.com/team/model`) require this env var to be set to `1` before they will auto-pull, to prevent silent downloads o… |
OBSIDIAN_BRAIN_NO_WATCHOptional | Set to '1' to disable the live chokidar file watcher. Useful on SMB/NFS vaults where FSEvents/inotify don't fire reliably — fall back to running `obsidian-brain index` on a schedule (launchd/systemd). |
OBSIDIAN_BRAIN_NO_CATCHUPOptional | Set to '1' to skip the startup catchup reindex pass that picks up edits made while the server was down. The live file watcher still starts (via OBSIDIAN_BRAIN_NO_WATCH=1 to disable that separately), and first-time indexing on an empty DB is unaffected — this knob only governs the post-restart `enqu… |
OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MSOptional | Per-file reindex debounce for the live watcher, in milliseconds. |
OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MSOptional | Graph-wide community-detection (Louvain) debounce for the live watcher, in milliseconds. Louvain is the only expensive op — batching it prevents per-edit CPU spikes. |
OBSIDIAN_BRAIN_TOOL_TIMEOUT_MSOptional | Per-tool-call timeout in milliseconds. Tools exceeding this return an MCP error instead of hanging. |
OBSIDIAN_BRAIN_MAX_CHUNK_TOKENSOptional | Override the adaptive chunk-size budget (in tokens). When set, this beats the capacity probed from the model's tokenizer or Ollama /api/show. Use for debugging or for models with stale tokenizer configs. |
OBSIDIAN_BRAIN_CONFIG_DIROptional | Override the per-user config directory where obsidian-brain stores model overrides (`model-overrides.json`) and the user-fetched seed (`seed-models.json`). Default is `$XDG_CONFIG_HOME/obsidian-brain` on macOS/Linux (or `~/.config/obsidian-brain`) and `%APPDATA%/obsidian-brain` on Windows. Both fil… |
OBSIDIAN_BRAIN_DEBUGOptional | Set to "1" to print a verbose synchronous startup trace to stderr — every preflight, createContext, server.connect, and shutdown step is logged with a monotonic timestamp. The LAST line before any silent failure tells you exactly which step the server reached. No-op when unset (no overhead). Use to… |
OBSIDIAN_BRAIN_LOG_FORMATOptional | Set to 'ndjson' for one-JSON-object-per-line stderr output (timestamp + level + message + structured fields). Default is human-readable plain text (`obsidian-brain: <message>`). Useful for piping logs into aggregators (Datadog, Loki, Vector, journald) that index structured fields. |
Details
| Package | [email protected] (NPM, stdio) |
| First published | 16 May 2026 |
| Last updated | 16 May 2026 |
| Registry name | io.github.sweir1/obsidian-brain |
More productivity servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
