v2.2 — MCP server, AutoGit version history, 14 AI providers
Three things that used to be "out of scope for a Markdown editor" are now built in: an MCP server so any LLM client can read and write your vault, AutoGit version history so every save becomes a snapshot you can roll back, and 14 BYOK AI providers behind Cmd+J — all local, all opt-in, all offline-friendly.
🔌 MCP server
Ship-by-default Model Context Protocol server (solomd-mcp)
— point Claude Desktop, Cursor, Codex CLI, or anything that speaks
MCP at your notes folder, and it gets eight read tools out of the box:
list_notes·read_note·searchget_backlinks·list_tags·get_outlinewrite_note·append_to_note— gated behind--allow-write; default is read-only
Path-traversal guard, workspace-canonical containment, no network port (stdio only). Single 1.5 MB binary. Configure once in Claude Desktop:
{
"mcpServers": {
"solomd": {
"command": "/path/to/solomd-mcp",
"args": ["--workspace", "/path/to/notes"]
}
}
} 📜 AutoGit version history
Toggle one switch in Settings → Version history. From that moment:
- Every Cmd+S creates a snapshot in a local
.gitinside your workspace folder. - The right-hand History panel lists every commit that touched the active file, newest first.
- Click any row → expand the diff inline.
- Click Restore this version → working copy + editor buffer revert atomically (no data-loss footguns).
- Repo is yours. Push it to GitHub if you want — or never.
Implemented with libgit2 (vendored, no system git
required). Runs on a blocking thread pool so the UI never freezes,
even on a workspace with thousands of notes.
🤖 AI rewrite — 14 providers, BYOK
Cmd+J on a selection. Pick rewrite / shorten / expand / translate (en+zh) / explain / custom prompt. Stream the result inline, accept or reject:
- US: OpenAI, Anthropic Claude, Google Gemini, xAI Grok, Mistral, Groq
- CN: DeepSeek, Qwen, GLM, Moonshot Kimi, Doubao (Volcengine), SiliconFlow
- Aggregator: OpenRouter (one key, 400+ models)
- Local: Ollama (no key needed)
Keys live in the OS keychain
(Keychain on macOS, Credential Manager on Windows, libsecret on Linux) —
never in localStorage, never in any config file we write.
BYOK by design: SoloMD doesn't host any models, every request goes
directly from your machine to the provider you chose.
🔐 New /security page
A complete writeup of every place user data is touched: solomd.app/security. Eight numbered sections covering disk-only notes, OS-keychain key storage, opt-in direct-to-vendor AI calls, the MCP path-traversal guard, AutoGit's local-only commits, content-free opt-out telemetry, Tauri sandbox + signed builds, and MIT-license auditability. Every claim is linked to the source line.
🛠 Engineering notes (for the curious)
- keyring v3 platform features pinned —
apple-native,windows-native,sync-secret-service. v3 changed defaults vs v2 and without these features the keychain crate falls through to an in-process mock store. - Symlink-aware path resolution for AutoGit — macOS
workspaces under
/var/or/tmp/resolve via/private/..., which used to make every commit error out as "file outside workspace". - Async git2 via
tauri::async_runtime::spawn_blocking— git work never blocks the UI thread, so you can keep typing while a snapshot serializes. - solomd-dev-mcp — internal-only MCP server that exposes SoloMD's domain logic for end-to-end self-testing. Ships with the source, never with the user binary. We use it ourselves to verify every shipped feature actually works before tagging.
What's next (v2.3+)
Local RAG / semantic search (the biggest field-wide gap right now — Obsidian doesn't have it, Tolaria doesn't have it, we shouldn't either if we want to be the obvious choice for "search across my notes by meaning"), and a Tauri WebDriver bridge so the dev MCP can drive Vue components too. Sync (CRDT) remains the v3 anchor.