read_note
Read a note’s raw content, parsed frontmatter, body, content hash, and stat. With anchor (same shape as patch_note’s: a heading section, a block reference, or the frontmatter preamble), also returns section: the resolved span’s text (including its heading/block-id marker line), 1-based start_line/end_line relative to the raw file, and heading_level for a heading anchor. content_hash stays the whole-note hash so it round-trips into patch_note’s prev_hash unchanged. A note whose frontmatter is not valid YAML is still returned (frontmatter null) with raw_frontmatter, frontmatter_error {message, line, column} and a warning naming the repair (update_frontmatter replace with frontmatter_yaml). response_format=concise returns {vault, path, body, content_hash}: the note body without its frontmatter block (and, with an anchor, the section instead of the whole body).
| Domain | notes |
| Scopes | read:notes |
| Access | read |
| Tags | read-only, domain:notes |
| Profile | core, full |
Annotations
Section titled “Annotations”| Annotation | Value |
|---|---|
| Read-only | yes |
| Destructive | no |
| Idempotent | no |
| Accepts an idempotency key | no |
Idempotent is the advisory MCP idempotentHint. Destructive is also yes for a tool that
asks for confirmation only on some calls.
Confirmation (human in the loop)
Section titled “Confirmation (human in the loop)”No human confirmation is required to call this tool.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
vault |
string |
— | Vault id. May be omitted when only one vault is available. length 1–64; pattern ^[a-z0-9_-]+$ |
|
path |
string |
yes | — | length 1–1024 |
anchor |
object |
— | — | |
anchor.type |
enum |
with parent | — | One of: "heading", "block", "frontmatter" |
anchor.heading |
string |
— | Heading text without the # marks, e.g. “Notes”; case-insensitive. To pick one of several same-named headings by its parents write “Parent > Child” (outermost first). length ≥ 1 | |
anchor.occurrence |
integer |
— | 1-based index among the headings that match, in document order. Needed when the heading appears more than once and no Parent > Child path singles it out; otherwise the call is refused with every match’s line number. range ≥ 1 | |
anchor.block_id |
string |
— | length ≥ 1 | |
response_format |
enum |
— | concise returns only the high-signal fields; detailed (the shipped default) returns the full payload. Errors and safety warnings are never trimmed. When omitted, the server’s tools.defaults.responseFormat applies. One of: "concise", "detailed" |
|
verbosity |
enum |
— | Legacy alias for response_format: terse = concise, full = detailed. One of: "full", "terse" |
Output
Section titled “Output”| Field | Type | Always present | Description |
|---|---|---|---|
raw_frontmatter |
string |
— | |
frontmatter_error |
object |
— | |
frontmatter_error.message |
string |
with parent | — |
frontmatter_error.line |
integer |
range ≥ -9007199254740991 | |
frontmatter_error.column |
integer |
range ≥ -9007199254740991 | |
warning |
string |
— | |
vault |
string |
yes | — |
path |
string |
yes | — |
content |
string |
— | |
frontmatter |
object | null |
— | |
body |
string |
— | |
has_frontmatter |
boolean |
— | |
content_hash |
string |
yes | — |
stat |
object | null |
— | |
stat.size |
number |
with parent | — |
stat.mtime |
string |
with parent | — |
stat.ctime |
string |
with parent | — |
section |
object |
— | |
section.text |
string |
with parent | — |
section.start_line |
number |
with parent | — |
section.end_line |
number |
with parent | — |
section.heading_level |
number |
— |
Related tools
Section titled “Related tools”Other tools in the notes domain: append_note, bulk_create_notes, bulk_move_notes, copy_note, delete_note, fetch, get_provenance, list_notes, list_snapshots, move_note, note_exists, patch_note, read_notes, read_resources, read_snapshot, restore_note, snapshot_note, write_note.
Back to the tool catalog.