geml
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ROOT | No | The directory the server is confined to. Use `.` or `${workspaceFolder}` to bind to the active project. Paths stay confined to this root, which a client cannot widen. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| geml_listA | 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 |
| geml_findA | Search block CONTENT across the served documents; each hit is one |
| geml_getA | Read ONE block from a GEML document instead of the whole file: only that block comes back, typically a few percent of the document. Pass the |
| geml_checkA | Validate a GEML document without changing it: returns every diagnostic with a stable |
| geml_historyA | Read a document's recorded history. WITHOUT |
| geml_toA | Convert a WHOLE document and get the result back as text — the read half of the CLI's |
| geml_setA | Replace ONE block and leave every other byte untouched — prefer this to rewriting a file. For content that does not exist yet use geml_add; to remove a block, geml_delete. The replacement is validated before it is written: if it would break the document, nothing is written and the diagnostics come back — fix the body rather than resending it. Removing content is not refused: if the replacement drops blocks, the write goes through and the result names each one, so check it after shortening a section; geml_revert puts one back. |
| geml_addA | Insert new content — one or more blocks, or prose — at the end of the document ( |
| geml_deleteA | Remove one or more blocks, each named by an id or any address geml_list prints; a filter ( |
| geml_renameA | Rename a block id AND every reference to it in the same document, in one id-boundary-safe write. Use this rather than geml_set or a text search-and-replace, which would also hit ids that merely share a prefix. A Markdown heading's anchor is its text, so it is renamed by changing the heading with geml_set ( |
| geml_revertA | Undo ONE block, leaving every other block byte-for-byte unchanged — recover a single block after a bad edit without losing the good edits around it. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 11 tools
Each tool has a distinct role and the descriptions explicitly disambiguate the tricky pairs: geml_set vs geml_add (change existing vs insert new), geml_delete vs geml_revert (remove vs undo one change), and geml_rename vs geml_set (id-safe rename vs heading text change, which geml_rename explicitly defers to geml_set). Read tools are also cleanly separated: geml_list (what exists), geml_get (read one block), geml_find (which block holds words), geml_to (convert whole document). No two tools appear to do the same thing.
All tools share a uniform `geml_` snake_case prefix followed by a single token, which is highly predictable. Most are clear verbs (add, set, delete, rename, revert, list, find, get, check), with only minor deviations like the noun `history` and the preposition-ish `to`, both still readable in context.
11 tools is squarely in the well-scoped range for a document manipulation server, and each tool earns its place by covering a distinct operation (CRUD, search, validate, history/undo, format conversion). There are no redundant or filler tools.
The surface covers a full lifecycle: create (add), read (get/list/find), update (set), remove (delete), plus validation (check), history and single-block undo (history/revert), and format conversion (to) — richer than typical CRUD. Minor gaps remain, such as no explicit new-document creation or block-move operation, but these are largely workable via add/set.