Skip to main content
Glama
Vault Cortex Obsidian MCP Server

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/, safely retrying timeouts since exact duplicates write nothing. Reuse existing file and section names to keep preferences and facts grouped.

Instructions

Append a dated entry to a section of a memory file in About Me/. 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 its properties (surfaced by vault_list_memory_files) — a current-state file where pruning expired entries with vault_delete_memory is expected maintenance.

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.

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:

  • "entry must be a single line" / "section must be a single line" — the message names the fix.

  • "date must be a real ISO calendar date" — pass options.date as an existing calendar date in bare YYYY-MM-DD form, not a timestamp.

  • "entry contains a control character" / "section contains a control character" — remove the character the message names.

  • "memory file must not start with a dot" / "… must be a bare name without path separators" / "… must be named without .md" — each message names the part of the name to drop

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

  • "cannot read memory file …" — the file can't be read: check file against vault_list_memory_files and shorten an over-long name; otherwise ask the vault's owner to fix its permissions

  • "cannot write memory file …: that path is not a file" — a folder already has this name; choose another file name

  • "ENAMETOOLONG: …" or another filesystem error — the message says what to do

  • "cannot create memory folder …" — a file sits where the memory folder belongs; ask the vault's owner to move it

  • "memory file …: the note would open with a properties block …" — saving would turn the file's opening lines into a properties block the server can't keep; 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."

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": {
      "file": "<file>",
      "section": "<section>",
      "entry": "<entry>"
    },
    "name": "vault_update_memory"
  }
}

Input 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, without the "- **YYYY-MM-DD**: " prefix, which the server prepends.
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.56.3
    • changedInput schema / properties / options / properties / date / description
      Previous value: -"ISO YYYY-MM-DD date (defaults to today, server timezone)"New value: +"ISO YYYY-MM-DD date (defaults to today in the server's timezone)"
  2. Changed1 schema field changedv0.55.4
    • changedInput schema / properties / entry / description
      Previous value: -"Raw entry text — a single line; the server prepends \"- **YYYY-MM-DD**: \" automatically. Do not include the date or bullet prefix."New value: +"Raw entry text — a single line, without the \"- **YYYY-MM-DD**: \" prefix, which the server prepends."
  3. Changed1 schema field changedv0.55.1
    • changedInput schema / properties / entry / description
      Previous 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."New value: +"Raw entry text — a single line; the server prepends \"- **YYYY-MM-DD**: \" automatically. Do not include the date or bullet prefix."
  4. Changed2 schema fields changedv0.54.16
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / options / additionalProperties
      Added value: +false
  5. 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)"
  6. 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."
  7. Changed1 schema field changedv0.50.0
    • addedInput schema / properties / options / properties / position / default
      Added value: +"top"
  8. 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
  9. 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."
  10. Changed1 schema field changedv0.22.1
    • addedInput schema / properties / entry / minLength
      Added value: +1
  11. 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."
  12. Added

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations, it discloses the append-only default, the newest-wins convention, the meaning of `entry-policy: living`, duplicate no-op behavior, and auto-creation of missing files and sections. The detailed error catalog and return format add substantial operational context not captured by readOnlyHint, idempotentHint, or destructiveHint.

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?

The description is front-loaded with purpose, then structured into examples, when-to-use guidance, parameter notes, syntax warnings, errors, and returns. It is longer than average, but most of the length is actionable; the extensive error list is useful though somewhat verbose.

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?

There is no output schema, but the description explains the return string and duplicate behavior. Given the mutation semantics, idempotency annotation, and 100% schema coverage, the definition gives an agent everything needed to call it correctly and recover from common failures.

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 would be 3, but the description adds a non-obvious interaction rule: options.date only sets the bullet's date while placement follows options.position, never the date. The examples reinforce how file, section, entry, and options combine in practice.

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 opens with a precise verb and resource: append a dated entry to a section of a memory file in About Me/. It explicitly distinguishes itself from vault_write_note for non-memory notes, and the examples make the operation concrete.

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?

It states exactly when to use the tool (recording a new preference, principle, opinion, or fact), instructs calling vault_list_memory_files first, and explains append-only vs. living entry-policy behavior. It also names the alternative for non-memory notes and clarifies that missing files or sections are created automatically.

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