Skip to main content

obsidian-mcp-search

Self-hosted MCP server that exposes embedding-powered semantic search + graph context over your Obsidian vault(s). Point it at a folder of .md files and it serves hybrid (BM25 + vector + alias) search to any MCP client — with a web dashboard to manage vaults and the embedding index.

  • No external index: walks a plain Obsidian vault directly
  • Local embeddings by default (intfloat/multilingual-e5-small, no API key); OpenAI/Azure optional
  • Returns the matching passage plus heading breadcrumb, tags, aliases, outbound links and backlinks
  • Multiple vaults from one server, each incrementally indexed and watched
  • Web admin dashboard at /admin

Install

pip / uvx

pip install obsidian-mcp-search
# Or install with the server extra (includes uvicorn + fastmcp):
pip install "obsidian-mcp-search[server]"
obsidian-mcp-search add-vault main /path/to/your/vault
obsidian-mcp-search serve

One-line installer (registers an auto-start service)

./install.sh --vault /path/to/your/vault
# macOS -> launchd, Linux -> systemd; prints dashboard URL + client config

Docker

echo "VAULT_PATH=/path/to/your/vault" > .env
docker compose up --build -d

Connect an MCP client

Add to your client config (e.g. Claude Desktop claude_desktop_config.json):

{
  "mcpServers": {
    "obsidian-search": {
      "url": "http://127.0.0.1:8848/mcp"
    }
  }
}

Tools exposed: search(query, k, vault, mode), list_vaults(), read_note(vault, path, section?), reindex(vault).

Dashboard

Open http://127.0.0.1:8848/admin to add/remove vaults, reindex, clear an index, switch the embedding model (re-embeds all vaults), and watch live status.

Remote dashboard note: The /admin dashboard is intended for localhost use (default: no token, works fully in a browser). Browsers cannot attach Authorization: Bearer headers to page navigations or htmx background requests, so if you need to access the dashboard remotely you must front the server with a reverse proxy that handles authentication (e.g. nginx auth_basic or an SSO proxy), or use an SSH tunnel (ssh -L 8848:127.0.0.1:8848 yourhost). The bearer token set via MCP_AUTH_TOKEN still fully protects the /mcp endpoint for all MCP clients that send the Authorization header correctly.

Configuration (env vars)

Var Default Meaning
OMCS_HOST 127.0.0.1 bind address (set 0.0.0.0 to expose)
OMCS_PORT 8848 port
MCP_AUTH_TOKEN (unset) bearer token; required when bound off-localhost
OMCS_EMBED_BACKEND local local (fastembed) or openai
OMCS_EMBED_MODEL intfloat/multilingual-e5-small embedding model
OMCS_EMBED_BASE_URL (unset) Azure/OpenAI-compatible base URL
OMCS_PREFER_SQLITE_VEC 0 1 to use sqlite-vec when loadable

Indexes live in ~/.cache/obsidian-mcp-search/<vault-hash>/; the vault registry in ~/.config/obsidian-mcp-search/config.toml. Your notes are never written to.

Security

Binds to localhost by default. To expose remotely, set MCP_AUTH_TOKEN and OMCS_HOST=0.0.0.0; the /mcp endpoint then requires Authorization: Bearer <token> from all MCP clients. See the Dashboard section above for notes on remote /admin access.

License

MIT.

Metadata

Release files for obsidian-mcp-search 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for obsidian-mcp-search 0.1.0
File Size Uploaded
obsidian_mcp_search-0.1.0.tar.gz 48.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for obsidian-mcp-search 0.1.0
File Interpreter ABI Platform
obsidian_mcp_search-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 93.5 kB

Release files / obsidian_mcp_search-0.1.0.tar.gz

Download URL obsidian_mcp_search-0.1.0.tar.gz
Size 48.1 kB
Tags Source
SHA-256 checksum
How to use checksums
e1eb9bf2eb25e2f0bd1d66bde7a3d90b5064188c057255cceefb4b528c2d0965
BLAKE2b-256 checksum
How to use checksums
c026a4d5237c9a4e3d495430048bf4359e1d42a00812c92d47b632eb2c622608
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 30, 2026.

Transparency log

Release files / obsidian_mcp_search-0.1.0-py3-none-any.whl

Download URL obsidian_mcp_search-0.1.0-py3-none-any.whl
Size 45.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
35b7c72fbb13a7fd49f4dc993077cdc5ac4874dd1878cbb2750dcdf81ad3c142
BLAKE2b-256 checksum
How to use checksums
8028b4ce9d964ae415c83243844b04280232f66f97386476b420e4770438e2f8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 30, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page