GEML — a plain-text document format built to be edited in place, one section at a time
by geml-mcp.supermarket.workers.dev in Documents & files
One section in, one section out — on Markdown/GEML files, bad writes refused.
https://geml-mcp.supermarket.workers.dev/mcp
Last 30 days
- Uptime
- 100%
- Response time
- 165 ms typical, 165 ms slowest 5%
- Last check
- 3 h ago
- Next check
- in 3 h
How to call it
Add it to any MCP client that supports remote servers.
{
"mcpServers": {
"geml-a-plain-text-document-format-built-to-be-edited-in-plac": {
"type": "http",
"url": "https://geml-mcp.supermarket.workers.dev/mcp"
}
}
}9 tools
- 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 marke
- 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 i
- 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
- 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 sam
- 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
- 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 th
- 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` fi
- 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
- 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
Security scan
- No findings. We scan names, descriptions and tool definitions for hidden instructions and other prompt-injection patterns.
Recent checks
| When | Result | HTTP | Time |
|---|---|---|---|
| 3 h ago | Passed | 200 | 165 ms |