Write Note
vault_write_noteCreate a Markdown note in an Obsidian vault or replace an existing note's body with overwrite, while merging properties to preserve unmentioned keys.
Instructions
Create a markdown note, or with overwrite: true replace an existing note's body. Properties merge with any existing properties when overwriting (new keys added, matching keys overwritten, keys set to null removed, unmentioned keys preserved); overwriting without properties keeps the existing property values. A new note leaves out keys set to null.
Example: vault_write_note({ path: "Projects/notes.md", body: "# Notes\n\nProject notes here.", properties: { tags: ["project"], type: "project" } }) Example: vault_write_note({ path: "Projects/notes.md", body: "Updated content.", overwrite: true })
When to use: Creating a new note, or replacing a whole note's body. Prefer vault_patch_note or vault_replace_in_note to change part of a note. Prefer vault_update_properties for property-only edits (no body round-trip). Prefer vault_update_memory for appending dated entries to About Me/ memory files.
Errors:
"note already exists" — set overwrite: true to replace it
"path must end in …" — add the .md extension
"cannot write note …: that path is not a file" — a folder already has this name; choose another path
"absolute path blocked" / "path traversal blocked" / "hidden path blocked" — pass a vault-relative path with no dot-prefixed part
"concurrent write in progress" — a write to this note is in flight; re-read it and retry
"body contains a control character" — remove the character the message names
"ENAMETOOLONG: …" or another filesystem error — the message says what to do
"properties block …" — with overwrite: true, the note's properties block can't be read, or a rewrite would lose it; the error says how to repair it
"the note would open with a properties block …" — a note without properties would start with --- lines around text that can't be properties; the error says how to avoid it
Obsidian syntax: Body is Obsidian Flavored Markdown (no escaping applied). Watch for: #word = tag (escape with #), [[ = wikilink, %% = comment block. In properties: quote wikilink values ("[[Note]]"), use YAML lists for tags, keep property types consistent (string/number/list mismatches cause silent query failures).
Returns: "Wrote ".
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": {
"path": "<path>",
"body": "<body>"
},
"name": "vault_write_note"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Markdown body content — do not include a properties block (the --- lines); use the properties parameter instead. | |
| path | Yes | Vault-relative path including the ".md" extension (e.g. "Projects/notes.md"). Parent folders are created as needed. Use the exact letter case; a different case can create a duplicate note or folder. | |
| overwrite | No | Allow overwriting an existing note (default: false). | |
| properties | No | The note's properties. |