Skip to main content
Glama
aliasunder

Vault Cortex Obsidian MCP Server

Update Memory

vault_update_memory
Idempotent

Append dated memory entries to Obsidian files, newest-first, with automatic date prefix and idempotent writes for safe retries.

Instructions

Append a dated entry to a section of a About Me/ memory file. The server prefixes the date automatically ("- YYYY-MM-DD: entry text") and inserts newest-first by default. Idempotent — an exact duplicate (same date + text in the same section) is a no-op, so retrying a timed-out call is safe. Memory files are append-only by default: when a preference changes, append the new state (newest wins) rather than deleting the old one. A file may declare entry-policy: living in frontmatter (surfaced by vault_list_memory_files) — a current-state file where pruning expired entries is expected maintenance rather than a violation.

Example: vault_update_memory({ file: "Opinions", section: "Code patterns (newest first)", entry: "Prefer immutable data structures" })

When to use: Recording a new preference, principle, opinion, or fact about the user. Call vault_list_memory_files first and reuse existing file and section names so entries stay grouped. Prefer vault_write_note for creating non-memory notes. A missing file or section is created automatically (new sections get "(newest first)" appended; new files get a placeholder scope callout to fill in via vault_replace_in_note). A new section name that is nearly identical to an existing heading (an HTML-entity slip, typo, or spacing variation) is rejected instead of created, so a mistyped name cannot silently fragment the file — names differing only in digits (e.g. "2025" vs "2026") are treated as distinct.

Parameters:

  • options.date — ISO YYYY-MM-DD, defaults to today (server timezone).

  • options.position — "top" (default, newest-first) inserts above existing entries; "bottom" appends below them.

Obsidian syntax: Entry text is Obsidian Flavored Markdown. Watch for: #word = tag, [[ = wikilink. Escape with # or backticks when unintentional.

Errors:

  • "refusing memory write: … would shrink content" — safety guard for diverged on-disk content. Re-read with vault_get_memory before retrying.

  • "entry must be a single line" — memory entries are single dated bullets; collapse newlines or append multiple entries.

  • "section must be a single line" — section names become H2 headings; remove line breaks.

  • "date must be a real ISO calendar date" — options.date only accepts an existing calendar date in bare YYYY-MM-DD form (e.g. "2026-07-02"), not a timestamp.

  • "entry/section contains a control character" — entry or section includes a non-printable control byte; remove it before writing.

  • "memory file must not start with a dot" — a dot-prefixed name would create a hidden file (invisible in Obsidian and to every listing); choose a visible name.

  • "section not created: … is nearly identical to existing section …" — near-duplicate guard; pass the exact existing heading (listed in the error) to append there, or choose a clearly different name for a genuinely new section.

Returns: Confirmation message (notes when an identical entry already existed and nothing was written).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fileYesMemory file name without .md (e.g. "Principles")
entryYesRaw entry text — a single line (newlines are rejected); the server prepends "- **YYYY-MM-DD**: " automatically. Do not include the date or bullet prefix.
optionsNoOptional date and position overrides
sectionYesH2 section heading (e.g. "Decision heuristics (newest first)"). Matched case-insensitively, with or without the "(newest first)" suffix.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.50.0
    • addedInput schema / properties / options / properties / position / default
      Added value: +"top"
  2. Changed4 schema fields changedv0.26.0
    • changedInput schema / properties / entry / description
      Previous value: -"Raw entry text — the server prepends \"- **YYYY-MM-DD**: \" automatically. Do not include the date or bullet prefix."New value: +"Raw entry text — a single line (newlines are rejected); the server prepends \"- **YYYY-MM-DD**: \" automatically. Do not include the date or bullet prefix."
    • addedInput schema / properties / file / minLength
      Added value: +1
    • addedInput schema / properties / options / properties / date / minLength
      Added value: +1
    • addedInput schema / properties / section / minLength
      Added value: +1
  3. Changed1 schema field changedv0.23.5
    • changedInput schema / properties / entry / description
      Previous value: -"Entry text (no date prefix)"New value: +"Raw entry text — the server prepends \"- **YYYY-MM-DD**: \" automatically. Do not include the date or bullet prefix."
  4. Changed1 schema field changedv0.22.1
    • addedInput schema / properties / entry / minLength
      Added value: +1
  5. Changed1 schema field changedv0.19.2
    • changedInput schema / properties / section / description
      Previous value: -"H2 section heading (e.g. \"Decision heuristics (newest first)\")"New value: +"H2 section heading (e.g. \"Decision heuristics (newest first)\"). Matched case-insensitively, with or without the \"(newest first)\" suffix."
  6. Added

TDQS

A5/5.0
Behavior5/5

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

Even though annotations already set idempotentHint=true, the description adds critical context: the append-only model, the idempotent no-op on exact duplicates, the server-side date prefixing, and the near-duplicate rejection mechanism. It also explains error scenarios and the meaning of the confirmation message, going well beyond the annotations.

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?

The description is long but every section earns its place: core usage, example, when-to-use, parameter clarifications, error catalogue, and return behavior. Information is front-loaded with the action and scope, and organized with clear headings, making it easy to scan. No redundancy or filler.

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 four parameters, nested options, idempotency, append-only semantics, and multiple error modes, the description covers all necessary information: parameter semantics, usage rules, error handling, and return value. There is no output schema, so the description fully compensates by explaining what the confirmation message notes. An agent can use this tool correctly with zero guesswork.

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?

Schema coverage is 100%, but the description enriches every parameter: it clarifies that the server prepends the date and bullet, instructs not to include them in 'entry', details the date format and default, explains position meaning, and describes the case-insensitive section matching with suffix handling. This is far more than the schema alone provides.

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 description begins with a specific verb ('Append a dated entry') and resource ('a section of a About Me/memory file'), clearly distinguishing it from sibling write tools like vault_write_note, which it explicitly names as the alternative for non-memory notes. It also provides an example call, leaving no ambiguity about what the tool does.

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?

The description has a dedicated 'When to use' section that instructs the agent to call vault_list_memory_files first and reuse existing file/section names, and explicitly contrasts with vault_write_note. It also covers edge cases like missing files/sections and the near-duplicate guard, giving comprehensive guidance on when and how to invoke the tool.

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