Control Adobe Creative Cloud from AI agents via the Model Context Protocol
Quick Start • Features • Dashboard • Tools • Themes • Importers • Configuration
An MCP server that lets Claude (or any MCP-compatible AI) drive InDesign, Photoshop, and Illustrator on macOS through ExtendScript via the native AppleScript bridge. Import content from Notion, Google Docs, Word, or PDF — then generate professionally typeset ebooks, documents, and creative assets in one shot.
| Requirement | Version |
|---|---|
| macOS | 12+ (Monterey or later) |
| Python | 3.11+ |
| Adobe Creative Cloud | InDesign, Photoshop, and/or Illustrator installed |
# Clone the repo
git clone https://github.com/YOUR_USERNAME/adobe-mcp.git
cd adobe-mcp
# Install with all optional dependencies
pip install -e ".[all,dev]"Or install only what you need:
pip install -e "." # Core (InDesign, Photoshop, Illustrator)
pip install -e ".[notion]" # + Notion imports
pip install -e ".[google]" # + Google Docs imports
pip install -e ".[dev]" # + pytest for running testsOn first use, macOS will prompt for Automation permissions:
System Settings → Privacy & Security → Automation
Grant your terminal app (Terminal, iTerm, VS Code, Claude Desktop, etc.) permission to control each Adobe app.
Claude Code CLI — add to your project's .mcp.json:
{
"mcpServers": {
"adobe-mcp-macos": {
"command": "python",
"args": ["-m", "adobe_mcp_macos"],
"env": {}
}
}
}Claude Desktop — merge into ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"adobe-mcp-macos": {
"command": "python",
"args": ["-m", "adobe_mcp_macos"],
"env": {}
}
}
}Then restart Claude. The Adobe tools will appear automatically.
Give Claude a simple instruction like "Import my Notion page and create a professionally typeset ebook" and it will:
- Fetch content from Notion (or Google Docs, Word, PDF)
- Apply a design theme (typography, colors, page layout)
- Create an InDesign document with chapter openers, TOC, and flowing text
- Export both a print-ready PDF (CMYK, crop marks, bleeds) and a digital PDF (RGB, optimized)
A standalone browser UI for creating ebooks without Claude:
adobe-mcp-dashboard
# → http://localhost:5050The dashboard provides:
- Content import — paste a Notion URL or upload a DOCX/PDF
- Theme selection — pick from built-in themes or create custom ones
- Live progress — SSE streaming shows each step as the book is built
- Saved imports — re-use previously imported content
40+ MCP tools across three Adobe applications:
| App | Capabilities |
|---|---|
| InDesign | Documents, paragraph styles, master pages, text flow, images, TOC, page numbers, PDF export |
| Photoshop | Documents, text layers, filters, image resize, PNG/JPEG export |
| Illustrator | Documents, rectangles, text frames, PNG/SVG export |
| Tool | Description |
|---|---|
adobe_list_running_apps |
List which Adobe apps are currently open |
adobe_open_file |
Open a file in a specified Adobe app |
adobe_get_active_document |
Get name/path of active documents across all apps |
Book Creation (high-level)
| Tool | Description |
|---|---|
id_create_book |
Single-shot full book creation from a BookManifest JSON |
Document Management
| Tool | Description |
|---|---|
id_create_document |
Create a new themed InDesign document |
id_open_document |
Open an existing .indd file |
id_save_document |
Save the active document |
id_close_document |
Close the active document |
Layout & Styling
| Tool | Description |
|---|---|
id_setup_master_pages |
Create A-Body and B-Chapter master pages from theme |
id_setup_paragraph_styles |
Create all paragraph styles from theme |
id_apply_theme |
Apply a theme to the active document |
Content
| Tool | Description |
|---|---|
id_add_chapter |
Add a chapter (opener page + body text) |
id_flow_text |
Flow text with automatic page creation |
id_add_text_frame |
Add a text frame at exact mm coordinates |
id_add_pull_quote |
Add a styled pull quote |
id_add_sidebar |
Add a sidebar text box |
Navigation
| Tool | Description |
|---|---|
id_add_table_of_contents |
Generate a TOC page with dot leaders |
id_add_page_numbers |
Set page numbering (arabic or roman) |
Images
| Tool | Description |
|---|---|
id_place_image |
Place an image with fitting options |
id_add_full_bleed_image |
Place a full-bleed image to document edges |
id_add_caption |
Add a caption below an image |
Themes
| Tool | Description |
|---|---|
id_list_themes |
List all available themes |
id_create_theme |
Generate a new theme from a text description |
id_get_theme |
Get full JSON config for a theme |
Export
| Tool | Description |
|---|---|
id_export_pdf_print |
Export print-ready PDF (CMYK, bleeds, crop marks) |
id_export_pdf_digital |
Export screen-optimized digital PDF (RGB) |
Advanced
| Tool | Description |
|---|---|
id_execute_jsx |
Execute raw ExtendScript in InDesign |
| Tool | Description |
|---|---|
ps_create_document |
Create a new document (RGB, CMYK, or Grayscale) |
ps_add_text |
Add a text layer |
ps_export_png |
Export as PNG |
ps_export_jpg |
Export as JPEG with quality setting |
ps_resize_image |
Resize the image |
ps_apply_filter_blur |
Apply Gaussian blur |
ps_flatten |
Flatten all layers |
ps_list_layers |
List all layers |
ps_execute_jsx |
Execute raw ExtendScript |
| Tool | Description |
|---|---|
ai_create_document |
Create a new document |
ai_add_rectangle |
Draw a rectangle |
ai_add_text |
Add a text frame |
ai_export_png |
Export as PNG |
ai_export_svg |
Export as SVG |
ai_list_layers |
List all layers |
ai_select_all |
Select all objects |
ai_execute_jsx |
Execute raw ExtendScript |
Themes control every aspect of document design — typography, colors, page dimensions, margins, master pages, and export settings.
| Theme | Description | Page Size | Body Font | Heading Font |
|---|---|---|---|---|
| Zen | Clean, minimal book layout | 6" × 9" | Palatino 12pt | Optima |
| Business | Professional document | Letter | Garamond 13pt | Helvetica Neue |
| Modern | Balanced contemporary design | 6" × 9" | Palatino 12pt | Helvetica Neue |
Via Claude:
"Create a theme called 'Memoir' with Georgia body text,
large chapter numbers, and warm earth-tone colors"
Via the dashboard: Select "Custom" from the theme dropdown and describe your style.
Manually: Create a JSON file in ~/.adobe-mcp/themes/:
{
"name": "My Theme",
"page": {
"width_mm": 152.4,
"height_mm": 228.6,
"margins": { "top": 25.4, "bottom": 25.4, "inside": 19.05, "outside": 15.875 },
"columns": 1
},
"typography": {
"body": { "family": "Palatino", "font_style": "Regular", "size": 12, "leading": 18 },
"h1": { "family": "Optima", "font_style": "Bold", "size": 28, "leading": 34 },
"h2": { "family": "Optima", "font_style": "Regular", "size": 18, "leading": 24 }
},
"colors": {
"body_text": "#1a1a1a",
"heading": "#000000",
"accent": "#4a7c59"
}
}Themes are validated with Pydantic — missing fields fall back to sensible defaults.
Themes can reference .indt InDesign template files for advanced layouts that go beyond what JSON can express. Place templates in src/adobe_mcp_macos/themes/templates/.
Import content from multiple sources into a structured format ready for book creation.
| Source | How | Requirements |
|---|---|---|
| Notion | Page URL or ID | NOTION_API_TOKEN env var |
| Google Docs | Document ID | GOOGLE_SERVICE_ACCOUNT_JSON env var |
| Microsoft Word | .docx file path |
None |
.pdf file path |
None |
The Notion importer preserves formatting from the source document:
- Bold, italic, and other inline styles
- Color annotations
- These styles carry through to the InDesign output as character-level overrides
The id_import_to_book tool is the simplest path — provide any one source and get back a ready-to-use BookManifest:
"Import my Notion page https://notion.so/My-Book-abc123
and create an ebook using the Zen theme"
| Variable | Required | Purpose |
|---|---|---|
NOTION_API_TOKEN |
For Notion imports | Internal integration token from notion.so/my-integrations |
GOOGLE_SERVICE_ACCOUNT_JSON |
For Google Docs imports | Path to service account key JSON file |
Set these in a .env file in the project root, or pass them in your MCP server config:
{
"mcpServers": {
"adobe-mcp-macos": {
"command": "python",
"args": ["-m", "adobe_mcp_macos"],
"env": {
"NOTION_API_TOKEN": "ntn_your_token_here"
}
}
}
}- Go to notion.so/my-integrations
- Create a new internal integration
- Copy the token (starts with
ntn_) - In Notion, open the page you want to import → ⋯ → Connections → add your integration
- Create a service account in Google Cloud Console
- Enable the Google Docs API
- Download the JSON key file
- Share your Google Doc with the service account email address
- Set
GOOGLE_SERVICE_ACCOUNT_JSONto the path of the key file
# All unit tests (no Adobe apps needed)
pytest tests/ --ignore=tests/integration -v
# Integration tests (requires running Adobe apps)
pytest tests/integration/ -v
# Quick check
pytest tests/ -qadobe-mcp-macos/
├── src/adobe_mcp_macos/
│ ├── server.py # MCP server entry point (FastMCP)
│ ├── executor.py # AppleScript bridge → ExtendScript execution
│ ├── tools/
│ │ ├── indesign.py # InDesign MCP tools (high-level)
│ │ ├── indesign_jsx.py # JSX code generators (low-level)
│ │ ├── photoshop.py # Photoshop MCP tools
│ │ ├── illustrator.py # Illustrator MCP tools
│ │ ├── shared.py # Cross-app utilities
│ │ └── importers.py # Content import tools
│ ├── importers/
│ │ ├── notion.py # Notion API client
│ │ ├── google_docs.py # Google Docs API client
│ │ ├── docx_parser.py # Word document parser
│ │ ├── pdf_parser.py # PDF parser (font-size heuristics)
│ │ └── rich_text.py # Rich text markup handling
│ ├── themes/
│ │ ├── manager.py # Theme loading, saving, listing
│ │ ├── validator.py # Pydantic models for theme validation
│ │ ├── builtin/ # Built-in theme JSON files
│ │ └── templates/ # InDesign .indt template files
│ ├── models/ # Pydantic input models for all tools
│ └── dashboard/
│ ├── app.py # Starlette web server
│ └── index.html # Single-page dashboard UI
├── tests/ # 250+ unit tests
├── docs/plans/ # Design documents
└── pyproject.toml
Claude / Dashboard
│
▼
MCP Server (FastMCP)
│
▼
Tool Functions (Python)
│
▼
JSX Code Generators
│
▼
executor.py → osascript → AppleScript
│
▼
Adobe App (ExtendScript engine)
- Claude calls an MCP tool (e.g.,
id_create_book) - Python generates ExtendScript (JSX) code
- The executor writes JSX to a temp file and invokes it via
osascript - Adobe's ExtendScript engine runs the code inside the application
- Results return to Python via stdout
- ExtendScript runs synchronously — very long operations may time out (60s default)
- The
execute_jsxtools run arbitrary code in Adobe apps; use with caution - Custom theme generation uses an existing theme as a base; edit the JSON for full control
- Premiere Pro and After Effects are not yet supported
- Requires macOS (Windows/Linux not supported due to AppleScript dependency)
MIT
