Illustrator MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TIMEOUT | No | Script execution timeout in seconds (default: 30) | 30 |
| WS_PORT | No | WebSocket port for CEP panel connection (default: 8081) | 8081 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| illustrator_execute_scriptA | Execute raw JavaScript/ExtendScript code in Adobe Illustrator. CONTRACT: readOnly=False, destructive=True, idempotent=False, openWorld=True WHEN TO USE:
ABSTRACTION LADDER — prefer higher levels before using raw script: Level 5 — illustrator_path_boolean: boolean sculpt (unite/subtract/intersect/xor) Level 4 — illustrator_execute_task + element_create_batch: batch-create identical shapes Level 3 — illustrator_path_import_svg: import SVG d-string paths Level 2 — illustrator_execute_task + element_create: smooth curves, handles, mirror Level 1 — illustrator_execute_script (THIS tool): raw ExtendScript DECISION RULES:
COORDINATE SYSTEM:
EXAMPLES: Rectangle: doc.pathItems.rectangle(top, left, width, height) ⚠ width & height must be POSITIVE. Negative height → shape above artboard (invisible). Ellipse: doc.pathItems.ellipse(top, left, width, height) Line: var p = doc.pathItems.add(); p.setEntirePath([[x1,-y1], [x2,-y2]]) Color: var c = new RGBColor(); c.red=255; c.green=0; c.blue=0; shape.fillColor = c; Text: var tf = doc.textFrames.add(); tf.contents = "text"; tf.position = [x, -y]; Grid helpers: artboardGrid(cols, rows), itemsInCell(cell, mode) ELEMENT DISCOVERY:
MUTATION SAFETY:
NOTES:
SAFETY:
|
| illustrator_execute_taskA | Execute a structured task using the Task Protocol v2.1. CONTRACT: readOnly=False, destructive=True, idempotent=False, openWorld=False WHEN TO USE:
EXAMPLES: Smooth curve: illustrator_execute_task(payload={task: "element_create", params: { type: "path", points: [[0,50],[50,0],[100,50],[150,0]], smooth: true, tension: 0.5, fill: {r: 0, g: 150, b: 136}}}) Batch shapes: illustrator_execute_task(payload={task: "element_create_batch", params: { template: {type: "ellipse", rx: 4, ry: 3}, array: {count: 47, startX: 180, spacingX: 15}}}) Grid layout: illustrator_execute_task(payload={task: "element_create_batch", params: { template: {type: "rect", w: 8, h: 8}, array: {count: 50, cols: 10, spacingX: 15, spacingY: 15}}}) TARGET SELECTORS: {type: "selection"} — current selection (default) {type: "layer", layer: "Layer 1"} — all items on layer {type: "query", itemType: "PathItem", pattern: "axis_*"} — pattern match {type: "all", recursive: true} — all items in document {type: "id", ids: ["A1", "A2"]} — stable MCP ID targeting OPTIONS: dryRun: true — compute actions without applying trace: true — include execution trace in report assignIds: true — write unique IDs to item.note (opt-in) NOTES:
|
| illustrator_path_booleanA | Perform boolean operations (subtract, unite, intersect, xor) on paths. CONTRACT: readOnly=False, destructive=True, idempotent=False, openWorld=False WHEN TO USE:
PIPELINE:
EXAMPLES: illustrator_path_boolean(operation="unite", subject="body_id", clip=["wing_id"]) illustrator_path_boolean(operation="subtract", subject="plate_id", clip=["hole_id"]) NOTES:
|
| illustrator_export_documentA | Export the active document to PNG, JPG, SVG, or PDF. CONTRACT: readOnly=False, destructive=True, idempotent=False, openWorld=True WHEN TO USE:
EXAMPLES: illustrator_export_document(file_path="C:/out/fig.png", format="png", scale=2.0) illustrator_export_document(file_path="C:/out/fig.pdf", format="pdf") illustrator_export_document(file_path="C:/out/fig.png", return_image=True, artboard_only=True) NOTES:
|
| illustrator_historyA | Undo or redo actions in Illustrator. CONTRACT: readOnly=False, destructive=True, idempotent=False, openWorld=False WHEN TO USE:
EXAMPLES: illustrator_history(action="undo", count=3) illustrator_history(action="checkpoint_save", name="before_boolean") illustrator_history(action="checkpoint_restore", name="before_boolean") illustrator_history(action="checkpoint_list") NOTES:
|
| illustrator_place_fileA | Place an external file (EPS, AI, PDF, image) into the document. CONTRACT: readOnly=False, destructive=True, idempotent=False, openWorld=True WHEN TO USE:
KEY CONCEPTS: linked=True (drafting) — file updates automatically when source changes linked=False (final) — file is embedded and fully editable embed_editable=True — opens PDF, copies content as editable vectors (slower) trace=True — place raster, then run Image Trace to vectorize EXAMPLES: illustrator_place_file(file_path="C:/img/photo.png", x=100, y=50, linked=True) illustrator_place_file(file_path="C:/img/photo.png", trace=True, trace_preset="6 Colors") NOTES:
|
| illustrator_set_referenceA | Set or clear a reference image on a locked background layer for tracing. CONTRACT: readOnly=False, destructive=True, idempotent=True, openWorld=True WHEN TO USE:
KEY CONCEPTS: Places image on a dedicated 'reference' layer at the bottom of the stack. Layer is locked, dimmed, and non-printable to prevent accidental edits. Calling again with the same file replaces the previous reference (idempotent). EXAMPLES: illustrator_set_reference(file_path="C:/ref/sketch.png", opacity=50) illustrator_set_reference() -- clears the reference layer NOTES:
|
| illustrator_documentA | Create, open, save, or close an Illustrator document. CONTRACT: readOnly=False, destructive=True, idempotent=False, openWorld=True WHEN TO USE:
EXAMPLES: illustrator_document(action="create", width=800, height=600, color_mode="RGB") illustrator_document(action="open", file_path="C:/art/figure.ai") illustrator_document(action="save", file_path="C:/art/figure_v2.ai") illustrator_document(action="close", save_before_close=True) NOTES:
|
| illustrator_get_documentA | Get complete document information and structure as a JSON tree. CONTRACT: readOnly=True, destructive=False, idempotent=True, openWorld=False WHEN TO USE:
OPTIONS: scope: 'document' (default), 'app', or 'both' max_items: items per layer, 1-5000 (default 200) max_layers: layers to return, 1-200 (default 50) offset: skip first N items per layer (for paging) layer_name / layer_index: filter to single layer EXAMPLES: illustrator_get_document() illustrator_get_document(scope="app") illustrator_get_document(layer_name="Layer 1", offset=200, max_items=200) NOTES:
|
| illustrator_query_itemsA | Query items using the Task Protocol with declarative target selection. CONTRACT: readOnly=True, destructive=False, idempotent=True, openWorld=False WHEN TO USE:
TARGET SELECTORS: {type: "selection"} — current selection (default) {type: "layer", layer: "Layer 1"} — all items on layer {type: "all", recursive: true} — all items in document {type: "query", itemType: "PathItem", pattern: "axis_*"} — filter by type/name NOTES:
|
| illustrator_preflight_checkA | Perform observational validation on the active document. CONTRACT: readOnly=True, destructive=False, idempotent=True, openWorld=False WHEN TO USE:
KEY CONCEPTS: Checks for: items outside artboard bounds, zero-size items, empty text frames, locked layers/items. Does NOT modify the document. NOTES:
|
| illustrator_path_import_svgA | Import an SVG path d attribute into the active document. CONTRACT: readOnly=False, destructive=False, idempotent=False, openWorld=False WHEN TO USE:
EXAMPLES: illustrator_path_import_svg(d="M 10 50 C 20 20, 80 20, 90 50 Z") illustrator_path_import_svg(d="M 0 0 L 100 0 L 100 100 Z", fill={r: 255, g: 0, b: 0}) NOTES:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| extendscript_reference_resource | Static ExtendScript scripting reference (cached by client). |
| library_catalog_resource | Helper library catalog auto-generated from manifest.json. |
| update_linked_items_snippet | JSX snippet for updating all linked items from source files. |
TDQS
Scored across 12 tools
The tools have clearly distinct purposes, with explicit decision rules and an abstraction ladder separating raw script execution from structured task execution. Overlaps such as execute_script vs. execute_task and get_document vs. query_items are well resolved by documented use cases and contracts.
All names use a consistent illustrator_ snake_case prefix and are highly readable. A few names are noun-based rather than strict verb_noun (illustrator_document, illustrator_history, illustrator_path_boolean), but the overall convention is predictable.
With 12 tools, the server covers a well-scoped Illustrator automation surface without feeling bloated. Each tool appears to earn its place by addressing document control, creation, inspection, export, history, or specialized path/image operations.
The surface covers document lifecycle, reading, querying, modification via structured tasks or raw script, boolean geometry, SVG import, placement, references, history, export, and preflight checks. Minor gaps exist for explicit element deletion or advanced layer/text management, but the raw script fallback prevents hard dead ends.