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

An MCP server over a text format whose blocks carry names: the model reads and rewrites one section by address instead of the whole file. Handy once a document gets long.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 29
- Author: geml-spec
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/geml-spec/geml
- Updated: 2026-10-24
- HTML: https://affpapa.org/en/nevibecode/mcp/geml-a-plain-text-document-format-built-to-be-edited-in-place-one-section-at-a-t

## What it does

GEML is a text format where every block has a name, plus an MCP server that acts on those names. Ask for `#key-features` and that one section enters the model's context, however long the file grows. The verbs are `list`, `find`, `get`, `set`, `replace`.

Addresses reach below the section. A table cell like `#fy[2]["Q1"]` or a leaf such as `#intake["fields"][1]["name"]` already sits at a coordinate inside its block, so a read lands on that value alone. `history save` writes a revision into `README.md.gemlhistory` beside the file, and you can read it back or roll it back. No conversion step: the commands run against the `.md` you already have, and it stays `.md`.

There is a hosted HTTP endpoint, and there is `npx -y @geml/geml` for running it locally, which needs Node.js on the machine. One block shape covers code, tables, diagrams and metadata, so there is no second syntax to learn per content type. Keep a source in `.geml` and the `--to md` copy is generated from it, which leaves no room for the two to drift.

## Requirements
- Needs: Node.js (commands run via npx)
- Remote server: `https://geml-mcp.supermarket.workers.dev/mcp`

## Install

### Claude Code (native platform)

1. **Platform CLI: remote server**
```bash
claude mcp add --transport http geml https://geml-mcp.supermarket.workers.dev/mcp
```

2. **Platform CLI**
```bash
claude mcp add geml-a-plain-text-document-format-built-to-be-edited-in-place-one-section-at-a-t -- npx -y @geml/geml
```

### Codex

1. **Platform CLI: remote server**
```bash
codex mcp add geml-a-plain-text-document-format-built-to-be-edited-in-place-one-section-at-a-t --url https://geml-mcp.supermarket.workers.dev/mcp
```

2. **Platform CLI**
```bash
codex mcp add geml-a-plain-text-document-format-built-to-be-edited-in-place-one-section-at-a-t -- npx -y @geml/geml
```

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "geml-a-plain-text-document-format-built-to-be-edited-in-place-one-section-at-a-t": {
            "url": "https://geml-mcp.supermarket.workers.dev/mcp"
        }
    }
}
```
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "geml-a-plain-text-document-format-built-to-be-edited-in-place-one-section-at-a-t": {
            "command": "npx",
            "args": [
                "-y",
                "@geml/geml"
            ]
        }
    }
}
```

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "geml-a-plain-text-document-format-built-to-be-edited-in-place-one-section-at-a-t": {
            "type": "http",
            "url": "https://geml-mcp.supermarket.workers.dev/mcp"
        }
    }
}
```
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "geml-a-plain-text-document-format-built-to-be-edited-in-place-one-section-at-a-t": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "@geml/geml"
            ]
        }
    }
}
```

### Gemini CLI

1. **Platform CLI: remote server**
```bash
gemini mcp add -t http geml-a-plain-text-document-format-built-to-be-edited-in-place-one-section-at-a-t https://geml-mcp.supermarket.workers.dev/mcp
```

2. **Platform CLI**
```bash
gemini mcp add geml-a-plain-text-document-format-built-to-be-edited-in-place-one-section-at-a-t npx -y @geml/geml
```

## When to use it
- pull a single README section without loading the whole file
- rewrite one named code block and leave the rest of the bytes alone
- grab a single table cell or a leaf out of a JSON block
- roll a document back to a saved revision
- locate which block held a string you want replaced

## Example prompts
- List the sections in `README.md` and read only `#key-features`.
- Replace the text of `#key-features` and save a revision labelled `tighten intro`.
- Read the cell `#fy[2]["Q1"]` from `doc.geml`.

## Similar
- [Reactive Resume](https://affpapa.org/en/nevibecode/mcp/reactive-resume.md) — MCP server · ★ 44874
- [Sui Knowledge Base (kapa.ai)](https://affpapa.org/en/nevibecode/mcp/sui-knowledge-base-kapaai.md) — MCP server · ★ 7784
- [Claude Code Ultimate Guide](https://affpapa.org/en/nevibecode/mcp/claude-code-ultimate-guide.md) — MCP server · ★ 6237
- [Zotero MCP](https://affpapa.org/en/nevibecode/mcp/zotero-mcp.md) — MCP server · ★ 5548
- [RevoGrid DataGrid MCP Pro](https://affpapa.org/en/nevibecode/mcp/revogrid-datagrid-mcp-pro.md) — MCP server · ★ 3450
- [Claude Code Explorer MCP](https://affpapa.org/en/nevibecode/mcp/codeaashu-claude-code-explorer-mcp.md) — MCP server · ★ 3409

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
