markdown-vault-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OLLAMA_HOST | No | Ollama server URL (not MARKDOWN_VAULT_MCP_-prefixed) | http://localhost:11434 |
| OPENAI_API_KEY | No | OpenAI API key for the OpenAI embedding provider | |
| OPENAI_BASE_URL | No | OpenAI-compatible API base URL for embeddings (alternative) | https://api.openai.com/v1 |
| FASTMCP_LOG_LEVEL | No | Log level for FastMCP internals | INFO |
| OPENAI_EMBEDDING_MODEL | No | OpenAI-compatible embedding model name (alternative) | text-embedding-3-small |
| MARKDOWN_VAULT_MCP_EXCLUDE | No | Comma-separated glob patterns to exclude from scanning | |
| MARKDOWN_VAULT_MCP_GIT_LFS | No | Enable Git LFS | true |
| FASTMCP_ENABLE_RICH_LOGGING | No | Rich key=value text by default; set to 'false' for one-JSON-object-per-record output | true |
| MARKDOWN_VAULT_MCP_BASE_URL | No | Public base URL of the server (e.g. https://mcp.example.com) | |
| MARKDOWN_VAULT_MCP_GIT_TOKEN | No | Token/password for HTTPS auth (GIT_ASKPASS) | |
| MARKDOWN_VAULT_MCP_HTTP_PATH | No | HTTP endpoint path for streamable HTTP transport | /mcp |
| MARKDOWN_VAULT_MCP_READ_ONLY | No | Set to 'false' to enable write operations | true |
| MARKDOWN_VAULT_MCP_APP_DOMAIN | No | Override the Claude app domain used for MCP Apps iframe sandboxing | |
| MARKDOWN_VAULT_MCP_INDEX_PATH | No | Path to the SQLite FTS5 index file; set for persistence across restarts | in-memory |
| MARKDOWN_VAULT_MCP_SOURCE_DIR | Yes | Path to the markdown vault directory | |
| MARKDOWN_VAULT_MCP_STATE_PATH | No | Path to the change-tracking state file | {SOURCE_DIR}/.markdown_vault_mcp/state.json |
| MARKDOWN_VAULT_MCP_SERVER_NAME | No | MCP server name shown to clients | markdown-vault-mcp |
| MARKDOWN_VAULT_MCP_BEARER_TOKEN | No | Static bearer token; any non-empty string enables auth | |
| MARKDOWN_VAULT_MCP_FILE_WATCHER | No | Enable filesystem-event watcher for external changes | true |
| MARKDOWN_VAULT_MCP_GIT_REPO_URL | No | HTTPS remote URL for managed mode; enables clone/remote validation on startup | |
| MARKDOWN_VAULT_MCP_GIT_USERNAME | No | Username for HTTPS auth prompts | x-access-token |
| MARKDOWN_VAULT_MCP_INSTRUCTIONS | No | System-level instructions injected into LLM context; defaults to a description that reflects read-only vs read-write state | |
| MARKDOWN_VAULT_MCP_KV_STORE_URL | No | Unified key-value backend for HTTP session persistence | file:///data/state |
| MARKDOWN_VAULT_MCP_OLLAMA_MODEL | No | Ollama embedding model name | nomic-embed-text |
| MARKDOWN_VAULT_MCP_OIDC_AUDIENCE | No | Expected JWT audience claim | |
| MARKDOWN_VAULT_MCP_SNIPPET_WORDS | No | Width of the snippet window (words) in search results | 200 |
| MARKDOWN_VAULT_MCP_INDEXED_FIELDS | No | Comma-separated frontmatter fields to promote to the tag index for structured filtering | |
| MARKDOWN_VAULT_MCP_OIDC_CLIENT_ID | No | OIDC client ID registered with your provider | |
| MARKDOWN_VAULT_MCP_PROMPTS_FOLDER | No | Path to a directory of .md prompt files that extend or override built-in prompts | |
| MARKDOWN_VAULT_MCP_BUILD_TIMEOUT_S | No | Maximum seconds a relational/FTS-backed tool or resource waits for the index to become queryable during a cold-start background build | 60 |
| MARKDOWN_VAULT_MCP_CHUNKS_PER_FILE | No | Maximum chunks returned per document in search results | 2 |
| MARKDOWN_VAULT_MCP_DRAIN_TIMEOUT_S | No | Maximum seconds an index-querying read tool waits for the IndexWriter to drain | 60 |
| MARKDOWN_VAULT_MCP_EMBEDDINGS_PATH | No | Path to the numpy embeddings file; required to enable semantic search | disabled |
| MARKDOWN_VAULT_MCP_EVENT_STORE_URL | No | Legacy alias for KV_STORE_URL; honoured only when KV_STORE_URL is unset | |
| MARKDOWN_VAULT_MCP_FASTEMBED_MODEL | No | FastEmbed model name | BAAI/bge-small-en-v1.5 |
| MARKDOWN_VAULT_MCP_GIT_COMMIT_NAME | No | Git committer name for auto-commits | markdown-vault-mcp |
| MARKDOWN_VAULT_MCP_MAX_CHUNK_CHARS | No | Character cap the chunker enforces alongside MAX_CHUNK_WORDS | |
| MARKDOWN_VAULT_MCP_MAX_CHUNK_WORDS | No | Word cap per chunk | 400 |
| MARKDOWN_VAULT_MCP_OIDC_CONFIG_URL | No | OIDC discovery endpoint | |
| MARKDOWN_VAULT_MCP_OLLAMA_CPU_ONLY | No | Force Ollama to use CPU only | false |
| MARKDOWN_VAULT_MCP_OPENAI_BASE_URL | No | OpenAI-compatible API base URL for embeddings | |
| MARKDOWN_VAULT_MCP_REQUIRED_FIELDS | No | Comma-separated frontmatter fields required on every document | |
| MARKDOWN_VAULT_MCP_GIT_COMMIT_EMAIL | No | Git committer email for auto-commits | noreply@markdown-vault-mcp |
| MARKDOWN_VAULT_MCP_GIT_PUSH_DELAY_S | No | Seconds of write-idle time before pushing | 30 |
| MARKDOWN_VAULT_MCP_TEMPLATES_FOLDER | No | Relative folder path where note templates live | _templates |
| MARKDOWN_VAULT_MCP_EMBEDDING_PROVIDER | No | Embedding provider: openai, ollama, or fastembed | auto-detect |
| MARKDOWN_VAULT_MCP_OIDC_CLIENT_SECRET | No | OIDC client secret | |
| MARKDOWN_VAULT_MCP_TRANSFER_TTL_MAX_S | No | Maximum permitted TTL for transfer links | 86400 |
| MARKDOWN_VAULT_MCP_FASTEMBED_CACHE_DIR | No | FastEmbed model cache directory | |
| MARKDOWN_VAULT_MCP_GIT_PULL_INTERVAL_S | No | Seconds between git fetch + ff-only update attempts | 600 |
| MARKDOWN_VAULT_MCP_MAX_NOTE_READ_BYTES | No | Maximum bytes returned by full-document read() for .md files | 262144 |
| MARKDOWN_VAULT_MCP_OIDC_JWT_SIGNING_KEY | No | JWT signing key; required on Linux/Docker | |
| MARKDOWN_VAULT_MCP_OIDC_REQUIRED_SCOPES | No | Comma-separated required scopes | openid |
| MARKDOWN_VAULT_MCP_ATTACHMENT_EXTENSIONS | No | Comma-separated allowed extensions without dot; use '*' to allow all non-.md files | |
| MARKDOWN_VAULT_MCP_GITHUB_WEBHOOK_SECRET | No | Shared secret for GitHub push-event webhook | |
| MARKDOWN_VAULT_MCP_GIT_COMMIT_NAME_CLAIM | No | OIDC claim key to use as the commit author name | |
| MARKDOWN_VAULT_MCP_GIT_COMMIT_EMAIL_CLAIM | No | OIDC claim key to use as the commit author e-mail | |
| MARKDOWN_VAULT_MCP_MAX_ATTACHMENT_SIZE_MB | No | Maximum attachment size in MB returned by read() / accepted by write() | 1.0 |
| MARKDOWN_VAULT_MCP_OPENAI_EMBEDDING_MODEL | No | OpenAI-compatible embedding model name | text-embedding-3-small |
| MARKDOWN_VAULT_MCP_TRANSFER_TTL_DEFAULT_S | No | Default token lifetime (seconds) for transfer links | 3600 |
| MARKDOWN_VAULT_MCP_FILE_WATCHER_DEBOUNCE_S | No | Seconds of quiet after the last event before triggering reindex | 2.0 |
| MARKDOWN_VAULT_MCP_LENGTH_DOWNWEIGHT_ALPHA | No | Down-weights longer chunks in ranking | 0.25 |
| MARKDOWN_VAULT_MCP_OIDC_VERIFY_ACCESS_TOKEN | No | Set 'true' to verify the upstream access token as a JWT | |
| MARKDOWN_VAULT_MCP_TRANSFER_MAX_UPLOAD_BYTES | No | Per-upload size cap for transfer links | 104857600 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tasks | {
"list": {},
"cancel": {},
"requests": {
"tools": {
"call": {}
},
"prompts": {
"get": {}
},
"resources": {
"read": {}
}
}
} |
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| searchA | Find documents matching a query using full-text or semantic search. Search the vault. Omit 'mode' for the best mode this vault can serve — hybrid when embeddings are configured, keyword when they are not. Pass mode="keyword" for exact terms, operators, or filenames, where FTS5/BM25 beats fusion. Use mode="semantic" for pure vector similarity. The 'content' field in each result is a snippet by default, not the full document. Use read(path, section=heading) to retrieve the full text of a specific section. |
| readA | Read the full content of a document or attachment by path. For .md documents: returns content (the full raw file including frontmatter), plus the parsed frontmatter, title, and folder. For attachments (pdf, png, etc.): returns base64-encoded binary content and MIME type. Use 'list_documents(include_attachments=True)' to discover attachment paths. Use 'stats' to see allowed extensions. Do not guess paths — look them up first via 'search' or 'list_documents'. To recover the full text of a specific section returned by 'search', pass section=heading (the value from the result's 'heading' field). Context cost: every byte returned counts against the LLM's
context budget. Reads above |
| list_documentsA | List documents (and optionally attachments) in the vault. Use this to enumerate documents when you need a complete listing, not ranked search results. For finding documents by content, use 'search'. Does NOT include body content — call 'read' for full text. |
| list_foldersA | List all folder paths that contain documents. Call this to discover valid folder names before filtering 'search' or 'list_documents' by folder. The root folder (top-level documents) is represented as an empty string "". |
| list_tagsA | List all distinct values for a frontmatter field across the vault. Use this to discover valid filter values before calling 'search' with the 'filters' argument. Only fields listed in indexed_frontmatter_fields (see 'stats') are indexed — querying other fields returns an empty list. |
| statsA | Get an overview of the vault's size, capabilities, and configuration. Call this at the start of a session to understand what the vault contains and what search modes are available. The 'semantic_search_available' field tells you whether mode="semantic" or mode="hybrid" can be used in 'search'. |
| get_similarA | Find notes most semantically similar to the given document. Uses stored embedding vectors — no re-embedding needed. The reference document is excluded from results. Requires semantic search to be configured (check 'stats' for semantic_search_available). Returns an empty list if embeddings are not configured (check 'embeddings_status') or the document has no stored vectors (call 'build_embeddings' to embed missing chunks). |
| get_tocA | Heading outline for a single note or a whole folder subtree. If 'path' ends in '.md' it is a note: returns a flat ordered list of {heading, level} (the title as a synthetic H1). Otherwise 'path' is a folder: returns {path, notes, truncated} where 'notes' is an ordered list of {path, title, headings} aggregating every note under the subtree. Mirrors the 'toc://vault/{path}' resource, adding the max_level / max_notes controls below. |
| get_recentA | Get the most recently modified notes in the vault. Returns notes ordered by file modification time (most recent first). Useful for surfacing recently changed content without a search query — for example to summarize recent activity or resume work on recently edited notes. |
| get_contextA | Get a consolidated context dossier for a document. Replaces separate calls to 'get_backlinks', 'get_outlinks', and 'get_similar' when you need more than one. Returns everything useful about a note in one call: its metadata, backlinks (documents that link to it), outlinks (documents it links to), semantically similar notes, other notes in the same folder, and indexed frontmatter tags. Use this instead of making 4-5 separate tool calls when you need a full picture of a note's place in the vault. |
| get_conventionsA | Get the user's authoring conventions that apply to a note or folder. Vaults may carry per-folder convention files (by default '_conventions.md') describing how notes in that folder should be authored — for example "reference material: keep notes self-contained; do not link out to project or journal notes". Conventions accumulate down the tree: a vault-root file applies everywhere and nested files add to it, so entries are returned root-first with the most specific guidance last. Call this before creating, restructuring, or linking notes so the result follows the vault owner's rules. The write/edit tools also echo applicable conventions in their responses for a post-write compliance check. Reads directly from disk — works even while the search index is still building. |
| okf_validateA | Audit the vault's OKF (Open Knowledge Format) conformance. Reports conformance as degrees, not a verdict — during a migration this is the progress meter. Reads the vault from disk (works before the index is built and before the vault declares 'okf_version'), and skips paths matching the vault's effective exclude patterns. Findings come in three severities. Conformance (spec violations): notes missing a non-empty 'type', notes with unparseable frontmatter, and 'okf_version' declared outside the root index.md. Advisory (tolerated but worth fixing): 'status' values outside draft/stable/deprecated, log.md files whose '##' headings are not YYYY-MM-DD dates, and a missing root index.md. Informational (not deviations): notes containing wikilinks (relevant only when exporting; internal links resolve fine either way) and notes lacking the recommended 'title'/'description'. Reserved files (index.md, log.md) are exempt from the 'type' rule. Returns: Report dict: 'mode', 'declared_version', 'active' (detection state); 'total_notes' and 'conformant_notes' (the progress ratio); per-rule findings each carrying 'count' and up to 20 'examples' paths ('missing_type', 'unparseable_frontmatter', 'misplaced_okf_version', 'unknown_status', 'log_heading_shape', 'wikilink_files', 'missing_recommended'); and 'root_index_missing' (bool). |
| get_backlinksA | Find all documents that link TO the given document (backlinks). Use this to discover which notes reference a particular document. For a full picture of a note's place in the vault (backlinks, outlinks, similar notes, folder peers), use 'get_context' instead of calling this separately. Call 'get_backlinks' directly when you only need the inbound link list. Backlinks reveal implicit relationships that search alone cannot surface — they show what other authors considered relevant to this document. |
| get_outlinksA | Find all links FROM the given document to other documents (outlinks). Use this to see what a document references. For a full picture of a note's place in the vault, use 'get_context' instead of calling this separately. Call 'get_outlinks' directly when you only need the outbound link list. Each result includes an 'exists' flag — False means the link is broken (the target is missing from the vault). |
| get_broken_linksA | Find all links that point to non-existent documents (broken links). Use this to audit link health across the vault. Call this when 'stats' shows broken_link_count > 0, or after a 'rename' that did not use update_links=True, to see what links were left pointing to the old path. A broken link means the target path does not match any indexed document — the referenced note may have been deleted, renamed, or never created. |
| get_orphan_notesA | Return all notes with no inbound or outbound links. WARNING: returns ALL orphans with no limit — check 'stats' for orphan_count before calling on large vaults. An orphan note has no backlinks (no other note links to it) and no outlinks (it links to nothing). Call this when 'stats' shows orphan_count > 0. Useful for finding isolated notes that may need to be connected to the rest of the vault or removed. |
| get_most_linkedA | Return the documents with the most inbound links, ranked by backlink count. Useful for discovering hub notes — frequently-referenced notes that are likely key concepts in the vault. For the specific documents that link to a particular note, use 'get_backlinks' instead. |
| get_connection_pathA | Find the shortest connection path between two notes in the link graph. Treats links as undirected — a link from A to B or B to A both count as a connection. Uses BFS; max_depth is clamped to [1, 10]. Useful for discovering how two seemingly unrelated notes are connected through the vault's link structure (the "six degrees of separation" for your notes). |
| embeddings_statusA | Check the embedding provider configuration and vector index status. Use this to diagnose why semantic search is unavailable. Embeddings are built automatically on startup when configured, so chunk_count should normally match the FTS chunk count from 'stats'. If it is lower, call 'build_embeddings' (without force) to embed the missing chunks. Use 'build_embeddings' with force=True only to rebuild from scratch after changing the embedding model. Returns: Dict with the following fields: |
| get_index_statusA | Return background-build state of the FTS index. Use this when Returns: Dict with the following fields: |
| writeA | Create or overwrite a document or attachment. For .md documents: uses 'content' (markdown body) and optional 'frontmatter'. WARNING: replaces the entire file — use 'edit' for targeted changes. The search index is updated immediately; do not call 'reindex' afterward. For attachments (pdf, png, etc.): uses 'content_base64' (base64- encoded binary). 'content' and 'frontmatter' are ignored. Parent directories are created automatically for both. |
| editA | Make a targeted text replacement in an existing .md note (not supported for attachments). Three edit modes:
When exact match fails, a normalized comparison is attempted (Unicode NFC, dash/quote normalization, whitespace collapsing). If a unique normalized match is found, it is used and match_type='normalized' is returned. Always call 'read' first to get the current text and line numbers. The search index is updated immediately; do not call 'reindex'. |
| appendA | Append text to the end of an existing .md note without reading it. The cheapest way to add content at the end of a note (log entries, journal additions, checklist items): unlike 'edit', no prior 'read' is needed, so the existing note content never enters the context. Prefer this over 'edit' whenever the change is purely additive at the end of the note. A newline is inserted between the existing content and the appended text when the file does not already end with one, so the appended text starts on its own line. Include leading blank lines or heading markers in 'content' yourself if you want a separating paragraph or section. The search index is updated immediately; do not call 'reindex' afterward. |
| deleteA | Permanently delete a document or attachment. For .md documents: removes the file and immediately updates all search indices — do not call 'reindex' afterward. For attachments: only the file is deleted (no index to update). IRREVERSIBLE unless git history exists. Confirm the path with the user before calling. |
| renameA | Rename or move a document or attachment. When renaming a .md note, always pass update_links=True to rewrite links in other documents that point to the old path — omitting this leaves those links broken. For .md documents: the file and its search index entries are updated immediately — do not call 'reindex' afterward. For attachments: only the file is moved (no index update needed). Parent directories for new_path are created automatically. |
| move_folderA | Move an entire folder subtree to a new location in one call, rewriting every link across the vault that points into the moved subtree — the folder-level analogue of 'rename'. Moves all files under old_dir (.md notes, attachments, and any other files) to the matching path under new_dir, preserving structure. Links between documents inside the subtree and backlinks from outside are all rewritten. The search index is updated immediately — do not call 'reindex' afterward. The move is atomic at the gate: if any destination file already exists, the call fails before moving anything. Link rewrites are best-effort — a source that cannot be rewritten is reported in failed_links rather than aborting the move. Note: an OS error during the move phase itself (permission error, full disk, concurrent file removal) can leave the subtree partially moved with the index unchanged; call 'reindex' to reconcile the index with the on-disk state. |
| fetchA | Download a file from a URL and save it to the vault. Fetches content from an HTTP/HTTPS URL and writes it as a note or attachment. Designed for MCP-to-MCP file transfer when content is too large to pass through the LLM context window. Context cost: zero for the bytes themselves — the file is
downloaded server-side and saved to the vault. After a successful
fetch, reference the file by its For .md paths: the response is decoded as UTF-8 text and saved as a markdown note with optional frontmatter. The search index is updated immediately. For other paths: the response is saved as a binary attachment. The existing attachment size limit applies. |
| okf_convert_linksA | Rewrite wikilinks as OKF bundle-root-absolute markdown links. A migration transform (Open Knowledge Format): converts every
resolvable |
| okf_generate_indexA | Generate a reserved OKF index.md listing from the table of contents. A migration transform (Open Knowledge Format): writes (or overwrites)
the folder's |
| okf_seed_logA | Seed a reserved OKF log.md change history from git history. A migration transform (Open Knowledge Format): writes a |
| get_historyA | List commits that touched a note, folder, or the whole vault. Only available for git-backed vaults. Use 'stats' to check whether git is configured, or call this and handle the error. |
| get_diffA | Return the diff of a note between a reference point and HEAD. Only available for git-backed vaults. Exactly one of 'since_sha' or 'since_timestamp' must be provided. Use 'get_history' first to find commit SHAs. |
| browse_vaultA | Open a visual vault explorer UI for the user — not for reading vault content. Displays an interactive visual panel (MCP Apps) to the user so they can
browse the file tree, explore the link graph, or view a note's relationships.
Do NOT call this to retrieve or inspect vault content programmatically — use
Only call this when the user explicitly asks to open the visual vault browser or explorer (e.g. "show me the vault browser", "open the graph view"). |
| show_contextA | Open a visual context card UI for the user — not for reading note relationships. Displays an interactive context panel (MCP Apps) to the user showing a
note's backlinks, outlinks, similar notes, tags, and frontmatter visually.
Do NOT call this to retrieve note relationship data programmatically — use
Only call this when the user explicitly asks to open the visual context card or explorer (e.g. "show me the context card for this note"). |
| get_server_infoA | Report wrapper and upstream version info for markdown-vault-mcp. Returns server_name, server_version, core_version (fastmcp-pvl-core), and (when configured) an upstream version block. Useful for verifying a deployment matches the expected build. |
| reindexA | Run an incremental reindex on the writer thread. Only needed when files are modified outside this server — for example, by a text editor, a sync tool, or another process writing directly to the vault directory. Do NOT call this after using 'write', 'edit', 'delete', or 'rename' — those tools update the index immediately as part of the operation. Change detection is hash-based, so an unchanged file is never re-parsed. Use force=True to drop the index and re-parse every file regardless of hashes — the repair for index content that no longer matches what the current server would extract. A version upgrade that changes extraction does this by itself on the next start (#1124), so force=True is a manual escape hatch, not routine maintenance. When semantic search is configured, follow a force=True run with 'build_embeddings' (without force) so the vector index converges to the rebuilt chunk set; an ordinary reindex re-embeds as it goes. To rebuild all embeddings from scratch (e.g. after changing the embedding model), use 'build_embeddings' with force=True. A fast reindex (the common case — work scales with the drift, not
the vault) returns its result inline. A reindex still running at the
server's soft deadline continues in the background and returns
|
| build_embeddingsA | Rebuild vector embeddings for semantic and hybrid search. Embeddings are built automatically on startup, so this is normally not needed. Use force=True to rebuild from scratch after changing the embedding model. Without force, the vector index converges to the FTS chunk set: missing or changed documents are embedded, orphaned vectors are removed, unchanged chunks are untouched. A fast convergence (small drift) returns its result inline. A build
still running at the server's soft deadline — typical for a
force=True rebuild of a large vault — continues in the background
and returns |
| get_job_resultA | Retrieve the outcome of a background job started by a long-running tool on this server. When such a tool answers with status "working" and a job_id, call this tool with that job_id every few seconds until the status is terminal. Job records expire after a while — fetch results soon after completion. On this server, background jobs come from slow summarize, reindex, and build_embeddings calls. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| summarize | Summarize a vault document with structured coverage of main topics and key points. |
| research | Research a topic and consolidate findings as a new note. |
| discuss | Review a vault note and propose targeted edits: factual corrections, clarity, structure, and completeness. |
| related | Find related notes and suggest cross-references. Read-only — does not modify any documents. |
| compare | Compare two vault notes: agreements, contradictions, and unique information in each. |
| propose-links | Propose meaningful new links between semantically-close notes that aren't already connected. |
| create_from_template | Create a new note from a vault template. Pass template_name (e.g. "meeting-notes" or "meeting-notes.md") to skip discovery, or omit to browse available templates first. |
| summarize-subtree | Summarize a folder subtree or a set of notes with the client's own model, processing notes in batches so note bodies stay out of the retained conversation context. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| vault_config | Vault configuration: source path, read-only mode, indexed frontmatter fields, exclude patterns, allowed attachment extensions, folder conventions. For counts and search capabilities, use stats://vault. Index freshness is reported in _meta.index_stale. |
| vault_stats | Vault statistics — document count, chunk count, capabilities. Index freshness is reported in _meta.index_stale. |
| vault_tags | All tags grouped by indexed field. Index freshness is reported in _meta.index_stale. |
| vault_folders | All folder paths in the vault. Index freshness is reported in _meta.index_stale. |
| vault_recent | 20 most recently modified notes. Index freshness is reported in _meta.index_stale. |
| _app_shell |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/pvliesdonk/markdown-vault-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server