pvliesdonk avatar

Markdown Vault MCP

pvliesdonk/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 tools

Public 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/state

Persistent-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_ALLOW

Comma-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_DENY

Comma-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_NAME

Rename this server instance; defaults to the project name.

MARKDOWN_VAULT_MCP_INSTANCE_DESCRIPTION

Concise routing context that distinguishes this deployment's material or responsibility.

MARKDOWN_VAULT_MCP_INSTRUCTIONS_EXTRA

Deployment-specific behavioral policy added to the generated MCP instructions.

MARKDOWN_VAULT_MCP_INSTRUCTIONS

Legacy: replaces all generated MCP instructions (deprecated; use _INSTANCE_DESCRIPTION for routing and _INSTRUCTIONS_EXTRA for policy).

MARKDOWN_VAULT_MCP_LOG_LEVELdefault: INFO

Log 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_FORMAT

Log 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:11434

Ollama server URL for the ollama embedding provider. Bare (not MARKDOWN_VAULT_MCP_-prefixed), matching the Ollama ecosystem convention.

OPENAI_API_KEYsecret

OpenAI 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_KEYsecret

Voyage 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_URL

Bare 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_MODEL

Bare fallback for MARKDOWN_VAULT_MCP_OPENAI_EMBEDDING_MODEL.

MARKDOWN_VAULT_MCP_BUILD_TIMEOUT_Sdefault: 60

Maximum 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: 60

Maximum 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_URL

Hosted MCP endpoint for CLI reads. The explicit server option overrides it. Local mode bypasses it.

MARKDOWN_VAULT_MCP_CLIENT_CONFIG

Client TOML profile path; defaults to XDG_CONFIG_HOME/markdown-vault-mcp/client.toml.

MARKDOWN_VAULT_MCP_CLIENT_TOKENsecret

Optional 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/vault

Path 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: false

Set 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: true

Refuse 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: false

Set 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: false

Hide the MCP Apps UI tools (browse_vault, show_context) from the tool listing for clients that do not render MCP Apps panels.

Readme

Markdown Vault MCP logo

Markdown Vault MCP


View the full README on GitHub

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

More from pvliesdonk

Related Documents & Knowledge MCP servers

View all
1epochal-dev avatarOpen Notebookepochal-dev/open-notebook-mcpMCP server that wraps the Open Notebook API30stars
2keshrath avatarAgent Knowledgekeshrath/agent-knowledgeCross-session memory for AI agents - knowledge graph, scoring, semantic search19stars
3oleksandrkucherenko avatarObsidian Vault MCP Serveroleksandrkucherenko/mcp-obsidian-via-restAccess Obsidian vaults via Local REST API - read, search, and interact with notes13stars
4aryanbv avatarPdf Toolkit Mcparyanbv/pdf-toolkit-mcpWrite-capable PDF toolkit MCP: 22 tools to read, create, render, encrypt, merge & fill PDFs.7stars
5sunub avatarSunub Obsidian Mcp Serversunub/obsidian-mcp-serverSearch your Obsidian vault to quickly find notes by title or keyword, summarize related content, a…2stars
6us-all avatarGoogle Driveus-all/google-drive-mcp-serverGoogle Drive + Workspace MCP — Docs, Sheets, Slides, Shared Drives, Labels, Approvals, DWD1stars