Skip to main content
Glama
Vault Cortex Obsidian MCP Server

Vault Cortex Obsidian MCP Server

Search by Property

vault_search_by_property
Read-onlyIdempotent

Find Obsidian notes by exact property key and value, optionally limited to a folder, when you lack a text query.

Instructions

Find notes where a property matches a value.

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 (it matches nested tags and #tags in note bodies; key "tags" here matches only the tags property). Use vault_list_property_keys to discover valid keys and vault_list_property_values to see what values a key takes.

Parameters:

  • key and value both match exactly and case-sensitively, with no partial matching or globbing; value matches a stored text value as written.

  • 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) matches only as text.

  • A checkbox matches only as text: pass "1" (checked) or "0" (unchecked); "1.0" and "true" do not match.

  • A list property matches when an element equals value in full: "blog" matches tags: ["blog", "draft"] but not tags: ["my-blog"].

  • folder names a whole folder, subfolders included: "Projects" covers "Projects/Archive" but not "ProjectsOld/", ignoring ASCII letter case; omit it to search the entire vault.

  • limit keeps the most recently modified matches; nothing in the response signals truncation; raise limit for more.

Behavior: Results can lag a file change by a few seconds.

Errors:

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

  • "[SqliteError]: …" / "[IndexIntegrityError]: …" — the index failed, not the call; the message says what to do

Returns: JSON array of note metadata: path, title (the title property; file name without .md when missing or not text), tags (the tags property; vault_update_properties edits it), body_tags (#tags in the note's text, one per spelling; vault_replace_in_note edits them; absent when none), related ([] when missing), folder (top-level, "" at the root), type (null when missing or not text), created (null when missing or not an ISO date), modified (ISO 8601 file time), bytes (on-disk size), and when present leading_callout (the opening callout, { type, title, body }) and additional_properties (every property but title, type, created, related and tags). Sorted by most recently modified (any file write, so a recently-synced note can sort ahead of an older edit), then by path.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "key": "<key>",
      "value": "<value>"
    },
    "name": "vault_search_by_property"
  }
}

Input Schema

NameRequiredDescriptionDefault
keyYesProperty key name (e.g. "status", "type", "tags").
limitNoMax results (default 20)
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. Changed1 schema field changedv0.56.3
    • changedInput schema / properties / limit / description
      Previous value: -"Max results (default 20, no upper cap)"New value: +"Max results (default 20)"
  2. Changed1 schema field changedv0.54.16
    • addedInput schema / additionalProperties
      Added value: +false
  3. 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\")."
  4. 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."
  5. 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)"
  6. 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"
  7. Addedv0.32.1
  8. Removedv0.32.0
  9. 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."
  10. 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."
  11. 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
  12. Added

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover the read-only/idempotent profile, and the description adds substantial context beyond them: exact case-sensitive matching, numeric coercion rules, the checkbox "1"/"0" quirk, list-element matching, folder scope including subfolders and case handling, silent truncation when limit is hit, and a few-second index lag. It also explains that unknown keys return an empty array rather than an error and distinguishes index-failure errors from call failures.

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?

Well front-loaded and organized into purpose, examples, when-to-use, parameter semantics, behavior, errors and returns, so an agent can stop reading early. It is long, and the second example plus the exhaustive field-by-field Returns list add bulk, though both are defensible given there is no output schema.

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?

For a four-parameter read tool with no output schema, the description supplies everything an agent needs: match semantics, folder scoping, truncation risk, staleness, error taxonomy and the full return shape including sorting order. Nothing material is left for the agent to infer.

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 adds meaning the schema cannot express: what "exact match" means for text, numbers, checkboxes and lists, and how "folder" resolves to a whole subtree while ignoring ASCII case. The limit parameter's "most recently modified" selection and the absence of a truncation signal are also stated, which is real semantics beyond the schema's default/max.

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?

The opening sentence gives a specific verb and resource: "Find notes where a property matches a value." It immediately distinguishes itself from siblings by naming vault_search, vault_search_by_tag, vault_list_property_keys and vault_list_property_values with the exact conditions that separate them.

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?

Explicit "When to use" section, plus explicit routing rules: prefer vault_search when a text query exists, prefer vault_search_by_tag for tag queries (with the reason that this tool's "tags" key only matches the tags property). It also points to discovery tools for valid keys and values, so an agent never has to guess a key.

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