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 分