Releases: mkemeter/obsidian-vaultgate-mcp
Release list
VaultGate v0.3.2
A focused bug-fix release addressing server stability, health-check reliability, semantic index correctness, installer robustness, and tray external-server handling.
Server
Crash on malformed Host header fixed. A request with a syntactically invalid Host header (e.g. from a fuzzer or misconfigured proxy) previously threw an uncaught TypeError and killed the server process. It now returns 400 Bad Request and keeps serving.
Health check resolves bare CLI names via PATH. The documented default value obsidian now correctly resolves from any working directory (including PATHEXT lookup on Windows). Absolute OBSIDIAN_CLI_PATH values behave exactly as before.
In-flight index builds can no longer write to the wrong vault. Switching vault or clearing the index while a build was in progress could let stale embedding data land in the freshly switched vault's cache file. The build is now invalidated when the vault changes underneath it, and clear_index is a no-op while a build is in flight — the new build owns the cache.
Installer quoting hardened. The launchd installer no longer aborts when the install path contains single quotes (it emitted an unquoted Environment line). The systemd installer now quotes ExecStart and Environment values, so paths with spaces are handled correctly on both launch targets.
zod is now a direct server dependency. Previously it was pulled in transitively; it's now declared explicitly in server/package.json — same supply-chain hygiene fix as the @modelcontextprotocol/sdk pin in 0.3.1.
Tray
External servers are tracked as running-external. When a VaultGate server the tray does not own is already serving on the configured port, the tray now uses a dedicated state: the menu shows "External server on port N — not managed by VaultGate", Stop/Restart/index actions are disabled, Preferences shows a warning, and quitting never terminates the external process.
A superseded start() can no longer flip a healthy server to "error". A stale startup failure (e.g. a port-in-use error during a rapid restart) could previously overwrite the running state that had already settled. The stale result is now discarded.
v0.3.1
Windows install fixes
This release fixes three bugs that blocked Windows users from installing VaultGate at all, plus adds a non-interactive installer mode for automation.
Fixed
npm install -g failed on Windows — the postinstall hook used lefthook install || true, and cmd.exe has no true command. The fallback itself errored, rejecting the entire global install. Replaced with node -e "", which exits 0 on all platforms. This bug affected every version prior to 0.3.1.
npm run build failed on Windows — the build script used the POSIX cp command to copy assets. On Windows without WSL this broke the build entirely. Replaced with a Node.js script that works everywhere.
Installer output was garbled on Windows PowerShell 5.1 — the .ps1 scripts contained non-ASCII characters. PowerShell 5.1 reads BOM-less files as the system ANSI codepage, mangling any non-ASCII byte. Scripts are now ASCII-only.
Added
Non-interactive installer — install.ps1 now accepts -ObsidianPath, -VaultName, and -NonInteractive parameters for unattended or scripted installs:
# Fully unattended — Obsidian at a standard location, no vault pin
install.ps1 -NonInteractive
# Obsidian at a custom path, vault pinned
install.ps1 -NonInteractive -ObsidianPath "C:\custom\Obsidian.exe" -VaultName "Work"Zero-argument invocation still works exactly as before.
Also fixed
- CLI timeout and oversized-output errors now name the real cause and suggest the right fix, instead of the generic "Register CLI" hint that applied to neither.
- Non-executable CLI binary is now caught at startup (Unix) with an actionable
chmod +xmessage rather than an opaque error on the first tool call. - Tray injection interval changes are now validated at runtime, not just at startup — an invalid value can no longer silently disable the re-injection guard.
- IPC messages from the tray are validated against a strict schema; malformed messages are logged and ignored rather than applied.
v0.3.0
What's new
Vault conventions delivered automatically
VaultGate now submarines your vault conventions file into the first tool result of each new conversation — no model action required. Conventions arrive alongside data the AI already requested, so it always knows your vault's folder structure, naming rules, and writing style from the first response.
- Works in all MCP clients, including those that do not surface server instructions to the model
- A configurable TTL (default: 30 s) acts as a conversation-boundary detector — conventions are delivered exactly once per new thread, then re-delivered when a new conversation starts
- Disable via
VAULTGATE_INJECT_CONVENTIONS=falseor the new tray Preferences controls - Adjust the interval via
VAULTGATE_INJECT_INTERVAL=<seconds>or tray Preferences
Tray Preferences redesign
The three vault conventions settings are now grouped under a dedicated Vault Conventions section with a label and hint text, making their relationship immediately clear. The re-inject interval is displayed as a compact inline row (Re-inject after [ 30 ] seconds). Status bar spacing and scrollbar issues on macOS are fixed.
Changes
feat(server)Auto-inject vault conventions for broader MCP client compatibilityfeat(tray)Expose injection controls (enable/disable + interval) in Preferences, wired to the server via live IPCfix(tray)Group vault conventions settings and fix Preferences window layoutchoreBump vitest 4.1.11, biome 2.5.10, electron 43.4.1
Full changelog
See docs/CHANGELOG.md for the complete entry.
v0.2.7
Fixed
- Windows: HTTP transport compatibility — resolved an HTTP client incompatibility that prevented connections on Windows. Installer robustness improvements for the Windows deploy script.
- Windows: battery-power fix and
OBSIDIAN_CLI_PATHguidance — the server no longer exits when the machine is on battery power; added clearer guidance for setting a custom CLI path on Windows. - Version reporting —
serverInfo.versionis now read frompackage.jsonat runtime instead of being hardcoded, so MCP clients that display server version always see the correct value.
See CHANGELOG for full details.
v0.2.6
Changed
- Semantic embedding model switched from `Xenova/bge-small-en-v1.5` to `Xenova/all-MiniLM-L6-v2` (server + tray). `all-MiniLM-L6-v2` (Microsoft Research / SBERT) is ~33% smaller and faster. The embedding call, similarity math, and all tool interfaces are unchanged.
- `DEFAULT_MIN_SCORE` lowered from `0.25` to `0.20` to compensate for MiniLM's slightly lower absolute similarity scores.
- Index cache version bumped to 3 — existing embedding caches are automatically discarded and rebuilt on first run. Searches return "being indexed" during the rebuild window.
- Tray DMG size decreases by ~11 MB.
Fixed
- Smart search tray label shows the correct indexed-note count. See CHANGELOG for details.
Upgrade notes
On first launch after updating, VaultGate will automatically rebuild your semantic search index in the background. No action required — base tools remain available throughout.
v0.2.5
What's new
Server
Fixed
- Semantic index no longer wiped on startup when Obsidian is not yet ready. The tray app starts faster than Obsidian on most machines; if the CLI returned an empty file list before the plugin finished initialising, the prune loop deleted every entry from the in-memory index and saved
{ "files": {} }to disk. Every subsequent restart re-hit the same race, causing "Smart search ready — 0 notes" to persist indefinitely. The fix skipssaveIndexwhen a previously non-empty index receives an empty file list, reloads the good on-disk state, and retries after 60 s (up to 3 attempts). - The same empty-list guard was added to
fullReHash, which runs on the 24 h periodic re-hash cycle and when the tray "Rebuild index" button is pressed. - Fixed IPC: tray→server messages (vault switching, index controls) were silently dropped. Electron's
utilityProcessdeliverschild.postMessage()payloads asMessageEventobjects — the payload is atevent.data. The server was checking the raw event, so vault switching from Preferences and the new index control commands both failed silently since they were introduced.
Tray
Added
- Index controls in the tray menu. Hover over the Smart search status row to reveal a submenu:
- Rebuild index — soft refresh: re-embeds new and changed notes without taking the index offline.
- Clear cache && rebuild — hard reset: deletes the on-disk embeddings file and rebuilds from scratch.
- Redesigned tray menu. All primary actions now live under their status rows as submenus — hover to reveal. Running state: "● Running — Vault" → Copy URL, Stop. Stopped state: "○ Stopped" → Copy URL, Start.
Fixed
- Logging: every IPC send and receive is now logged on both sides, making silent failures immediately visible in
vaultgate.log.
v0.2.4
Server
Changed
- Obsidian CLI runtime errors now append actionable guidance (Settings → General → Command line interface → Register CLI) while preserving Obsidian's own stderr, so an unregistered-CLI failure no longer surfaces as an opaque passthrough.
Security
- Raised the
@modelcontextprotocol/sdkfloor to>=1.30.0and refreshed the lockfile, pulling patched transitive dependencies (@hono/node-server,hono,fast-uri,ip-address) that cleared five npm audit advisories. VaultGate binds to127.0.0.1only and does not exercise the affected network-facing code paths, so real-world exposure was minimal.
Tray
Fixed
- The Gatekeeper unquarantine command in the DMG background,
INSTALL.txt, and the README now uses the absolute path/usr/bin/xattr -rd …. The previousxattr -r -d …failed withoption -r not recognizedfor users who had a Pythonxattr(PyPI/Homebrew/conda) shadowing Apple's tool on their PATH — that variant has no-rflag.
Full changelog: https://github.com/mkemeter/obsidian-vaultgate-mcp/blob/main/docs/CHANGELOG.md
VaultGate v0.2.3
Server
Added
- Shell-agnostic auto-start commands
obsidian-vaultgate-mcp-installandobsidian-vaultgate-mcp-uninstall. They run the platform's deploy script (launchd / systemd / Task Scheduler) directly, so setup no longer requires the PowerShell-only$(npm root -g)\...invocation — the same command works verbatim in any shell on macOS, Linux, and Windows. Windows users no longer need to know to use PowerShell instead of Command Prompt.
Changed
- Auto-start and uninstall docs now use the new commands across the README and the launchd/systemd/example guides.
VaultGate v0.2.2
What's Changed
- chore(deps): bump actions/cache from 4 to 6 by @dependabot[bot] in #7
- chore(deps): bump actions/checkout from 4 to 7 by @dependabot[bot] in #8
- chore(deps): bump actions/setup-node from 4 to 7 by @dependabot[bot] in #9
Full Changelog: v0.2.1...v0.2.2
VaultGate v0.2.1
Full Changelog: v0.2.0...v0.2.1