Search Notes
vault_searchSearch across all vault notes using hybrid keyword and semantic matching, refined by cross-encoder reranking; narrow results with metadata filters like folder, tags, or date bounds.
Instructions
Hybrid search across all vault notes, ranked by combined keyword and semantic relevance using Reciprocal Rank Fusion (RRF) — combining FTS5 keyword matching with vector similarity. Results are refined by a cross-encoder reranker using position-aware score blending when available. Semantic matching finds notes even when exact keywords differ — "career aspirations" finds notes about "goals" and "targets". Falls back to keyword-only (FTS5 BM25) transparently while embeddings are being built. Combine a text query with structured filters to narrow results by metadata — the "narrow by metadata, search by text" pattern. Unquoted terms use implicit AND with porter stemming; wrap in double quotes for exact phrases; punctuated terms (vault-cortex, deploy/local) are matched as exact adjacent-word phrases automatically.
Filters — all conditions AND-combine with each other and the text query:
folder: path prefix (e.g. "Projects")
tags: require all listed tags (AND)
type: exact match on frontmatter type (e.g. "person", "session-log")
related: require all listed related links (AND)
properties: arbitrary frontmatter key-value pairs, supports string/number/boolean (e.g. { status: "active" })
created: date bounds { before, on, after } in YYYY-MM-DD on the frontmatter created property — before/after are exclusive, on is exact (calendar-day match, server-local). Notes without a parseable created property never match
modified: date bounds { before, on, after } in YYYY-MM-DD on filesystem modified time (server-local day boundaries) — before/after match strictly earlier/later days, on matches within the day
Example: vault_search({ query: "kubernetes networking", filters: { tags: ["reference"] } }) Example: vault_search({ query: "meeting notes", filters: { type: "meeting", folder: "Work" } }) Example: vault_search({ query: "decision", filters: { modified: { after: "2026-06-30" } } }) — matching notes touched in July or later Example: vault_search({ query: "how the server watches for file changes" }) — semantic: finds notes about chokidar and file watchers even without those exact terms
When to use: The primary discovery tool for content-based queries, optionally constrained by metadata. Semantic matching bridges vocabulary gaps — try natural-language queries, not just keywords. Prefer vault_search_by_tag for tag-only queries without text. Prefer vault_search_by_folder for browsing a folder. Prefer vault_search_by_property for metadata-only queries. Prefer vault_recent_notes for time-based browsing.
Errors:
No matches returns { results: [], total: 0 }, not an error
Malformed query syntax is sanitized automatically — the tool never throws a query syntax error
A malformed or calendar-invalid created/modified date filter throws with remediation text ("Use YYYY-MM-DD")
Returns: JSON with results array (path, title, snippet, score, tags, folder, type, created, modified, bytes), total count, search_mode ("hybrid" or "fts"), and reranked (boolean — true when cross-encoder reranking refined the ordering). search_mode indicates which ranking was used — "hybrid" when vector embeddings contributed, "fts" when only keyword matching was available. score reflects combined relevance (higher = more relevant). created is omitted when null. bytes is the on-disk file size. With filters.include_leading_callout, each result also carries leading_callout ({ type, title, body }) when present.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query text — unquoted terms use implicit AND with stemming; wrap in double quotes for exact phrases | |
| filters | No | Optional structured filters — all conditions AND-combine with each other and with the text query |