zenvoy-mcp
MCP server for the Zenvoy Markdown notes app, providing 26 tools for vault operations like reading, creating, searching notes, and managing tasks, templates, and comments.
README
Zenvoy
<p align="center"> <img src="src-tauri/icons/icon.png" alt="Zenvoy app icon" width="160"> </p>
Zenvoy is a keyboard-first Markdown notes app with multiple runtimes:
- a desktop app built with Tauri
- a self-hosted web app backed by a Rust (Axum) server
- a
zenCLI for terminal workflows - a first-party MCP server for AI tool integration
Zenvoy keeps your notes as ordinary Markdown files on disk. It adds Vim-friendly editing, split and preview workflows, tasks, tags, archive/trash, diagrams, search, daily notes, CSV databases (Notion-style Table + Board views over plain .csv files), and MCP integration on top of the files you already own.
Install
Download the latest release from the Releases page.
macOS
After installing, macOS may show "Zenvoy is damaged and can't be opened" because the app is not notarized with Apple. To fix this, run:
xattr -cr /Applications/Zenvoy.app
Or right-click the app → Open → Open to bypass Gatekeeper on first launch.
Desktop (Build from source)
npm ci
npx tauri build
The built app is in src-tauri/target/release/bundle/.
zen CLI
Build the CLI:
cd src-tauri && cargo build --bin zen --release
The binary is at src-tauri/target/release/zen. Copy it to your PATH.
Commands include: list, read, search, capture, edit, archive/trash notes, tasks, folders, and MCP.
Self-hosted web app
Run the standalone Axum server:
cd src-tauri && cargo run --bin zenvoy-server --release
Then open http://localhost:7878.
Or use Docker:
docker compose up -d
What Zenvoy is for
- writing and organizing plain-file Markdown notes without a database
- moving quickly with keyboard-first navigation and Vim motions
- working across edit, split, and preview modes without losing context
- keeping tasks, tags, search, archive, trash, and quick capture inside the same vault
- rendering math and diagrams directly from Markdown
- exposing the vault to MCP-capable tools through a first-party server
- searching and opening notes from terminal scripts
- self-hosting the app on your own machine or home server
Product modes
desktop: Tauri shell with native menus, updater, floating windowsself-hosted: browser frontend plus Rust server, suitable for home servers and LAN usecli: terminal-based note management via thezenbinary
Core ideas
Plain files first
Every note is a normal .md file inside a chosen vault. Zenvoy does not store note content in a hidden database.
Keyboard-first by default
Zenvoy assumes you want to move fast:
- first-class Vim mode
- leader-key flows
- command palette
- pane and tab motion
- local ex commands
- built-in help
Preview is part of the workflow
Zenvoy supports:
- edit mode
- preview mode
- split mode
- pinned reference panes
- detached note windows on desktop
Shared vault, shared tooling
Zenvoy includes a first-party MCP server so tools can work on the same vault you do.
Feature overview
Notes, folders, and lifecycle
Zenvoy can:
- create, rename, duplicate, move, archive, unarchive, trash, restore, and reveal notes and folders
- watch the vault for external changes
- reopen your workspace layout with tabs and panes
System folders:
quick,archive, andtrashare built-in lifecycle areas- the main notes area can be either
inbox/or the vault root directly (Obsidian-style flat vaults) - built-in folder labels are customizable in the UI
Daily notes
Daily notes are optional and can be enabled from Settings.
- when enabled, Zenvoy can open or create today's note automatically
- the title is a simple ISO date like
2026-04-21 - daily notes live in a dedicated directory under your primary notes area
Editor and preview
The editor stack is CodeMirror 6 with a Markdown-oriented workflow:
- live preview behavior in the editor
- heading folding
- outline extraction and jumps
- configurable line numbers and line-height
- syntax highlighting for fenced code blocks
- wiki links, callouts, tables, footnotes, and local embeds
- Vim block cursor and keyboard navigation
Preview and split mode support:
- GitHub-flavored Markdown
- KaTeX math
- Mermaid
- TikZ
- JSXGraph
- function-plot
- callouts, footnotes, wiki links, and backlinks
Search, tasks, tags, and built-in views
- note search by title and path
- vault-wide text search
- tags view
- tasks view
- archive view
- trash view
- quick notes view
- built-in help/manual
Obsidian-friendly vault support
- primary notes can live at the vault root instead of requiring
inbox/ - loose files anywhere in the vault are surfaced as files/assets
- embedded files like
![[image.png]]resolve like Obsidian - legacy
attachements/and_assets/folders are recognized
Files and local assets
- local images and files appear in the vault tree
- images, SVGs, videos, audio, PDFs open inside Zenvoy tabs
- watcher updates include non-Markdown file changes
- sidebar multi-select with Cmd/Ctrl-click and Shift-click
Themes, fonts, and customization
- theme families and light/dark/auto modes
- interface, text, and monospace font selection
- editor font size and line-height controls
- preview and editor width controls
- keymap overrides
- Vim toggles and leader hint behavior
- search backend selection
- vault layout and daily notes settings
- system-folder display labels
Architecture
src/ Frontend (React + TypeScript + Vite)
app/ App components, store, lib
bridge/ Bridge adapters (Tauri IPC + HTTP)
shared/ Domain types
src-tauri/
src/
main.rs Tauri desktop entry point
commands.rs 68 Tauri commands
vault/ Vault operations (CRUD, trash, archive, search, etc.)
config/ Configuration management
watcher/ File system watcher (notify crate)
server/ Axum HTTP server (routes, auth, middleware, WebSocket)
cli/ zen CLI (clap)
mcp/ MCP JSON-RPC server (26 tools)
bin/
server.rs Standalone Axum server binary
cli.rs zen CLI binary
Development
Requirements
- Node.js 22+
- Rust (stable)
- npm
Install dependencies
npm ci
Run the desktop app
npx tauri dev
Run the standalone server
cd src-tauri && cargo run --bin zenvoy-server
Environment variables:
ZENVOY_VAULT_PATH: path to the vault directory (default:~/ZenvoyVault)ZENVOY_BIND: server bind address (default:127.0.0.1:7878)ZENVOY_AUTH_TOKEN: bearer token for non-loopback access
Run the CLI
cd src-tauri && cargo run --bin zen -- --help
Run tests
cd src-tauri && cargo test --lib
Build for production
npx tauri build
Self-hosting with Docker
Start the self-hosted app
docker compose up -d
Then open http://localhost:7878.
Default Docker mounts
- host
./vault→ container vault directory - host
./data→ container/data
Security defaults
- published port binds to
127.0.0.1unless overridden - auth token generated on first run and stored in
./data/auth-token - browser signs in with token once, then uses an
HttpOnlysession cookie - container runs as local UID/GID with read-only root filesystem
Choosing a different vault folder
CONTENT_ROOT="$HOME/Documents/MyVault" docker compose up -d
Environment variables
ZENVOY_BIND: server bind addressZENVOY_VAULT_PATH: hard-lock to a specific vault pathZENVOY_AUTH_TOKEN: set a specific auth tokenZENVOY_BROWSE_ROOTS: limit what the web picker can browseZENVOY_ALLOWED_ORIGINS: restrict which browser origins can connectALLOW_INSECURE_NOAUTH=1: disable auth (loopback only recommended)
MCP integration
Zenvoy ships a dedicated MCP server exposing 26 vault tools:
- reading, creating, moving, appending to notes
- listing notes, folders, and assets
- searching vault text
- toggling tasks
- managing templates and comments
Run the MCP server:
cd src-tauri && cargo run --bin zen -- mcp
Web vault picker
The self-hosted web build includes a server-backed vault chooser:
- browses folders on the server, not the browser machine
- only browses configured allowed roots by default
- supports common shortcuts (iCloud Drive, home, documents)
Current status
Zenvoy is actively evolving. The desktop app and self-hosted server share the same Rust backend. The zen CLI provides terminal access to all vault operations.
Acknowledgments
This project is a complete rewrite of the original ZenNotes Electron + Go codebase in Rust (Tauri + Axum). Thanks to all the contributors of the original project whose work made this possible.
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。