Freshvault

io.github.KIOKO-LAB由 GitHub 帳號 KIOKO-LAB 發布v0.4.0更新於 Oct 24, 2026

Local semantic search over your Obsidian vault - always fresh, never reindex.

已驗證STDIO僅桌面檔案與儲存知識與記憶

概覽

AI 產生的概覽

Freshvault 讓助理對 Obsidian 筆記庫進行本機語意搜尋,索引自動保持最新,不必手動重建。

可以做什麼
對筆記進行語意搜尋,可依資料夾、標籤與修改時間限定範圍,並提升精確標題比對,每則筆記最多回傳兩個片段。取得完整筆記及其在筆記庫連結圖中的反向連結與出鏈。查看索引新鮮度:筆記與片段數量、被排除數量、上次同步時間與監看器狀態。三個工具皆為唯讀。
適用情境
適合把筆記存放在 Obsidian 筆記庫、希望助理據此回答問題的人,尤其是韓語、日語等非英語內容,且不想執行索引或監看指令。
執行需求
透過 npx 執行的本機程序,需要 Node 20+ 以及執行中的 Ollama 與 bge-m3 嵌入模型(由 setup 精靈下載)。筆記庫路徑由環境變數 FRESHVAULT_VAULT 或 setup 指令設定。也可改用相容 OpenAI 的嵌入端點,透過 FRESHVAULT_EMBED_API 與 FRESHVAULT_EMBED_URL 設定,需要驗證時使用 FRESHVAULT_EMBED_KEY。
安裝前請注意
伺服器會讀取筆記庫並把筆記內容傳送給所設定的嵌入端點;預設是本機 Ollama,但在 openai 模式下可能是遠端服務。FRESHVAULT_EMBED_KEY 是憑證,應妥善保護。忽略規則在 v0.3.0 有變更,現在會排除更多路徑,升級後請核對被排除數量。搜尋為線性掃描,不適合超大規模語料。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Freshvault,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

freshvault

[CI] [npm] [MCP Registry] [node]

한국어 · 日本語

Your Obsidian vault is Claude's memory. Always fresh, always local.

Every other vault-search MCP makes you re-run an index command, babysit a watch terminal, or click "Update Index" in a web UI. freshvault watches your vault from inside the MCP server: edit a note, and Claude sees it seconds later. Automatically. Forever.

[freshvault demo: save a note, the watcher reindexes it automatically, semantic search finds it seconds later]

  • 🔄 Never reindex — the file watcher lives in the server process; boot catch-up absorbs offline edits
  • 🔒 100% local — embeddings via Ollama (bge-m3), your notes never leave your machine
  • 🌏 Multilingual by default — bge-m3 handles Korean, Japanese, and 100+ languages that English-only defaults fail on
  • 🎯 Benchmark-driven retrieval — unconditional BM25 fusion wrecked Korean paraphrase queries (82.5% → 47.5% top-1), so it's off; pure dense missed identifier queries outright (57.1%), so it's not gone either. Lexical scoring is gated on code-like query tokens: paraphrase 82.5% → 82.5% (identical), identifiers 57.1% → 100% — receipts
  • 🪶 No vector DB, no Docker, no Python — JSON metadata + a Float32 sidecar, plain Node, source you can read in one sitting
  • 🧠 Chunking that respects sentences — YAML frontmatter stripped, splits on paragraph/sentence boundaries (CJK-aware)

Install

Prerequisites: Node 20+ and Ollama.

bash
npx -y freshvault setup

That's it. The wizard detects your Obsidian vault, pulls the embedding model, builds the index, and registers with Claude Code. There is no step 2, and there is never a step 2: no index command to re-run, no watch terminal, no background service.

Manual install (Claude Desktop / Cursor / Windsurf)
json
{  "mcpServers": {    "freshvault": {      "command": "npx",      "args": ["-y", "freshvault", "serve"],      "env": { "FRESHVAULT_VAULT": "/absolute/path/to/your/vault" }    }  }}

Claude Code one-liner:

bash
claude mcp add freshvault -s user -- npx -y freshvault serve

Use

Just ask Claude about your notes:

"Search my notes for what I wrote about cache eviction strategies"

Three tools, all read-only:

toolwhat it does
search_notessemantic search + optional folder / tags / modified_after / modified_before scoping; exact-title lookups boosted; at most 2 chunks per note so one long note can't own the results (max_per_file)
get_note_contextfull note + its backlinks/outlinks from the vault link graph (path-traversal safe)
index_statusfreshness report: notes/chunks, excluded count, last sync, watcher state

Scoped queries competitors gate behind settings or paywalls work per-query here:

