Skip to main content
Glama
aliasunder

Vault Cortex Obsidian MCP Server

Search by Property

vault_search_by_property
Read-onlyIdempotent

Find notes where a frontmatter property matches a value — metadata-only search, no text query needed. Handles both scalar properties (status: "active") and array properties (tags, related).

Instructions

Find notes where a frontmatter property matches a value — metadata-only search, no text query needed. Handles both scalar properties (status: "active") and array properties (tags, related).

Example: vault_search_by_property({ key: "status", value: "in-progress" }) Example: vault_search_by_property({ key: "type", value: "session-log", folder: "Code Projects" })

When to use: Finding notes by metadata when you don't have a text query. Prefer vault_search when you also have a text query (it supports property filters too). Prefer vault_search_by_tag for tag-specific queries (supports hierarchical prefix matching). Use vault_list_property_keys to discover valid keys and vault_list_property_values to see what values a key takes.

Parameters:

  • key matches exactly and case-sensitively; value matches stored text the same way, with no partial matching or globbing.

  • A value written as a complete, finite YAML number (-4, 04, .5, 4., 1e3, 0x1F, 0o17) also matches stored numbers numerically: "04" and "4.0" match number 4 and their own literal text, but not text "4". Anything else ("4abc", " 4", 0b binary, "1e999") matches only as text. Numbers compare as 64-bit floats, so integers past 2^53 can compare equal and "1e-999" matches 0.

  • Pass a checkbox as "1" (checked) or "0" (unchecked); a checkbox matches only as text, so "1.0" and "true" do not match.

  • An array element must equal value in full: "blog" matches tags: ["blog", "draft"] but not tags: ["my-blog"].

  • folder names a whole folder and includes its subfolders: "Projects" covers "Projects/Archive" but not "ProjectsOld/". Matching ignores ASCII letter case; omit folder to search the entire vault.

  • limit keeps the most recently modified matches. Nothing in the response signals truncation: exactly limit results may mean more exist, so raise limit to check.

Errors:

  • An unknown key or unmatched value returns an empty array, not an error.

Returns: JSON array of note metadata (path, title, tags, related, folder, type, created, modified, bytes, leading_callout?, additional_properties?), sorted by filesystem mtime descending — recently-synced notes may sort ahead of older content edits.

  • leading_callout appears only when the note has a leading callout.

  • additional_properties appears only when frontmatter has keys outside title, type, created, related, and the first key spelled tags in any letter case.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
keyYesProperty key name (e.g. "status", "type", "tags").
limitNoMax results (default 20, no upper cap)
valueYesValue to match (e.g. "active", "4", "1e-7").
folderNoRestrict to a folder (e.g. "Projects")

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv0.54.13
    • changedInput schema / properties / key / description
      Previous value: -"Property key name (e.g. \"status\", \"type\", \"tags\"). Use vault_list_property_keys to discover valid keys."New value: +"Property key name (e.g. \"status\", \"type\", \"tags\")."
    • changedInput schema / properties / limit / description
      Previous value: -"Max results (default 20)"New value: +"Max results (default 20, no upper cap)"
    • changedInput schema / properties / value / description
      Previous value: -"Value to match (e.g. \"active\", \"4\", \"1e-7\"). Use vault_list_property_values to discover valid values for a key."New value: +"Value to match (e.g. \"active\", \"4\", \"1e-7\")."
  2. Changed1 schema field changedv0.54.9
    • changedInput schema / properties / value / description
      Previous value: -"Value to match (exact, case-sensitive, e.g. \"active\", \"session-log\"). Use vault_list_property_values to discover valid values for a key."New value: +"Value to match (e.g. \"active\", \"4\", \"1e-7\"). Use vault_list_property_values to discover valid values for a key."
  3. Changed2 schema fields changedv0.54.7
    • changedInput schema / properties / folder / description
      Previous value: -"Restrict to a folder prefix (e.g. \"Projects\")"New value: +"Restrict to a folder (e.g. \"Projects\")"
    • changedInput schema / properties / limit / description
      Previous value: -"Max results (default 20). Increase for broad metadata queries."New value: +"Max results (default 20)"
  4. Changed4 schema fields changedv0.50.0
    • addedInput schema / properties / limit / default
      Added value: +20
    • addedInput schema / properties / limit / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / limit / minimum
      Added value: +1
    • changedInput schema / properties / limit / type
      Previous value: -"number"New value: +"integer"
  5. Addedv0.32.1
  6. Removedv0.32.0
  7. Changed4 schema fields changedv0.23.5
    • changedInput schema / properties / folder / description
      Previous value: -"Restrict to a folder"New value: +"Restrict to a folder prefix (e.g. \"Projects\")"
    • changedInput schema / properties / key / description
      Previous value: -"Property key name (e.g. \"status\", \"type\"). Use vault_list_property_keys to discover valid keys."New value: +"Property key name (e.g. \"status\", \"type\", \"tags\"). Use vault_list_property_keys to discover valid keys."
    • changedInput schema / properties / limit / description
      Previous value: -"Max results (default 20)"New value: +"Max results (default 20). Increase for broad metadata queries."
    • changedInput schema / properties / value / description
      Previous value: -"Value to match (exact, case-sensitive). Use vault_list_property_values to discover valid values for a key."New value: +"Value to match (exact, case-sensitive, e.g. \"active\", \"session-log\"). Use vault_list_property_values to discover valid values for a key."
  8. Changed2 schema fields changedv0.23.3
    • changedInput schema / properties / key / description
      Previous value: -"Property key name"New value: +"Property key name (e.g. \"status\", \"type\"). Use vault_list_property_keys to discover valid keys."
    • changedInput schema / properties / value / description
      Previous value: -"Value to match (exact, case-sensitive)"New value: +"Value to match (exact, case-sensitive). Use vault_list_property_values to discover valid values for a key."
  9. Changed3 schema fields changedv0.22.1
    • addedInput schema / properties / folder / minLength
      Added value: +1
    • addedInput schema / properties / key / minLength
      Added value: +1
    • addedInput schema / properties / value / minLength
      Added value: +1
  10. Added

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive and closed-world behavior, but the description adds substantial behavioral context beyond them: unknown key/unmatched value returns an empty array rather than an error, and truncation is unobservable (exactly `limit` results may mean more exist). The mtime sort order with the caveat that recently-synced notes can sort ahead is also disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, two concrete invocation examples, and clear section headers (When to use / Parameters / Errors / Returns), which makes it scannable. The numeric-matching paragraph is dense and somewhat over-explained, but every section is doing real work for correct invocation, so it is not padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries the return contract itself — field list, descending-filesystem-mtime ordering, and the conditional leading_callout / additional_properties fields. Combined with error behavior and matching semantics, an agent has everything needed to call and interpret this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description goes well beyond the schema: exact and case-sensitive key/value matching, the finite-YAML-number numeric matching rules (including edge cases like 2^53 and '1e-999'), checkbox handling as '1'/'0', full-element array matching, folder subfolder inclusion with ASCII case-insensitivity, and the limit-keeps-most-recent semantics. This is meaning an agent cannot derive from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find notes where a frontmatter property matches a value') and immediately narrows scope ('metadata-only search, no text query needed'). It explicitly distinguishes itself from vault_search and vault_search_by_tag, so an agent can select it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit 'When to use' line plus named alternatives with the conditions that select them: prefer vault_search when a text query exists, prefer vault_search_by_tag for tag/hierarchical queries, and use vault_list_property_keys/values for discovery. This is exactly when-and-when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.