Skip to main content
Glama

GEML — a plain-text document format built to be edited in place, one section at a time

Delete blocks

geml_delete
DestructiveIdempotent

Remove one or more blocks, each named by an id or any address geml_list prints; a filter (=== type, {key=value}) removes every block it matches. Each block takes the blank line that separated it from its neighbours, so deleting what geml_add inserted leaves the file as it was. To undo a deletion, geml_revert the removed id; to change a block rather than remove it, use geml_set. References left pointing at a removed block come back as diagnostics but do NOT block the deletion — read them, then repair the references or revert. A selector that names nothing is skipped, so repeating a call changes nothing. Returns {ok, file, diagnostics, revision}, with notes when the write did something to say out loud (a block it dropped, an address it changed); a refusal is ok: false with a hint, and the file is unchanged. This server is STATELESS: the document travels in source and a write comes back as document for you to save; it holds no other documents, so a cross-document reference such as [[other.geml#id]] cannot be resolved here and is reported as unresolvable-document.

Input Schema

NameRequiredDescriptionDefault
idsYesThe blocks to remove: ids or addresses
nameNoThe document's file name, e.g. notes/spec.geml or README.md — it decides whether the text is read as GEML or as Markdown (a `.md` name), and it is how the document is called in messages. Default: document.geml.
sourceYesThe document's full text. This server keeps no files: what you send is the document.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, and the description adds genuinely new behavior: the block consumes its trailing blank line (so deleting what geml_add inserted restores the file), references come back as diagnostics but do not block deletion, refusals return ok:false with a hint and leave the file unchanged, and the server is STATELESS so cross-document references surface as unresolvable-document. No contradiction with annotations; idempotency and destructiveness are both corroborated.

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

Conciseness4/5

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

Front-loaded with the core action and selector semantics, then alternatives, then edge cases and return shape — a sensible ordering. It is dense and delivered as a single long paragraph rather than scannable segments, so a little structure is lost, but nearly every sentence carries distinct information.

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?

With no output schema, the description carries the return contract (`{ok, file, diagnostics, revision}`, optional `notes`, refusal shape) and the stateless document-in/document-out model. For a destructive, stateless write tool this is complete enough to invoke correctly without further discovery.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: the ids array accepts filter syntax (`=== type`, `{key=value}`) that removes every matching block, and addresses are those geml_list prints. The `source`/stateless model is also reinforced in prose, not just in the schema.

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 precise verb+resource ('Remove one or more blocks') and defines the acceptable selectors (ids or any address geml_list prints, plus `=== type` / `{key=value}` filter syntax). It explicitly distinguishes itself from geml_add (what it undoes), geml_set (change rather than remove), and geml_revert (undo), so an agent can route without opening a sibling schema.

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?

Gives explicit alternatives with conditions: 'to undo a deletion, geml_revert the removed id; to change a block rather than remove it, use geml_set.' It also covers the no-match case ('a selector that names nothing is skipped') and how to handle dangling references, leaving little to inference.

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.