Skip to main content
Glama
aliasunder

Vault Cortex Obsidian MCP Server

Update Memory

vault_update_memory
Idempotent

Append a dated entry to a section of a memory file in About Me/. The server prefixes the date automatically ("- YYYY-MM-DD: entry text") and inserts newest-first by default.

Instructions

Append a dated entry to a section of a memory file in About Me/. 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" }) Example: vault_update_memory({ file: "Routines", section: "Daily/weekly rhythm (newest first)", entry: "Gym Mon/Wed at 6am", options: { date: "2026-10-01", position: "bottom" } }) — a backdated entry placed below the existing ones

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 nearly identical to an existing heading (an HTML-entity slip, typo, or spacing variation) is rejected, so a mistyped name cannot silently fragment the file — names differing only in digits (e.g. "2025" vs "2026") are distinct.

Parameters:

  • options.date only sets the bullet's date; placement follows options.position, never the date.

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: the write would leave the file at under half its size, which happens when the file holds content a rewrite cannot keep (for example long YAML comments in its properties). A retry returns the same refusal until a manual edit removes that content; inspect the file with vault_read_note to find it.

  • "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 contains a control character" / "section contains a control character" — the value includes a non-printable control byte; remove it before writing.

  • "memory file must not start with a dot" / "memory file must be a bare name without path separators" — use a bare file name: no folder or slash, and no leading dot (that would create a hidden file, invisible in Obsidian and to every listing).

  • "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.

  • "memory file …: properties block …" — the file's properties block can't be read, or a rewrite would lose it; the error says how to repair it

  • "memory file …: the note would open with a properties block …" — the write would leave --- lines at the top of a file with no properties, around text that can't be kept as properties; the error says how to avoid it

Returns: "Added entry to About Me/.md → ## ", plus a note to fill in the placeholder scope callout when the file is new; an exact duplicate returns "Entry already exists in About Me/.md → ## — nothing was written."

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fileYesMemory file name without .md (e.g. "Principles"). Use the exact letter case; a different case can create a second file.
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.54.9
    • changedInput schema / properties / options / properties / date / description
      Previous value: -"ISO YYYY-MM-DD date (defaults to today)"New value: +"ISO YYYY-MM-DD date (defaults to today, server timezone)"
  2. Changed1 schema field changedv0.54.7
    • changedInput schema / properties / file / description
      Previous value: -"Memory file name without .md (e.g. \"Principles\")"New value: +"Memory file name without .md (e.g. \"Principles\"). Use the exact letter case; a different case can create a second file."
  3. Changed1 schema field changedv0.50.0
    • addedInput schema / properties / options / properties / position / default
      Added value: +"top"
  4. 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
  5. 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."
  6. Changed1 schema field changedv0.22.1
    • addedInput schema / properties / entry / minLength
      Added value: +1
  7. 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."
  8. Added

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: it spells out the idempotency rule concretely (exact duplicate = no-op, safe to retry a timeout), the append-only default with newest-wins semantics, automatic file/section creation and the placeholder callout, the near-duplicate heading guard, and a full catalog of error conditions with recovery guidance. Annotations only assert idempotentHint/destructiveHint; the description explains what those mean operationally.

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 structured and front-loaded — purpose, then behavior, then when-to-use, then parameters, then errors, then returns. It is unusually long, and the nine-item error catalog is heavier than most agents need inline, but each entry carries actionable recovery information rather than 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?

No output schema exists, and the description compensates by stating the exact success and duplicate return strings. Combined with the error catalog, Obsidian-markdown escaping caveats, and file-naming constraints, an agent has everything needed to call this correctly on the first attempt.

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 genuine semantic rule not in the schema: options.date only sets the bullet's date while placement follows options.position, never the date. The two worked examples also disambiguate the nested options object, which the schema alone does not illustrate.

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 with scope: 'Append a dated entry to a section of a memory file in About Me/'. It also distinguishes itself from siblings by naming vault_write_note as the tool for non-memory notes and vault_list_memory_files as the prerequisite lookup step.

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 defines the trigger (recording a new preference, principle, opinion, or fact about the user), gives the required preparatory step, and names the alternative tool for the adjacent case. The append-only policy and the 'living' entry-policy exception tell the agent when deletion is and isn't acceptable.

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