- Non-English text no longer crashes the embedder (#10). Inputs were cut to
1,500 characters, but
TaylorAI/bge-micro-v2ships a placeholdermodel_max_length, so 1,500 chars of German (~560 tokens) overflowed its 512 position embeddings, onnxruntime threw, andsearch_notessilently dropped tokeyword-fallback. The tokenizer is now capped at the model's realmax_position_embeddings, so truncation happens at the token level for any language — including the parity check, which embeds a full stored note. - Stale
model_keyinsmart_env.jsonno longer empties the index (#9). Switching models in Smart Connections can re-embed every.ajsonunder the new key while the config keeps the old one; every vector lookup then missed and search returned[]in"mode": "semantic". The server now trusts the data when the declared model has no vectors, logs the override, and reports the config value asdeclaredModelKeyinget_stats/list_vaults. - A vault with no vectors indexed now falls back to keyword matching with an explicit warning instead of returning an empty semantic result.
- True semantic search:
search_notesnow embeds your query locally with the same model your vault's Smart Connections index used (via transformers.js). Conceptual queries work; nothing leaves your machine. - Multi-vault:
SMART_VAULT_PATHaccepts comma-separated paths; tools take an optionalvaultparameter; newlist_vaultstool. - Block-level retrieval: search matches individual sections (blocks) and returns content snippets inline.
- Freshness:
.smart-envchanges are picked up automatically (throttled incremental reload) — no server restart after editing notes. get_note_contentinclude_blocksnow actually extracts the named blocks.- Explicit
mode: "keyword-fallback"+ warning when the embedding model cannot load, instead of silently degraded results.
- Path traversal in
get_note_content(reads outside the vault are rejected). - Crash on regex metacharacters in search queries.
.ajsondeletion entries (null) are now honored.
get_embedding_neighborstool.search_notesresponse shape changed (addsvault,scope,block,snippet,mode).
- Requires Node >= 20. MCP SDK updated to the current 1.x line.
- First run downloads the embedding model (~25MB, cached locally forever).