
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.
概览
Freshvault 让助手对 Obsidian 笔记库进行本地语义搜索,索引自动保持最新,无需手动重建。
- 可以做什么
- 对笔记进行语义搜索,可按文件夹、标签和修改时间限定范围,并提升精确标题匹配,每条笔记最多返回两个片段。获取完整笔记及其在笔记库链接图中的反向链接和出链。查看索引新鲜度:笔记与片段数量、被排除数量、上次同步时间和监视器状态。三个工具均为只读。
- 适用场景
- 适合把笔记存放在 Obsidian 笔记库中、希望助手据此回答问题的人,尤其是韩语、日语等非英语内容,且不想运行索引或监视命令。
- 运行要求
- 通过 npx 运行的本地进程,需要 Node 20+ 以及运行中的 Ollama 和 bge-m3 嵌入模型(由 setup 向导拉取)。笔记库路径由环境变量 FRESHVAULT_VAULT 或 setup 命令设置。也可改用兼容 OpenAI 的嵌入端点,通过 FRESHVAULT_EMBED_API 和 FRESHVAULT_EMBED_URL 配置,需要认证时使用 FRESHVAULT_EMBED_KEY。
安装
在 SourceWeft 中
- 打开 控制台中的 Freshvault,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
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.
- 🔄 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-m3handles 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.
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)
Claude Code one-liner:
Use
Just ask Claude about your notes:
"Search my notes for what I wrote about cache eviction strategies"
Three tools, all read-only:
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
- 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:
Other embedding servers (LM Studio, LiteLLM, OpenAI-compatible)
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:
Commands: setup · serve (default) · index (manual escape hatch) · status
Ignore patterns
Patterns follow gitignore semantics, matched against vault-relative paths:
- 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 —
Templatesnever matchesTemplatesOld. !negation and character classes are not supported; such patterns match nothing.FRESHVAULT_IGNOREis 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-rootTemplates/and silently indexed every nested one — no warning, just a quietly polluted index. Patterns shaped likeTemplates/,/Templates,**/xanda/**/bnow exclude more than before (/Templatespreviously matched nothing at all). Conversely,**glued inside a segment (Daily**md) no longer crosses/. Runfreshvault statusafter 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版本历史
1- v0.4.0最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分