Search / io.github.sweir1/obsidian-brain
Obsidian Brain
L0· runs locallyObsidian MCP server: semantic search, knowledge graph, and vault editing. No plugin required.
v1.7.24 · active · repository · website · descriptor JSON · versions
Search / io.github.sweir1/obsidian-brain
L0· runs locallyObsidian MCP server: semantic search, knowledge graph, and vault editing. No plugin required.
v1.7.24 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"obsidian-brain": {
"command": "npx",
"args": [
"-y",
"[email protected]",
"server"
],
"env": {
"VAULT_PATH": "${VAULT_PATH}",
"EMBEDDING_PRESET": "english",
"EMBEDDING_PROVIDER": "transformers",
"OLLAMA_BASE_URL": "http://localhost:11434",
"OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS": "3000",
"OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS": "60000",
"OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS": "30000"
}
}
}
}claude mcp add obsidian-brain -e "VAULT_PATH=${VAULT_PATH}" -e "EMBEDDING_PRESET=english" -e "EMBEDDING_PROVIDER=transformers" -e "OLLAMA_BASE_URL=http://localhost:11434" -e "OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS=3000" -e "OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS=60000" -e "OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS=30000" -- npx -y [email protected] server[mcp_servers.obsidian-brain]
command = "npx"
args = ["-y", "[email protected]", "server"]
env = { "VAULT_PATH" = "${VAULT_PATH}", "EMBEDDING_PRESET" = "english", "EMBEDDING_PROVIDER" = "transformers", "OLLAMA_BASE_URL" = "http://localhost:11434", "OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS" = "3000", "OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS" = "60000", "OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS" = "30000" }
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"obsidian-brain": {
"type": "local",
"command": [
"npx",
"-y",
"[email protected]",
"server"
],
"enabled": true,
"environment": {
"VAULT_PATH": "{env:VAULT_PATH}",
"EMBEDDING_PRESET": "english",
"EMBEDDING_PROVIDER": "transformers",
"OLLAMA_BASE_URL": "http://localhost:11434",
"OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS": "3000",
"OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS": "60000",
"OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS": "30000"
}
}
}
}{
"mcpServers": {
"obsidian-brain": {
"command": "npx",
"args": [
"-y",
"[email protected]",
"server"
],
"env": {
"VAULT_PATH": "${VAULT_PATH}",
"EMBEDDING_PRESET": "english",
"EMBEDDING_PROVIDER": "transformers",
"OLLAMA_BASE_URL": "http://localhost:11434",
"OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS": "3000",
"OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS": "60000",
"OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS": "30000"
}
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=obsidian-brain&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIm9ic2lkaWFuLWJyYWluQDEuNy4yNCIsInNlcnZlciJdLCJlbnYiOnsiVkFVTFRfUEFUSCI6IiR7VkFVTFRfUEFUSH0iLCJFTUJFRERJTkdfUFJFU0VUIjoiZW5nbGlzaCIsIkVNQkVERElOR19QUk9WSURFUiI6InRyYW5zZm9ybWVycyIsIk9MTEFNQV9CQVNFX1VSTCI6Imh0dHA6Ly9sb2NhbGhvc3Q6MTE0MzQiLCJPQlNJRElBTl9CUkFJTl9XQVRDSF9ERUJPVU5DRV9NUyI6IjMwMDAiLCJPQlNJRElBTl9CUkFJTl9DT01NVU5JVFlfREVCT1VOQ0VfTVMiOiI2MDAwMCIsIk9CU0lESUFOX0JSQUlOX1RPT0xfVElNRU9VVF9NUyI6IjMwMDAwIn19"
}{
"servers": {
"obsidian-brain": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"[email protected]",
"server"
],
"env": {
"VAULT_PATH": "${VAULT_PATH}",
"EMBEDDING_PRESET": "english",
"EMBEDDING_PROVIDER": "transformers",
"OLLAMA_BASE_URL": "http://localhost:11434",
"OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS": "3000",
"OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS": "60000",
"OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS": "30000"
}
}
}
}{
"mcpServers": {
"obsidian-brain": {
"command": "npx",
"args": [
"-y",
"[email protected]",
"server"
],
"env": {
"VAULT_PATH": "${VAULT_PATH}",
"EMBEDDING_PRESET": "english",
"EMBEDDING_PROVIDER": "transformers",
"OLLAMA_BASE_URL": "http://localhost:11434",
"OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS": "3000",
"OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS": "60000",
"OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS": "30000"
}
}
}
}extensions:
"obsidian-brain":
enabled: true
name: "obsidian-brain"
type: stdio
cmd: "npx"
args:
- "-y"
- "[email protected]"
- "server"
envs:
"VAULT_PATH": "${VAULT_PATH}"
"EMBEDDING_PRESET": "english"
"EMBEDDING_PROVIDER": "transformers"
"OLLAMA_BASE_URL": "http://localhost:11434"
"OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS": "3000"
"OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS": "60000"
"OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS": "30000"
timeout: 300
This is a local package: the command runs on your machine.
Not scored: fewer than three checks apply, usually because no remote answered a credential-free probe or the server is a local package.
protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)auth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptions, tools.description_length, tools.schemas, tools.annotations, tools.directory_hints, tools.token_cost, tools.api_dumptool list unknown (behind auth, not probed, or empty)stability.changes, stability.rug_pulltool list unknowndeps.known_vulns1 advisory to act on (malicious, or rated high or critical with a fix available): GHSA-wq5f-xc86-pv6w in [email protected] (indirect, fixed in 0.35.5); 1 more of lower severity or without a fixdeps.mcp_sdk_version@modelcontextprotocol/sdk 1.30.1 has 1 known advisory (GHSA-6qxp-vccf-f47h); update @modelcontextprotocol/sdk to 1.31.0 or laterdeps.resolvable[email protected] resolved: 229 packagesNo tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +namespace-matches-repo +website ~liveness-unmeasured ~updated-156d-ago -multi-version-spam(53)
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
[email protected] npm228 dependencies, resolved · MCP SDK @modelcontextprotocol/sdk 1.30.1 · advisories checked 2026-10-19
| advisory | severity | package | fixed in |
|---|---|---|---|
| GHSA-6qxp-vccf-f47hMCP TypeScript SDK: OAuth client could send credentials to an authorization server chosen by the MCP server | high | @modelcontextprotocol/[email protected]MCP SDK, direct | fixed in 1.31.0 |
| GHSA-wq5f-xc86-pv6wsharp : Vulnerability in librsvg dependency CVE-2026-96889 | high | [email protected]indirect | fixed in 0.35.5 |
| GHSA-hp3w-g68c-fv3csprintf-js vulnerable to denial of service through unbounded precision specifiers | moderate | [email protected]indirect | no fix yet |
Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.
| package | registry | version | runtime | secrets |
|---|---|---|---|---|
obsidian-brain | npm | 1.7.24 | npx |
No tools observed. Local packages are never executed by the registry.
Schemas: list_tools.
{
"name": "io.github.sweir1/obsidian-brain",
"title": "Obsidian Brain",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"version": "1.7.24",
"packages": [
{
"version": "1.7.24",
"transport": {
"type": "stdio"
},
"identifier": "obsidian-brain",
"runtimeHint": "npx",
"registryType": "npm",
"packageArguments": [
{
"type": "positional",
"value": "server"
}
],
"runtimeArguments": [
{
"type": "positional",
"value": "-y"
}
],
"environmentVariables": [
{
"name": "VAULT_PATH",
"format": "string",
"isRequired": true,
"description": "Absolute path to your Obsidian vault (or any folder of .md files)."
},
{
"name": "DATA_DIR",
"format": "string",
"description": "Where to store the SQLite index + embedding cache. Defaults to $XDG_DATA_HOME/obsidian-brain or ~/.local/share/obsidian-brain."
},
{
"name": "EMBEDDING_PRESET",
"format": "string",
"choices": [
"english",
"english-fast",
"english-quality",
"multilingual",
"multilingual-quality",
"multilingual-ollama"
],
"default": "english",
"description": "Preset name: english (default, bge-small-en-v1.5), english-fast, english-quality, multilingual, multilingual-quality, multilingual-ollama. Ignored when EMBEDDING_MODEL is set."
},
{
"name": "EMBEDDING_MODEL",
"format": "string",
"description": "Power-user override: any transformers.js checkpoint or Ollama model id. Takes precedence over EMBEDDING_PRESET. Switching auto-reindexes."
},
{
"name": "EMBEDDING_PROVIDER",
"format": "string",
"choices": [
"transformers",
"ollama"
],
"default": "transformers",
"description": "Embedding backend. 'transformers' (local, default) or 'ollama' (requires a running Ollama server)."
},
{
"name": "OLLAMA_BASE_URL",
"format": "string",
"default": "http://localhost:11434",
"description": "Base URL of a local Ollama server. Only used when EMBEDDING_PROVIDER=ollama."
},
{
"name": "OLLAMA_EMBEDDING_DIM",
"format": "number",
"description": "Override the embedding dimensionality when EMBEDDING_PROVIDER=ollama. If unset, the server probes the model on startup."
},
{
"name": "OLLAMA_NUM_CTX",
"description": "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://github.com/ollama/ollama/issues/14259. Ollama's own default is 2048 which truncates for any model trained on a larger context. See also https://github.com/ollama/ollama/issues/7008. Fallback when both env is unset AND /api/show is unreachable: 8192."
},
{
"name": "OBSIDIAN_BRAIN_OLLAMA_AUTO_PULL",
"format": "string",
"choices": [
"",
"0",
"1"
],
"description": "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 actionable error path (`HTTP 404 — try: ollama pull <model>`)."
},
{
"name": "OBSIDIAN_BRAIN_OLLAMA_BYOM_AUTO_PULL",
"format": "string",
"choices": [
"",
"0",
"1"
],
"description": "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 of arbitrary user-named artifacts. Preset-known models (via EMBEDDING_PRESET) and bare model ids in the official library (e.g. `qwen3-embedding:0.6b`, `library/llama3:8b`) continue to auto-pull by default per the existing OBSIDIAN_BRAIN_OLLAMA_AUTO_PULL behavior."
},
{
"name": "OBSIDIAN_BRAIN_NO_WATCH",
"format": "string",
"description": "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)."
},
{
"name": "OBSIDIAN_BRAIN_NO_CATCHUP",
"format": "string",
"description": "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 `enqueueBackgroundReindex` walk."
},
{
"name": "OBSIDIAN_BRAIN_WATCH_DEBOUNCE_MS",
"format": "number",
"default": "3000",
"description": "Per-file reindex debounce for the live watcher, in milliseconds."
},
{
"name": "OBSIDIAN_BRAIN_COMMUNITY_DEBOUNCE_MS",
"format": "number",
"default": "60000",
"description": "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."
},
{
"name": "OBSIDIAN_BRAIN_TOOL_TIMEOUT_MS",
"format": "number",
"default": "30000",
"description": "Per-tool-call timeout in milliseconds. Tools exceeding this return an MCP error instead of hanging."
},
{
"name": "OBSIDIAN_BRAIN_MAX_CHUNK_TOKENS",
"format": "number",
"description": "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."
},
{
"name": "OBSIDIAN_BRAIN_CONFIG_DIR",
"format": "filepath",
"description": "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 files survive `npm update obsidian-brain` because they live outside the package."
},
{
"name": "OBSIDIAN_BRAIN_DEBUG",
"format": "string",
"choices": [
"",
"1"
],
"description": "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 diagnose silent-crash failure modes."
},
{
"name": "OBSIDIAN_BRAIN_LOG_FORMAT",
"format": "string",
"choices": [
"",
"ndjson"
],
"description": "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."
}
]
}
],
"repository": {
"url": "https://github.com/sweir1/obsidian-brain",
"source": "github"
},
"websiteUrl": "https://sweir1.github.io/obsidian-brain/",
"description": "Obsidian MCP server: semantic search, knowledge graph, and vault editing. No plugin required."
}