"Search my notes tagged #project modified after June for the budget discussion"

How it works

Obsidian vault ──fs.watch──▶ freshvault MCP server ──search_notes──▶ Claude   (.md files)               (chunks → bge-m3 embeddings              (generation)                              → one JSON index, incremental)
  • Incremental: only changed/deleted notes are re-embedded (mtime+size diff), debounced 4s
  • Safety net: a 60s mtime sweep catches events the watcher misses (network drives, atomic-rename editors)
  • Multi-client safe: first server process becomes the writer (heartbeated lock); others are readers that hot-reload and promote themselves if the writer dies
  • Transactional: an embedding-server outage mid-index can never lose or corrupt notes
  • Scale: vectors live in a packed Float32 sidecar (fast startup, compact); brute-force cosine over thousands of chunks is milliseconds. Honest note: search is still linear — sub-100ms into tens of thousands of chunks, but this is not a vector DB replacement for huge corpora

Multiple vaults

Register one server per vault — index files are kept per-vault automatically:

bash
claude mcp add work-vault -s user -e FRESHVAULT_VAULT=/path/to/work -- npx -y freshvault serveclaude mcp add personal-vault -s user -e FRESHVAULT_VAULT=/path/to/personal -- npx -y freshvault serve

Other embedding servers (LM Studio, LiteLLM, OpenAI-compatible)

bash
FRESHVAULT_EMBED_API=openai FRESHVAULT_EMBED_URL=http://localhost:1234 npx -y freshvault serve

Anything speaking /v1/embeddings works; FRESHVAULT_EMBED_KEY for authenticated endpoints (never written to the config file).

Configuration

Everything works with zero config after setup. Override when needed:

FlagEnvDefault
--vaultFRESHVAULT_VAULTfrom setup
--modelFRESHVAULT_MODELbge-m3
--ollama-urlFRESHVAULT_OLLAMA_URLhttp://localhost:11434
--dataFRESHVAULT_DATAplatform data dir
—FRESHVAULT_EMBED_APIollama (or openai)
—FRESHVAULT_EMBED_URLhttp://localhost:1234 (openai mode)
—FRESHVAULT_EMBED_KEYnone (openai mode, optional)
—FRESHVAULT_IGNOREnone — e.g. Templates/,Daily/** (or ignore: [] in config)
—FRESHVAULT_LEXICAL_GATEon — lexical scoring for code-like query tokens; off for pure dense (or lexicalGate: false in config)

Commands: setup · serve (default) · index (manual escape hatch) · status

Ignore patterns

Patterns follow gitignore semantics, matched against vault-relative paths:

PatternExcludes
Templates/any Templates directory at any depth — Templates/, work/Templates/
/Templatesonly the vault-root Templates/
Daily/**everything under the root-level Daily/ only — the internal slash anchors it
**/Daily/**everything under any Daily/, at any depth
*.excalidraw.mdthat filename at any depth
work/wip.mdexactly that path, relative to the vault root
  • A slash anywhere but the end anchors the pattern to the vault root. A trailing slash only means "directory" — it does not anchor.
  • * and ? never cross a /. ** crosses directories only as a whole path segment (**/x, x/**, x/**/y); glued inside a segment it collapses to a single *, as in git.
  • Matches end on a segment boundary — Templates never matches TemplatesOld.
  • ! negation and character classes are not supported; such patterns match nothing.
  • FRESHVAULT_IGNORE is comma-separated, so a pattern cannot contain a comma.

Behaviour change since v0.3.0. v0.3.0 treated a trailing slash as a root anchor, so Templates/ excluded only the vault-root Templates/ and silently indexed every nested one — no warning, just a quietly polluted index. Patterns shaped like Templates/, /Templates, **/x and a/**/b now exclude more than before (/Templates previously matched nothing at all). Conversely, ** glued inside a segment (Daily**md) no longer crosses /. Run freshvault status after upgrading and compare the excluded count if it matters to you.

Benchmark

Two retrieval micro-benchmarks ship in-repo (node scripts/bench.mjs): ko-bench (30 Korean notes, 40 paraphrase queries) and id-bench (38 technical notes, 14 identifier queries). Both run under three scoring modes — dense, hybrid-always, and the shipped gated mode — and the script checks the no-regression contract itself. Results and the bge-m3-ko (85.0% top-1, 634MB) import guide in docs/ko-bench.md.

Roadmap

  • MCPB bundle for one-click Claude Desktop install
  • Reranking pass for large vaults
  • PDF text extraction at index time

License

MIT © Kioko Lab

來源:README.md,提交 dc6c610

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.4.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分