ต้นแบบ · เว็บนี้เป็นต้นแบบ แสดงข้อมูลจริง 100 ตัวจากทะเบียนทางการ ยังไม่ครบทุกตัว
PopNx MCPที่รวม MCP สำหรับคนใช้ AI · อธิบายเป็นภาษาคน

Obsidian Hybrid Search

โดย flowing-abyssรุ่น 0.17.4i★ 118iรันบนเครื่อง
ชื่อใน registryio.github.flowing-abyss/obsidian-hybrid-search

ภาพรวม

คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)

Search Obsidian vaults with hybrid full-text, fuzzy, semantic, and graph retrieval.

สามเสาของ PopNx MCP

สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน

ใช้ทำอะไรได้

ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry

  • การเชื่อมต่อ: รันบนเครื่อง
  • ช่องทาง (transport): stdio
  • หมวด: ค้นข้อมูลและความจำของ AI
  • ต้องใส่ค่าเหล่านี้: OBSIDIAN_VAULT_PATH, OPENAI_API_KEY

ติดตั้ง

เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง

ต้องเตรียมก่อน

  • npmติดตั้ง Node.js (มีคำสั่ง npx) ในเครื่อง

เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json

{
  "mcpServers": {
    "obsidian-hybrid-search": {
      "command": "npx",
      "args": [
        "-y",
        "obsidian-hybrid-search",
        "mcp"
      ],
      "env": {
        "OBSIDIAN_VAULT_PATH": "ใส่ค่าของคุณ",
        "OBSIDIAN_PREFIX": "ใส่ค่าของคุณ",
        "OBSIDIAN_IGNORE_PATTERNS": "ใส่ค่าของคุณ",
        "OBSIDIAN_RESPECT_GITIGNORE": "ใส่ค่าของคุณ",
        "OBSIDIAN_INCLUDE_PATTERNS": "ใส่ค่าของคุณ",
        "OBSIDIAN_CONTENT_IGNORE_PATTERNS": "ใส่ค่าของคุณ",
        "OPENAI_API_KEY": "ใส่ค่าของคุณ",
        "OPENAI_BASE_URL": "ใส่ค่าของคุณ",
        "OPENAI_EMBEDDING_MODEL": "ใส่ค่าของคุณ",
        "LOCAL_EMBEDDING_MODEL": "ใส่ค่าของคุณ",
        "RERANKER_MODEL": "ใส่ค่าของคุณ"
      }
    }
  }
}

พิมพ์คำสั่งนี้ใน Terminal

claude mcp add obsidian-hybrid-search --env OBSIDIAN_VAULT_PATH='ใส่ค่าของคุณ' --env OBSIDIAN_PREFIX='ใส่ค่าของคุณ' --env OBSIDIAN_IGNORE_PATTERNS='ใส่ค่าของคุณ' --env OBSIDIAN_RESPECT_GITIGNORE='ใส่ค่าของคุณ' --env OBSIDIAN_INCLUDE_PATTERNS='ใส่ค่าของคุณ' --env OBSIDIAN_CONTENT_IGNORE_PATTERNS='ใส่ค่าของคุณ' --env OPENAI_API_KEY='ใส่ค่าของคุณ' --env OPENAI_BASE_URL='ใส่ค่าของคุณ' --env OPENAI_EMBEDDING_MODEL='ใส่ค่าของคุณ' --env LOCAL_EMBEDDING_MODEL='ใส่ค่าของคุณ' --env RERANKER_MODEL='ใส่ค่าของคุณ' -- npx -y obsidian-hybrid-search mcp

วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json

