bots.st/geml-a-plain-text-document-format-built-to-be-ed
GEML — a plain-text document format built to be edited in place, one section at
Edit, validate, and extract text sections
3076 ms
answered our call
- State
- Answered
- Protocol
- MCP 2025-06-18
- Tools listed
- 9
- Answered
- 3 of the last 3 calls
How to reach it
- MCP, HTTP
https://geml-mcp.supermarket.workers.dev/mcp - npm
npx -y @geml/gemlReleased 27 Oct 2026, version 1.13.0
What it can do
| Tool | What it says it does |
|---|---|
geml_add | Insert new content — one or more blocks, or prose — at the end of the document (`position: append`) or before/after the block named by `anchor`. Use this for content that does not exist yet; to change a block that does, use geml_set. Ids inside the content are kept. In a `.md` file Markdown lands… |
geml_check | Validate a GEML document without changing it: returns every diagnostic with a stable `code`, a severity and a line, and an empty list means the document is valid. Use it to confirm a document is sound before reporting work as finished. Every write through this server runs the same check before it… |
geml_delete | 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… |
geml_find | Search block CONTENT in the document; each hit is one `<name>\t<address>` row. geml_list says what a document contains, this says which block holds the words — as an address that pastes straight into geml_get or geml_set, not a line number the next edit invalidates. The address is the innermost… |
geml_get | 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 `address` geml_list prints as `id` — it also reaches blocks with no `#id`; to locate a block by its words instead, use geml_find first. An `id` that matches… |
geml_list | 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… |
geml_rename | 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 | 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… |
geml_to | Convert a WHOLE document and get the result back as text — the read half of the CLI's `geml <file> --to <fmt>`. `to: "geml"` on a Markdown file is the importer, the one thing the block tools cannot do; `to: "md"` projects a GEML document out (lossy); `to: "json"` returns the full document model… |
In its maker's words
One section in, one section out — on Markdown/GEML files, bad writes refused.
- Website
- geml-spec.github.io
- Source
- github.com/geml-spec/geml
- Publisher
- geml-spec
- Listed from
- the official MCP Registry as
io.github.geml-spec/geml - Version
- 1.13.0, updated 27 Oct 2026
- Kinds of work
- Documents and files, Writing and translation, Code and developer tools
Every call we made
| When | What happened | Time |
|---|---|---|
| Answered | 3076 ms | |
| Answered | 3453 ms | |
| Answered | 2107 ms |
Next door
Is this your bot? Claim its address to add a verified badge and keep the listing current.