Illustrator AI MCP Server
by Gokul2
README.md
# illustrator-ai-mcp
**Let Claude design in Adobe Illustrator β 100% local, private by default.**
An MCP (Model Context Protocol) server that gives AI assistants hands and eyes inside Adobe Illustrator: it writes and runs ExtendScript, sees the canvas via window screenshots, reads document structure, exports artwork, and (optionally) remembers techniques that worked β all without a single byte leaving your machine from this server.
> π **New here? Start with the step-by-step [USER_GUIDE.md](USER_GUIDE.md)** β install, Claude Desktop/Code setup, permissions, and troubleshooting for both platforms.
| Platform | Status |
|---|---|
| π macOS | β
Fully supported & tested (AppleScript bridge) |
| πͺ Windows | β οΈ Experimental (COM bridge via pywin32 β testers welcome) |
## Privacy
- **No network code.** This package contains zero HTTP clients, telemetry, or analytics. It talks only to Illustrator (via AppleScript/ExtendScript) and your local filesystem.
- **History is opt-in and OFF by default.** Nothing is logged until you (or the AI, with your permission) call `set_memory(True)`.
- **One-command wipe.** Everything the server ever stores lives in `~/.illustrator-mcp`. Delete that folder and it's gone. There is also a `clear_history` capability in the memory layer.
- **Honest caveat:** screenshots of your Illustrator window and script results *are* sent to the AI model as part of your conversation β that is inherent to how the AI sees the canvas and iterates on the design. If a document is confidential, don't ask an AI to look at it. The *server* itself, however, never transmits anything on its own.
## Features vs. the original
Inspired by [spencerhhubert/illustrator-mcp-server](https://github.com/spencerhhubert/illustrator-mcp-server), rebuilt with the feedback loop an AI actually needs:
| Capability | spencerhhubert/illustrator-mcp-server | illustrator-ai-mcp |
|---|---|---|
| Run ExtendScript in Illustrator | Yes | Yes |
| Script output capture (`return` values) | No β fire and forget | Yes β scripts return data to the AI |
| Error messages with line numbers | No | Yes β AI can fix and retry |
| Window screenshots | Fixed screen region | Dynamic window detection, any display |
| Document state as JSON (artboards/layers/selection) | No | Yes |
| Export artwork (png/svg/pdf/jpg) | No | Yes |
| Undo | No | Yes |
| Local run history | No | Yes β opt-in, off by default |
| Reusable snippet library | No | Yes β searchable across sessions |
## Requirements
- macOS (AppleScript bridge β fully supported) or Windows (COM bridge β experimental)
- Adobe Illustrator (any recent CC version), running
- Python 3.11+
- [uv](https://docs.astral.sh/uv/) recommended (plain pip works too)
## Install
### With uv (recommended)
```bash
git clone https://github.com/Gokul2/illustrator-mcp-Gokul-Dhatkshina-Moorthy-.git illustrator-ai-mcp
cd illustrator-ai-mcp
uv sync
```
### With plain pip
```bash
git clone https://github.com/Gokul2/illustrator-mcp-Gokul-Dhatkshina-Moorthy-.git illustrator-ai-mcp
cd illustrator-ai-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
```
## Hook it up
### Claude Desktop
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"illustrator": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/illustrator-ai-mcp",
"run",
"illustrator-ai-mcp"
]
}
}
}
```
Restart Claude Desktop afterwards.
### Claude Code
```bash
claude mcp add illustrator -- uv --directory /absolute/path/to/illustrator-ai-mcp run illustrator-ai-mcp
```
## First run: macOS permissions
The first time the server touches Illustrator, macOS will ask for two permissions. Grant both to the app hosting the server (Claude Desktop, your terminal, etc.):
1. **Automation** β lets the server send ExtendScript to Illustrator.
*System Settings β Privacy & Security β Automation* β enable **Adobe Illustrator** under your client app.
2. **Screen Recording** β lets `view_canvas` screenshot the Illustrator window.
*System Settings β Privacy & Security β Screen Recording* β enable your client app, then restart it.
If a screenshot comes back black or the tool reports a permission error, Screen Recording is the usual culprit.
## Tool reference
| Tool | What it does |
|---|---|
| `run_script(code)` | Execute ExtendScript on the current document. `return <value>` sends data back; errors include line numbers for fix-and-retry. |
| `view_canvas()` | JPEG screenshot of the Illustrator window β the AI's eyes. |
| `get_document_state()` | Structured JSON of artboards, layers, and selection β cheaper than a screenshot for layout logic. |
| `export_artwork(path, format)` | Export the document to png / svg / pdf / jpg at a path you choose. |
| `undo_last()` | Undo the most recent action (Cmd+Z). |
| `list_history(limit)` | Recent script runs (only when memory is enabled). |
| `get_run(run_id)` | Full code + screenshot path of one past run. |
| `save_snippet(name, description, code, tags)` | Save a technique that worked to the local library. |
| `search_snippets(query, limit)` | Search the library before writing complex scripts from scratch. |
| `set_memory(enabled)` | Opt in/out of local history logging (default: off). |
| `memory_stats()` | What's stored, where, and a privacy statement. |
## Example prompts
- "Design a minimalist mountain logo β dark blue palette, geometric, on a square artboard."
- "Recreate this layout as 3 variations on separate artboards."
- "Draw a sunburst badge with 24 rays, then export it as an SVG to my Desktop."
- "Look at the canvas and tell me what's misaligned, then fix it."
- "That gradient trick worked great β save it as a snippet for next time."
## Your data
Everything the server stores lives in one folder:
```
~/.illustrator-mcp/
```
That's the opt-in run history (SQLite), optional screenshots, and your snippet library. To wipe it:
- ask the AI to clear the history (uses the memory layer's `clear_history`), or
- nuke it yourself: `rm -rf ~/.illustrator-mcp`
Nothing else is written anywhere, and nothing is ever transmitted by this server.
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues