Obsidian Hybrid Search MCP
obsidian-hybrid-search
Local Obsidian vault search: agents find notes by meaning, words, tags and links through MCP, CLI or a plugin.
- 118 ★ on the repository
- Last commit
Extended access
Why this level
- The server reads every note in the vault and passes content to the agent.
- With remote embeddings, note text goes to an external API.
Install
- Works in
In your terminal, with SkillFoxx CLI
npx skillfoxx add mcp/obsidian-hybrid-searchDetects the agents on your machine, shows the access level and pins the version.
Other ways to install
Access and checks
How we reviewExtended accessThe tool runs code or makes network calls and only reads external data.
- The server reads every note in the vault and passes content to the agent.
- With remote embeddings, note text goes to an external API.
This is third-party code. Review the repository files before installing.
What it does
One retrieval engine ships three ways: an MCP server for agents, the `ohs` CLI and a plugin for Obsidian itself. Results fuse semantic search, BM25 full text, fuzzy title and alias matching, and filters for tags, folders and frontmatter. Every note in a response carries its outgoing links and backlinks. The MCP server exposes three tools: `search`, `read` and `reindex`. The index lives in SQLite with FTS5 and sqlite-vec, embeddings are computed locally with `Xenova/multilingual-e5-small` or taken from an OpenAI-compatible API if you prefer. Indexing is incremental and watches file edits.
Who it is for. Owners of large Obsidian vaults who want Claude Code or Claude Desktop to search their notes rather than whatever was pasted into the chat.
Good fit when
- An agent answers a question and must rely on your notes, with file references.
- Similar notes and graph relations are needed: outgoing and backlinks at a set depth.
- Notes are written in several languages and search should understand meaning.
- Several clients should share one long-lived indexing process over HTTP.
Not a fit when
- Notes must not be exposed to an agent, because the server reads vault content.
- Search over attachments such as PDFs is needed; notes are indexed, not those files.
- The vault is small and the built-in Obsidian search is enough.
Example request
Search my vault for notes on team retrospectives, show related notes two levels deep and read the two closest.MCP
- Transport
- stdio, http
- Authentication
- not required
Environment variables
OBSIDIAN_VAULT_PATHrequired- Absolute path to the Obsidian vault.
OBSIDIAN_PREFIX- Optional prefix for MCP tool names.
Limitations
The first run downloads a local model of about 117 MB, and `--rerank` fetches about 341 MB more. `OBSIDIAN_VAULT_PATH` is mandatory for MCP. In HTTP mode, `ohs serve` listens on `127.0.0.1:3939`; when binding beyond the local machine, list the allowed hosts, because `--allow-any-host` turns off Host-header protection. With remote embeddings, note text goes to the chosen API.
How to disable. Remove the server entry from `.mcp.json` or `claude_desktop_config.json`, stop `ohs serve`, uninstall the package and delete `.obsidian-hybrid-search.db` in the vault.
FAQ
How do I connect it to Claude Desktop or Claude Code?
Add an entry to `.mcp.json` or `claude_desktop_config.json` with the `npx` command and arguments `-y -p obsidian-hybrid-search@latest obsidian-hybrid-search-mcp`, and set `OBSIDIAN_VAULT_PATH` in `env`.
Is an API key required?
No. Embeddings are computed locally by default. A key is needed only if you choose a remote OpenAI-compatible API.
How do I prefix the tool names?
Set `OBSIDIAN_PREFIX`, for example `myvault_`, and the tools become `myvault_search` and `myvault_read`. That helps when several vaults are connected.
How do I share one index between clients?
Run `ohs serve`, then point the client at `http://127.0.0.1:3939/mcp`. Change the port with `--port`.
Which model computes embeddings?
`Xenova/multilingual-e5-small` by default, over 100 languages, about a 117 MB download. `--rerank` uses `gte-multilingual-reranker-base`.
Discussion
No questions or reviews yet.
Related
MCP serversObsidian MCP Server
obsidian-mcp-server
An MCP server for an Obsidian vault: read, search and precisely edit notes, sections, frontmatter and tags
An MCP server for an Obsidian vault via the Local REST API plugin: search, read, append and patch notes
Obsidian plugin with a REST API and a built-in MCP server: an agent reads, searches and surgically edits vault notes from Claude Code or Cursor
A local MCP server for safe read, search and edit of notes in an Obsidian vault, restricted to the vault root
A Rust MCP server for Obsidian vaults: search, link graph, note edits guarded by hash checks and rollback from an audit log.
A CLI that builds a local notes index with catalyst questions so the agent finds material faster than plain grep search
Comparison with similar tools
Cards that share the main search query, and how they differ.
| Tool | Official | Authentication | Repository stars | Main difference |
|---|---|---|---|---|
| Obsidian Hybrid Search (this card) | no | not required | 118 | |
| Local REST API for Obsidian | no | API key | 3,116 | exposes a REST API and MCP for reading and editing notes; Obsidian Hybrid Search specializes in ranked retrieval |
| obsidian-wiki | no | 3,687 | a skill set for maintaining a wiki; this is a search engine with an index and link graph |
README in short
The author reports tests on three sets: the Obsidian Help vault, Andy Matuschak's public notes and 22,419 LongMemEval-S notes. On the Help vault, OHS scores nDCG@5 of 0.733 against 0.659 for qmd.