{
  "mcpServers": {
    "obsidian-hybrid-search": {
      "command": "npx",
      "args": [
        "-y",
        "obsidian-hybrid-search",
        "mcp"
      ],
      "env": {
        "OBSIDIAN_VAULT_PATH": "ใส่ค่าของคุณ",
        "OBSIDIAN_PREFIX": "ใส่ค่าของคุณ",
        "OBSIDIAN_IGNORE_PATTERNS": "ใส่ค่าของคุณ",
        "OBSIDIAN_RESPECT_GITIGNORE": "ใส่ค่าของคุณ",
        "OBSIDIAN_INCLUDE_PATTERNS": "ใส่ค่าของคุณ",
        "OBSIDIAN_CONTENT_IGNORE_PATTERNS": "ใส่ค่าของคุณ",
        "OPENAI_API_KEY": "ใส่ค่าของคุณ",
        "OPENAI_BASE_URL": "ใส่ค่าของคุณ",
        "OPENAI_EMBEDDING_MODEL": "ใส่ค่าของคุณ",
        "LOCAL_EMBEDDING_MODEL": "ใส่ค่าของคุณ",
        "RERANKER_MODEL": "ใส่ค่าของคุณ"
      }
    }
  }
}

วางในไฟล์ .vscode/mcp.json ของโปรเจกต์

{
  "servers": {
    "obsidian-hybrid-search": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "obsidian-hybrid-search",
        "mcp"
      ],
      "env": {
        "OBSIDIAN_VAULT_PATH": "ใส่ค่าของคุณ",
        "OBSIDIAN_PREFIX": "ใส่ค่าของคุณ",
        "OBSIDIAN_IGNORE_PATTERNS": "ใส่ค่าของคุณ",
        "OBSIDIAN_RESPECT_GITIGNORE": "ใส่ค่าของคุณ",
        "OBSIDIAN_INCLUDE_PATTERNS": "ใส่ค่าของคุณ",
        "OBSIDIAN_CONTENT_IGNORE_PATTERNS": "ใส่ค่าของคุณ",
        "OPENAI_API_KEY": "ใส่ค่าของคุณ",
        "OPENAI_BASE_URL": "ใส่ค่าของคุณ",
        "OPENAI_EMBEDDING_MODEL": "ใส่ค่าของคุณ",
        "LOCAL_EMBEDDING_MODEL": "ใส่ค่าของคุณ",
        "RERANKER_MODEL": "ใส่ค่าของคุณ"
      }
    }
  }
}

ค่าที่ต้องใส่เอง

  • OBSIDIAN_VAULT_PATH จำเป็น env
    Absolute path to the Obsidian vault to index and search.
  • OBSIDIAN_PREFIX env
    Optional prefix for MCP tool names when configuring multiple vaults.
  • OBSIDIAN_IGNORE_PATTERNS env
    Comma-separated glob patterns to exclude from indexing.
  • OBSIDIAN_RESPECT_GITIGNORE env
    Read applicable .gitignore files and repository info/exclude rules when indexing; set to false, 0, or no to disable both.
  • OBSIDIAN_INCLUDE_PATTERNS env
    Comma-separated patterns to re-include notes ignored only by Git ignore rules.
  • OBSIDIAN_CONTENT_IGNORE_PATTERNS env
    Comma-separated regex rules for note body text to leave out of search, e.g. /%%[\s\S]*?%%/g. Original files and read stay unchanged.
  • OPENAI_API_KEY ความลับ env
    Optional API key for OpenAI-compatible remote embeddings; omit to use local embeddings.
  • OPENAI_BASE_URL env
    Optional OpenAI-compatible API base URL for OpenRouter, Ollama, LM Studio, or similar providers.
  • OPENAI_EMBEDDING_MODEL env
    Remote embedding model name when using an OpenAI-compatible API.
  • LOCAL_EMBEDDING_MODEL env
    Local embedding model used when no remote embedding API is configured.
  • RERANKER_MODEL env
    Optional ONNX cross-encoder reranker model used when reranking is requested.

ค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต

ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README

ผลตรวจเบื้องต้นi

เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 5 พ.ย. 2569

  • ✓ ผ่าน

    ตัวตนผู้ทำตรงกับ repo

    ชื่อใน registry ยืนยันด้วยบัญชี GitHub flowing-abyss ซึ่งเป็นเจ้าของ repo

  • ✓ ผ่าน

    ยังมีคนดูแล

    มีการแก้โค้ดล่าสุด เมื่อวาน

  • ✓ ผ่าน

    มีสัญญาอนุญาต (license)

    ใช้ MIT

  • – ไม่เกี่ยว

    endpoint ตอบ

    ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต

  • – ไม่เกี่ยว

    ล็อกอินแบบ OAuth

    ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน

  • … ยังไม่ตรวจ

    คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง

    ต้องอ่านรายการเครื่องมือของ server ก่อน จะเริ่มตรวจในขั้นถัดไป

