mcpField
O
obsidian-vault-search

obsidian-vault-search

github.com/wilbeibiProductivity241 installsUpdated 2d ago
Repository

About obsidian-vault-search

obsidian-vault-search is a skill for finding notes and tasks in an Obsidian vault without loading the entire vault into context. It routes searches among Meilisearch, `rg`, and a date-aware script according to the query.

Key features

  1. 01Typo-tolerant full-text search
  2. 02Direct search for content and metadata
  3. 03Natural-language date and overdue searches
  4. 04CJK term extraction
  5. 05Local-search fallback when Meilisearch is unavailable

Use cases

  1. 01Find notes by topic despite typos
  2. 02Locate notes by exact text, tags, or frontmatter
  3. 03Identify overdue tasks or recent notes
  4. 04Search a vault with Chinese-language terms

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/wilbeibi/wilbeibi-skills --skill obsidian-vault-search

After installing, type/obsidian-vault-searchin Claude Code to confirm it loaded.

Bundled filesscripts/meili_search.pyscripts/vault_search.py

Details

From the project README

obsidian-vault-search

Find Markdown notes and tasks in an Obsidian vault without loading the whole vault into context.

Routing

  1. Topic / fuzzy / "notes about X" → scripts/meili_search.py. Typo-tolerant full-text over a Meilisearch index; best when the user won't remember exact words. Expand synonyms yourself across queries.
  2. Exact content, frontmatter, tags, task glyphs → direct rg.
  3. Natural-language dates, overdue comparisons, CJK term extraction → scripts/vault_search.py.

If Meilisearch is unreachable or unconfigured (script exits non-zero), fall back to tiers 2–3 — they only need the local vault.

Env: OBSIDIAN_VAULT (vault root), MEILI_URL (default http://127.0.0.1:7700), MEILI_SEARCH_KEY (file fallback ~/meilisearch/search-key.txt), MEILI_INDEX (default notes).

Meilisearch

Run with --help for all flags. Never dump raw hits into context — use --fields and small --limit.

uv run scripts/meili_search.py "spaced repetition" --limit 5 --fields "title,path"
uv run scripts/meili_search.py "prompt caching" --filter "tags=ai" --sort "updated:desc" --json

Hit path values are vault-relative (e.g. Library/Book Notes/Influence.md); join with $OBSIDIAN_VAULT to open.

Direct Patterns

rg "keyword" --glob "*.md" "$OBSIDIAN_VAULT"
rg -lU 'tags:\n(\s*- .*\n)*?\s*- tagname\b' --glob "*.md" "$OBSIDIAN_VAULT"  # YAML list tags; prefer meili --filter "tags=tagname" when index is up
rg "created: $(date +%Y-%m)" --glob "*.md" "$OBSIDIAN_VAULT"
rg "^- \[ \].*📅 $(date +%F)" --glob "*.md" "$OBSIDIAN_VAULT"
rg "^- \[ \].*⏫" --glob "*.md" "$OBSIDIAN_VAULT"

Date-Aware Script

uv run scripts/vault_search.py "recent week psychology"
uv run scripts/vault_search.py "overdue tasks"
uv run scripts/vault_search.py "找3-2-1技巧" --raw   # --raw: plain paths for piping

Notes

  • created: YYYY-MM-DD frontmatter drives dates; vault_search.py falls back to file mtime.
  • Task markers (Tasks plugin): 📅 due, 🛫 start, ⏳ scheduled, ⏫/🔼/🔽 priority.
  • Synonym expansion is the agent's job, not the scripts'.

Comments

Markdown supported