Skip to main content
Glama

Engram Obsidian Memory Sync

Read Notes

get_notes
Read-onlyIdempotent

Retrieve the full content of multiple notes in one call (1-20 paths). Also reads a single note: pass one path. Use to inventory a folder (list_folder then get_notes) or to read a batch of search results without N round-trips. Missing paths are reported inline. To save tokens on long notes, pass outline: true for the heading list only, or section with one path to read just that heading's section. Pass include_links: true to also get, per note, the notes linking to it, the notes it links to, and its links that point at no existing note.

Input Schema

NameRequiredDescriptionDefault
pathsYesNote paths to read (max 20), e.g. ["Health/A.md", "Health/B.md"]
outlineNotrue returns each note's headings (level and text) instead of its content
sectionNoHeading text without the # prefix, e.g. "Todo". Returns only that section (heading line included, subsections included). One path only.
vault_idNoTarget vault: its name (e.g. "Engram") or its UUID. REQUIRED when you own more than one vault; the server keeps no active-vault state between calls, so it must be passed on every vault-scoped call. Omit only if you have a single vault. Call list_vaults if a name does not resolve.
include_linksNotrue adds backlinks, outgoing and unresolved link lists to each found note

Output Schema

NameRequiredDescriptionDefault
notesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / notes / items / properties / content_hash
      Added value: +{
      +  "description": "Hash of exactly the content returned. Pass it to write_note as base_hash so the write refuses if the note changed since. Null for a section or outline read: the hash would name the whole note, not the part returned.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  2. Changed1 schema field changed
    • changedOutput schema / properties / notes / items / properties / error / description
      Previous value: -"Only with outline: true, when this note's outline could not be computed: server busy, the call ran out of time, the note is too complex to parse, parsing failed, or the note has invalid UTF-8. Outline omitted"New value: +"Content or outline absent. With outline: true, the outline could not be computed: server busy, the call ran out of time, the note is too complex to parse, parsing failed, or the note has invalid UTF-8. Otherwise the call's 4 MB content budget was spent by earlier notes: fetch this one in its own call"
  3. Changed10 schema fields changed
    • addedInput schema / properties / include_links
      Added value: +{
      +  "default": false,
      +  "description": "true adds backlinks, outgoing and unresolved link lists to each found note",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / outline
      Added value: +{
      +  "default": false,
      +  "description": "true returns each note's headings (level and text) instead of its content",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / section
      Added value: +{
      +  "description": "Heading text without the # prefix, e.g. \"Todo\". Returns only that section (heading line included, subsections included). One path only.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / notes / items / properties / backlinks
      Added value: +{
      +  "description": "Paths of notes linking to this one (include_links)",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / notes / items / properties / content / description
      Added value: +"Absent when outline: true was requested"
    • addedOutput schema / properties / notes / items / properties / error
      Added value: +{
      +  "description": "Only with outline: true, when this note's outline could not be computed: server busy, the call ran out of time, the note is too complex to parse, parsing failed, or the note has invalid UTF-8. Outline omitted",
      +  "type": "string"
      +}
    • addedOutput schema / properties / notes / items / properties / links_truncated
      Added value: +{
      +  "description": "true if backlinks, outgoing, or unresolved was cut off at the cap (include_links)",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / notes / items / properties / outgoing
      Added value: +{
      +  "description": "Paths of notes this one links to (include_links)",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / notes / items / properties / outline
      Added value: +{
      +  "description": "Only with outline: true; replaces content. Absent when error is set",
      +  "items": {
      +    "properties": {
      +      "heading": {
      +        "type": "string"
      +      },
      +      "level": {
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "level",
      +      "heading"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / notes / items / properties / unresolved
      Added value: +{
      +  "description": "Link targets that match no note (include_links)",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  4. Changed1 schema field changed
    • addedInput schema / additionalProperties
      Added value: +false
  5. Changed1 schema field changed
    • changedInput schema / properties / vault_id / description
      Previous value: -"Target vault — its name (e.g. \"Engram\") or its UUID. REQUIRED when you own more than one vault — the server keeps no active-vault state between calls, so it must be passed on every vault-scoped call. Omit only if you have a single vault. Call list_vaults if a name does not resolve."New value: +"Target vault: its name (e.g. \"Engram\") or its UUID. REQUIRED when you own more than one vault; the server keeps no active-vault state between calls, so it must be passed on every vault-scoped call. Omit only if you have a single vault. Call list_vaults if a name does not resolve."
  6. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive behavior, and the description adds useful operational context beyond them: missing paths are reported inline, outline returns headings only, section limits reading to one heading, and include_links adds backlinks/outgoing/unresolved links. No annotation contradiction is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core batch-read purpose, then adds single-note use, workflow context, and token-saving modes. Every sentence contributes useful selection or invocation guidance with no obvious 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?

Given an output schema, rich annotations, and full parameter coverage, the description is complete for correct tool selection and invocation. It covers batching limits, single-note behavior, missing paths, folder inventory flow, and optional return-shaping flags.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents paths, outline, section, vault_id, and include_links. The description reinforces and clarifies these parameters but adds little meaning beyond the structured schema, making the baseline 3 appropriate.

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 names a specific verb and resource: retrieving full note content, with clear batch scope (1-20 paths) and single-note behavior. It distinguishes the tool from siblings by positioning folder inventory as list_folder then get_notes and batch reads as consuming search results.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage contexts: inventorying a folder, reading a batch of search results, and reading one note. It also presents outline and section modes as token-saving alternatives. It does not explicitly state when not to use this tool, so it falls short of fully explicit exclusions.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.