Skip to main content
Glama
gummiz
by gummiz
README.md
# InDesign for Claude

![Collage of InDesign panels, a note reading "place 12 images in a 4x3 grid, 5 mm gutter" and an arrow to a magazine spread with that grid](docs/2026-09-15-cover.jpg)

Describe what you want, and Claude builds it in Adobe InDesign: frames, text, colours, whole pages. It always works on a copy of your file, so the original stays exactly as you left it.

No terminal, no code. You install one file into the Claude desktop app.

## What you need

- A Mac
- Adobe InDesign (tested with InDesign 2026)
- The [Claude desktop app](https://claude.ai/download)

## Install

1. Download **`indesign.mcpb`** from the [latest release](https://github.com/gummiz/claude-indesign/releases/latest).
2. Double-click the file. Claude opens and shows the extension.
3. Click **Install**.

Claude shows a red warning saying the extension gets access to your computer and that the developer details are not verified by Anthropic. That appears for every extension installed from a file. The extension only talks to InDesign, and the full source code is in this repository.

To check that it worked, open **Settings → Extensions** in Claude. "InDesign" should be listed and switched on.

## First steps

1. Start InDesign and open a document. It has to be saved at least once.
2. Start a new chat in Claude and ask: *"Which documents are open in InDesign?"*
3. The first time, macOS asks whether Claude may control InDesign. Click **OK**.
4. Now ask for something real: *"Draw a red 50 × 50 mm square on page 1."*

A new file appears next to your document, named like `flyer--claude.indd`, and opens in InDesign. That is where Claude works.

## How your work stays safe

**Your original is never changed.** Claude copies your document to `<name>--claude.indd` in the same folder and makes every change there. If that copy already exists, Claude keeps working in it and never overwrites it. Bringing results back into the original is up to you.

**Every change can be undone.** Each request Claude carries out is a single step in InDesign's **Edit** menu, labelled "Claude: …". One Cmd+Z undoes exactly that step, so you can always tell whether the next undo hits your own work or Claude's.

**You keep working.** You can scroll, switch documents and open others while Claude works. Claude always names the document it means and never simply picks whichever window is in front.

**Nothing happens silently.** Claude does not save, close or delete files on its own. Saving the copy is your call.

## Prompts to try

- *"Set all body text in the copy to 9/13 pt Minion Pro."*
- *"Add a 3 mm bleed and check that all images reach the bleed edge."*
- *"List every font used in this document, and where."*
- *"Align all captions to the baseline grid."*
- *"Find text that overflows its frame."*

## Troubleshooting

**"Document is not open."** Claude only works with documents that are already open in InDesign. Open the file, then ask again.

**"Has never been saved."** Save the document once (Cmd+S). The copy needs a folder to live in.

**Claude can't reach InDesign.** Open **System Settings → Privacy & Security → Automation**, find Claude and turn on **Adobe InDesign**. Then restart Claude.

**InDesign seems frozen.** A long job is still running. Wait until it finishes; it can't be cancelled from Claude.

**Two documents with the same name.** Close one of them, so Claude knows which file you mean.

## Uninstall

Claude → **Settings → Extensions → InDesign → Uninstall**. The `--claude` copies stay in your folders; delete them whenever you like.

---

## For developers

The extension is a small [MCP](https://modelcontextprotocol.io) server in Node.js. It sends ExtendScript to InDesign via AppleScript (`do script … language javascript`) and has three tools:

| Tool      | Purpose                                                                                      |
| --------- | -------------------------------------------------------------------------------------------- |
| `ping`    | Version and platform. Does not touch InDesign.                                               |
| `status`  | All open documents: name, path, size in mm, bleed, working copy or not. Call it first.        |
| `run_jsx` | Runs ExtendScript. Requires `document` and `undo_name`. Writes only to the `--claude` copy.   |

### Use with Claude Code

Requires Node 20 or later.

```bash
git clone https://github.com/gummiz/claude-indesign.git
cd claude-indesign
npm install
claude mcp add indesign -s user -- node "$PWD/bin/indesign-mcp.js"
```

### Other MCP clients

The server speaks plain MCP over stdio, so any client that runs local MCP servers can use it: Cursor, VS Code, LM Studio, Gemini CLI, Codex CLI and others. Clone and `npm install` as above, then add this to the client's MCP configuration, with the absolute path to your clone:

```json
{
  "mcpServers": {
    "indesign": {
      "command": "node",
      "args": ["/absolute/path/to/claude-indesign/bin/indesign-mcp.js"]
    }
  }
}
```

The exact file and key name differ between clients (VS Code, for example, uses `servers`), so check your client's MCP docs. Two things to know. Undo steps in InDesign are labelled "Claude: …" whichever model runs them. And results depend on the model, since it has to write working ExtendScript, which is ES3; smaller local models tend to struggle with that.

### Build the extension

```bash
npm run pack
```

This writes `dist/indesign.mcpb`.

## License

MIT © Stefan Kummerlöw. Made at [tadaptive lab](https://www.tadaptive.de/lab).

Adobe and InDesign are trademarks of Adobe Inc. This project is not affiliated with or endorsed by Adobe.