เทียบกับตัวอื่นในหมวด ค้นข้อมูลและความจำของ AIi

  • ดาวมากกว่า 10% ของอีก 10 ตัวในหมวดนี้
  • ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 100% ของอีก 10 ตัวในหมวดนี้
  • ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 10 ตัวในหมวดนี้

เทียบเฉพาะ server ที่อยู่ในต้นแบบนี้ ไม่ใช่ทั้ง registry

คำถามที่พบบ่อย

Obsidian Hybrid Search ปลอดภัยไหม?

จากการตรวจเบื้องต้นของเรา ผ่าน 3 จาก 3 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น

ต้องใช้กุญแจหรือรหัสอะไรบ้าง?

ต้องใส่ค่าเหล่านี้: OBSIDIAN_VAULT_PATH, OPENAI_API_KEY

ตัวนี้รันบนเครื่องหรือบนคลาวด์?

รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)

ยังมีคนดูแลอยู่ไหม?

repo บน GitHub มีการแก้โค้ดล่าสุด เมื่อวาน และส่งรุ่นล่าสุด (0.17.4) เข้า registry เมื่อวาน

ใช้กับโปรแกรมไหนได้บ้าง?

โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย

มีตัวไหนใช้แทนได้บ้าง?

ในหมวดเดียวกันมี Context7, Codebase Memory, Exa

ตัวที่ใช้แทนได้

server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว

อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi

Context7

โดย upstash

ส่งคู่มือการใช้ไลบรารีและเฟรมเวิร์กรุ่นล่าสุดให้ AI อ่านก่อนตอบ ช่วยให้โค้ดที่ AI เขียนไม่ใช้คำสั่งเก่าที่เลิกใช้แล้ว

บนเครื่องหรือคลาวด์★ 64,224MITอัปเดต เมื่อวานซืน

Codebase Memory

โดย DeusData

Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.

รันบนเครื่อง★ 48,148MITอัปเดต 19 วันที่ผ่านมา

Exa

โดย exa-labs

Connect AI agents to Exa for web search, content fetching, and multi-step research.

รันบนคลาวด์★ 5,213MITอัปเดต 43 วันที่ผ่านมา

README จากผู้ทำ

เปิดอ่าน README

ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ

Obsidian Hybrid Search

Your Obsidian vault already contains your best thinking. Obsidian Hybrid Search makes that thinking easier to find, reuse, and bring into AI-assisted work.

It gives your vault one retrieval engine and three practical ways to use it. The native Obsidian plugin gives you fast search, previews, similar notes, link discovery, and graph views while you write. The MCP server lets AI agents search and read your notes as tool calls. The CLI gives power users the same engine for indexing, filtering, reranking, reading, and scripting.

The search understands how real vaults are built. It combines semantic search, BM25 full text, fuzzy title and alias matching, tags, folders, frontmatter, wikilinks, backlinks, and similar-note lookup. You can search by idea, phrase, title, relationship, or metadata without remembering the exact words you wrote.

That turns Obsidian into a stronger personal knowledge system and a better starting point for AI work. Agents can begin from your own notes, pull cited context from source files, follow related material, and work with knowledge you already trust. OHS runs locally by default with SQLite, FTS5, sqlite-vec, RRF ranking, and optional OpenAI-compatible embedding APIs.

Search quality

Evaluated on the Obsidian Help vault (171 notes, 58 queries, local model):

OHS (this project)qmd
nDCG@50.7330.659
MRR0.7880.665
Hit@10.7240.500
Avg query time571 ms ¹754 ms ²
Model download~117 MB~2.2 GB

¹ CPU (Apple Silicon), hybrid mode, no rerank. ² GPU (Apple Silicon Metal), LLM query expansion + reranking.

OHS uses Xenova/multilingual-e5-small. How to reproduce → · Full benchmark →

Real knowledge-vault benchmark

OHS is also evaluated on Andy Matuschak’s public evergreen notes, converted into an Obsidian vault with title-based note filenames, source URLs in frontmatter, local attachments, and 5,000+ internal note links across 1,357 notes.

