GEML — a plain-text document format built to be edited in place, one section at a time
One section in, one section out — on Markdown/GEML files, bad writes refused.
Connect Remote server
claude mcp add --transport http geml https://geml-mcp.supermarket.workers.dev/mcp
{
"mcpServers": {
"geml": {
"url": "https://geml-mcp.supermarket.workers.dev/mcp"
}
}
}
{
"servers": {
"geml": {
"type": "http",
"url": "https://geml-mcp.supermarket.workers.dev/mcp"
}
}
}
Settings > Connectors > Add custom connector
URL: https://geml-mcp.supermarket.workers.dev/mcp
Tools 9 found in our last check
geml_listList 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 mark…
geml_findSearch 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…
geml_getRead 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…
geml_checkValidate 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 sa…
geml_toConvert 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 ful…
geml_setReplace 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 t…
geml_addInsert 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` f…
geml_deleteRemove 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 wa…
geml_renameRename 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…
Details
| Endpoint | https://geml-mcp.supermarket.workers.dev/mcp (Streamable HTTP) |
| Package | @geml/[email protected] (NPM, stdio) |
| First published | 10 Nov 2026 |
| Last updated | 10 Nov 2026 |
| Registry name | io.github.geml-spec/geml |
More files and documents servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
