
Markdown Vault MCP
Point this at any folder of Markdown files and you get a 30-tool MCP server that turns your notes into queryable context. It combines SQLite FTS5 full-text search with semantic vector search (FastEmbed, Ollama, or OpenAI), handles YAML frontmatter indexing, and exposes read, write, edit, delete, and rename operations with automatic incremental reindexing. The adaptive chunking splits long sections at progressively deeper heading levels until they fit a configurable word budget, and search returns sentence-scale snippets by default to keep context costs bounded. Ships with optional Git auto-commit, OIDC auth for HTTP deployments, and 6 prompt templates including one that scans recent notes and proposes missing wikilinks. Useful for Obsidian vaults, Zettelkasten collections, or any documentation folder you want Claude to search and modify in conversation.
- GitHub stars
- 38
- tools
- 14
- auth
- Secret needed
- transport
- STDIO, HTTP
- env vars
- 24
- last updated
- Nov 8, 2026
Tools
14 toolsPublic tool metadata for what this MCP can expose to an agent.
writeWrite or replace a note; the write tools are on by default and hidden when MARKDOWN_VAULT_MCP_READ_ONLY=true.
Write or replace a note; the write tools are on by default and hidden when MARKDOWN_VAULT_MCP_READ_ONLY=true.
No parameter schema in public metadata yet.
editEdit an existing note in place.
Edit an existing note in place.
No parameter schema in public metadata yet.
appendAppend content to a note.
Append content to a note.
No parameter schema in public metadata yet.
deleteDelete a note.
Delete a note.
No parameter schema in public metadata yet.
renameRename a note.
Rename a note.
No parameter schema in public metadata yet.
move_folderMove a folder.
Move a folder.
No parameter schema in public metadata yet.
fetchFetch a URL into the vault.
Fetch a URL into the vault.
No parameter schema in public metadata yet.
git_syncSync the vault with its git remote.
Sync the vault with its git remote.
No parameter schema in public metadata yet.
create_upload_linkCreate an upload link for a file.
Create an upload link for a file.
No parameter schema in public metadata yet.
query_documentsPage through indexed notes with exact keyword queries.
Page through indexed notes with exact keyword queries.
No parameter schema in public metadata yet.
count_documentsCount every note matching an exact keyword query.
Count every note matching an exact keyword query.
No parameter schema in public metadata yet.
aggregate_documentsGroup the full matching population of notes into buckets.
Group the full matching population of notes into buckets.
No parameter schema in public metadata yet.
search_pathsFind literal paths or nearby ASCII spellings of paths.
Find literal paths or nearby ASCII spellings of paths.
No parameter schema in public metadata yet.
get_server_infoReport the running server version.
Report the running server version.
No parameter schema in public metadata yet.
Sponsors
Configuration
MARKDOWN_VAULT_MCP_KV_STORE_URLdefault: file:///data/statePersistent-state backend URL shared by every pvl-core subsystem that needs state. `memory://` is in-process and lost on restart; `file:///path` persists on one server; `redis://`, `dynamodb://` and `mongodb://` each need their matching extra. When unset, defaults to `file:///data
MARKDOWN_VAULT_MCP_TOOLS_ALLOWComma-separated explicit tool names this instance exposes; every other tool is hidden from listings and cannot be invoked. Names matching no registered tool are inert. Mutually exclusive with `tools_deny`. Takes effect through `apply_tool_visibility`.
MARKDOWN_VAULT_MCP_TOOLS_DENYComma-separated explicit tool names hidden from this instance (absent from listings, cannot be invoked). Names matching no registered tool are inert. Mutually exclusive with `tools_allow`. Takes effect through `apply_tool_visibility`.
MARKDOWN_VAULT_MCP_SERVER_NAMERename this server instance; defaults to the project name.
MARKDOWN_VAULT_MCP_INSTANCE_DESCRIPTIONConcise routing context that distinguishes this deployment's material or responsibility.
MARKDOWN_VAULT_MCP_INSTRUCTIONS_EXTRADeployment-specific behavioral policy added to the generated MCP instructions.
MARKDOWN_VAULT_MCP_INSTRUCTIONSLegacy: replaces all generated MCP instructions (deprecated; use _INSTANCE_DESCRIPTION for routing and _INSTRUCTIONS_EXTRA for policy).
MARKDOWN_VAULT_MCP_LOG_LEVELdefault: INFOLog level for every logger in the process, FastMCP's included (DEBUG / INFO / WARNING / ERROR / CRITICAL). The -v CLI flag overrides to DEBUG. The unprefixed FASTMCP_LOG_LEVEL still works for one major version and logs a deprecation warning.
MARKDOWN_VAULT_MCP_LOG_FORMATLog rendering. rich is one colour event key=value line per record, for a terminal; json is one JSON object per record, for a collector. Unset picks rich when stderr is a terminal and json everywhere else, so a container or journald gets JSON with no configuration.
OLLAMA_HOSTdefault: http://localhost:11434Ollama server URL for the ollama embedding provider. Bare (not MARKDOWN_VAULT_MCP_-prefixed), matching the Ollama ecosystem convention.
OPENAI_API_KEYsecretOpenAI API key for the openai embedding provider, and the fallback key for the summarize tool when MARKDOWN_VAULT_MCP_SUMMARIZE_OPENAI_API_KEY is unset. Bare (not MARKDOWN_VAULT_MCP_-prefixed), matching the OpenAI ecosystem convention.
VOYAGE_API_KEYsecretVoyage AI API key for the voyage embedding provider. Bare (not MARKDOWN_VAULT_MCP_-prefixed), matching the OPENAI_API_KEY / OLLAMA_HOST convention. Setting it never auto-selects the provider; choose it explicitly with MARKDOWN_VAULT_MCP_EMBEDDING_PROVIDER=voyage.
OPENAI_BASE_URLBare fallback for MARKDOWN_VAULT_MCP_OPENAI_BASE_URL (embeddings). For the summarize tool it only routes traffic when an API key already enables the feature; it never enables summarize by itself.
OPENAI_EMBEDDING_MODELBare fallback for MARKDOWN_VAULT_MCP_OPENAI_EMBEDDING_MODEL.
MARKDOWN_VAULT_MCP_BUILD_TIMEOUT_Sdefault: 60Maximum seconds an index-backed tool or resource waits for the FTS index to become queryable during a cold-start background build before raising IndexUnavailableError(reason="timeout"). Increase for large vaults.
MARKDOWN_VAULT_MCP_DRAIN_TIMEOUT_Sdefault: 60Maximum seconds an index-querying read tool waits for the IndexWriter to drain when called with wait_for_pending_writes=true. On timeout the tool answers from the current index and reports index_stale=true in the response _meta.
MARKDOWN_VAULT_MCP_SERVER_URLHosted MCP endpoint for CLI reads. The explicit server option overrides it. Local mode bypasses it.
MARKDOWN_VAULT_MCP_CLIENT_CONFIGClient TOML profile path; defaults to XDG_CONFIG_HOME/markdown-vault-mcp/client.toml.
MARKDOWN_VAULT_MCP_CLIENT_TOKENsecretOptional CLI bearer token. A nonempty value overrides the profile-selected token environment source; an empty value leaves that source in effect. Never stored in client TOML.
MARKDOWN_VAULT_MCP_SOURCE_DIRdefault: /data/vaultPath to the markdown vault directory. When it does not exist, or the server cannot access it, the server starts but every tool fails with a message saying which until it is fixed (managed git mode clones into it). Symbolic links inside the vault are followed on Python 3.13+.
MARKDOWN_VAULT_MCP_READ_ONLYdefault: falseSet to true to hide the write tools (write, edit, append, delete, rename, move_folder, fetch, git_sync, the okf_* tools, create_upload_link) and serve a search-only vault.
MARKDOWN_VAULT_MCP_WRITE_PROTECT_EXISTINGdefault: trueRefuse a write that would overwrite an existing file when no if_match etag is supplied. Deliberate replacement still works: read the file first, then pass if_match. Unaffected: edit, append, delete, rename. Set to false to allow blind overwrites.
MARKDOWN_VAULT_MCP_REPORT_UNRESOLVED_LINKSdefault: falseSet to true to have write, edit and append list, under unresolved_links, the target of each link the call added that get_broken_links reports. Links the note already held are left out. Off by default, leaving those responses unchanged.
MARKDOWN_VAULT_MCP_DISABLE_APPS_UIdefault: falseHide the MCP Apps UI tools (browse_vault, show_context) from the tool listing for clients that do not render MCP Apps panels.
Readme
Details
- Repository
- github.com/pvliesdonk/markdown-vault-mcp
- Website
- pvliesdonk.github.io/markdown-vault-mcp
- Categories
- Documents & Knowledge, Search & Web Crawling
- Package
markdown-vault-mcp- Transport
- STDIO, HTTP
- Auth
- Required
- Registry
- MCP registry, active