Skip to main content
Glama

List the blocks of a document

geml_list
Read-only

List every addressable block in a GEML document with its address, kind, and heading text in one call. Use it first to discover block ids before reading or editing.

Instructions

List every addressable block in a GEML document — its address, kind and heading text — in one call, with no paging. Call this FIRST: what it returns is what every other tool here addresses, and it is cheaper and more reliable than reading the file to see what is in it. Rows marked anon have no #id; geml_get and geml_set take their address as id, while the other write tools need a real id, so give such a block one first. A file that is not under the server root is an error.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fileYesDocument path relative to the server's --root directory, e.g. notes/spec.geml
withinNoOptional: only look inside the blocks this selector names, e.g. `#install` for a section or `=== table` for every table. It takes the same selector forms as geml_get's `id`.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds behavior the annotations cannot express: no paging, the meaning of `anon` rows (no #id), the id/aid asymmetry across the write tools, and the failure mode for files outside the server root. That is a rich, non-redundant behavioral disclosure.

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 core scoping sentence and the 'Call this FIRST' directive are front-loaded, and each subsequent sentence carries a distinct payload: no-paging, the anon/id caveat, and the root error. No filler sentences.

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, so the description must describe the return shape, and it does (address, kind, heading text, anon flag). Combined with read-only annotations and full schema coverage, an agent has everything needed to call this correctly and interpret the result.

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 both `file` and `within` are already documented in the schema (including selector forms). The description adds nothing about `within` beyond what the schema says and only gestures at the address/id naming at the row level rather than the parameter level, so the baseline 3 applies.

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?

States a specific verb (list) and resource (every addressable block in a GEML document) plus the exact payload returned: address, kind and heading text. That level of specificity makes it immediately distinguishable from geml_get, geml_find and the write siblings.

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?

Explicitly says 'Call this FIRST' and gives the reason (it is cheaper and more reliable than reading the file), then routes the agent onward: geml_get/geml_set take the address as id, other write tools need a real id so an anon block must be given one first. When-to-use plus alternatives are both covered.

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