Skip to content

Releases: mkemeter/obsidian-vaultgate-mcp

VaultGate v0.3.2

Choose a tag to compare

@github-actions github-actions released this 14 Sep 09:30

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

Choose a tag to compare

@mkemeter mkemeter released this 10 Sep 09:32

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 +x message 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

Choose a tag to compare

@mkemeter mkemeter released this 25 Aug 08:56

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=false or 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 compatibility
  • feat(tray) Expose injection controls (enable/disable + interval) in Preferences, wired to the server via live IPC
  • fix(tray) Group vault conventions settings and fix Preferences window layout
  • chore Bump 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

Choose a tag to compare

@mkemeter mkemeter released this 24 Aug 08:01

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_PATH guidance — 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.version is now read from package.json at 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

Choose a tag to compare

@mkemeter mkemeter released this 18 Aug 10:10

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

Choose a tag to compare

@mkemeter mkemeter released this 14 Aug 07:12

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 skips saveIndex when 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 utilityProcess delivers child.postMessage() payloads as MessageEvent objects — the payload is at event.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

Choose a tag to compare

@mkemeter mkemeter released this 04 Aug 16:51

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/sdk floor to >=1.30.0 and refreshed the lockfile, pulling patched transitive dependencies (@hono/node-server, hono, fast-uri, ip-address) that cleared five npm audit advisories. VaultGate binds to 127.0.0.1 only 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 previous xattr -r -d … failed with option -r not recognized for users who had a Python xattr (PyPI/Homebrew/conda) shadowing Apple's tool on their PATH — that variant has no -r flag.

Full changelog: https://github.com/mkemeter/obsidian-vaultgate-mcp/blob/main/docs/CHANGELOG.md

VaultGate v0.2.3

Choose a tag to compare

@mkemeter mkemeter released this 30 Jul 08:34

Server

Added

  • Shell-agnostic auto-start commands obsidian-vaultgate-mcp-install and obsidian-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

Choose a tag to compare

@github-actions github-actions released this 22 Jul 12:28

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

Choose a tag to compare

@github-actions github-actions released this 23 Jun 14:46

Full Changelog: v0.2.0...v0.2.1