Skip to main content
Glama
markdown-vault-mcp

markdown-vault-mcp

by pvliesdonk

Broken Links

get_broken_links
Read-onlyIdempotent

List the links whose target is missing from the vault, each with the note that holds it.

Instructions

List the links whose target is missing from the vault, each with the note that holds it.

stats reports broken_link_count; a rename without update_links leaves such links behind. Links to attachments are not checked.

Input Schema

NameRequiredDescriptionDefault
folderNoOnly links in notes in this folder and its sub-folders, such as `"Journal"`; `""` for top-level notes only; omit for the whole vault.
wait_for_pending_writesNoWait for recent index writes. On timeout, answer from the current index with _meta.index_stale=true. Default false.

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv6.1.0
    • changedInput schema / properties / folder / description
      Previous value: -"Optional folder filter. When provided, only checks\nlinks from documents in this folder (e.g. \"Journal\").\nUse folder=\"\" for root-level (top-level) documents only.\nWithout this, checks all documents."New value: +"Only links in notes in this folder and its sub-folders, such as\n`\"Journal\"`; `\"\"` for top-level notes only; omit for the whole vault."
  2. Changed1 schema field changedv5.0.0
    • changedInput schema / properties / wait_for_pending_writes / description
      Previous value: -"When True, wait until your recent\ndocument mutations have been applied to the\nindex before answering, so the results reflect those changes.\nUse it right after modifying notes when this read must see\nthem (e.g. right after a document mutation whose\neffect this read should reflect). Default\nFalse answers immediately from the current index — almost\nalways already up to date; inspect the response's\n``_meta.index_stale`` field to tell whether a write was still\nin flight. Bounded by a server timeout (default 60s); on\ntimeout it answers from the current index rather than waiting\nlonger."New value: +"Wait for recent index writes. On timeout, answer from the current index with _meta.index_stale=true. Default false."
  3. Changed2 schema fields changedv4.0.0
    • changedInput schema / properties / folder / description
      Previous value: -"Optional folder filter. When provided, only checks\nlinks from documents in this folder (e.g. \"Journal\").\nWithout this, checks all documents."New value: +"Optional folder filter. When provided, only checks\nlinks from documents in this folder (e.g. \"Journal\").\nUse folder=\"\" for root-level (top-level) documents only.\nWithout this, checks all documents."
    • changedInput schema / properties / wait_for_pending_writes / description
      Previous value: -"When True, wait until your recent\nwrite/edit/delete/rename operations have been applied to the\nindex before answering, so the results reflect those changes.\nUse it right after modifying notes when this read must see\nthem (e.g. right after a write/edit/delete/rename whose\neffect this read should reflect). Default\nFalse answers immediately from the current index — almost\nalways already up to date; inspect the response's\n``_meta.index_stale`` field to tell whether a write was still\nin flight. Bounded by a server timeout (default 60s); on\ntimeout it answers from the current index rather than waiting\nlonger."New value: +"When True, wait until your recent\ndocument mutations have been applied to the\nindex before answering, so the results reflect those changes.\nUse it right after modifying notes when this read must see\nthem (e.g. right after a document mutation whose\neffect this read should reflect). Default\nFalse answers immediately from the current index — almost\nalways already up to date; inspect the response's\n``_meta.index_stale`` field to tell whether a write was still\nin flight. Bounded by a server timeout (default 60s); on\ntimeout it answers from the current index rather than waiting\nlonger."
  4. First observedv3.1.0

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered; the description adds real scope information the annotations cannot convey — that attachment links are skipped and that results are attributed to the holding note. It doesn't discuss result size or pagination, which is a minor omission for a vault-wide listing.

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

Conciseness5/5

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

Three short sentences: the first defines the operation and output, the second gives provenance and the sibling relation, the third gives the exclusion. No filler, and the core definition is front-loaded.

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

Completeness4/5

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

With an output schema present, the description only needs to convey purpose, scope and exclusions, which it does, including the attachment caveat that no structured field expresses. Slight gap: it doesn't note that a full-vault scan may be expensive or how the folder parameter narrows it, though the schema documents folder fully.

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

Parameters3/5

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

Schema description coverage is 100%, including folder semantics (sub-folders, empty string for top-level only) and the stale-index timeout behavior, so the schema carries the parameter burden. The description adds nothing about either parameter, which is the expected baseline when the schema is this complete.

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 ('List the links whose target is missing from the vault') and even describes the return shape ('each with the note that holds it'). It explicitly separates itself from the sibling stats tool, which only reports broken_link_count, so an agent can route correctly without opening a schema.

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

Usage Guidelines4/5

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

Gives the causal context for when this tool matters ('a rename without update_links leaves such links behind') and points at stats as the summary-level alternative. It does not state explicit when-not-to-use conditions beyond the attachment exclusion, which keeps it short of a 5.

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