The curated golden set includes 78 hand-judged queries across known-item lookup, paraphrases, quote fragments, ambiguous topics, citation lookup, and multi-note evidence.

Using the default local embedding model, OHS performs strongly on this dense note network.

MetricValue
nDCG@50.722
nDCG@100.753
MRR0.874
Hit@10.795
Hit@50.974
Recall@100.972
AllRel@100.949

The benchmark exercises retrieval over a highly connected real-world knowledge vault, including queries that do not simply repeat note titles.

Result JSON · Reproduce and interpret →

Large memory benchmark

To test retrieval on a larger public dataset, LongMemEval-S was converted into a 22,419-note Obsidian-style vault with 470 retrieval queries. Using baai/bge-m3 embeddings, OHS ranked the answer-bearing notes strongly:

MetricValue
nDCG@50.895
MRR0.920
Hit@10.889
Hit@50.968
Recall@100.950
AllRel@100.904

For this benchmark, each query uses the LongMemEval-provided haystack as its search scope. That makes the result reproducible and easy to inspect query by query, while still exercising retrieval over a large generated memory vault.

Result JSON · Reproduce and interpret →

Features

  • Hybrid search
  • BM25 + fuzzy title + semantic embeddings, fused with RRF
  • Alias search
  • notes with aliases: in frontmatter are indexed and searchable by any alias; alias matches are boosted in BM25 (weight 5×) and fuzzy title scoring
  • Four search modes
  • hybrid, semantic, fulltext, title (for text queries)
  • Similar note lookup
  • pass --path to find semantically related notes using stored chunk embeddings, with a title + content fallback
  • Graph traversal
  • --path --related shows linked notes at configurable depth; filter by --direction outgoing|backlinks|both
  • Links & backlinks
  • every result includes outgoing links and backlinks
  • Scope filtering
  • restrict to subfolder(s); supports multiple values and exclusions (-notes/dev/)
  • Tag filtering
  • filter by tag(s); supports multiple values and exclusions (-category/cs)
  • Snippet control
  • --snippet-length sets the context window; empty snippets always fall back to note content
  • Extended output
  • --extended adds a TAGS/ALIASES column to the CLI table showing frontmatter tags (#tag) and aliases
  • Incremental indexing
  • only re-indexes changed files; watches for edits in real time
  • Multi-query fan-out
  • pass multiple queries at once (ohs "q1" "q2" or queries[] in MCP); results are merged via RRF, so a note that ranks well in any one query floats to the top; useful when the note may use different vocabulary than the query
  • Cross-encoder reranking
  • --rerank re-scores results with gte-multilingual-reranker-base (ONNX int8, ~341 MB download once); improves precision for conceptual and multilingual queries; applied after multi-query merge
  • Local embeddings
  • works offline via @huggingface/transformers (no API key required); default model: Xenova/multilingual-e5-small, 100+ languages
  • Remote embeddings
  • OpenAI-compatible API (OpenRouter, Ollama, etc.)
  • Note reading
  • read fetches one or more notes by vault-relative path; returns full content with title, aliases, tags, links, and backlinks; on path miss returns top-3 fuzzy suggestions
  • Ignore patterns
  • exclude folders, extensions, or specific files
  • Obsidian plugin
  • native search modal inside Obsidian powered by the same CLI; see obsidian-hybrid-search-plugin

Installation

npm install -g obsidian-hybrid-search

CLI usage

Quick start

The recommended setup is to set OBSIDIAN_VAULT_PATH once in ~/.zshrc or ~/.bashrc. This lets you run the CLI from any directory.

export OBSIDIAN_VAULT_PATH="/path/to/your/vault"

Open a new terminal and index the vault once.

ohs reindex

You can now search from any directory.

ohs "zettelkasten"
Run from a vault

Alternatively, run the CLI without an environment variable from any directory inside your vault. It finds the vault root by walking up to the nearest .obsidian/ folder.

cd /path/to/your/vault

ohs reindex ohs "zettelkasten"

From outside the vault, set OBSIDIAN_VAULT_PATH or pass --db /path/to/vault/.obsidian-hybrid-search.db explicitly.

Optional remote embeddings

By default, the CLI uses the local Xenova/multilingual-e5-small model. It works offline without an API key, downloads about 117 MB on first use, and supports more than 100 languages.

To use a remote API, add its settings to your shell profile.

export OPENAI_API_KEY="sk-..."

Override the default API base for another provider

export OPENAI_BASE_URL="https://openrouter.ai/api/v1" # OpenRouter

export OPENAI_BASE_URL="http://localhost:11434/v1" # Ollama (no key needed)

export OPENAI_BASE_URL="http://localhost:1234/v1" # LM Studio (no key needed)

Override the default text-embedding-3-small model

export OPENAI_EMBEDDING_MODEL="text-embedding-3-small"

Search modes

The CLI supports four search modes called hybrid, fulltext, semantic, and title, plus graph traversal for linked notes. The commands below show how to use them, apply filters, rerank results, and control the output.

# Hybrid search (default)

ohs "zettelkasten atomic notes"

Fulltext BM25 search

ohs "permanent notes" --mode fulltext

Fuzzy title search (fast, typo-tolerant)

ohs "zettleksten" --mode title

Semantic / vector search

ohs "how to build a knowledge graph" --mode semantic

Limit results and set a score threshold

ohs "productivity systems" --limit 5 --threshold 0.3

Restrict to a subfolder

ohs "daily review" --scope notes/periodic/ ohs "daily review" --folder notes/periodic/ # alias for --scope

Restrict to multiple subfolders (OR)

ohs "productivity" --scope notes/pkm/ --scope notes/2024/

Exclude a subfolder

ohs "programming" --scope notes/ --scope -notes/archive/

Filter by tag

ohs "productivity" --tag pkm ohs "machine learning" --tag note/basic/primary

Filter by multiple tags (AND include, exclude with -)

ohs "learning" --tag pkm --tag work

Filter by frontmatter / properties (exact match, case-insensitive)

ohs "notes" --frontmatter status:todo ohs "notes" --prop priority:high # --prop is alias for --frontmatter

Filter by multiple frontmatter fields (AND)

ohs "notes" --frontmatter status:todo --frontmatter priority:high

Exclude by frontmatter value

ohs "notes" --frontmatter -status:done

Filter-only mode: no query, just filters (returns all matching notes sorted by title)

ohs --frontmatter status:todo ohs --folder notes/2024/ ohs --tag pkm ohs --frontmatter status:done --tag archived

Unlimited results in filter-only mode (default limit is 10)

ohs --folder notes/ --limit 0

Find semantically similar notes

ohs --path notes/pkm/zettelkasten.md

Graph traversal: show notes linked to/from this note

Results show depth: -1/-2 = backlinks, 0 = source, +1/+2 = outgoing links

ohs --path notes/pkm/zettelkasten.md --related ohs --path notes/pkm/zettelkasten.md --related --depth 2

Only outgoing links (what this note references)

ohs --path notes/pkm/zettelkasten.md --related --direction outgoing

Only backlinks (who references this note)

ohs --path notes/pkm/zettelkasten.md --related --direction backlinks

Traverse standard Markdown note links instead of Obsidian wikilinks

ohs --path notes/pkm/zettelkasten.md --related --link-type markdown

Traverse both wikilinks and standard Markdown note links

ohs --path notes/pkm/zettelkasten.md --related --link-type all

Longer context around each link

ohs --path notes/pkm/zettelkasten.md --related --snippet-length 500

Rerank results with a cross-encoder model (improves precision, ~1-3s extra latency)

Downloads gte-multilingual-reranker-base ONNX (~341 MB) on first use, cached in ~/.cache/huggingface/

ohs "zettelkasten atomic notes" --rerank

Show tags and aliases alongside results

ohs "zettelkasten" --extended

JSON output (for scripting)

ohs "spaced repetition" --json

Output only paths (one per line) — useful for piping into read

ohs --frontmatter id:OHS-4 --only-paths ohs read ${(f)"$(ohs search --frontmatter status:todo --only-paths)"} # zsh: read all matching notes

Output absolute filesystem paths

ohs "zettelkasten" --only-absolute-paths

Open results in Obsidi

ตัดมาแค่ช่วงต้น อ่านต่อใน repo

ถาม PopNx