Read note
read_noteRead a note from an Obsidian vault by relative path, optionally selecting a heading section or paging content. Returns structured text, metadata, and content hash for safe edits.
Instructions
Read a note from the Obsidian vault by its relative path.
Arguments: path, an optional section (an ATX heading), and offset / limit for paging. Returns a
structured result, not a rendered document — read the fields:
content— the selected note text. Whole-note reads: the body with a valid YAML frontmatter block stripped, which is byte-exact input foredit_note(path, content)full replacement only when the read is complete and unwindowed (offset=0andtruncatedfalse). Section reads: the section's body only, byte-exact input foredit_note(path, content, section=...)under the same condition. Pass it straight back; do not add, strip or split anything. Page a truncated read to the end before writing it back, or full replacement replaces the whole body with the fragment.heading— section reads only: the matched heading line, with no line terminator. It is not part ofcontent; a section write never rewrites the heading line.error— set when the read failed (missing note, badoffset/limit, unknown section). A normal result, not a transport error; the content-bearing fields are absent beside it.content_hash— the whole file's digest,sha256:<64 lowercase hex>, in every mode (a section or truncated read returns the value a whole-note read would), and the token the write tools take asexpected_hash. It is not a hash ofcontent: never compute it yourself, hand it back verbatim.path,title,tags— metadata as data.frontmatter_yaml— the frontmatter block's YAML source, fence lines excluded, LF-normalized (a CRLF block comes back with LF terminators — the same declared residualcontentcarries, because this tool normalises and the write tools work on raw bytes;edit_notestill reattaches the original block byte-identically). This is the authoritative copy.frontmatteris a best-effort JSON view of the same block and may be absent;metadata_omissionsthen says which fields were dropped and why. To change frontmatter useset_frontmatter, or edit the raw block withedit_note(find=...); never write back a round trip of the JSON view.truncated,offset,next_offset,total_chars— truncation as data.outline(truncated whole-note reads) lists every section with its#Nordinal so you can fetch the one you want directly, andnoticecarries the guidance in prose. Read the one section you need withsection=rather than paging a large note;content, the outline and the metadata fields each have their own budget.metadata_omissions— any metadata field this response had to drop, and why. Nothing is ever signalled by a marker inside a field.
Byte-identity holds for notes whose body newlines are LF: terminators inside the selected content come back
as LF. read_file on the same path is the byte-exact route to the file itself.
Args:
path: Vault-relative path to the note (e.g. "Cards/My Note.md")
section: Optional ATX heading to read instead of the whole note. Plain text ("Balance Sheet"), a
path-style chain ("Parent/Child") when the heading appears under different parents, or a "#N"
ordinal ("#7", 1-based document order) — the only form that can address duplicate headings
sharing the same parent; the outline of a truncated note carries the ordinal for every section.
A bare "#N" always selects by position; use "Parent/#N" to reach a heading titled "#N".
offset: Character offset to start reading from (default 0); continue from the reported next_offset.
limit: Maximum characters of content to return. Only lowers the server cap; it cannot raise it.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| limit | No | ||
| offset | No | ||
| section | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| tags | No | ||
| error | No | ||
| title | No | ||
| notice | No | ||
| offset | No | ||
| content | No | ||
| heading | No | ||
| outline | No | ||
| truncated | No | ||
| frontmatter | No | ||
| next_offset | No | ||
| total_chars | No | ||
| content_hash | No | ||
| frontmatter_yaml | No | ||
| metadata_coercions | No | ||
| metadata_omissions | No |