# InDesign MCP Server (npm · indesign-mcp-server)

Drive Adobe InDesign from any MCP client: 135+ tools for layout, styles, books and PDF export.

- Trust score: 73/100 (medium)
- Change this week: +3
- Registry status: deprecated
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

> **Deprecated**: this server is marked deprecated in the MCP registry. The registry records this reason: "Renamed to adobe-mcp-indesign."

## Components

- npm · `indesign-mcp-server`: 73/100 (this document), [markdown](https://verifymcp.io/servers/zachshallbetter-indesign-mcp-server/indesign-mcp-server.md), [page](https://verifymcp.io/servers/zachshallbetter-indesign-mcp-server/indesign-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `indesign-mcp-server`
- Version: `2.3.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 39 of 121 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 16/100
  - Repository check failed: the declared repository URL redirects; it must resolve directly.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Maintenance check failed: the publisher has marked this version as deprecated on the registry, telling users to stop installing it.
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 71/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 14090 tokens (~102/item across 137 items; 137 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 70/100
  - Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 10 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 138 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the InDesign MCP Server server?

InDesign MCP Server runs locally as an npm package, launched with npx -y indesign-mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add zachshallbetter-indesign-mcp-server -- npx -y indesign-mcp-server
```

### Cursor

```json
{
  "mcpServers": {
    "zachshallbetter-indesign-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "indesign-mcp-server"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "zachshallbetter-indesign-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "indesign-mcp-server"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add zachshallbetter-indesign-mcp-server -- npx -y indesign-mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "zachshallbetter-indesign-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "indesign-mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add zachshallbetter-indesign-mcp-server --command npx --arg -y --arg indesign-mcp-server
```

### Hermes

```yaml
mcp_servers:
  zachshallbetter-indesign-mcp-server:
    command: "npx"
    args: ["-y", "indesign-mcp-server"]
```

### Netclaw

```json
{
  "McpServers": {
    "zachshallbetter-indesign-mcp-server": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "indesign-mcp-server"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add zachshallbetter-indesign-mcp-server -t stdio -c npx -a -y indesign-mcp-server
```

### Other

```json
{
  "mcpServers": {
    "zachshallbetter-indesign-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "indesign-mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 72, +1)

No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-31 (score 71, +1)

No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-29 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-26 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-24 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-22 (score 67, +4)

- [functional improvement] Stability: unverified → 0.23

### 2026-10-16 (score 63, −2)

- [functional regression] Maintenance: pass → fail

## MCP tools (137)

### `add_page` (~84 tokens)

Add Page

Add a page to the active document at the end, the beginning, or before/after a given page; returns the new page count

Input parameters:

- `position` (string): Where to add the page: AT_END, AT_BEGINNING, or BEFORE/AFTER referencePage
- `referencePage` (integer): 0-based reference page index (required for BEFORE/AFTER)

### `delete_page` (~39 tokens)

Delete Page

Delete a page from the document (the only page cannot be deleted)

Input parameters:

- `pageIndex` (integer, required): 0-based index of the page to delete

### `duplicate_page` (~74 tokens)

Duplicate Page

Duplicate a page and put the copy at the given position in the document

Input parameters:

- `pageIndex` (integer, required): 0-based index of the page to duplicate
- `position` (string): Where to put the copy
- `referencePageIndex` (integer): 0-based reference page index (required for BEFORE/AFTER)

### `navigate_to_page` (~44 tokens)

Navigate To Page

Navigate to a page: make it the active page of the document's layout window

Input parameters:

- `pageIndex` (integer, required): 0-based index of the page to navigate to

### `get_page_info` (~30 tokens)

Get Page Info

Get detailed information about a specific page

Input parameters:

- `pageIndex` (integer, required): 0-based page index

### `move_page` (~109 tokens)

Move Page

Move a page to a different position in the document

Input parameters:

- `binding` (string): Location of the binding spine in the spread (BindingOptions)
- `pageIndex` (integer, required): 0-based index of the page to move
- `position` (string): Where to move the page: AT_END, AT_BEGINNING, or BEFORE/AFTER referencePage
- `referencePageIndex` (integer): 0-based reference page index (required for BEFORE/AFTER; must differ from pageIndex)

### `set_page_properties` (~157 tokens)

Set Page Properties

Set properties for a page (only the properties given are changed)

Input parameters:

- `appliedTrapPreset` (string): Name of an existing trap preset to apply
- `label` (string): Page label
- `layoutRule` (string): Liquid layout rule (LayoutRuleOptions)
- `optionalPage` (boolean): Optional page for HTML5 pagination
- `pageColor` (string): Page color shown in the Pages panel: UI color name (e.g. "BLUE", "LIGHT_BLUE"), "r,g,b" (0-255), "USE_MASTER_COLOR" or "NOTHING"
- `pageIndex` (integer, required): 0-based page index
- `snapshotBlendingMode` (string): Snapshot blending mode (SnapshotBlendingModes)

### `adjust_page_layout` (~197 tokens)

Adjust Page Layout

Adjust a page's size and margins with InDesign's Adjust Layout (content is repositioned/scaled to follow). Bleed values are a document setting and are applied to the whole document. All values use the given units.

Input parameters:

- `bleedBottom` (number): Bottom bleed, document-wide
- `bleedInside` (number): Inside (left) bleed, document-wide
- `bleedOutside` (number): Outside (right) bleed, document-wide
- `bleedTop` (number): Top bleed, document-wide
- `bottomMargin` (number): Bottom margin
- `height` (number): New page height
- `leftMargin` (number): Left margin
- `pageIndex` (integer, required): 0-based page index
- `rightMargin` (number): Right margin
- `topMargin` (number): Top margin
- `units` (string): Units for all values below
- `width` (number): New page width

### `resize_page` (~183 tokens)

Resize Page

Resize a page (Page.resize). With REPLACING/ADDING, width and height are lengths in mm; with MULTIPLYING they are scale factors; with RESHAPING_* they are a width:height ratio.

Input parameters:

- `anchorPoint` (string): Point of the page that stays fixed while it resizes
- `coordinateSpace` (string): Coordinate space the size is measured in; PAGE_COORDINATES unless you need another
- `height` (number, required): Height value (mm, factor or ratio part depending on resizeMethod)
- `pageIndex` (integer, required): 0-based page index
- `resizeMethod` (string): How width and height are applied: replace the size (default), multiply it, add to it, or reshape to a ratio
- `width` (number, required): Width value (mm, factor or ratio part depending on resizeMethod)

### `place_file_on_page` (~133 tokens)

Place File On Page

Place a file (image, PDF, text, InDesign snippet, ...) on a page. x/y are measured in mm from the page's top-left corner.

Input parameters:

- `autoflowing` (boolean): Autoflow placed text
- `filePath` (string, required): Path to file to place
- `layerName` (string): Layer to place on (default: active layer)
- `pageIndex` (integer, required): 0-based page index
- `showingOptions` (boolean): Show import options dialog
- `x` (number): X position in mm
- `y` (number): Y position in mm

### `place_xml_on_page` (~108 tokens)

Place XML On Page

Place an XML element (the first element whose tag matches xmlElementName) on a page. x/y are measured in mm from the page's top-left corner.

Input parameters:

- `autoflowing` (boolean): Autoflow placed text
- `pageIndex` (integer, required): 0-based page index
- `x` (number): X position in mm
- `xmlElementName` (string, required): Tag name of the XML element to place
- `y` (number): Y position in mm

### `snapshot_page_layout` (~38 tokens)

Snapshot Page Layout

Create a liquid-layout snapshot of the page layout for its current size and shape

Input parameters:

- `pageIndex` (integer, required): 0-based page index

### `delete_page_layout_snapshot` (~36 tokens)

Delete Page Layout Snapshot

Delete the page's layout snapshot for its current size and shape

Input parameters:

- `pageIndex` (integer, required): 0-based page index

### `delete_all_page_layout_snapshots` (~33 tokens)

Delete All Page Layout Snapshots

Delete all layout snapshots for a page

Input parameters:

- `pageIndex` (integer, required): 0-based page index

### `reframe_page` (~123 tokens)

Reframe Page

Reframe a page: set its bounding box from two opposing corners, in mm in the given coordinate space

Input parameters:

- `coordinateSpace` (string): Coordinate space of the corner coordinates; PAGE_COORDINATES unless you need another
- `pageIndex` (integer, required): 0-based page index
- `x1` (number, required): Top-left X coordinate in mm
- `x2` (number, required): Bottom-right X coordinate in mm
- `y1` (number, required): Top-left Y coordinate in mm
- `y2` (number, required): Bottom-right Y coordinate in mm

### `create_page_guides` (~197 tokens)

Create Page Guides

Create row/column guides on one page (like Layout > Create Guides, limited to this page)

Input parameters:

- `columnGutter` (number): Column gutter in mm
- `fitMargins` (boolean): Divide the area inside the margins (true) or the whole page (false)
- `guideColor` (string): Guide color: UI color name (e.g. "BLUE", "GRID_GREEN") or "r,g,b" (0-255)
- `layerName` (string): Layer to create the guides on (default: active layer)
- `numberOfColumns` (integer): Number of columns (2+ creates vertical guides)
- `numberOfRows` (integer): Number of rows (2+ creates horizontal guides)
- `pageIndex` (integer, required): 0-based page index
- `removeExisting` (boolean): Remove the page's existing guides first
- `rowGutter` (number): Row gutter in mm

### `select_page` (~72 tokens)

Select Page

Select a page in the active document (for example before running a command that acts on the selection)

Input parameters:

- `pageIndex` (integer, required): 0-based page index
- `selectionMode` (string): REPLACE_WITH replaces the selection; ADD_TO / REMOVE_FROM change it; SET_KEY makes the page the key object

### `get_page_content_summary` (~56 tokens)

Get Page Content Summary

Summarize what is on a page: counts of text frames, rectangles, ovals, polygons, lines, groups, placed graphics, guides and master items

Input parameters:

- `pageIndex` (integer, required): 0-based page index

### `set_page_background` (~105 tokens)

Set Page Background

Set a page background: adds a full-page rectangle filled with a swatch, sent to the back of its layer

Input parameters:

- `backgroundColor` (string): Swatch name in the document (e.g. "Paper", "Black", a custom swatch); "White" falls back to "Paper"
- `opacity` (number): Background opacity percentage (0-100)
- `pageIndex` (integer): 0-based page index (default 0, the first page)

### `create_text_frame` (~271 tokens)

Create Text Frame

Create a text frame on the active page (or pageIndex). Styles are applied first; explicit formatting overrides them.

Input parameters:

- `alignment` (string): Paragraph alignment (InDesign Justification; LEFT_JUSTIFIED = justified, last line left)
- `characterStyle` (string): Character style name to apply
- `content` (string, required): Text content for the frame
- `fontName` (string): Font as "Family\tStyle" (e.g. "Arial\tRegular", InDesign's Font.name) or a family name (default: style/document default)
- `fontSize` (number): Font size in points (default: style/document default)
- `height` (number): Height in mm
- `pageIndex` (integer): Page index (0-based); defaults to the active page
- `paragraphStyle` (string): Paragraph style name to apply
- `textColor` (string): Text color (default: style/document default): swatch name (e.g. "Black", "Paper") or "#RRGGBB"
- `width` (number): Width in mm
- `x` (number): X position in mm from the page left edge; omit position or size to have the frame placed automatically
- `y` (number): Y position in mm from the page top edge

### `edit_text_frame` (~186 tokens)

Edit Text Frame

Edit the content and/or formatting of an existing text frame

Input parameters:

- `alignment` (string): Paragraph alignment for the whole frame (InDesign Justification; LEFT_JUSTIFIED = justified, last line left)
- `content` (string): New text content (replaces existing text)
- `fontName` (string): Font as "Family\tStyle" (e.g. "Arial\tRegular", InDesign's Font.name) or a family name
- `fontSize` (number): Font size in points
- `frameIndex` (integer, required): Index in page.textFrames (top-level text frames only; not the list_page_items numbering)
- `pageIndex` (integer): Page index (0-based); defaults to the active page
- `textColor` (string): Text color: swatch name (e.g. "Black", "Paper") or "#RRGGBB"

### `find_replace_text` (~81 tokens)

Find Replace Text

Find and replace literal text throughout the document (InDesign text search; metacharacters such as ^p and ^t are honored)

Input parameters:

- `caseSensitive` (boolean): Case sensitive search
- `findText` (string, required): Text to find
- `replaceText` (string, required): Text to replace with
- `wholeWord` (boolean): Whole word search

### `create_table` (~159 tokens)

Create Table

Create a table in a new text frame on the active page (or pageIndex)

Input parameters:

- `columns` (integer, required): Number of columns
- `headerRows` (integer): Number of header rows (must be less than rows; default 1 when rows > 1)
- `height` (number): Text frame height in mm
- `pageIndex` (integer): Page index (0-based); defaults to the active page
- `rows` (integer, required): Total number of rows, including header rows
- `width` (number): Frame and table width in mm
- `x` (number): X position in mm from the page left edge; omitted values are placed automatically
- `y` (number): Y position in mm from the page top edge

### `populate_table` (~121 tokens)

Populate Table

Fill table cells from a 2-D array. Tables are numbered across the text frames of the page; cells outside the table are skipped and counted.

Input parameters:

- `data` (array, required): Rows of cell values; null becomes an empty cell
- `pageIndex` (integer): Page index (0-based); defaults to the active page
- `startColumn` (integer): Starting column index
- `startRow` (integer): Starting row index (header rows count)
- `tableIndex` (integer): Index among the tables in page.textFrames, counted frame by frame

### `place_image` (~213 tokens)

Place Image

Place an image file in a new frame on the active page (or pageIndex). Omit width and height to size the frame to the image.

Input parameters:

- `filePath` (string, required): Path to the image file
- `fitMode` (string): InDesign fit option applied to the frame (PROPORTIONALLY and FILL_PROPORTIONALLY also center the content); NONE keeps the placed size
- `height` (number): Frame height in mm
- `linkImage` (boolean): Keep the image linked (false embeds it)
- `objectStyle` (string): Object style to apply to the frame
- `pageIndex` (integer): Page index (0-based); defaults to the active page
- `scale` (number): Image scale percentage (1-1000); used when fitMode is NONE or the frame is sized to the image
- `width` (number): Frame width in mm
- `x` (number): X position in mm
- `y` (number): Y position in mm

### `help` (~56 tokens)

Help

Get help information about available tools and their usage

Input parameters:

- `category` (string): Category of tools to list (optional)
- `format` (string): Output format
- `tool` (string): Specific tool name to get help for (optional)

### `create_rectangle` (~194 tokens)

Create Rectangle

Create a rectangle on the active page (or pageIndex)

Input parameters:

- `cornerRadius` (number): Rounded corner radius in mm (0 = square corners)
- `fillColor` (string): Fill color: swatch name (e.g. "Black", "Paper") or "#RRGGBB"
- `height` (number): Height in mm
- `pageIndex` (integer): Page index (0-based); defaults to the active page
- `strokeColor` (string): Stroke color: swatch name (e.g. "Black", "Paper") or "#RRGGBB"
- `strokeWeight` (number): Stroke weight in points (default 1 when strokeColor is given)
- `width` (number): Width in mm
- `x` (number): X position in mm from the page top-left; omitted values are placed on the page automatically
- `y` (number): Y position in mm

### `create_ellipse` (~177 tokens)

Create Ellipse

Create an ellipse on the active page (or pageIndex)

Input parameters:

- `fillColor` (string): Fill color: swatch name (e.g. "Black", "Paper") or "#RRGGBB"
- `height` (number): Height in mm
- `pageIndex` (integer): Page index (0-based); defaults to the active page
- `strokeColor` (string): Stroke color: swatch name (e.g. "Black", "Paper") or "#RRGGBB"
- `strokeWeight` (number): Stroke weight in points (default 1 when strokeColor is given)
- `width` (number): Width in mm
- `x` (number): X position in mm from the page top-left; omitted values are placed on the page automatically
- `y` (number): Y position in mm

### `create_polygon` (~187 tokens)

Create Polygon

Create a regular polygon on the active page (or pageIndex)

Input parameters:

- `fillColor` (string): Fill color: swatch name (e.g. "Black", "Paper") or "#RRGGBB"
- `height` (number): Height in mm
- `pageIndex` (integer): Page index (0-based); defaults to the active page
- `sides` (integer): Number of sides
- `strokeColor` (string): Stroke color: swatch name (e.g. "Black", "Paper") or "#RRGGBB"
- `strokeWeight` (number): Stroke weight in points (default 1 when strokeColor is given)
- `width` (number): Width in mm
- `x` (number): X position in mm from the page top-left; omitted values are placed on the page automatically
- `y` (number): Y position in mm

### `create_object_style` (~149 tokens)

Create Object Style

Create an object style; only the attributes you pass are included in the style

Input parameters:

- `cornerRadius` (number): Rounded corner radius in mm (0 = not included)
- `fillColor` (string): Fill color: swatch name (e.g. "Black", "Paper") or "#RRGGBB"
- `name` (string, required): Object style name
- `opacity` (number): Opacity percentage (100 = fully opaque)
- `strokeColor` (string): Stroke color: swatch name (e.g. "Black", "Paper") or "#RRGGBB"
- `strokeWeight` (number): Stroke weight in points (default 1 when strokeColor is given)

### `list_object_styles` (~17 tokens)

List Object Styles

List all object styles in the document

### `apply_object_style` (~121 tokens)

Apply Object Style

Apply an object style to a page item

Input parameters:

- `clearOverrides` (boolean): Clear local formatting overrides
- `itemIndex` (integer): Index within the itemType collection on the page
- `itemType` (string): Collection itemIndex counts in: page.rectangles, page.ovals, page.polygons, page.textFrames, or pageItem = page.allPageItems (the list_page_items numbering)
- `pageIndex` (integer): Page index (0-based); defaults to the active page
- `styleName` (string, required): Object style name

### `get_image_info` (~71 tokens)

Get Image Info

Get link, resolution, scale and position of a placed graphic on a page

Input parameters:

- `itemIndex` (integer): Index in page.allGraphics (placed graphics, not their frames; not the list_page_items numbering)
- `pageIndex` (integer): Page index (0-based); defaults to the active page

### `create_paragraph_style` (~169 tokens)

Create Paragraph Style

Create a paragraph style; only the attributes you pass are set

Input parameters:

- `alignment` (string): Paragraph alignment (InDesign Justification; LEFT_JUSTIFIED = justified, last line left)
- `fontName` (string): Font as "Family\tStyle" (e.g. "Arial\tRegular", InDesign's Font.name) or a family name
- `fontSize` (number): Font size in points
- `leading` (number): Leading in points
- `name` (string, required): Style name
- `spaceAfter` (number): Space after paragraph in points
- `spaceBefore` (number): Space before paragraph in points
- `textColor` (string): Text color: swatch name (e.g. "Black", "Paper") or "#RRGGBB"

### `create_character_style` (~149 tokens)

Create Character Style

Create a character style; only the attributes you pass are set

Input parameters:

- `bold` (boolean): Set font style "Bold" ("Bold Italic" with italic)
- `fontName` (string): Font as "Family\tStyle" (e.g. "Arial\tRegular", InDesign's Font.name) or a family name
- `fontSize` (number): Font size in points
- `italic` (boolean): Set font style "Italic"
- `name` (string, required): Style name
- `textColor` (string): Text color: swatch name (e.g. "Black", "Paper") or "#RRGGBB"
- `underline` (boolean): Underline text

### `apply_paragraph_style` (~78 tokens)

Apply Paragraph Style

Apply a paragraph style to all text in a text frame

Input parameters:

- `frameIndex` (integer, required): Index in page.textFrames (top-level text frames only; not the list_page_items numbering)
- `pageIndex` (integer): Page index (0-based); defaults to the active page
- `styleName` (string, required): Paragraph style name

### `apply_character_style` (~119 tokens)

Apply Character Style

Apply a character style to all text in a text frame, or to a character range

Input parameters:

- `endIndex` (integer): Last character index (inclusive); -1 applies to the whole frame
- `frameIndex` (integer): Index in page.textFrames (top-level text frames only; not the list_page_items numbering)
- `pageIndex` (integer): Page index (0-based); defaults to the active page
- `startIndex` (integer): First character index (with endIndex)
- `styleName` (string, required): Character style name

### `list_styles` (~34 tokens)

List Styles

List all paragraph and/or character styles (including styles in style groups)

Input parameters:

- `styleType` (string): Which styles to list

### `create_color_swatch` (~128 tokens)

Create Color Swatch

Create a color swatch from RGB values, stored as RGB or converted to CMYK

Input parameters:

- `blue` (number, required): Blue value (0-255)
- `colorSpace` (string): Color space of the swatch (CMYK uses a simple, non-color-managed conversion)
- `colorType` (string): PROCESS for CMYK/RGB process color, SPOT for a spot (ink) color
- `green` (number, required): Green value (0-255)
- `name` (string, required): Swatch name
- `red` (number, required): Red value (0-255)

### `list_color_swatches` (~22 tokens)

List Color Swatches

List all swatches with color model, space and values

### `apply_color` (~179 tokens)

Apply Color

Apply a swatch as fill or stroke to a page item, or to the text of a text frame

Input parameters:

- `colorName` (string, required): Color: swatch name (e.g. "Black", "Paper") or "#RRGGBB"
- `colorType` (string): Apply the swatch to the fill or the stroke
- `itemIndex` (integer, required): Index within the targetType collection on the page (see targetType)
- `pageIndex` (integer): Page index (0-based); defaults to the active page
- `targetType` (string): Collection itemIndex counts in: pageItem = page.allPageItems (the list_page_items numbering); text and textFrame = page.textFrames (text = the text inside the frame); rectangle, ellipse, polygon = pa…

### `get_document_info` (~38 tokens)

Get Document Info

Get information about the active document (name, path, page/spread/layer counts, page size, bleed and margins in millimetres)

### `create_document` (~216 tokens)

Create Document

Create a new document and make it active. All measurements are in millimetres. Margins are applied to every page of the new document.

Input parameters:

- `bleedBottom` (number): Bottom bleed in mm
- `bleedInside` (number): Inside (left) bleed in mm
- `bleedOutside` (number): Outside (right) bleed in mm
- `bleedTop` (number): Top bleed in mm
- `facingPages` (boolean): Enable facing pages
- `height` (number): Page height in mm
- `marginBottom` (number): Bottom margin in mm
- `marginLeft` (number): Left (inside, for facing pages) margin in mm
- `marginRight` (number): Right (outside, for facing pages) margin in mm
- `marginTop` (number): Top margin in mm
- `pageOrientation` (string): Page orientation; width and height are swapped if needed to match
- `pages` (integer): Number of pages
- `width` (number): Page width in mm

### `open_document` (~44 tokens)

Open Document

Open an existing InDesign document (.indd, .indt, .idml) and make it active

Input parameters:

- `filePath` (string, required): Absolute path to the document file

### `save_document` (~71 tokens)

Save Document

Save the active document. With filePath, saves to that location (Save As); without it, saves in place (the document must have been saved before).

Input parameters:

- `filePath` (string): Absolute path to save to (e.g. /Users/me/Documents/file.indd). Omit to save in place.

### `close_document` (~21 tokens)

Close Document

Close the active document WITHOUT saving (unsaved changes are discarded)

### `preflight_document` (~122 tokens)

Preflight Document

Run a preflight check on the active document with a preflight profile and list the problems found (optionally saving a report)

Input parameters:

- `maxResults` (integer): Maximum number of problems to list
- `profile` (string): Preflight profile name, e.g. "[Basic]" (the built-in profile). Embedded document profiles are checked first, then application profiles.
- `reportPath` (string): Optional absolute path to save the preflight report (.pdf or .txt)
- `timeoutSeconds` (integer): Maximum seconds to wait for preflight to finish

### `zoom_to_page` (~70 tokens)

Zoom To Page

Show a page in the document window: fit the page in the window, or zoom to a given percentage

Input parameters:

- `pageIndex` (integer, required): Zero-based page index to show
- `zoomLevel` (number): Zoom percentage (5-4000). Omit to fit the page in the window.

### `data_merge` (~202 tokens)

Data Merge

Data merge: select a CSV or tab-delimited text data source for the active document and (optionally) merge records. The document must already contain data merge placeholders for merging to succeed.

Input parameters:

- `createNewDocument` (boolean): Create a new document for the merged records
- `dataSource` (string, required): Absolute path to the data source file (.csv or tab-delimited .txt)
- `mergeRecords` (boolean): Merge records after selecting the data source. If false, only selects the source and lists its fields.
- `recordNumber` (integer): Record to merge when recordSelection is ONE_RECORD
- `recordRange` (string): Record range when recordSelection is RANGE, e.g. "1-5,8"
- `recordSelection` (string): Which records to merge
- `recordsPerPage` (string): One record per page, or multiple records per page
- `removeBlankLines` (boolean): Remove blank lines caused by empty fields

### `get_document_elements` (~51 tokens)

Get Document Elements

Count the elements in the document (text frames, stories, shapes, graphics, tables, groups, layers), including items nested in groups

Input parameters:

- `elementType` (string): Which kind of elements to count

### `get_document_styles` (~38 tokens)

Get Document Styles

List the styles of one type in the document (including styles inside style groups)

Input parameters:

- `styleType` (string): Type of styles to list

### `get_document_colors` (~66 tokens)

Get Document Colors

List the colors (with color model) and optionally the swatches, gradients and tints in the document

Input parameters:

- `includeGradients` (boolean): Include gradients
- `includeSwatches` (boolean): Include swatches
- `includeTints` (boolean): Include tints

### `get_document_preferences` (~41 tokens)

Get Document Preferences

Read document preferences. Measurements are reported in millimetres. Property names match set_document_preferences.

Input parameters:

- `preferenceType` (string): Which preference group to read

### `set_document_preferences` (~120 tokens)

Set Document Preferences

Set document preferences. Pass one or more groups (general, margins, guides, text, grid) with the properties to change. Measurements are millimetres. Margin changes are applied to the document defaults and to every existing document and master page.

Input parameters:

- `general` (object): Document setup (DocumentPreference)
- `grid` (object): Grids (GridPreference)
- `guides` (object): Ruler guides (GuidePreference)
- `margins` (object): Margins and columns (MarginPreference)
- `text` (object): Text (TextPreference)

### `get_document_stories` (~66 tokens)

Get Document Stories

List the stories in the document with length, frame count, overset status and a short preview

Input parameters:

- `maxStories` (integer): Maximum number of stories to list
- `oversetOnly` (boolean): Only list stories whose text is overset (overflows its frames)

### `find_text_in_document` (~128 tokens)

Find Text In Document

Find (and optionally replace) text across the entire document. Uses Text find/change, or GREP when useRegex is true.

Input parameters:

- `caseSensitive` (boolean): Case sensitive search
- `replaceText` (string): Replacement text. Omit to only find; pass "" to delete matches.
- `searchText` (string, required): Text to search for (a GREP pattern when useRegex is true)
- `useRegex` (boolean): Treat searchText as a GREP pattern (and replaceText may use $1 etc.)
- `wholeWord` (boolean): Match whole words only

### `get_document_layers` (~54 tokens)

Get Document Layers

List the layers in the document (top to bottom) with visibility, lock state, printability and item count

Input parameters:

- `includeHidden` (boolean): Include hidden layers
- `includeLocked` (boolean): Include locked layers

### `organize_document_layers` (~122 tokens)

Organize Document Layers

Organize document layers: merge layers with duplicate names, delete empty layers, and/or sort layers alphabetically (A at top). Operations run in that order. The last remaining layer is never deleted.

Input parameters:

- `deleteEmptyLayers` (boolean): Delete layers that contain no page items and no guides (default false)
- `mergeSimilarLayers` (boolean): Merge layers whose names are equal ignoring case, surrounding spaces and a trailing " copy" / " copy N" (default false)
- `sortLayers` (boolean): Sort layers alphabetically by name (default false)

### `get_document_hyperlinks` (~59 tokens)

Get Document Hyperlinks

List the hyperlinks in the document with their sources and destinations

Input parameters:

- `includeDestinations` (boolean): Include link destinations (URL, page or text anchor)
- `includeSources` (boolean): Include link sources (the linked text or object)

### `create_document_hyperlink` (~146 tokens)

Create Document Hyperlink

Create a hyperlink on the first occurrence of sourceText in the document. The destination is a URL, a page, or the first occurrence of some other text (a text anchor).

Input parameters:

- `destination` (string): For URL: the URL. For TEXT: existing text in the document to link to. Not used for PAGE.
- `linkType` (string): Type of destination
- `name` (string): Optional hyperlink name (must be unique in the document)
- `pageIndex` (integer): Zero-based destination page index (required for PAGE links)
- `sourceText` (string, required): Existing text in the document to turn into a link (first occurrence, case-sensitive)

### `get_document_sections` (~29 tokens)

Get Document Sections

List the sections in the document with start page, numbering style, start number, prefix and marker

### `create_document_section` (~122 tokens)

Create Document Section

Start a new section at a page (or update the section that already starts there) with its own page numbering

Input parameters:

- `includeSectionPrefix` (boolean): Include the prefix when displaying page numbers
- `marker` (string): Section marker text
- `numberingStyle` (string): Page number style (PageNumberStyle)
- `sectionPrefix` (string): Section prefix
- `startNumber` (integer): Starting page number. Omit to continue numbering from the previous section.
- `startPage` (integer, required): Zero-based index of the page that starts the section

### `get_document_xml_structure` (~76 tokens)

Get Document XML Structure

Show the document XML structure: the tag list and/or the element tree (tag, attribute and child counts, text preview)

Input parameters:

- `includeElements` (boolean): Include the XML element tree
- `includeTags` (boolean): Include the list of XML tags
- `maxDepth` (integer): Maximum element tree depth to show

### `export_document_xml` (~61 tokens)

Export Document XML

Export the document XML structure (the Structure pane content) to an XML file

Input parameters:

- `filePath` (string, required): Absolute path of the XML file to write
- `includeImages` (boolean): Copy original images into an Images folder next to the XML file

### `save_document_to_cloud` (~85 tokens)

Save Document To Cloud

Save the active document as an Adobe Creative Cloud document (Document.saveAsCloud / saveACopyCloud). Requires InDesign with cloud documents support and a signed-in Creative Cloud account.

Input parameters:

- `cloudName` (string, required): Name for the cloud document
- `mode` (string): SAVE_A_COPY keeps the open document as is; SAVE_AS makes the open document the cloud document

### `open_cloud_document` (~73 tokens)

Open Cloud Document

Open an Adobe Creative Cloud document by its asset reference (app.openCloudDocument). Requires InDesign with cloud documents support and a signed-in Creative Cloud account.

Input parameters:

- `cloudDocumentId` (string, required): Asset reference of the cloud document (as reported by InDesign, e.g. a urn:aaid:... identifier)

### `get_document_grid_settings` (~34 tokens)

Get Document Grid Settings

Get the document grid and baseline grid settings (measurements in millimetres). Property names match set_document_grid_settings.

### `set_document_grid_settings` (~313 tokens)

Set Document Grid Settings

Set document grid and baseline grid settings (GridPreference). Pass only the properties to change. Measurements are millimetres.

Input parameters:

- `baselineColor` (string): baselineColor (UIColors)
- `baselineDivision` (number): baselineDivision. Millimetres (a string with units such as "12pt" or "0.5in" is also accepted)
- `baselineGridRelativeOption` (string): baselineGridRelativeOption (BaselineGridRelativeOption)
- `baselineGridShown` (boolean): baselineGridShown
- `baselineStart` (number): baselineStart. Millimetres (a string with units such as "12pt" or "0.5in" is also accepted)
- `baselineViewThreshold` (number): baselineViewThreshold
- `documentGridShown` (boolean): documentGridShown
- `documentGridSnapto` (boolean): documentGridSnapto
- `gridColor` (string): gridColor (UIColors)
- `gridsInBack` (boolean): gridsInBack
- `horizontalGridSubdivision` (integer): horizontalGridSubdivision
- `horizontalGridlineDivision` (number): horizontalGridlineDivision. Millimetres (a string with units such as "12pt" or "0.5in" is also accepted)
- `verticalGridSubdivision` (integer): verticalGridSubdivision
- `verticalGridlineDivision` (number): verticalGridlineDivision. Millimetres (a string with units such as "12pt" or "0.5in" is also accepted)

### `get_document_layout_preferences` (~38 tokens)

Get Document Layout Preferences

Get Adjust Layout preferences (document) and Align & Distribute and Smart Guides preferences (application-wide). Property names match set_document_layout_preferences.

### `set_document_layout_preferences` (~102 tokens)

Set Document Layout Preferences

Set Adjust Layout preferences (stored in the document) and Align & Distribute / Smart Guides preferences (application-wide in InDesign). Pass one or more groups with the properties to change.

Input parameters:

- `adjustLayout` (object): Adjust Layout (document, AdjustLayoutPreference)
- `alignDistribute` (object): Align & Distribute (application-wide, AlignDistributePreference)
- `smartGuides` (object): Smart Guides (application-wide, SmartGuidePreference)

### `validate_document` (~145 tokens)

Validate Document

Check the document for problems: missing/modified links, missing fonts, missing or low-resolution images, overset text and unused styles

Input parameters:

- `checkFonts` (boolean): Report fonts that are not installed (missing, substituted, faux)
- `checkImages` (boolean): Report placed graphics with missing/modified links and images below minImagePpi
- `checkLinks` (boolean): Report links that are missing, out of date or inaccessible
- `checkOverset` (boolean): Report stories with overset text
- `checkStyles` (boolean): Report paragraph and character styles not applied to any text
- `minImagePpi` (number): Minimum effective resolution for images

### `cleanup_document` (~170 tokens)

Cleanup Document

Clean up the document by removing unused paragraph/character styles, unused swatches, empty layers and/or hidden page items. Use dryRun to list what would be removed.

Input parameters:

- `dryRun` (boolean): Only report what would be removed
- `removeHiddenElements` (boolean): Remove page items that are hidden (visible = false) (default false)
- `removeUnusedColors` (boolean): Remove unused swatches (built-in [bracketed] swatches are kept) (default false)
- `removeUnusedLayers` (boolean): Remove layers with no page items and no guides (the last layer is kept) (default false)
- `removeUnusedStyles` (boolean): Remove paragraph and character styles not applied to any text (built-in [bracketed] styles are kept) (default false)

### `export_pdf` (~173 tokens)

Export PDF

Export the active document to PDF using a built-in or named PDF export preset

Input parameters:

- `filePath` (string, required): Output PDF file path
- `includeBleed` (boolean): Force the document bleed settings on (otherwise the preset decides)
- `includeMarks` (boolean): Force crop, bleed and registration marks, color bars and page info on (otherwise the preset decides)
- `pages` (string): Pages to export: "all", or absolute 1-based page numbers/ranges such as "1-3,5"
- `preset` (string): Exact PDF export preset name (e.g. "[PDF/X-4:2008]"); overrides quality
- `quality` (string): Preset shortcut: PRESS = [Press Quality], PRINT = [High Quality Print], SCREEN = [Smallest File Size]

### `export_images` (~145 tokens)

Export Images

Export pages as JPEG or PNG images, one file per page (page_<n>.jpg/png) in an output folder

Input parameters:

- `format` (string): Image format; InDesign exports JPEG and PNG
- `outputPath` (string, required): Output folder path (created if missing)
- `pages` (string): Pages to export: "all", or absolute 1-based page numbers/ranges such as "1-3,5"
- `quality` (number): Quality 1-100, mapped to LOW (<=25), MEDIUM (<=50), HIGH (<=80) or MAXIMUM
- `resolution` (number): Resolution in PPI (1-2400)

### `export_epub` (~117 tokens)

Export EPUB

Export the active document to EPUB (reflowable or fixed layout)

Input parameters:

- `embedFonts` (boolean): Reflowable only: embed fonts
- `filePath` (string, required): Output EPUB file path
- `includeStyles` (boolean): Reflowable only: generate CSS and include style class names in the HTML
- `layout` (string): REFLOWABLE text that adapts to the reader, or FIXED_LAYOUT that keeps each page as designed
- `title` (string): EPUB title metadata (defaults to the document setting)

### `package_document` (~117 tokens)

Package Document

Package the active (saved) document for printing into an output folder

Input parameters:

- `createReport` (boolean): Write the instructions/report file
- `forceSave` (boolean): Save the document before packaging if it has unsaved changes
- `includeFonts` (boolean): Copy fonts
- `includeHiddenLayers` (boolean): Include fonts and links from hidden layers
- `includeLinks` (boolean): Copy linked graphics
- `includeProfiles` (boolean): Copy color profiles
- `outputPath` (string, required): Output folder path (created if missing)

### `create_book` (~53 tokens)

Create Book

Create a new InDesign book file and leave it open (fails if a file already exists at the path)

Input parameters:

- `filePath` (string, required): Path for the new book file (".indb" is appended if missing)

### `open_book` (~32 tokens)

Open Book

Open an existing InDesign book (it stays open)

Input parameters:

- `filePath` (string, required): Path to the book file

### `list_books` (~24 tokens)

List Books

List the books currently open in InDesign with their file paths and document counts

### `add_document_to_book` (~53 tokens)

Add Document To Book

Add an InDesign document to the end of a book and save the book

Input parameters:

- `bookPath` (string, required): Path to the book file
- `documentPath` (string, required): Path to the document to add

### `synchronize_book` (~47 tokens)

Synchronize Book

Synchronize styles, swatches and other enabled options from the book's style source document to all documents, then save the book

Input parameters:

- `bookPath` (string, required): Path to the book file

### `repaginate_book` (~35 tokens)

Repaginate Book

Repaginate all documents in a book and save it

Input parameters:

- `bookPath` (string, required): Path to the book file

### `update_all_cross_references` (~32 tokens)

Update All Cross References

Update all cross references in a book

Input parameters:

- `bookPath` (string, required): Path to the book file

### `update_all_numbers` (~39 tokens)

Update All Numbers

Update all numbers (page numbers, chapter numbers, paragraph numbers) in a book

Input parameters:

- `bookPath` (string, required): Path to the book file

### `update_chapter_and_paragraph_numbers` (~35 tokens)

Update Chapter And Paragraph Numbers

Update chapter and paragraph numbers in a book

Input parameters:

- `bookPath` (string, required): Path to the book file

### `export_book` (~83 tokens)

Export Book

Export an entire book to a single file

Input parameters:

- `bookPath` (string, required): Path to the book file
- `format` (string): Export format
- `outputPath` (string, required): Path for the exported file
- `pdfPreset` (string): PDF export preset name for format PDF (e.g. "[High Quality Print]"); default: current PDF export settings

### `package_book` (~172 tokens)

Package Book

Package a book for print production into a folder (created if missing)

Input parameters:

- `bookPath` (string, required): Path to the book file
- `copyingFonts` (boolean): Copy fonts to package
- `copyingLinkedGraphics` (boolean): Copy linked graphics
- `copyingProfiles` (boolean): Copy color profiles
- `creatingReport` (boolean): Create package report
- `ignorePreflightErrors` (boolean): Ignore preflight errors
- `includeIdml` (boolean): Include IDML file
- `includePdf` (boolean): Include PDF file
- `includingHiddenLayers` (boolean): Include hidden layers
- `outputPath` (string, required): Path for the package folder
- `pdfStyle` (string): PDF export preset used when includePdf is true
- `updatingGraphics` (boolean): Update graphics links

### `preflight_book` (~92 tokens)

Preflight Book

Preflight a book and save the preflight report (PDF, or text if the path ends in .txt). The report path is returned.

Input parameters:

- `autoOpen` (boolean): Automatically open the report
- `bookPath` (string, required): Path to the book file
- `outputPath` (string): Path for the preflight report (default: <book name>-preflight.pdf in the system temp folder)

### `print_book` (~94 tokens)

Print Book

Print every document in a book with a printer preset, optionally showing the print dialog first

Input parameters:

- `bookPath` (string, required): Path to the book file
- `printDialog` (boolean): Show the print dialog and wait for the user (leave false for unattended use)
- `printerPreset` (string): Printer preset name (e.g. "[Default]" or a saved preset), or "DEFAULT_VALUE" for the default preset

### `get_book_info` (~29 tokens)

Get Book Info

Get detailed information about a book

Input parameters:

- `bookPath` (string, required): Path to the book file

### `set_book_properties` (~269 tokens)

Set Book Properties

Set book options (only the ones given) and save the book

Input parameters:

- `automaticDocumentConversion` (boolean): Enable automatic document conversion
- `automaticPagination` (boolean): Enable automatic pagination
- `bookPath` (string, required): Path to the book file
- `insertBlankPage` (boolean): Insert blank pages as necessary
- `mergeIdenticalLayers` (boolean): Merge identical layers when exporting to PDF
- `synchronizeBulletNumberingList` (boolean): Synchronize bullets and numbering
- `synchronizeCellStyle` (boolean): Synchronize cell styles
- `synchronizeCharacterStyle` (boolean): Synchronize character styles
- `synchronizeConditionalText` (boolean): Synchronize conditional text
- `synchronizeCrossReferenceFormat` (boolean): Synchronize cross reference formats
- `synchronizeMasterPage` (boolean): Synchronize master pages
- `synchronizeObjectStyle` (boolean): Synchronize object styles
- `synchronizeParagraphStyle` (boolean): Synchronize paragraph styles
- `synchronizeSwatch` (boolean): Synchronize swatches
- `synchronizeTableOfContentStyle` (boolean): Synchronize table of content styles
- `synchronizeTableStyle` (boolean): Synchronize table styles
- `synchronizeTextVariable` (boolean): Synchronize text variables
- `synchronizeTrapStyle` (boolean): Synchronize trap styles

### `indesign_status` (~107 tokens)

InDesign Status

Health check: platform, resolved InDesign app name, optional live probe (version, open docs). Call with probe=true to round-trip a script; on the UXP backend it also reports backend.uxpProbe, how this InDesign's UXP DOM differs from ExtendScript, with any problems found.

Input parameters:

- `probe` (boolean): If true, run a lightweight InDesign script to report version and open documents (and, on the UXP backend, the UXP capability probe)

### `execute_indesign_code` (~30 tokens)

Execute InDesign Code

Execute custom InDesign ExtendScript code

Input parameters:

- `code` (string, required): ExtendScript code to execute

### `view_document` (~15 tokens)

View Document

View document information and current state

### `get_session_info` (~20 tokens)

Get Session Info

Get current session information including page dimensions and active document

### `clear_session` (~19 tokens)

Clear Session

Clear all session data including page dimensions and document information

### `get_page_item_info` (~70 tokens)

Get Page Item Info

Get detailed information about a specific page item

Input parameters:

- `itemIndex` (integer, required): Index of the page item to get info for, in page.allPageItems as numbered by list_page_items (nested items included)
- `pageIndex` (integer, required): Index of the page containing the item (0-based)

### `select_page_item` (~88 tokens)

Select Page Item

Select a page item (by index from list_page_items) in the document window

Input parameters:

- `existingSelection` (string): How to handle existing selection
- `itemIndex` (integer, required): Index of the page item to select, in page.allPageItems as numbered by list_page_items (nested items included)
- `pageIndex` (integer, required): Index of the page containing the item (0-based)

### `move_page_item` (~128 tokens)

Move Page Item

Move a page item so its top-left corner (geometric bounds) is at x, y mm on the page

Input parameters:

- `itemIndex` (integer, required): Index of the page item to move, in page.allPageItems as numbered by list_page_items (nested items included)
- `pageIndex` (integer, required): Index of the page containing the item (0-based)
- `x` (number, required): New X of the item's top-left corner, in mm from the page left edge
- `y` (number, required): New Y of the item's top-left corner, in mm from the page top edge

### `resize_page_item` (~106 tokens)

Resize Page Item

Resize a page item to width x height mm around an anchor point

Input parameters:

- `anchorPoint` (string): Anchor point for resizing
- `height` (number, required): New height in mm
- `itemIndex` (integer, required): Index of the page item to resize, in page.allPageItems as numbered by list_page_items (nested items included)
- `pageIndex` (integer, required): Index of the page containing the item (0-based)
- `width` (number, required): New width in mm

### `set_page_item_properties` (~163 tokens)

Set Page Item Properties

Set fill, stroke, visibility and lock state of a page item (only the properties you pass are changed)

Input parameters:

- `fillColor` (string): Fill swatch name (e.g. "Black", "None") or "#RRGGBB"
- `itemIndex` (integer, required): Index of the page item to modify, in page.allPageItems as numbered by list_page_items (nested items included)
- `locked` (boolean): Whether the item is locked
- `pageIndex` (integer, required): Index of the page containing the item (0-based)
- `strokeColor` (string): Stroke swatch name or "#RRGGBB"
- `strokeWeight` (number): Stroke weight in points
- `visible` (boolean): Whether the item is visible

### `duplicate_page_item` (~126 tokens)

Duplicate Page Item

Duplicate a page item on the same page, optionally placing the copy at x/y; returns the copy ID

Input parameters:

- `itemIndex` (integer, required): Index of the page item to duplicate, in page.allPageItems as numbered by list_page_items (nested items included)
- `pageIndex` (integer, required): Index of the page containing the item (0-based)
- `x` (number, required): X of the duplicate's top-left corner, in mm from the page left edge
- `y` (number, required): Y of the duplicate's top-left corner, in mm from the page top edge

### `delete_page_item` (~74 tokens)

Delete Page Item

Delete a page item (by index from list_page_items) from a page

Input parameters:

- `itemIndex` (integer, required): Index of the page item to delete, in page.allPageItems as numbered by list_page_items (nested items included)
- `pageIndex` (integer, required): Index of the page containing the item (0-based)

### `list_page_items` (~75 tokens)

List Page Items

List the page items on a page with their index in page.allPageItems (nested items included, such as the image inside a frame and group members). itemIndex and groupIndex in the page-item and group tools use this numbering.

Input parameters:

- `pageIndex` (integer, required): Index of the page to list items from (0-based)

### `create_group` (~44 tokens)

Create Group

Group the page items currently selected in InDesign (at least 2)

Input parameters:

- `pageIndex` (integer, required): Index of the page where the group will be created (0-based)

### `create_group_from_items` (~62 tokens)

Create Group From Items

Create a group from specific page items by their indices

Input parameters:

- `itemIndices` (array, required): Indices (from list_page_items) of top-level items to group together
- `pageIndex` (integer, required): Index of the page containing the items (0-based)

### `ungroup` (~65 tokens)

Ungroup

Ungroup a group, releasing all its items

Input parameters:

- `groupIndex` (integer, required): Index of the group to ungroup, as numbered by list_groups (its index in page.allPageItems)
- `pageIndex` (integer, required): Index of the page containing the group (0-based)

### `get_group_info` (~71 tokens)

Get Group Info

Get information about a group, including its direct members and their indices

Input parameters:

- `groupIndex` (integer, required): Index of the group to get info for, as numbered by list_groups (its index in page.allPageItems)
- `pageIndex` (integer, required): Index of the page containing the group (0-based)

### `add_item_to_group` (~123 tokens)

Add Item To Group

Add a top-level page item to an existing group (the group is rebuilt: it keeps its name but gets a new ID and index)

Input parameters:

- `groupIndex` (integer, required): Index of the group to add the item to, as numbered by list_groups (its index in page.allPageItems)
- `itemIndex` (integer, required): Index of the page item to add to the group, in page.allPageItems as numbered by list_page_items (nested items included)
- `pageIndex` (integer, required): Index of the page containing the group and item (0-based)

### `remove_item_from_group` (~117 tokens)

Remove Item From Group

Remove a member from a group (the group is rebuilt with the remaining members, or dissolved if fewer than 2 remain)

Input parameters:

- `groupIndex` (integer, required): Index of the group to remove the item from, as numbered by list_groups (its index in page.allPageItems)
- `itemIndex` (integer, required): Index of the member within the group (group.pageItems), as listed by get_group_info; not the list_page_items numbering
- `pageIndex` (integer, required): Index of the page containing the group (0-based)

### `list_groups` (~44 tokens)

List Groups

List the groups on a page with their index, name, item count and bounds

Input parameters:

- `pageIndex` (integer, required): Index of the page to list groups from (0-based)

### `set_group_properties` (~100 tokens)

Set Group Properties

Set a group's name, visibility and locked state

Input parameters:

- `groupIndex` (integer, required): Index of the group to modify, as numbered by list_groups (its index in page.allPageItems)
- `locked` (boolean): Whether the group is locked
- `name` (string): Name for the group
- `pageIndex` (integer, required): Index of the page containing the group (0-based)
- `visible` (boolean): Whether the group is visible

### `create_master_spread` (~182 tokens)

Create Master Spread

Create a new master spread. Its full name is namePrefix + "-" + baseName (e.g. "B-Chapter").

Input parameters:

- `baseName` (string): Base name (overrides name)
- `name` (string, required): Master name; used as the base name unless baseName is given
- `namePrefix` (string): Prefix shown on pages using this master (e.g. "B"); InDesign assigns one if omitted
- `pageColor` (string): Pages-panel color: UI color name (e.g. "BLUE", "LIGHT_BLUE", "GRID_GREEN") or "r,g,b" (0-255), "USE_MASTER_COLOR" or "NOTHING"
- `pagesPerSpread` (integer): Pages in the master spread (default: document setting)
- `showMasterItems` (boolean): Show master items on document pages

### `list_master_spreads` (~18 tokens)

List Master Spreads

List all master spreads in the document

### `delete_master_spread` (~46 tokens)

Delete Master Spread

Delete a master spread (pages that used it are left with no master)

Input parameters:

- `name` (string, required): Full master spread name to delete (e.g. "B-Master")

### `duplicate_master_spread` (~124 tokens)

Duplicate Master Spread

Duplicate a master spread; the copy gets newName as its base name (InDesign assigns a new prefix)

Input parameters:

- `name` (string, required): Full name of the master spread to duplicate (e.g. "A-Master")
- `newName` (string, required): Base name for the duplicated master spread
- `position` (string): Where to put the copy among the masters: AT_END, AT_BEGINNING, or BEFORE/AFTER the reference master
- `referenceMasterName` (string): Full name of the reference master spread (required for BEFORE/AFTER)

### `apply_master_spread` (~90 tokens)

Apply Master Spread

Apply a master spread to document pages. Use masterName "None" to remove the master.

Input parameters:

- `masterName` (string, required): Full master spread name (e.g. "A-Master"), or "None"
- `pageRange` (string): 1-based page positions in document order: "all", "3", "1-5" or "1,3,7-9"

### `create_master_text_frame` (~265 tokens)

Create Master Text Frame

Create a text frame on a page of a master spread. Position and size are in mm from that master page's top-left corner.

Input parameters:

- `alignment` (string): Paragraph alignment for the frame text (InDesign Justification; LEFT_JUSTIFIED = justified, last line left)
- `content` (string, required): Text content for the frame
- `fontName` (string): Font as "Family\tStyle" (e.g. "Arial\tBold", InDesign's Font.name) or a family name
- `fontSize` (number): Font size in points
- `height` (number): Height in mm
- `isPrimaryTextFrame` (boolean): Make this the master spread's primary text frame
- `masterName` (string, required): Full master spread name (e.g. "A-Master")
- `masterPageIndex` (integer): 0-based page within the master spread (0 = left/first page)
- `textColor` (string): Text color: swatch name in the document (e.g. "Black", "Paper", "None") or "#RRGGBB"
- `width` (number): Width in mm
- `x` (number): X position in mm
- `y` (number): Y position in mm

### `create_master_rectangle` (~227 tokens)

Create Master Rectangle

Create a rectangle on a page of a master spread. Position and size are in mm from that master page's top-left corner.

Input parameters:

- `cornerRadius` (number): Rounded-corner radius in mm (0 = square corners)
- `fillColor` (string): Fill: swatch name in the document (e.g. "Black", "Paper", "None") or "#RRGGBB" (default: document default)
- `height` (number, required): Height in mm
- `masterName` (string, required): Full master spread name (e.g. "A-Master")
- `masterPageIndex` (integer): 0-based page within the master spread
- `strokeColor` (string): Stroke: swatch name in the document (e.g. "Black", "Paper", "None") or "#RRGGBB" (default: document default)
- `strokeWeight` (number): Stroke weight in points
- `width` (number, required): Width in mm
- `x` (number, required): X position in mm
- `y` (number, required): Y position in mm

### `create_master_guides` (~195 tokens)

Create Master Guides

Create row/column guides on every page of a master spread (MasterSpread.createGuides)

Input parameters:

- `columnGutter` (number): Column gutter in mm
- `fitMargins` (boolean): Divide the area inside the margins (true) or the whole page (false)
- `guideColor` (string): Guide color: UI color name (e.g. "BLUE", "LIGHT_BLUE", "GRID_GREEN") or "r,g,b" (0-255)
- `layerName` (string): Layer to create guides on (default: active layer)
- `masterName` (string, required): Full master spread name (e.g. "A-Master")
- `numberOfColumns` (integer): Number of columns per page
- `numberOfRows` (integer): Number of rows per page
- `removeExisting` (boolean): Remove existing guides first
- `rowGutter` (number): Row gutter in mm

### `get_master_spread_info` (~38 tokens)

Get Master Spread Info

Get detailed information about a master spread

Input parameters:

- `name` (string, required): Full master spread name (e.g. "A-Master")

### `detach_master_items` (~103 tokens)

Detach Master Items

Detach master page items onto a document page: each master item is overridden onto the page and the copy is detached so it no longer follows the master. Without itemIndex, all master items shown on the page (and items already overridden there) are detached.

Input parameters:

- `itemIndex` (integer): 0-based index into the page's master items (Page.masterPageItems); omit to detach all
- `pageIndex` (integer, required): 0-based document page index

### `remove_master_override` (~84 tokens)

Remove Master Override

Remove local overrides from master items on a document page, restoring the master version. Without itemIndex, all overrides on the page are removed.

Input parameters:

- `itemIndex` (integer): 0-based index among the page's overridden master items (top-level page items first, then guides); omit to remove all
- `pageIndex` (integer, required): 0-based document page index

### `list_spreads` (~28 tokens)

List Spreads

List all spreads in the active document with their pages, applied master, item count and label

### `get_spread_info` (~50 tokens)

Get Spread Info

Get detailed information about a spread: pages, applied master, page shuffle, master item visibility, page transition, item and guide counts

Input parameters:

- `spreadIndex` (integer, required): Spread index (0-based)

### `duplicate_spread` (~81 tokens)

Duplicate Spread

Duplicate a spread (Spread.duplicate) and place the copy at the given location in the document

Input parameters:

- `position` (string): Where to put the copy (LocationOptions)
- `referenceSpreadIndex` (integer): Reference spread index (0-based); required for BEFORE/AFTER
- `spreadIndex` (integer, required): Spread index to duplicate (0-based)

### `move_spread` (~78 tokens)

Move Spread

Move a spread (Spread.move) to a different position in the document

Input parameters:

- `position` (string): Destination (LocationOptions)
- `referenceSpreadIndex` (integer): Reference spread index (0-based); required for BEFORE/AFTER, must differ from spreadIndex
- `spreadIndex` (integer, required): Spread index to move (0-based)

### `delete_spread` (~40 tokens)

Delete Spread

Delete a spread and all its pages. The last remaining spread cannot be deleted.

Input parameters:

- `spreadIndex` (integer, required): Spread index to delete (0-based)

### `set_spread_properties` (~208 tokens)

Set Spread Properties

Set writable properties of a spread. Only the properties you pass are changed; each is applied independently and any rejected value is reported.

Input parameters:

- `allowPageShuffle` (boolean): If true, the spread holds at most two pages when pages are added; if false, pages can be added or moved into this existing spread
- `label` (string): Script label (any string)
- `name` (string): Spread name (InDesign treats this as an alias of the spread's label)
- `pageTransitionDirection` (string): Page transition direction (PageTransitionDirectionOptions); must be one the chosen transition type supports
- `pageTransitionDuration` (string): Page transition duration (PageTransitionDurationOptions)
- `pageTransitionType` (string): Page transition type (PageTransitionTypeOptions), used in SWF/interactive PDF export
- `showMasterItems` (boolean): Display master page items on the pages of this spread
- `spreadIndex` (integer, required): Spread index (0-based)

### `create_spread_guides` (~247 tokens)

Create Spread Guides

Create row/column guides on every page of a spread (Spread.createGuides). Set numberOfRows and/or numberOfColumns above 0; with both 0 nothing is created (the result reports the guide count before and after).

Input parameters:

- `columnGutter` (number): Column gutter in mm
- `fitMargins` (boolean): If true, rows/columns divide the area inside the page margins; if false, the full page
- `guideColor` (string): Guide color: a UIColors name (e.g. BLUE, LIGHT_BLUE, GRID_GREEN) or "R,G,B" with each value 0-255
- `layerName` (string): Name of an existing layer to create the guides on (default: active layer)
- `numberOfColumns` (number): Number of columns to create on each page (0-100)
- `numberOfRows` (number): Number of rows to create on each page (0-100)
- `removeExisting` (boolean): Remove existing guides when creating the new ones
- `rowGutter` (number): Row gutter in mm
- `spreadIndex` (integer, required): Spread index (0-based)

### `place_file_on_spread` (~174 tokens)

Place File On Spread

Place a file (image, PDF, text, InDesign snippet...) on a spread at a point (Spread.place)

Input parameters:

- `autoflowing` (boolean): Autoflow placed text
- `filePath` (string, required): Absolute path to the file to place (must be inside the allowed directories)
- `layerName` (string): Name of an existing layer to place on (default: active layer)
- `showingOptions` (boolean): Show the import options dialog (modal: blocks until a user closes it in InDesign)
- `spreadIndex` (integer, required): Spread index (0-based)
- `x` (number): X of the place point in mm, measured from the ruler origin (spread origin by default)
- `y` (number): Y of the place point in mm, measured from the ruler origin

### `place_xml_on_spread` (~155 tokens)

Place XML On Spread

Place an element of the document's XML structure on a spread (Spread.placeXML). The element is found by tag name, searching the structure depth-first from the root.

Input parameters:

- `autoflowing` (boolean): Autoflow placed text
- `matchIndex` (integer): Which element to use when several have this tag (0-based, document order)
- `spreadIndex` (integer, required): Spread index (0-based)
- `x` (number): X of the place point in mm, measured from the ruler origin
- `xmlElementName` (string, required): Tag name (markup tag) of the XML element to place
- `y` (number): Y of the place point in mm, measured from the ruler origin

### `select_spread` (~85 tokens)

Select Spread

Select a spread (Spread.select) and optionally make it the active spread in the layout window

Input parameters:

- `makeActive` (boolean): Also make it the layout window's active spread (scrolls it into view)
- `selectionMode` (string): How the selection relates to the existing selection (SelectionOptions)
- `spreadIndex` (integer, required): Spread index to select (0-based)

### `get_spread_content_summary` (~54 tokens)

Get Spread Content Summary

Summarize the content of a spread: item counts by type, overset text frames, placed graphics with link status, and items per layer

Input parameters:

- `spreadIndex` (integer, required): Spread index (0-based)

### `create_layer` (~92 tokens)

Create Layer

Create a new layer in the active document (fails if a layer with that name exists)

Input parameters:

- `color` (string): Layer color: a UIColors name (e.g. BLUE, LIGHT_BLUE, RED) or "R,G,B" with each value 0-255
- `locked` (boolean): Layer locked state
- `name` (string, required): Layer name
- `visible` (boolean): Layer visibility

### `set_active_layer` (~33 tokens)

Set Active Layer

Make an existing layer the active layer of the active document

Input parameters:

- `layerName` (string, required): Layer name to activate

### `list_layers` (~36 tokens)

List Layers

List all layers in the active document (top of the stack first) with visibility, lock, printable, color, item and guide counts

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/zachshallbetter-indesign-mcp-server/indesign-mcp-server#diagnostics

## Score history

- 2026-11-05: 73
- 2026-11-04: 73
- 2026-11-03: 72
- 2026-11-02: 72
- 2026-11-01: 71
- 2026-10-31: 71
- 2026-10-30: 70
- 2026-10-29: 70
- 2026-10-28: 69
- 2026-10-27: 69
- 2026-10-26: 69
- 2026-10-25: 68
- 2026-10-24: 68
- 2026-10-23: 67
- 2026-10-22: 67
- 2026-10-21: 63
- 2026-10-20: 63
- 2026-10-19: 63
- 2026-10-18: 63
- 2026-10-17: 63
- 2026-10-16: 63
- 2026-10-15: 65
- 2026-10-14: 39

## Common questions

### What is the InDesign MCP Server server?

InDesign MCP Server is listed in the public MCP registry as io.github.zachshallbetter/indesign-mcp-server. Drive Adobe InDesign from any MCP client: 135+ tools for layout, styles, books and PDF export. This page covers its npm package (indesign-mcp-server).

### Is the InDesign MCP Server server safe to use?

InDesign MCP Server scores 73 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the InDesign MCP Server server expose?

InDesign MCP Server exposes 137 tools: add_page, delete_page, duplicate_page, navigate_to_page, get_page_info, and 132 more. Their descriptions and schemas cost roughly 13,643 tokens of context every time the server is loaded.

### Is the InDesign MCP Server server still maintained?

InDesign MCP Server is marked deprecated in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the InDesign MCP Server server under?

InDesign MCP Server declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

### What did VerifyMCP test on the InDesign MCP Server server?

VerifyMCP ran 16 checks on InDesign MCP Server, covering Malware scan, Known CVEs, Install scripts, Dependency health and 12 more. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- npm package: https://www.npmjs.com/package/indesign-mcp-server
- Socket report: https://socket.dev/npm/package/indesign-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/zachshallbetter-indesign-mcp-server/indesign-mcp-server.xml
- Changelog JSON feed: https://verifymcp.io/servers/zachshallbetter-indesign-mcp-server/indesign-mcp-server/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/zachshallbetter-indesign-mcp-server/indesign-mcp-server.json
- HTML version of this page: https://verifymcp.io/servers/zachshallbetter-indesign-mcp-server/indesign-mcp-server
