vault-search-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| VAULT_SEARCH_CONFIG | No | Path to a configuration file. Used when it points to an existing file; otherwise falls back to config.yaml in the working directory, config.yml, etc. | |
| VAULT_SEARCH_VAULT_PATH | No | Path to the vault directory. Overrides paths.vault_path in the configuration file. |
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 |
|---|---|
| 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 |
|---|---|
| search_vaultB | Search vault notes semantically with cross-encoder reranking. Flow: query embedding, vector retrieval, then cross-encoder reranking. |
| search_vault_hybridB | Combine semantic and keyword search. This can recover exact technical terms, names, and acronyms alongside semantically related content. |
| search_by_folderA | Search semantically within one vault folder. Descendant folders are included by the search backend. |
| vault_statsA | Return search-index statistics. Returns: Totals for chunks and notes, plus the last modification time. |
| reindex_vaultA | Rebuild the complete vault index. Use this after broad reorganizations or when the rebuildable index must be recreated. |
| reindex_noteA | Reindex one note incrementally. |
| system_statsA | Return measured operation and subsystem statistics. Includes observed p50/p95 latency, cache counters, catalog totals, and vector-index statistics. |
| sync_vaultA | Synchronize vault files with the index. Detects new, modified, and deleted files. Use this after files changed while the server was stopped. |
| compact_indexA | Compact the LanceDB index. This merges small fragments and removes obsolete versions after incremental mutations. Returns: Compaction statistics. |
| health_checkA | Return a health snapshot for monitoring. Checks the index, catalog, model state, and measured latency alerts. Returns: Overall status and component details. |
| find_similar_notesA | Find notes similar to one specific note. Averages the note's chunk embeddings and searches for semantically similar content. |
| search_duplicatesC | Find groups of duplicate or highly similar notes. Compares note embeddings and groups notes above the similarity threshold. |
| search_advancedB | Run semantic search with structured filters. Every optional filter is combined with AND. |
| benchmark_searchA | Measure local search latency. Results describe only this process, data set, configuration, and runtime. |
| vector_index_statusA | Return ANN vector-index status. The index is created when the configured chunk threshold is reached. Returns: Current existence, threshold, chunk count, eligibility, and auto-creation setting. |
| get_backlinksB | Find notes that link to one target note. Uses the rebuildable link index instead of rereading vault files. |
| get_outlinksB | List every indexed link from one note. Uses the same rebuildable link index as get_backlinks. |
| find_broken_linksA | Find links that point to missing notes. Broken links have is_resolved=false in the rebuildable link index. |
| find_orphan_notesB | Find notes with no backlinks. These notes are isolated from incoming graph edges. |
| link_statsB | Return vault link statistics. Includes totals, most-referenced notes, and notes with most outlinks. |
| get_recent_notesB | Return recently modified notes. Results are ordered by modification time, newest first. |
| tag_statsA | Return vault tag usage statistics. Each tag is counted once per note. |
| folder_treeA | Return the vault folder structure as a hierarchy. Uses the SQLite catalog without scanning the filesystem. |
| search_by_tagsA | Find notes by exact tags without semantic search. Use tag_stats to discover available tags before filtering. |
| random_noteA | Return a random vault note. Uses SQLite's random ordering over the filtered catalog. |
| daily_noteB | Return information about the daily note for one date. Daily notes use the Obsidian YYYY-MM-DD.md convention in the selected folder. |
| read_noteA | Read a complete Markdown note with parsed frontmatter. Only .md is supported. Use search_vault for PDF or Canvas content. |
| get_note_metadataA | Return Markdown note metadata without the body. Returns parsed frontmatter, extracted tags, and file metadata for .md. |
| list_notesA | List vault notes with filters and pagination. Lists .md, .pdf, and .canvas. Only .md can be read with read_note. For PDF and Canvas files, use search_vault. |
| create_noteA | Create a Markdown note and fail if it already exists. Only .md is supported. |
| write_noteA | Overwrite or create a Markdown note from complete content. Use this when the caller already has the complete .md content. |
| append_noteA | Append content to an existing Markdown note. Only .md is supported. |
| update_frontmatterA | Update YAML frontmatter on an existing Markdown note. Only .md is supported. Merge is shallow, so arrays and objects are replaced. |
| delete_noteA | Delete a .md, .pdf, or .canvas note by moving it to vault trash. Permanent deletion is unsupported. Files remain recoverable in .trash. |
| move_noteA | Move or rename a note. Source and destination extensions must match, and ignored folders are blocked. |
| generate_missing_idsA | Add UUIDv7 ids to Markdown notes that lack a frontmatter id. UUIDv7 values follow RFC 9562 and are time-ordered. |
| validate_frontmatterA | Validate note frontmatter or a supplied dictionary against the schema. Use this before creating or updating notes. |
| enrich_frontmatterA | Enqueue required-frontmatter enrichment in the background. Returns a job id immediately. Use enrich_frontmatter_status to inspect it. |
| enrich_frontmatter_statusB | Return the status of frontmatter enrichment jobs. |
| graph_dataA | Export link-graph data for visualization. The node-and-edge format can feed D3.js, Obsidian Graph, or Gephi. |
| suggest_linksA | Suggest links for a note based on semantic similarity. Finds similar notes that are not already linked. |
| find_link_clustersA | Detect clusters of densely connected notes. Uses connected components to find isolated knowledge groups. |
| find_bridge_notesB | Find articulation points in the note graph. Removing an articulation point increases the number of connected components. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| vault_stats_resource | Return aggregate vault statistics. Includes note count, chunk count, and last modification. |
| vault_folders_resource | Return the vault folder tree. The response is a hierarchical directory structure. |
| vault_notes_list_resource | Return one bounded page of the note catalog. ``has_more`` reports whether matches remain after the snapshot. |
| vault_recent_resource | Return notes modified in the last seven days. This provides a bounded recent-activity snapshot. |
| vault_tags_resource | Return all indexed vault tags with counts. Counts each tag once per note. |
TDQS
Scored across 43 tools
Many tools have overlapping purposes, especially the search family: search_vault, search_vault_hybrid, search_advanced, search_by_folder, search_by_tags, and search_duplicates all blur together. Similar overlaps exist among stats/status tools and maintenance operations like sync_vault, reindex_vault, and compact_index, making it difficult to choose the correct tool.
Most tools follow a verb_noun snake_case pattern, but the verbs are inconsistent across similar actions (search_ vs. find_ vs. get_ vs. list_ vs. read_). A few names like graph_data and vector_index_status break the pattern, and the proliferation of search_* variants makes naming feel less systematic.
With 43 tools, this server is well beyond the ideal 3-15 range and even past the 25+ threshold. While the domain is broad, many tools are highly specialized or redundant, so the large count feels excessive rather than well-scoped.
The tool surface covers CRUD for notes, search, tags, folders, graph export, frontmatter validation/enrichment, and index maintenance. It is quite complete for an Obsidian vault server, though some redundancy suggests the same capabilities could have been consolidated without major gaps.