LayoutBridge for Adobe InDesign®
NPM · LAYOUTBRIDGE-SPM · SCANNED SEP 27
layoutbridge-spm – MCP server for Adobe® InDesign®: pages, frames, text, styles, tables, export
Available components
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. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency6
- Repository check failed: no source repository is declared. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: the license (SEE LICENSE IN LICENSE) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 3 days ago).Pass
- Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability64
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 37080 tokens (~337/item across 110 items; 110 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 110 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
How do I install the LayoutBridge for Adobe InDesign® MCP server?
LayoutBridge for Adobe InDesign® runs locally as an npm package, launched with npx -y layoutbridge-spm. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · layoutbridge-spm
claude mcp add com-mcp-interfaces-layoutbridge-spm -- npx -y layoutbridge-spm
{
"mcpServers": {
"com-mcp-interfaces-layoutbridge-spm": {
"command": "npx",
"args": [
"-y",
"layoutbridge-spm"
]
}
}
} {
"servers": {
"com-mcp-interfaces-layoutbridge-spm": {
"command": "npx",
"args": [
"-y",
"layoutbridge-spm"
]
}
}
} codex mcp add com-mcp-interfaces-layoutbridge-spm -- npx -y layoutbridge-spm
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-mcp-interfaces-layoutbridge-spm": {
"type": "local",
"command": [
"npx",
"-y",
"layoutbridge-spm"
],
"enabled": true
}
}
} openclaw mcp add com-mcp-interfaces-layoutbridge-spm --command npx --arg -y --arg layoutbridge-spm
mcp_servers:
com-mcp-interfaces-layoutbridge-spm:
command: "npx"
args: ["-y", "layoutbridge-spm"] {
"McpServers": {
"com-mcp-interfaces-layoutbridge-spm": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"layoutbridge-spm"
]
}
}
} assistant mcp add com-mcp-interfaces-layoutbridge-spm -t stdio -c npx -a -y layoutbridge-spm
{
"mcpServers": {
"com-mcp-interfaces-layoutbridge-spm": {
"command": "npx",
"args": [
"-y",
"layoutbridge-spm"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 25 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 24 Sept 26 +10
- Known CVEs: unverified → pass ▲ security
- Dependency health: unverified → 0.85 ▲ functional
- 23 Sept 26 50
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 27 Sept 2026 · Analysed npm/layoutbridge-spm@1.0.1
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Dependencies 95 packages
| Packages resolved | 95 |
|---|---|
| Stale | 31 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
get_font_info_at_index Font at a character ~165
Read the font at story index of a text frame: font_family, font_style (the exact style name to use in apply_character_format_to_range or define_paragraph_style), font_status (installed, substituted, not_available), available_styles[] of that family as installed, point_size, paragraph_style, character_style (localized name) and character_style_is_none. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Object id from get_page_state. |
| index | integer | yes | Story index of the character (from get_frame_text). |
No output schema declared.
No examples provided.
get_frame_lines Lines of a text frame (composition) ~507
Read the composed lines of a text frame directly from InDesign, per text column – the basis for widow/orphan checks (Hurenkind, Schusterjunge), hyphen ladders, empty lines and the comparison of column starts, without a PDF export. Returns frame_id, story_id, frame_index (position of the frame in the story), page_id, column_count, line_count, columns[] {column_index, bounds_mm (from frame, inset, column count and gutter), line_count, first_baseline_mm, last_baseline_mm (mm from the top of the page), starts_with_last_line_of_paragraph (widow suspicion), ends_with_first_line_of_paragraph (orphan suspicion), starts_with_empty_line, consecutive_hyphens_max, ends_with_single_word, single_word_last_lines[], lines[] {index (in the column), start_index, end_index (story indices, end exclusive – usable in the *_to_range tools), baseline_mm, ascent_pt, descent_pt, left_mm, right_mm, paragraph_index (0-based in the story), is_first_line_of_paragraph, is_last_line_of_paragraph, paragraph_line_count (story-wide, so a paragraph continuing in the next frame is still counted whole), ends_with_hyphen, is_empty, word_count, last_char, text (only with include_text)}}, overset and truncated. Pitfalls: only composed text has lines – overset text has none; an automatic hyphen is not part of the text, so ends_with_hyphen is inferred when a line ends and the next line of the same paragraph begins with a letter; the last line of a paragraph that continues in the next frame is the last visible line here, not the last line of the paragraph (compare paragraph_line_count); lines inside tables are not Line objects and are not listed. Read-only. Returns coordinate_space ("page" or "spread") for the coordinates reported.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Object id from get_page_state. |
| include_text | boolean | – | Also return the text of every line. Default false (figures only). |
| max_lines | integer | – | Cap for the lines returned over all columns. Default 500. |
No output schema declared.
No examples provided.
get_frame_options Options of a frame ~507
Read the options of an object as InDesign holds them: type (text, image, rectangle, ellipse, polygon, line, group, other), page_id/page_name (landing), bounds_mm, rotation_deg, text_wrap {mode, offset_mm}, appearance {fill_color, fill_kind, stroke_color, stroke_kind, stroke_weight_pt, fill_tint_percent, stroke_tint_percent, gradient_fill_angle_deg, gradient_stroke_angle_deg, gradient_fill_start_mm, gradient_fill_length_mm}, corners {top_left {type, radius_mm}, …, uniform} (null for lines and groups), effects {opacity_percent, blend_mode, drop_shadow, feather} of the object and has_effects {fill, stroke, text} (true where something deviates from normal / 100 %), parent_group_id, layer {layer_id, layer_name, visible, locked}, locked (Objekt > Sperren) and anchored {story_id, index, position} (null when the object is not anchored in text). For a text frame additionally text: columns {count, gutter_mm, type, fixed_width_mm}, inset_mm, vertical_justification, vertical_threshold_mm, first_baseline_offset (ascent, cap_height, leading, x_height, fixed, embox_top), min_first_baseline_pt, ignore_text_wrap, optical_margin_alignment and optical_margin_size_pt (story-wide, see set_story_options), threading {story_id, story_length, frame_index, frame_count, previous_frame_id, next_frame_id, overset, story_overset}, first_baseline_mm (baseline of the first line in mm from the top of the page – the direct check whether the first line sits on the baseline grid, if the layout uses one) and character_count. Read-only. Use it to copy the settings of an existing frame before rebuilding it with create_text_frame, set_frame_columns, set_frame_inset and set_text_wrap. Returns coordinate_space ("page" when the object lies on a page, "spread" on the pasteboard): bounds_mm is relative to page_id and can be passed back to set_frame_bounds together with page_id.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Object id from get_page_state. |
No output schema declared.
No examples provided.
get_frame_text Read the text of a frame ~415
Read the story of a text frame: story_id, story_length, paragraphs[] {index, start_index, end_index (exclusive, without the break), end_index_incl_break, paragraph_style, text, is_empty, break_type (paragraph, column, frame, page, odd_page, even_page or none for the last paragraph)} and overset for this frame. Column breaks count like paragraph marks; zero-width characters (U+FEFF) are returned as they are. For a threaded frame the whole story is returned, with frame_start_index and frame_end_index marking this frame's portion – pass only_frame_portion true to get only the paragraphs in this frame (text clipped at the frame boundaries, clipped_start/clipped_end mark the cut), and max_chars to cap the text returned (truncated true, paragraphs_omitted counts the rest). Indices always refer to the whole story, so they can be used with set_text_in_range and the *_to_range tools. Read-only. There is no include_overset parameter.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Object id from get_page_state. |
| max_chars | integer | – | Budget for the text returned across all paragraphs; the rest is counted in paragraphs_omitted. |
| only_frame_portion | boolean | – | true: only the paragraphs shown in this frame, text clipped at its boundaries. Default false = whole story. |
| show_placeholders | boolean | – | Show special characters in text as {{…}} placeholders (line_break, nbsp, nbsp_fixed, thin_space, hair_space, soft_hyphen, nb_hyphen, en_dash, em_dash, tab, column_break, frame_break, page_break). Def… |
No output schema declared.
No examples provided.
get_image_link_info Graphic and link details of a frame ~201
Read every graphic in a frame: file_name, file_path, link_status (NORMAL, MISSING, OUT_OF_DATE, EMBEDDED), effective_ppi, actual_ppi, color_space (CMYK, RGB, GRAY …), image_type, frame_bounds and graphic_bounds in mm relative to the page. For placed PDFs InDesign reports neither ppi nor colour space – the entry carries an err hint, no error. frame_bounds and graphic_bounds drifting apart by exactly one distance points to a wrong group move. Read-only. Returns coordinate_space ("page" or "spread"): frame_bounds and graphic_bounds are relative to page_id.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Object id from get_page_state. |
No output schema declared.
No examples provided.
get_layout_grid Layout grid (Satzspiegel) ~384
Read the type area (Satzspiegel) of every document page and, by default, every master page, plus document-wide values. Per page: page_id, name, spread_index, spread_page_count, spread_position, page_offset_in_spread_mm, parent, margins_mm (top, bottom, left, right; for facing pages also inside = left and outside = right – InDesign stores the inside margin (Bundsteg) as "left"), column_count, column_gutter_mm, type_area_mm {x, y, width, height} measured from the top left corner of that page, column_width_mm, columns_positions_mm (from the left edge of the type area; a two-column grid with 5 mm gutter on 170 mm reads [0, 82.5, 87.5, 170]) and custom_column_positions. Document-wide: distinct_grids[] {margins_mm, columns, gutter_mm, page_ids}, is_uniform, baseline_grid {start_mm, increment_mm, increment_pt, relative_to (top_of_page, top_of_margin or unknown), relative_to_raw, shown, view_threshold}, baseline_grid_check {first_line_mm, starts_at_type_area_top, lines_in_type_area, last_line_mm, remainder_below_mm} for the first document page, bleed_mm {top, left, bottom, right, uniform} and slug_mm. Warnings: bleed 0, baseline grid does not fit the type area, relative_to unknown. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| include_parent_pages | boolean | – | Also include master pages (Musterseiten). Default true. |
No output schema declared.
No examples provided.
get_page_state Snapshot of one page ~307
Snapshot of one page: page_bounds_mm and every object on it with id, type (text, image, rectangle, ellipse, polygon, line, group, other), bounds_mm, paragraph_style when the whole frame uses one, a text_snippet of up to 200 characters, child_count, parent_group_id and layer_name (Ebene; see list_layers for locked or hidden layers). Nothing is skipped silently; unknown kinds come back as "other". Works for master pages too – take the page_id from list_parent_pages, the answer then carries is_parent_page true. All coordinates are millimetres from the top left corner of that page. Read-only. Careful: an object bleeding over the edge to the neighbouring page can show up with x = 210 instead of 0 – do not judge by coordinates alone, measure in the exported PDF. Returns coordinate_space "page": every bounds_mm is relative to the top left corner of this page and can be passed back to set_frame_bounds together with page_id.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| include_group_children | boolean | – | Also list the objects inside groups, each with parent_group_id. Default true. |
| page_id | integer | yes | Page to look at, from list_pages or list_parent_pages. |
No output schema declared.
No examples provided.
get_selection Read the selection ~196
What is selected in the document window right now: items[] {frame_id, type, class_name, page_id, page_name, on_parent_page, bounds_mm, layer_name, parent_group_id}, frame_ids, text {story_id, start_index, end_index, length, frame_id, text} when text or an insertion point is selected, other[] (class names of anything else), count, is_active_document (the selection belongs to the active window; other documents report empty). Read-only. The natural hand-over when the user points at something in InDesign and wants you to continue with it. Each item carries coordinate_space ("page" or "spread") for its bounds_mm.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
No output schema declared.
No examples provided.
get_table Read a table ~262
Read a table of the story of a text frame: table_id, table_index, table_count (tables in the story), frame_id (where it starts), story_offset_index, rows/body_rows/header_rows/footer_rows/columns, row_types, table_style, width_mm, height_mm, column_widths_mm, row_heights_mm, rows_text (matrix of cell texts, null where a merged cell covers the position, cut at max_chars_per_cell with truncated true), merged_cells {row, column, row_span, column_span}, overflowing_cells, cell_styles (name and count), available_table_styles, available_cell_styles, overset. Read-only. not_found when the story has no table or table_index is beyond table_count.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Object id from get_page_state. |
| max_chars_per_cell | integer | – | Text budget per cell. Default 200. |
| table_index | integer | – | Which table of the story, in text order, 0 = first. Default 0. |
No output schema declared.
No examples provided.
group_frames Group objects ~242
Group two or more objects (text frames, graphic frames, rectangles, lines, groups) into one group (Gruppe). All objects must lie on the same spread (Druckbogen) and must not already be members of a group. Returns frame_id of the new group, member_ids, member_count, bounds_mm, landed_on_page_id and landed_on_page_name. The group is what get_page_state lists as type "group"; move it with move_frame_to_page, delete it with delete_frame, dissolve it with ungroup_frame. Members keep their ids and can still be read (get_frame_text, get_frame_options), but set_frame_bounds and move_frame_to_page work only on the group as a whole. A timed-out call may still have grouped – check get_page_state before repeating.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_ids | array | yes | Ids of the objects to group, at least two, all on the same spread. |
No output schema declared.
No examples provided.
import_styles Import styles from a file ~251
Load styles and swatches from another InDesign file (.indd, .indt, .idml) into this document: kinds paragraph, character, object, table, cell, swatches (default all six); on_conflict keep_existing (default: a style whose name exists already is not loaded), overwrite (existing styles with the same name are replaced) or rename (imported copies get a new name). Returns results per kind {before, after, added[]} and total_added; warns when nothing new arrived. Typical use when setting up a new issue from the previous one. Swatches are loaded without a conflict strategy (existing names stay).
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| file_path | string | yes | Real path of an .indd, .indt or .idml file on the machine running InDesign. |
| kinds | array | – | Which kinds to import. Default: all. |
| on_conflict | string | – | What happens to a name that exists already. Default keep_existing. |
No output schema declared.
No examples provided.
insert_page_number_marker Insert page number marker ~126
Insert the automatic page number placeholder (Seitenzahl-Platzhalter) into text frame frame_id at position "start" or "end" (default end). Works on master page frames too. Returns frame_id and position.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Text frame to write into. |
| position | string | – | Default "end". |
No output schema declared.
No examples provided.
insert_text_variable Insert a text variable ~176
Insert an instance of a text variable at a text position: frame_id (a frame of the story, also on a parent page), name, index (default: end of the story). Returns instance_id, story_id, frame_id, index, result_text (what the variable shows there), story_length, overset. The instance counts as one character in the story.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Object id from get_page_state. |
| index | integer | – | Character index in the story. Default: end. |
| name | string | yes | Name of the text variable, exact. |
No output schema declared.
No examples provided.
list_documents List open documents ~64
List every open document, not just the frontmost one. Returns document_id (stable for this session), name, saved, path (empty when never saved), page_count and is_active. Read-only. Note: saved true is no reliable sign that there is nothing to save.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_guides List ruler guides ~184
List every ruler guide (Hilfslinie) of the document – not margin or column guides – from document spreads and, by default, master spreads, merged by id. Per guide: guide_id, orientation (horizontal or vertical), spread_index, is_parent_spread, page_id (null for a horizontal guide on a multi-page spread), page_name, position_spread_mm, position_page_mm, fit_to_page, locked, layer and color. Also guides_locked_globally, count_document and count_parent. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| include_parent_pages | boolean | – | Also include master pages (Musterseiten). Default true. |
No output schema declared.
No examples provided.
list_layers List layers ~185
List the layers (Ebenen) of the document in panel order: layers[] {layer_id, name, index (0 = topmost), visible, locked, printable, ignore_wrap, show_guides, lock_guides, item_count (objects on the layer, document and parent pages)}, count, active_layer_id (where new objects land), hidden_count, locked_count, non_printing_count. Read-only. A locked layer makes every writing tool on its objects fail; a hidden layer hides them; a non-printing layer drops them from PDF exports – read this before you wonder why a call fails or a page looks empty.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
No output schema declared.
No examples provided.
list_links List links ~168
List the links (Verknuepfungen) of the document, optionally filtered by path_contains (substring of path or file name, case-insensitive). Per link: link_id, file_name, file_path, status (NORMAL, LINK_MISSING, LINK_OUT_OF_DATE, EMBEDDED), page_id, page_name and frame_id. Also count. Use it to match pictures to articles by page number or to spot motifs of old issues by file name. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| path_contains | string | – | Substring of the file path or name. |
No output schema declared.
No examples provided.
list_object_styles List object styles ~344
List the object styles (Objektformate) of the document: styles[] {style_id, name, group_path, based_on, built_in ([None], [Basic Graphics Frame], [Basic Text Frame] – localized names in a German InDesign), applies {fill, stroke, stroke_and_corner, transform, text_frame_general, text_frame_baseline, text_frame_auto_sizing, paragraph_style, story_options, text_wrap_and_others, anchored_object, frame_fitting} (which categories the style sets), fill_color, stroke_color, stroke_weight_pt, paragraph_style, and – each only when the style sets that category, otherwise null – fill_tint_percent, overprint_fill, stroke_tint_percent, stroke_type, corners {top_left {type, radius_mm} … uniform}, text_frame {columns, inset_mm, vertical_justification, vertical_threshold_mm, first_baseline_offset, min_first_baseline_pt, ignore_text_wrap}, text_wrap {mode, offset_mm}, effects (opacity, blend mode, drop shadow, feather), anchored, frame_fitting {on_empty_frame, auto_fit, crop_mm}, story {optical_margin_alignment, optical_margin_size_pt}}, count. include_built_in false hides the bracketed defaults. Read-only. Use the exact names with apply_object_style.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| include_built_in | boolean | – | Also list the bracketed default styles. Default true. |
No output schema declared.
No examples provided.
list_pages List pages ~123
List the document pages. Per page: page_id, index (0-based), side (LEFT_HAND, RIGHT_HAND or SINGLE_SIDED), parent (the applied master page, "[None]" when there is none) and name, which is the printed page number. Read-only. Master pages themselves are listed by list_parent_pages.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
No output schema declared.
No examples provided.
list_paragraph_styles List paragraph and character styles ~222
List the paragraph styles (Absatzformate) of the document, including those in style groups: styles[] {name, style_id, group ("" at top level, "Group/Subgroup" nested), based_on, font_family, font_style, point_size, leading_pt (null when automatic), leading_auto, fill_swatch, alignment, space_before_pt, space_after_pt, hyphenation, tracking, keep_options, hyphenation_options, justification_options} and the character styles (Zeichenformate) as character_styles[] {name, style_id, group, based_on, font_family, font_style, point_size, fill_swatch, tracking – null for attributes the style does not set}. Internal styles whose name starts with "[" are excluded (internal_styles_excluded counts them). Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
No output schema declared.
No examples provided.
list_parent_pages List master pages ~122
List the master spreads (Musterseiten): name ("A-Cover"), prefix, base_name, applied_to_page_ids[] and pages[] with page_id, index, side and item_count. Those page_ids make master pages readable and editable with get_page_state, set_text or find_replace (scope frame). Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
No output schema declared.
No examples provided.
list_sections List sections ~170
List the sections (Abschnitte) of the document that control page numbering: sections[] {section_id, name, start_page_id, start_page_name, start_page_index, length, continue_numbering, page_number_start, page_number_style (arabic, upper_roman, lower_roman, upper_letters, lower_letters, or a custom list name), section_prefix, include_section_prefix, marker}, count, and pages[] {page_id, name} with the page names as they result. Read-only. Every document has a section on its first page.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
No output schema declared.
No examples provided.
list_stories List stories ~298
Overview of the stories (Textabschnitte) of the document: which frames belong to which story and in what order, and which story overflows. stories[] {story_id, frame_ids (chain order), frame_count, frames[] {frame_id, index, page_id, page_name, on_pasteboard, on_parent_page, bounds_mm}, character_count, paragraph_count, table_count, overset, on_parent_page, first_page_id, first_page_name, first_paragraph_style, snippet}, count, total_stories, overset_count (warning when above 0). Stories on parent pages are skipped unless include_parent_pages true; empty stories are listed unless include_empty false; page_id keeps only stories with a frame on that page. Read-only. get_frame_text reads one story; thread_text_frames changes the chain.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| include_empty | boolean | – | List stories without text. Default true. |
| include_parent_pages | boolean | – | Also list stories on parent (master) pages. Default false. |
| page_id | integer | – | Only stories that have a frame on this page. |
| snippet_chars | integer | – | Length of the text snippet per story. Default 80. |
No output schema declared.
No examples provided.
list_swatches List swatches ~258
List the swatches (Farbfelder) of the document: swatches[] {swatch_id, name, kind (none, color, tint, gradient, mixed_ink), space (RGB, CMYK, LAB, MIXED_INK), model (process, spot, registration), values (RGB 0–255 or CMYK percent; ink percentages for mixed inks), tint_percent and base_color for tints, stop_count, type (linear, radial) and stops[] {index, swatch_name, location, midpoint} for gradients, built_in}. include_built_in false hides None, Black, Paper and Registration. Read-only. Use the exact names for swatch_name parameters (create_line, create_rectangle, set_frame_appearance, apply_character_format_to_range); hex parameters create RGB swatches, which print differently from the CMYK swatches of the document.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| include_built_in | boolean | – | Also list None, Black, Paper and Registration. Default true. |
No output schema declared.
No examples provided.
list_text_variables List text variables ~172
List the text variables (Textvariablen) of the document: variables[] {name, type (custom_text, running_header_paragraph, running_header_character, file_name, output_date, creation_date, modification_date, last_page_number, chapter_number, or the raw type), options per type (text; paragraph_style/character_style, use first|last, text_before, text_after, delete_end_punctuation; include_extension, include_path; format), instance_count (instances in the stories)}, count. Read-only. Every document carries InDesign's default variables.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
No output schema declared.
No examples provided.
move_frame_to_page Move an object to another page ~477
Move a text frame, image frame, rectangle, line or group to another page of the same document, keeping id, content, threading and links; graphics of a group travel with it (DOM move(), not bounds). position_mm {x, y} sets the top left corner relative to the new page; without it the object keeps the position it had on the old page. pasteboard {side, gap_mm, y_mm} puts the object on the pasteboard (Montagefläche) beside the spread of page_id instead: side left = left of the leftmost page of that spread, right = right of the rightmost page, gap_mm between object and page edge, y_mm the top edge relative to the page (default: as on the old page); not together with position_mm. The answer then carries on_pasteboard true and landed_on_page_id null; bounds_mm stay relative to page_id (negative x on the left side). Objects inside a group are refused. Returns frame_id, id_preserved (false only when InDesign needed duplicate-and-delete, then the id is new), landed_on_page_id, landed_on_page_name and bounds_mm. Careful: InDesign assigns an object to the page holding its centre – a half-page bleed object can stay on the neighbouring page (warning); then use set_frame_bounds without page_id. Rotated objects: set rotation 0 first. Returns coordinate_space "page"; when the object carries a text wrap the document is recomposed afterwards (recomposed, overset_stories_before, overset_stories_after, overset_changed).
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Object id from get_page_state. |
| page_id | integer | yes | Target page from list_pages or list_parent_pages. |
| pasteboard | object | – | Put the object on the pasteboard (Montagefläche) beside the spread of page_id instead of on the page. Not together with position_mm. |
| position_mm | object | – | Top left corner on the new page in mm. Default: same position as on the old page. |
No output schema declared.
No examples provided.
move_pages Move pages ~448
Move a block of neighbouring pages (1–48 page_ids, direct neighbours) before or after reference_page_id, which must lie outside the block. allow_page_shuffle overrides "allow document pages to shuffle" for this call only. Warnings: moving an odd number of pages flips the left/right side of every page in between; with shuffle off the pages join the target spread, and spread_page_counts shows overfilled spreads – a spread with more than two pages is a warning that spells out the new spread division (Bogenaufteilung). InDesign holds at most 10 pages on a spread: when the target spread would exceed that, the call fails before anything moves (invalid_state, details.code "spread_page_limit" with spread_index and predicted_page_count). keep_spreads true rebuilds the spreads between the old and the new place as pairs afterwards (facing pages: left and right page together, each on its left/right side, starting like the first page of the document; single-sided: one page per spread; a page that does not end up on its expected side is a warning) – the new spreads keep their pages when pages shuffle later (like move_pages_to_new_spread). Returns moved_page_ids, names_before, names_after, page_count, spread_count, spread_page_counts[], pages[] {page_id, index, name, side, spread_index}, keep_spreads and spreads_rebuilt.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_page_shuffle | boolean | – | Override "allow document pages to shuffle" for this call only. |
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| keep_spreads | boolean | – | Rebuild the affected spreads as pairs after moving. Default false (spreads stay as InDesign leaves them). |
| page_ids | array | yes | Pages to move – direct neighbours in the page order. |
| position | string | yes | Where relative to the reference page. |
| reference_page_id | integer | yes | Page the block is placed before or after. Must not be part of the block. |
No output schema declared.
No examples provided.
move_pages_to_new_spread Move pages to a new spread ~222
Take a run of pages (1–24 page_ids, not page_id) out of their spread (Druckbogen) into a new spread directly behind it – the page order stays, only the spread division changes. Repairs a three-page spread after add_page. The pages must lie on the same spread, be direct neighbours and must not be all pages of that spread. Shuffle is suspended for the call and the new spread is created with shuffle off. Returns moved_page_ids, names, new_spread_index, new_spread_page_count, source_spread_index, source_spread_page_count, spread_count and page_count. Read list_pages and get_layout_grid again afterwards.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| page_ids | array | yes | Pages to move into the new spread – same spread, direct neighbours, not all of them. |
No output schema declared.
No examples provided.
open_document Open a document ~170
Open an existing .indd, .indt or .idml file. Returns document_id, name, page_count, facing_pages (Doppelseiten) and already_open, which is true when the file was open already – it is never opened twice. Because InDesign dialogs are suppressed, missing links (fehlende Verknuepfungen), out of date links and missing fonts (fehlende Schriften) come back as warnings; that is the only signal you get.
| Name | Type | Req | Description |
|---|---|---|---|
| open_copy | boolean | – | Open an untitled copy and leave the file untouched. Default for .indt templates. |
| path | string | yes | Real file path on the machine running InDesign. |
| show_window | boolean | – | Show the document window. Default true. Without a window the document is never the active one. |
No output schema declared.
No examples provided.
override_parent_item_on_page Override a master item ~138
Make a local copy of a master page object on page_id so it can be edited there. parent_item_id must lie on a master spread (take it from get_page_state on a master page). Returns frame_id of the new local object.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| page_id | integer | yes | Document page that shows the master item. |
| parent_item_id | integer | yes | Object id on the master spread. |
No output schema declared.
No examples provided.
package_document Package for print ~511
Package the document for the printer (Verpacken): a folder with the document, Links, Document fonts and a report; options copy_fonts, copy_graphics, update_graphics (default true), copy_profiles, include_hidden_layers, ignore_preflight_errors (default true), create_report (default true), include_idml, include_pdf with pdf_preset (default: the high quality preset). The document must be saved. Missing links and fonts come back as warnings and fields; InDesign refuses the package when preflight errors are not ignored. Returns folder_path, the options used, missing_links, missing_fonts, entries_in_folder, and the font list of the document with its package status: fonts[] {family, style, name, postscript_name, type (opentype_cff, opentype_tt, truetype, type1 …), status, location, packaged (true, false, or null when the file could not be matched), reason (not_installed, adobe_fonts, not_copied, copy_fonts_off, location_unknown, fonts_folder_missing)}, fonts_total, fonts_packaged_count, fonts_not_packaged[] and fonts_folder. The document font list includes fonts used only by unused styles (e.g. the basic paragraph style), so it can be longer than find_font_usage. Fonts activated through Adobe Fonts (Creative Cloud) are never copied by InDesign – a warning names them. Long operation (timeout 600 s).
| Name | Type | Req | Description |
|---|---|---|---|
| copy_fonts | boolean | – | Default true. |
| copy_graphics | boolean | – | Default true. |
| copy_profiles | boolean | – | Default false. |
| create_report | boolean | – | Write the instructions/report file. Default true. |
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| folder_path | string | yes | Package folder (created or filled by InDesign); its parent folder must exist. |
| ignore_preflight_errors | boolean | – | Default true. |
| include_hidden_layers | boolean | – | Default false. |
| include_idml | boolean | – | Also write an IDML. Default false. |
| include_pdf | boolean | – | Also export a PDF with pdf_preset. Default false. |
| pdf_preset | string | – | PDF export preset name for include_pdf. |
| update_graphics | boolean | – | Update links to the copied graphics. Default true. |
No output schema declared.
No examples provided.
place_image Place an image or PDF ~508
Place an image or PDF file (real path on the InDesign machine) into a graphic frame, replacing whatever it held (crop and scale are reset – to merely swap the file use relink_links). fit: fill_proportionally, fit_proportionally, fit_content_to_frame or center_content; without it the frame fitting options of the frame apply. pdf_crop chooses the PDF page box: media (InDesign default – the whole sheet including printer marks, the usual reason for misplaced ads), crop, trim, bleed (for bleed ads), art or content; pdf_page picks the page (default 1). When the PDF has no such box (a QR code PDF without TrimBox, say), InDesign refuses – the tool then falls back to the next larger box (bleed → trim → crop → media) with a warning and reports pdf_crop_used; pdf_crop_fallback false turns that off and returns the io_error instead. The place preferences are set for this call only and restored. Returns frame_id, link_status, frame_bounds_mm, graphic_bounds_mm, pdf_crop_used and fits_frame (true when the graphic covers the frame within 0.2 mm; otherwise a warning); a warning when the effective resolution is below min_ppi. A changed CropBox of a PDF is ignored by InDesign; for asymmetric bleed derive a placement copy of the PDF. A timed-out call may still have placed – check get_image_link_info before repeating.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| fit | string | – | Fitting after placing. |
| frame_id | integer | yes | Object id from get_page_state. |
| image_path | string | yes | Real file path of the image or PDF on the machine running InDesign. |
| min_ppi | number | – | Effective resolution in ppi below which a warning is given. Default: the configured value, otherwise 300 (the usual offset print value: twice the 150 lpi screen). |
| pdf_crop | string | – | PDF page box to import. InDesign default media. |
| pdf_crop_fallback | boolean | – | Fall back to the next larger PDF box with a warning when the requested box is missing. Default true. |
| pdf_page | integer | – | Page of a multi-page PDF. Default 1. |
No output schema declared.
No examples provided.
place_text_file Place a text file ~773
Place a manuscript file (.docx, .doc, .rtf or .txt on the InDesign machine) into a text frame – the cheap way for long articles instead of passing the text as a string. mode replace (default) empties the story first; append adds at the end of the story. retain_formatting false (default) imports plain text (Word styles and local formatting removed) so that paragraph_style (applied to every placed paragraph, like apply_paragraph_style_to_range) gives the document's paragraph style; retain_formatting true keeps Word styles and local formatting and imports the Word paragraph styles (names that already exist in the document are used as they are). style_map {"Word style": "document style"} maps Word paragraph styles to existing document styles after the import (forces retain_formatting true) and removes the mapped Word styles again (styles_removed); every target style must exist. typographers_quotes (default true) converts straight quotes. Footnotes and endnotes are imported, tables come in as InDesign tables, graphics, index and table of contents are not imported. Returns placed_start_index, placed_end_index and inserted_chars (story indices for the *_to_range tools), story_length, paragraph_count, styles_added (paragraph styles the import created – remove or map them), styles_mapped and overset of the story. autoflow true (Sitzung 8) keeps adding pages after the page of the last frame – same parent page, a frame with the bounds and frame options of the last one (columns, gutter, insets, vertical justification, first baseline – copied value by value), threaded – until the text fits or max_pages (default 20) is reached; the result carries autoflow {pages_added, frames_added[] {frame_id, page_id, bounds_mm, frame_options_copied, frame_options_failed[], frame_options_skipped[] (values that do not apply, e.g. vertical_threshold without vertical justify), columns {count, gutter_mm}}, overset, stopped}. Without autoflow, thread frames with thread_text_frames. Autoflow keeps t…
| Name | Type | Req | Description |
|---|---|---|---|
| autoflow | boolean | – | Add pages and threaded frames until the text fits. Default false. |
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| file_path | string | yes | Real path of the .docx, .doc, .rtf or .txt file on the machine running InDesign. |
| frame_id | integer | yes | Object id from get_page_state. |
| keep_view | boolean | – | Restore the previous view (page and zoom of the layout window) afterwards – InDesign otherwise jumps to the new page. Default true; false lets the view move. The answer carries view_restored (null wh… |
| max_pages | integer | – | autoflow: at most this many pages. Default 20. |
| mode | string | – | replace (default): empty the story first; append: add at the end of the story. |
| paragraph_style | string | – | Existing paragraph style applied to every placed paragraph. |
| retain_formatting | boolean | – | true keeps Word styles and local formatting. Default false = plain text. |
| style_map | object | – | Word paragraph style name → existing document style name; applied after the import. |
| typographers_quotes | boolean | – | Convert straight quotes to typographic ones. Default true. |
No output schema declared.
No examples provided.
position_image_in_frame Position a placed graphic ~307
Move the graphic inside a frame without scaling it; the frame stays as it is (frame bounds, crop edges and page). align puts the graphic's reference point onto the same reference point of the frame (center, top, bottom, left, right, top_left, top_right, bottom_left, bottom_right – e.g. top_left: upper left corners meet, center: centred); offset_mm {x, y} then shifts it by x/y mm (positive = right/down). Pass align, offset_mm or both. Returns frame_id, graphic_id, align, offset_mm, moved_by_mm {x, y}, graphic_bounds_mm, graphic_bounds_before_mm and frame_bounds_mm (relative to page_id, coordinate_space "page"; "spread" on the pasteboard) and fits_frame – a warning when the graphic no longer covers the frame. To change the size use scale_image_in_frame or fit_frame.
| Name | Type | Req | Description |
|---|---|---|---|
| align | string | – | Reference point of graphic and frame that are brought together (one of nine). |
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Object id from get_page_state. |
| offset_mm | object | – | Shift in mm after align (or from the current position): positive x to the right, positive y down. |
No output schema declared.
No examples provided.
preflight_document Run InDesign preflight ~256
Run InDesign's preflight (Preflight) with profile_name or, without it, the document's working profile (falls back to the first available profile when the working profile is invalid). Waits for the process, returns profile_used, summary ("None" when there are no errors), error_count and findings[] with category, description, page_name and item, capped by max_findings (1–500, default 100). With list_profiles_only true only profiles[] is returned. Read-only: the process is created, awaited and removed. Caveat: overset text (Übersatz) is not always reported with the right page – get_frame_text on the last frame of each story is the reliable check.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| list_profiles_only | boolean | – | Only list the available profiles, run nothing. |
| max_findings | integer | – | Cap for findings[]. Default 100. |
| profile_name | string | – | Preflight profile to use. Default: the document's working profile. |
No output schema declared.
No examples provided.
relink_links Relink links to new files ~180
Point links to new files with InDesign's own relink: relink[] {link_id, new_path}, 1 to 500 entries – frame, placement, scale and crop stay. Unknown ids, missing files and a new path equal to the current one (use update_links then) fail individually; the rest runs. Returns results[] {link_id, ok, status_after, reason, new_link_id}, relinked and failed. A 0-byte file is usually a cloud placeholder that is not downloaded yet.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| relink | array | yes | Links to relink with their new file paths. |
No output schema declared.
No examples provided.
replace_font Replace a font everywhere ~591
Replace every use of a font family (or one style of it) in the document by another installed font – InDesign's "find font / replace" as one call: in paragraph and character styles and in local formatting, on document and master pages. The standard step after open_document reports missing_fonts, and when a publication changes its typeface. from_family (required), from_style (optional: without it every style of the family is replaced, keeping the style name where it exists in the target family – styles that do not exist there are left alone with a warning listing available_styles); to_family (required, must be installed – otherwise not_found with available_styles), to_style (only with from_style; default the same style name). scope all (default) | styles_only | local_only. include_master_pages (default true), include_locked_layers (default false – stories on locked layers are skipped and listed in skipped_locked). dry_run true only counts. Never changes text. Returns from, to, styles_changed[] {kind, name, from_style, to_style}, runs_changed, characters_changed, stories_touched, remaining_occurrences (runs still using the old font – 0 when everything was reached; remaining_where lists up to 20), skipped_locked[], styles_missing_in_target[], overset_stories[] (InDesign recomposes every paragraph – check get_frame_lines) and dry_run. Pitfalls: style names are family-specific ("75 Bold" is not "Bold") – check them with get_font_info_at_index; a missing font exists in the document only as a name and is replaced through that name; composite fonts and text in placed graphics are not affected. InDesign names a family with a format suffix such as "Source Sans 3 (OTF)" or "(TT)" when it knows the family in more than one format; pass the family with or without that suffix – the connector matches both and reads back the name InDesign uses.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| dry_run | boolean | – | Only count and locate, change nothing. Default false. |
| from_family | string | yes | Font family to replace, e.g. the missing one from find_font_usage. |
| from_style | string | – | Only this style of the family. Without it all styles. |
| include_locked_layers | boolean | – | Also stories on locked layers. Default false. |
| include_master_pages | boolean | – | Also master pages. Default true. |
| scope | string | – | Styles and/or local formatting. Default all. |
| to_family | string | yes | Installed target family. |
| to_style | string | – | Target style; only together with from_style. Default: the same style name. |
No output schema declared.
No examples provided.
replace_swatch Replace a swatch everywhere ~495
Replace every use of a swatch (fills, strokes, text, paragraph, character and object styles, tables, gradient stops) with another existing swatch and remove the old one – InDesign's "delete swatch … replace with". Typical use: RGB swatches from a foreign document replaced by CMYK swatches created with create_swatch, or duplicate swatches merged. old_name or old_swatch_id (exact, as list_swatches shows it; built-in swatches cannot be replaced), new_name or new_swatch_id (must exist – colour, tint or gradient). delete_old true (default) lets InDesign replace everything and removes the old swatch; false only reassigns text runs, fills, strokes and paragraph/character styles by search and keeps the swatch (object styles, table styles and gradient stops then keep the old one – warning). dry_run true only counts. A swatch that serves as the base of a mixed ink can be refused by InDesign (invalid_state). Returns old {name, swatch_id, kind, space, values}, new {…}, deleted, usage_before {text_runs, fills, strokes, paragraph_styles, character_styles, object_styles, tables (null – not counted), gradients}, reassigned (with delete_old false), remaining_swatches and dry_run. A change of colour space (RGB to CMYK) is no colour management – the printed colour can differ; check the values with list_swatches first, and re-read list_swatches afterwards.
| Name | Type | Req | Description |
|---|---|---|---|
| delete_old | boolean | – | Remove the old swatch after replacing. Default true. |
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| dry_run | boolean | – | Only count the uses, change nothing. Default false. |
| include_locked_layers | boolean | – | Also change text on locked layers when reassigning by search. Default false. |
| new_name | string | – | Replacement swatch, by exact name (must exist). |
| new_swatch_id | integer | – | Replacement swatch, by id. |
| old_name | string | – | Swatch to replace, by exact name. |
| old_swatch_id | integer | – | Swatch to replace, by id from list_swatches. |
No output schema declared.
No examples provided.
save_document Save a document ~131
Save the document. With path it is a save-as (Speichern unter); without path the document is saved in place. A document that has never been saved needs path, otherwise the call fails with io_error. Returns path as InDesign reports it afterwards.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| path | string | – | Target file path for save-as. Required for a document that has never been saved. |
No output schema declared.
No examples provided.
save_document_as Save a copy or switch file ~223
Write the document to another file: mode copy (default) saves a copy (Kopie speichern) and the open document keeps its own file – the way to start the next issue from the current one; mode switch saves under the new name and the open document continues there (Speichern unter). template true writes an .indt. An existing file needs overwrite true. Returns path, bytes, overwritten, name and document_path of the open document afterwards. save_document is for saving in place.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| mode | string | – | copy (default) or switch. |
| overwrite | boolean | – | Replace an existing file. Default false. |
| path | string | yes | Target file path, ending in .indd or .indt, in an existing folder. |
| template | boolean | – | Write as template (.indt / stationery). Default false. |
No output schema declared.
No examples provided.
scale_image_in_frame Scale a placed graphic ~254
Scale the graphic inside a frame by zoom_factor (greater than 0; 1.2 = 20 % larger) around an anchor of the frame (center, top, bottom, left, right, top_left, top_right, bottom_left, bottom_right; default center). Frame and crop stay. Returns graphic_bounds_mm, frame_bounds_mm and effective_ppi after the zoom (warning below min_ppi; PDFs report none).
| Name | Type | Req | Description |
|---|---|---|---|
| anchor | string | – | Anchor of the frame that stays fixed. Default center. |
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Object id from get_page_state. |
| min_ppi | number | – | Effective resolution in ppi below which a warning is given. Default: the configured value, otherwise 300 (the usual offset print value: twice the 150 lpi screen). |
| zoom_factor | number | yes | Scale factor, e.g. 1.2 for 20 % larger, 0.9 for 10 % smaller. |
No output schema declared.
No examples provided.
set_corner_options Corner options of a frame ~294
Set the corner shape and size (Eckenoptionen) of a rectangle, text or graphic frame or polygon – per corner or for all four: corner_type none | rounded | inverse_rounded | bevel | inset | fancy plus radius_mm for all corners, or corners {top_left, top_right, bottom_left, bottom_right} each {type, radius_mm} – missing corners stay. At least one of them. type "none" resets the corner (the radius stays stored but has no effect). Lines and groups are refused (invalid_state). Corner options do not change bounds_mm, only the visible shape; text wrap by object shape follows the corner. Returns frame_id, type, corners {top_left {type, radius_mm}, …} read back, uniform (all four equal) and bounds_mm. get_frame_options shows the same under corners.
| Name | Type | Req | Description |
|---|---|---|---|
| corner_type | string | – | Corner shape for all four corners. |
| corners | object | – | Per-corner settings; corners that are left out keep their values. |
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Object id from get_page_state. |
| radius_mm | number | – | Corner radius in mm for all four corners. |
No output schema declared.
No examples provided.
set_document_bleed Set bleed and slug ~200
Set the document bleed (Anschnitt) and slug (Infobereich). bleed_mm and slug_mm each take a number (0–50, all edges) or an object with top/left/bottom/right; edges you leave out keep their value. Returns bleed_mm and slug_mm per edge plus bleed_uniform and slug_uniform. Independent of the bleed setting inside a PDF export preset. Read the current values with get_layout_grid.
| Name | Type | Req | Description |
|---|---|---|---|
| bleed_mm | – | – | Bleed in millimetres: one number for all edges or { top, left, bottom, right }. |
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| slug_mm | – | – | Slug in millimetres: one number for all edges or { top, left, bottom, right }. |
No output schema declared.
No examples provided.
set_document_setup Change document setup ~324
Change the document setup (Dokument einrichten) of an existing document: page size via preset (A4, Letter, Legal, Tabloid) or width_mm/height_mm, orientation (swaps width and height), facing_pages, pages (page count – a lower count deletes the last pages with their contents and needs allow_page_removal true), start_page_number. At least one parameter. Margins and bleed are set with set_layout_grid and set_document_bleed. Objects are not adjusted to a new page size. Returns setup (read back), previous, pages_added, pages_removed, changed; warns when the page size or facing pages changed.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_page_removal | boolean | – | Confirm that a lower page count may delete pages with their contents. |
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| facing_pages | boolean | – | Facing pages (Doppelseiten) on or off. |
| height_mm | number | – | Page height in mm. |
| orientation | string | – | Swaps width and height when they do not match. |
| pages | integer | – | Page count. Fewer than now deletes pages (allow_page_removal). |
| preset | string | – | Page size preset. |
| start_page_number | integer | – | Number of the first page (document preference; sections may override it). |
| width_mm | number | – | Page width in mm. |
No output schema declared.
No examples provided.
set_frame_appearance Fill and stroke of an object ~569
Set fill, stroke colour and stroke weight of an object. fill and stroke take "#RRGGBB" (an RGB swatch is created or reused) or "none"; fill_swatch_name and stroke_swatch_name take the exact name of an existing colour, tint or gradient swatch instead (print: the document's CMYK swatches, see list_swatches, create_gradient_swatch) and each excludes the corresponding hex parameter. stroke_weight_pt is in points (0 or more). fill_tint_percent / stroke_tint_percent set the tint (0–100), gradient_fill_angle_deg / gradient_stroke_angle_deg the angle of a linear gradient (a warning when the swatch is no gradient). At least one parameter besides frame_id is required. Returns fill_kind and stroke_kind (none, color, tint, gradient, mixed_ink), the tints (null when none is set), the gradient angles and gradient_fill_start_mm / gradient_fill_length_mm as InDesign holds them. stroke "none" also sets the weight to 0, because [None] alone can resolve to black in localised documents – the reliable way to remove a stroke is stroke_weight_pt 0; check the export. Returns applied_fill, applied_stroke and applied_stroke_weight_pt read back from the object, plus swatch_ids of new swatches.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| fill | string | – | "#RRGGBB" or "none". |
| fill_swatch_name | string | – | Exact name of an existing swatch for the fill. Not together with fill. |
| fill_tint_percent | number | – | Tint of the fill swatch in percent (0–100). |
| frame_id | integer | yes | Object id from get_page_state. |
| gradient_fill_angle_deg | number | – | Angle of a linear gradient fill in degrees (-180 to 180); a warning when the fill is no gradient swatch. |
| gradient_stroke_angle_deg | number | – | Angle of a linear gradient stroke in degrees (-180 to 180); a warning when the stroke is no gradient swatch. |
| stroke | string | – | "#RRGGBB" or "none" (also sets the weight to 0). |
| stroke_swatch_name | string | – | Exact name of an existing swatch for the stroke. Not together with stroke. |
| stroke_tint_percent | number | – | Tint of the stroke swatch in percent (0–100). |
| stroke_weight_pt | number | – | Stroke weight in points; 0 removes the stroke. |
No output schema declared.
No examples provided.
set_frame_bounds Move or resize an object ~408
Move or resize an existing text frame, image frame, rectangle or line without rebuilding it: bounds_mm {x, y, width, height}. With page_id the values are relative to that page (x/y may be negative for bleed); without page_id they are spread coordinates (Druckbogen). Never changes the spread. Groups are refused (their graphics would stay behind) – use move_frame_to_page. A rotated object takes the values in its rotated space; set set_frame_rotation 0 first. Resizing an image frame crops: the picture keeps its position and scale inside the frame, so a smaller frame shows less of it (the way to trim a bleed picture to the trim edge, or to crop a photo without rescaling) – use scale_image_in_frame or fit_frame when the picture should follow the new frame instead. Returns frame_id, bounds_mm as InDesign reports them, landed_on_page_id and landed_on_page_name; a landing on another page is a warning. Returns coordinate_space ("page" with page_id, otherwise "spread"); a page change without page_id is a warning, because page-relative values read elsewhere shift the object by one page width when passed as spread coordinates. When the object carries a text wrap, the document is recomposed afterwards and recomposed, overset_stories_before, overset_stories_after and overset_changed report whether the overset state of the document changed.
| Name | Type | Req | Description |
|---|---|---|---|
| bounds_mm | object | yes | Position and size in mm from the top left corner of the page (or spread with coordinate_space "spread"). |
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Object id from get_page_state. |
| page_id | integer | – | Page the coordinates refer to (same spread). Without it: spread coordinates. |
No output schema declared.
No examples provided.
set_frame_columns Columns inside a text frame ~200
Set the number of columns inside a text frame (not the page grid): count (1 or more; the parameter is count, not column_count) and gutter_mm (Spaltenabstand; without it the frame keeps its current gutter – InDesign's own default for new frames is 1 pica = 4.233 mm). Returns frame_id, count and gutter_mm read back. Fails with invalid_state for anything but a text frame.
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number of columns inside the frame. |
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Object id from get_page_state. |
| gutter_mm | number | – | Gutter between the columns in mm. Without it the current gutter of the frame stays. |
No output schema declared.
No examples provided.
set_frame_effects Effects: opacity, blend mode, drop shadow, feather ~503
Set InDesign effects (Effekte) of an object for target object (default), fill, stroke or text (text only on text frames): opacity_percent (0–100), blend_mode (normal, multiply, screen, overlay, soft_light, hard_light, color_dodge, color_burn, darken, lighten, difference, exclusion, hue, saturation, color, luminosity), drop_shadow {enabled (required), opacity_percent, angle_deg, distance_mm, size_mm (0–50.08), spread_percent, noise_percent, color {swatch_name | hex}, blend_mode, use_global_light, knocked_out, honor_other_effects – omitted values keep InDesign's own defaults} and feather {enabled (required), width_mm (0–352.78), corner_type sharp | rounded | diffused, noise_percent, choke_percent}. At least one of them; unknown keys are refused (inner/outer glow, bevel, satin, directional and gradient feather are not in this version). Returns frame_id, type, target, effects {opacity_percent, blend_mode, drop_shadow {…, x_offset_mm, y_offset_mm}, feather {…}} read back and changed[]. opacity_percent 100, blend_mode normal, drop_shadow.enabled false and feather.enabled false restore the plain state. Pitfalls: every effect brings transparency into the document – a PDF/X-1a preset flattens it on export, PDF/X-4 keeps it (check preflight_document and export_pdf); blend modes look different in RGB and CMYK documents; a shadow on a group acts on the group as a whole. get_frame_options shows effects (object) and has_effects {fill, stroke, text}.
| Name | Type | Req | Description |
|---|---|---|---|
| blend_mode | string | – | Blend mode (Mischmodus). |
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| drop_shadow | object | – | Drop shadow (Schlagschatten). Omitted values keep InDesign's defaults. |
| feather | object | – | Basic feather (weiche Kante). |
| frame_id | integer | yes | Object id from get_page_state. |
| opacity_percent | number | – | Opacity (Deckkraft) 0–100. |
| target | string | – | Which part the effects apply to. Default object. |
No output schema declared.
No examples provided.
set_frame_inset Inset of a text frame ~234
Set the inset spacing (Innenabstand) of a text frame: inset_mm {top, left, bottom, right}, all four required, 0 or more; and/or the vertical justification (vertikale Ausrichtung, Textrahmenoptionen): vertical_justification top, center, bottom or justify. At least one of the two; what is omitted stays. Returns frame_id, inset_mm and vertical_justification read back (get_frame_options reads both under text).
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Object id from get_page_state. |
| inset_mm | object | – | Inset in mm: { top, left, bottom, right }, all required. Optional when vertical_justification is given. |
| vertical_justification | string | – | Vertical justification of the text in the frame (vertikale Ausrichtung). Without it the frame keeps its setting. |
No output schema declared.
No examples provided.
set_frame_layer Move object to a layer ~262
Move an object (frame, line, group) to another layer (Ebene). Pass layer_name or layer_id; with create_if_missing true a missing layer_name is created on top (warning). Members of a group cannot be moved separately (invalid_state; move the group). Fails with invalid_state when the object lies on a locked layer, is itself locked, or the target layer is locked – unlock with set_layer_visibility first. Returns layer_id, layer_name, previous_layer_id, previous_layer_name, layer_created, changed; warns when the target layer is hidden.
| Name | Type | Req | Description |
|---|---|---|---|
| create_if_missing | boolean | – | Create the layer named layer_name on top when it does not exist. Default false. |
| document_id | integer | – | Document to act on, from list_documents or open_document. Without it the frontmost document is used. A document opened with show_window false is never the active one and must always be addressed by i… |
| frame_id | integer | yes | Object id from get_page_state. |
| layer_id | integer | – | Layer id from list_layers. Pass either layer_name or layer_id. |
| layer_name | string | – | Layer name (Ebene), exact, as list_layers returns it. Pass either layer_name or layer_id. |
No output schema declared.
No examples provided.
What is the LayoutBridge for Adobe InDesign® MCP server?
LayoutBridge for Adobe InDesign® is an MCP server listed in the public MCP registry as com.mcp-interfaces/layoutbridge-spm. layoutbridge-spm – MCP server for Adobe® InDesign®: pages, frames, text, styles, tables, export. This page covers its npm package (layoutbridge-spm).
Is the LayoutBridge for Adobe InDesign® MCP server safe to use?
LayoutBridge for Adobe InDesign® scores 60 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 27 September 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 LayoutBridge for Adobe InDesign® MCP server expose?
LayoutBridge for Adobe InDesign® exposes 110 tools: get_app_version, list_documents, open_document, close_document, list_pages, and 105 more. Their descriptions and schemas cost roughly 37,080 tokens of context every time the server is loaded.
Is the LayoutBridge for Adobe InDesign® MCP server still maintained?
LayoutBridge for Adobe InDesign® is still listed as active in the MCP registry. We last reached this channel on 27 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.