Skip to main content
Glama
aliasunder

Vault Cortex Obsidian MCP Server

Get Outgoing Links

vault_get_outgoing_links
Read-onlyIdempotent

Find all outgoing wikilinks, markdown links, and canvas file references from a note or canvas to navigate forward, audit broken links, or check dependencies before editing.

Instructions

Find all notes and files a given note or canvas links to. For notes: outgoing [[wikilinks]] and markdown. For canvas files: file-node references (vault-relative paths embedded in the canvas). Links inside code blocks are ignored; self-links are included.

Example: vault_get_outgoing_links({ path: "Projects/vault-cortex.md" }) Example: vault_get_outgoing_links({ path: "Diagrams/architecture.canvas" })

When to use: Navigating the graph forward, auditing broken links in one note or canvas, or checking dependencies before editing. For incoming links (what links TO a note), use vault_get_backlinks.

Parameters:

  • path: exact vault-relative path including .md or .canvas extension, case-sensitive. Matched against the search index, so the note or canvas must be indexed (file watcher processes new/moved files within seconds).

Returns: JSON with path, outgoing_links (array of { path, title, exists, kind, bytes, daily_note_forward_ref } sorted by target path), and count. Each link carries exists (boolean) and kind ("note"|"file"). When exists is true: kind "note" is a markdown note readable via vault_read_note; kind "file" is a non-markdown file (.canvas, image, PDF) readable via vault_read_file. When exists is false the link is broken (kind is always "note"). daily_note_forward_ref is true on broken links into the vault's daily notes folder, unless the daily notes folder setting is the vault root or blank — expected "create on click" navigation to a daily note that doesn't exist yet, not genuine breakage. bytes is the on-disk size of a note or file (null for broken links) — not the delivery cost: vault_read_file downscales images to fit response limits, so a large image is still cheap to read.

Errors:

  • "path must end in …" — add the .md or .canvas extension

  • A path not in the index returns an empty result (count 0), not an error — indistinguishable from a note with no outbound links.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pathYesExact vault-relative path including .md or .canvas extension (e.g. "Projects/vault-cortex.md"). Case-sensitive.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.36.0
    • changedInput schema / properties / path / description
      Previous value: -"Exact vault-relative path including .md extension (e.g. \"Projects/vault-cortex.md\"). Case-sensitive."New value: +"Exact vault-relative path including .md or .canvas extension (e.g. \"Projects/vault-cortex.md\"). Case-sensitive."
  2. Addedv0.32.1
  3. Removedv0.32.0
  4. Changed1 schema field changedv0.23.5
    • changedInput schema / properties / path / description
      Previous value: -"Vault-relative path to the note"New value: +"Exact vault-relative path including .md extension (e.g. \"Projects/vault-cortex.md\"). Case-sensitive."
  5. Added

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already establish read-only/idempotent safety, yet the description adds substantial non-annotation behavior: code-block links are ignored, self-links are included, results depend on the search index (file watcher lag), broken links carry kind='note' and possibly daily_note_forward_ref, and unindexed paths silently return count 0 rather than an error. That last point is the kind of gotcha annotations cannot express.

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, then examples, when-to-use, parameters, returns and errors in a predictable order. It is long but dense — nearly every sentence carries distinct behavior. Minor cost: the bytes-vs-delivery-cost aside and some overlap between the Returns paragraph and the parameter description could be trimmed.

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?

With no output schema, the description carries the full return-shape burden and does so thoroughly (field list, sort order, kind/exists semantics, downstream readers vault_read_note/vault_read_file). Error cases and the empty-vs-broken ambiguity are both covered, so 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds a constraint absent from the schema: the path must already be in the search index, with the file-watcher timing caveat. It also restates the extension requirement alongside a concrete error message, which is marginally useful rather than novel.

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+resource ('Find all notes and files a given note or canvas links to') and immediately disambiguates the two content types it handles (wikilinks/markdown links vs. canvas file-node references). It also names the sibling it is not — vault_get_backlinks — so an agent can differentiate without opening either 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?

An explicit 'When to use' block lists three concrete scenarios (graph navigation, broken-link auditing, pre-edit dependency checks) and then names the alternative for the inverse direction ('For incoming links ... use vault_get_backlinks'). No inference is required to route between the two.

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