MCP servers › io.github.zachshallbetter › indesign-mcp-server
MCP server · registry snapshot 2026-10-23 · last tested 2026-10-23
io.github.zachshallbetter/indesign-mcp-server
Drive Adobe InDesign from any MCP client: 135+ tools for layout, styles, books and PDF export. — the publisher's description
Summary
io.github.zachshallbetter/indesign-mcp-server is a local MCP server listed in the official MCP registry at version 2.3.0, marked deprecated there. On 2026-10-23 ProtocolProbe started its published package in an isolated sandbox in read-only mode and read its inventory: 137 tools, 0 resources and 0 prompts.
Record checks
- not met: Registry entry is active and says how to run it
- met: Source repository link opens
- met: Repository is not archived
- met: Code pushed to the repository in the 90 days before our check
- met: Repository publishes a security policy (SECURITY.md)
- met: Package names its licence with a standard (SPDX) identifier
- not met: The version the registry lists can be installed and is not withdrawn
- not met: npm package carries build provenance (attestation)
- met: No known critical or high advisory in the package or its dependencies
- Not ranked by downloads: deprecated in the registry
- Not ranked by stars: deprecated in the registry
From public records, not a safety rating. Each check with its reason · Is it safe to install?
Key facts
- Runs
- local package
- Transport
- standard input/output
- Package
- npm · listed version current
- License
- MIT
- Dependencies
- no known high or critical advisories
- Repository
- public
- Tools
- 137
- Described as changing data
- 90 of 137 toolsAI-classified
- Mainly works on
- files and code on the machine it runs onAI-classified
- Topic
- media-and-designAI-classified
- Last tested
- 2026-10-23
Worth knowing before you connect it
- 90 tools are described as changing something (add_page, delete_page, duplicate_page, …): our AI model's reading of the descriptions, not something we tested. We did not call them.
- The registry marks this server deprecated.
- The listed version is deprecated on npm.
Each line comes from a section below, with its source and date.
How fresh this is
- Live-tested
- yes, a real session (not a text-only review)
- Last tested
- 2026-10-23
- Mode
- read-only (no tool calls)
- Latest version
- 2.3.0, published 2026-10-14 (registry, as of the 2026-10-23 snapshot)
- First listed version
- 2026-10-14 (earliest version still in the registry; older removed versions would be earlier)
- Version history
- 2 versions listed, all on 2026-10-14; 2 in the 90 days before the 2026-10-23 snapshot; 2 marked deprecated.(versions still listed in the registry only)
Most recent 2 versions
2.3.0· 2026-10-14 · deprecated2.1.0· 2026-10-14 · deprecated
- Registry data
- snapshot 2026-10-23
- Package and repository
- checked 2026-10-23
- Engine
- mcp-runtime-engine@0.1.0 · sdk@1.32.0
Changes since the last refresh
New in the registry: not in the list of 2026-10-04, listed on 2026-10-23 with version 2.3.0 (published 2026-10-14).
Source: the official MCP Registry list on 2026-10-04 and on 2026-10-23.
What it is
What does this server offer?
Observed inventoryWhat it mainly works on, as our AI model read its tool descriptions: files and code on the machine it runs on.
90 of 137 tools are described as changing something (creating, editing, deleting, sending or running). For 17 the reading was uncertain, so no mark is shown.
“Add a page to the active document at the end, the beginning, or before/after a given page; returns the new page count”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs
positionstring“Where to add the page: AT_END, AT_BEGINNING, or BEFORE/AFTER referencePage”referencePageinteger“0-based reference page index (required for BEFORE/AFTER)”
“Delete a page from the document (the only page cannot be deleted)”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
1 input, 1 required
pageIndexintegerrequired“0-based index of the page to delete”
“Duplicate a page and put the copy at the given position in the document”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 1 required
pageIndexintegerrequired“0-based index of the page to duplicate”positionstring“Where to put the copy”referencePageIndexinteger“0-based reference page index (required for BEFORE/AFTER)”
“Navigate to a page: make it the active page of the document's layout window”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
1 input, 1 required
pageIndexintegerrequired“0-based index of the page to navigate to”
“Get detailed information about a specific page”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
1 input, 1 required
pageIndexintegerrequired“0-based page index”
“Move a page to a different position in the document”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
4 inputs, 1 required
pageIndexintegerrequired“0-based index of the page to move”positionstring“Where to move the page: AT_END, AT_BEGINNING, or BEFORE/AFTER referencePage”referencePageIndexinteger“0-based reference page index (required for BEFORE/AFTER; must differ from pageIndex)”bindingstring“Location of the binding spine in the spread (BindingOptions)”
“Set properties for a page (only the properties given are changed)”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
7 inputs, 1 required
pageIndexintegerrequired“0-based page index”labelstring“Page label”pageColorstring“Page color shown in the Pages panel: UI color name (e.g.”optionalPageboolean“Optional page for HTML5 pagination”layoutRulestring“Liquid layout rule (LayoutRuleOptions)”snapshotBlendingModestring“Snapshot blending mode (SnapshotBlendingModes)”appliedTrapPresetstring“Name of an existing trap preset to apply”
“Adjust a page's size and margins with InDesign's Adjust Layout (content is repositioned/scaled to follow).”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
12 inputs, 1 required
pageIndexintegerrequired“0-based page index”unitsstring“Units for all values below”widthnumber“New page width”heightnumber“New page height”bleedInsidenumber“Inside (left) bleed, document-wide”bleedTopnumber“Top bleed, document-wide”bleedOutsidenumber“Outside (right) bleed, document-wide”bleedBottomnumber“Bottom bleed, document-wide”leftMarginnumber“Left margin”topMarginnumber“Top margin”rightMarginnumber“Right margin”bottomMarginnumber“Bottom margin”
“Resize a page (Page.resize).”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
6 inputs, 3 required
pageIndexintegerrequired“0-based page index”widthnumberrequired“Width value (mm, factor or ratio part depending on resizeMethod)”heightnumberrequired“Height value (mm, factor or ratio part depending on resizeMethod)”resizeMethodstring“How width and height are applied: replace the size (default), multiply it, add to it, or reshape to a ratio”anchorPointstring“Point of the page that stays fixed while it resizes”coordinateSpacestring“Coordinate space the size is measured in; PAGE_COORDINATES unless you need another”
“Place a file (image, PDF, text, InDesign snippet, ...) on a page.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
7 inputs, 2 required
pageIndexintegerrequired“0-based page index”filePathstringrequired“Path to file to place”xnumber“X position in mm”ynumber“Y position in mm”layerNamestring“Layer to place on (default: active layer)”showingOptionsboolean“Show import options dialog”autoflowingboolean“Autoflow placed text”
“Place an XML element (the first element whose tag matches xmlElementName) on a page.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
5 inputs, 2 required
pageIndexintegerrequired“0-based page index”xmlElementNamestringrequired“Tag name of the XML element to place”xnumber“X position in mm”ynumber“Y position in mm”autoflowingboolean“Autoflow placed text”
“Create a liquid-layout snapshot of the page layout for its current size and shape”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
1 input, 1 required
pageIndexintegerrequired“0-based page index”
Show 88 more tools
“Delete the page's layout snapshot for its current size and shape”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
1 input, 1 required
pageIndexintegerrequired“0-based page index”
“Delete all layout snapshots for a page”
Publisher declares: read-only no · destructive yes · idempotent yes · open-world no
1 input, 1 required
pageIndexintegerrequired“0-based page index”
“Reframe a page: set its bounding box from two opposing corners, in mm in the given coordinate space”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
6 inputs, 5 required
pageIndexintegerrequired“0-based page index”x1numberrequired“Top-left X coordinate in mm”y1numberrequired“Top-left Y coordinate in mm”x2numberrequired“Bottom-right X coordinate in mm”y2numberrequired“Bottom-right Y coordinate in mm”coordinateSpacestring“Coordinate space of the corner coordinates; PAGE_COORDINATES unless you need another”
“Create row/column guides on one page (like Layout > Create Guides, limited to this page)”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
9 inputs, 1 required
pageIndexintegerrequired“0-based page index”numberOfRowsinteger“Number of rows (2+ creates horizontal guides)”numberOfColumnsinteger“Number of columns (2+ creates vertical guides)”rowGutternumber“Row gutter in mm”columnGutternumber“Column gutter in mm”guideColorstring“Guide color: UI color name (e.g.”fitMarginsboolean“Divide the area inside the margins (true) or the whole page (false)”removeExistingboolean“Remove the page's existing guides first”layerNamestring“Layer to create the guides on (default: active layer)”
“Select a page in the active document (for example before running a command that acts on the selection)”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
2 inputs, 1 required
pageIndexintegerrequired“0-based page index”selectionModestring“REPLACE_WITH replaces the selection; ADD_TO / REMOVE_FROM change it; SET_KEY makes the page the key object”
“Summarize what is on a page: counts of text frames, rectangles, ovals, polygons, lines, groups, placed graphics, guides and master items”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
1 input, 1 required
pageIndexintegerrequired“0-based page index”
“Set a page background: adds a full-page rectangle filled with a swatch, sent to the back of its layer”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs
pageIndexinteger“0-based page index (default 0, the first page)”backgroundColorstring“Swatch name in the document (e.g.”opacitynumber“Background opacity percentage (0-100)”
“Create a text frame on the active page (or pageIndex).”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
12 inputs, 1 required
contentstringrequired“Text content for the frame”pageIndexinteger“Page index (0-based); defaults to the active page”xnumber“X position in mm from the page left edge; omit position or size to have the frame placed automatically”ynumber“Y position in mm from the page top edge”widthnumber“Width in mm”heightnumber“Height in mm”fontSizenumber“Font size in points (default: style/document default)”fontNamestring“Font as "Family\tStyle" (e.g.”textColorstring“Text color (default: style/document default): swatch name (e.g.”alignmentstring“Paragraph alignment (InDesign Justification; LEFT_JUSTIFIED = justified, last line left)”paragraphStylestring“Paragraph style name to apply”characterStylestring“Character style name to apply”
“Edit the content and/or formatting of an existing text frame”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
7 inputs, 1 required
frameIndexintegerrequired“Index in page.textFrames (top-level text frames only; not the list_page_items numbering)”pageIndexinteger“Page index (0-based); defaults to the active page”contentstring“New text content (replaces existing text)”fontSizenumber“Font size in points”fontNamestring“Font as "Family\tStyle" (e.g.”textColorstring“Text color: swatch name (e.g.”alignmentstring“Paragraph alignment for the whole frame (InDesign Justification; LEFT_JUSTIFIED = justified, last line left)”
“Find and replace literal text throughout the document (InDesign text search; metacharacters such as ^p and ^t are honored)”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
4 inputs, 2 required
findTextstringrequired“Text to find”replaceTextstringrequired“Text to replace with”caseSensitiveboolean“Case sensitive search”wholeWordboolean“Whole word search”
“Create a table in a new text frame on the active page (or pageIndex)”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
8 inputs, 2 required
rowsintegerrequired“Total number of rows, including header rows”columnsintegerrequired“Number of columns”pageIndexinteger“Page index (0-based); defaults to the active page”xnumber“X position in mm from the page left edge; omitted values are placed automatically”ynumber“Y position in mm from the page top edge”widthnumber“Frame and table width in mm”heightnumber“Text frame height in mm”headerRowsinteger“Number of header rows (must be less than rows; default 1 when rows > 1)”
“Fill table cells from a 2-D array.”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
5 inputs, 1 required
tableIndexinteger“Index among the tables in page.textFrames, counted frame by frame”pageIndexinteger“Page index (0-based); defaults to the active page”dataarrayrequired“Rows of cell values; null becomes an empty cell”startRowinteger“Starting row index (header rows count)”startColumninteger“Starting column index”
“Place an image file in a new frame on the active page (or pageIndex).”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
10 inputs, 1 required
filePathstringrequired“Path to the image file”pageIndexinteger“Page index (0-based); defaults to the active page”xnumber“X position in mm”ynumber“Y position in mm”widthnumber“Frame width in mm”heightnumber“Frame height in mm”linkImageboolean“Keep the image linked (false embeds it)”scalenumber“Image scale percentage (1-1000); used when fitMode is NONE or the frame is sized to the image”fitModestring“InDesign fit option applied to the frame (PROPORTIONALLY and FILL_PROPORTIONALLY also center the content); NONE keeps the placed size”objectStylestring“Object style to apply to the frame”
“Get help information about available tools and their usage”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
3 inputs
toolstring“Specific tool name to get help for (optional)”categorystring“Category of tools to list (optional)”formatstring“Output format”
“Create a rectangle on the active page (or pageIndex)”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
9 inputs
pageIndexinteger“Page index (0-based); defaults to the active page”xnumber“X position in mm from the page top-left; omitted values are placed on the page automatically”ynumber“Y position in mm”widthnumber“Width in mm”heightnumber“Height in mm”fillColorstring“Fill color: swatch name (e.g.”strokeColorstring“Stroke color: swatch name (e.g.”strokeWeightnumber“Stroke weight in points (default 1 when strokeColor is given)”cornerRadiusnumber“Rounded corner radius in mm (0 = square corners)”
“Create an ellipse on the active page (or pageIndex)”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
8 inputs
pageIndexinteger“Page index (0-based); defaults to the active page”xnumber“X position in mm from the page top-left; omitted values are placed on the page automatically”ynumber“Y position in mm”widthnumber“Width in mm”heightnumber“Height in mm”fillColorstring“Fill color: swatch name (e.g.”strokeColorstring“Stroke color: swatch name (e.g.”strokeWeightnumber“Stroke weight in points (default 1 when strokeColor is given)”
“Create a regular polygon on the active page (or pageIndex)”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
9 inputs
pageIndexinteger“Page index (0-based); defaults to the active page”xnumber“X position in mm from the page top-left; omitted values are placed on the page automatically”ynumber“Y position in mm”widthnumber“Width in mm”heightnumber“Height in mm”sidesinteger“Number of sides”fillColorstring“Fill color: swatch name (e.g.”strokeColorstring“Stroke color: swatch name (e.g.”strokeWeightnumber“Stroke weight in points (default 1 when strokeColor is given)”
“Create an object style; only the attributes you pass are included in the style”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
6 inputs, 1 required
namestringrequired“Object style name”fillColorstring“Fill color: swatch name (e.g.”strokeColorstring“Stroke color: swatch name (e.g.”strokeWeightnumber“Stroke weight in points (default 1 when strokeColor is given)”cornerRadiusnumber“Rounded corner radius in mm (0 = not included)”opacitynumber“Opacity percentage (100 = fully opaque)”
“List all object styles in the document”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
Takes no inputs.
“Apply an object style to a page item”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
5 inputs, 1 required
styleNamestringrequired“Object style name”itemTypestring“Collection itemIndex counts in: page.rectangles, page.ovals, page.polygons, page.textFrames, or pageItem = page.allPageItems (the list_page_items numbering)”itemIndexinteger“Index within the itemType collection on the page”pageIndexinteger“Page index (0-based); defaults to the active page”clearOverridesboolean“Clear local formatting overrides”
“Get link, resolution, scale and position of a placed graphic on a page”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
2 inputs
itemIndexinteger“Index in page.allGraphics (placed graphics, not their frames; not the list_page_items numbering)”pageIndexinteger“Page index (0-based); defaults to the active page”
“Create a paragraph style; only the attributes you pass are set”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
8 inputs, 1 required
namestringrequired“Style name”fontNamestring“Font as "Family\tStyle" (e.g.”fontSizenumber“Font size in points”textColorstring“Text color: swatch name (e.g.”alignmentstring“Paragraph alignment (InDesign Justification; LEFT_JUSTIFIED = justified, last line left)”leadingnumber“Leading in points”spaceBeforenumber“Space before paragraph in points”spaceAfternumber“Space after paragraph in points”
“Create a character style; only the attributes you pass are set”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
7 inputs, 1 required
namestringrequired“Style name”fontNamestring“Font as "Family\tStyle" (e.g.”fontSizenumber“Font size in points”textColorstring“Text color: swatch name (e.g.”boldboolean“Set font style "Bold" ("Bold Italic" with italic)”italicboolean“Set font style "Italic"”underlineboolean“Underline text”
“Apply a paragraph style to all text in a text frame”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
styleNamestringrequired“Paragraph style name”frameIndexintegerrequired“Index in page.textFrames (top-level text frames only; not the list_page_items numbering)”pageIndexinteger“Page index (0-based); defaults to the active page”
“Apply a character style to all text in a text frame, or to a character range”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
5 inputs, 1 required
styleNamestringrequired“Character style name”frameIndexinteger“Index in page.textFrames (top-level text frames only; not the list_page_items numbering)”pageIndexinteger“Page index (0-based); defaults to the active page”startIndexinteger“First character index (with endIndex)”endIndexinteger“Last character index (inclusive); -1 applies to the whole frame”
“List all paragraph and/or character styles (including styles in style groups)”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
1 input
styleTypestring“Which styles to list”
“Create a color swatch from RGB values, stored as RGB or converted to CMYK”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
6 inputs, 4 required
namestringrequired“Swatch name”colorTypestring“PROCESS for CMYK/RGB process color, SPOT for a spot (ink) color”colorSpacestring“Color space of the swatch (CMYK uses a simple, non-color-managed conversion)”rednumberrequired“Red value (0-255)”greennumberrequired“Green value (0-255)”bluenumberrequired“Blue value (0-255)”
“List all swatches with color model, space and values”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
Takes no inputs.
“Apply a swatch as fill or stroke to a page item, or to the text of a text frame”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
5 inputs, 2 required
itemIndexintegerrequired“Index within the targetType collection on the page (see targetType)”colorNamestringrequired“Color: swatch name (e.g.”colorTypestring“Apply the swatch to the fill or the stroke”targetTypestring“Collection itemIndex counts in: pageItem = page.allPageItems (the list_page_items numbering); text and textFrame = page.textFrames (text = the text inside the …”pageIndexinteger“Page index (0-based); defaults to the active page”
“Get information about the active document (name, path, page/spread/layer counts, page size, bleed and margins in millimetres)”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
Takes no inputs.
“Create a new document and make it active.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
13 inputs
widthnumber“Page width in mm”heightnumber“Page height in mm”pagesinteger“Number of pages”facingPagesboolean“Enable facing pages”pageOrientationstring“Page orientation; width and height are swapped if needed to match”bleedTopnumber“Top bleed in mm”bleedBottomnumber“Bottom bleed in mm”bleedInsidenumber“Inside (left) bleed in mm”bleedOutsidenumber“Outside (right) bleed in mm”marginTopnumber“Top margin in mm”marginBottomnumber“Bottom margin in mm”marginLeftnumber“Left (inside, for facing pages) margin in mm”marginRightnumber“Right (outside, for facing pages) margin in mm”
“Open an existing InDesign document (.indd, .indt, .idml) and make it active”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
1 input, 1 required
filePathstringrequired“Absolute path to the document file”
“Save the active document.”
Publisher declares: read-only no · destructive yes · idempotent yes · open-world no
1 input
filePathstring“Absolute path to save to (e.g.”
“Close the active document WITHOUT saving (unsaved changes are discarded)”
Publisher declares: read-only no · destructive yes · idempotent yes · open-world no
Takes no inputs.
“Run a preflight check on the active document with a preflight profile and list the problems found (optionally saving a report)”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
4 inputs
profilestring“Preflight profile name, e.g.”reportPathstring“Optional absolute path to save the preflight report (.pdf or .txt)”maxResultsinteger“Maximum number of problems to list”timeoutSecondsinteger“Maximum seconds to wait for preflight to finish”
“Show a page in the document window: fit the page in the window, or zoom to a given percentage”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
2 inputs, 1 required
pageIndexintegerrequired“Zero-based page index to show”zoomLevelnumber“Zoom percentage (5-4000).”
“Data merge: select a CSV or tab-delimited text data source for the active document and (optionally) merge records.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
8 inputs, 1 required
dataSourcestringrequired“Absolute path to the data source file (.csv or tab-delimited .txt)”mergeRecordsboolean“Merge records after selecting the data source.”recordSelectionstring“Which records to merge”recordNumberinteger“Record to merge when recordSelection is ONE_RECORD”recordRangestring“Record range when recordSelection is RANGE, e.g.”recordsPerPagestring“One record per page, or multiple records per page”createNewDocumentboolean“Create a new document for the merged records”removeBlankLinesboolean“Remove blank lines caused by empty fields”
“Count the elements in the document (text frames, stories, shapes, graphics, tables, groups, layers), including items nested in groups”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
1 input
elementTypestring“Which kind of elements to count”
“List the styles of one type in the document (including styles inside style groups)”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
1 input
styleTypestring“Type of styles to list”
“List the colors (with color model) and optionally the swatches, gradients and tints in the document”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
3 inputs
includeSwatchesboolean“Include swatches”includeGradientsboolean“Include gradients”includeTintsboolean“Include tints”
“Read document preferences.”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
1 input
preferenceTypestring“Which preference group to read”
“Set document preferences.”
Publisher declares: read-only no · destructive yes · idempotent yes · open-world no
5 inputs
generalobject“Document setup (DocumentPreference)”marginsobject“Margins and columns (MarginPreference)”guidesobject“Ruler guides (GuidePreference)”textobject“Text (TextPreference)”gridobject“Grids (GridPreference)”
“List the stories in the document with length, frame count, overset status and a short preview”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
2 inputs
oversetOnlyboolean“Only list stories whose text is overset (overflows its frames)”maxStoriesinteger“Maximum number of stories to list”
“Find (and optionally replace) text across the entire document.”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
5 inputs, 1 required
searchTextstringrequired“Text to search for (a GREP pattern when useRegex is true)”replaceTextstring“Replacement text.”caseSensitiveboolean“Case sensitive search”wholeWordboolean“Match whole words only”useRegexboolean“Treat searchText as a GREP pattern (and replaceText may use $1 etc.)”
“List the layers in the document (top to bottom) with visibility, lock state, printability and item count”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
2 inputs
includeHiddenboolean“Include hidden layers”includeLockedboolean“Include locked layers”
“Organize document layers: merge layers with duplicate names, delete empty layers, and/or sort layers alphabetically (A at top).”
Publisher declares: read-only no · destructive yes · idempotent yes · open-world no
3 inputs
mergeSimilarLayersboolean“Merge layers whose names are equal ignoring case, surrounding spaces and a trailing " copy" / " copy N" (default false)”deleteEmptyLayersboolean“Delete layers that contain no page items and no guides (default false)”sortLayersboolean“Sort layers alphabetically by name (default false)”
“List the hyperlinks in the document with their sources and destinations”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
2 inputs
includeDestinationsboolean“Include link destinations (URL, page or text anchor)”includeSourcesboolean“Include link sources (the linked text or object)”
“Create a hyperlink on the first occurrence of sourceText in the document.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
5 inputs, 1 required
sourceTextstringrequired“Existing text in the document to turn into a link (first occurrence, case-sensitive)”linkTypestring“Type of destination”destinationstring“For URL: the URL.”pageIndexinteger“Zero-based destination page index (required for PAGE links)”namestring“Optional hyperlink name (must be unique in the document)”
“List the sections in the document with start page, numbering style, start number, prefix and marker”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
Takes no inputs.
“Start a new section at a page (or update the section that already starts there) with its own page numbering”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
6 inputs, 1 required
startPageintegerrequired“Zero-based index of the page that starts the section”sectionPrefixstring“Section prefix”includeSectionPrefixboolean“Include the prefix when displaying page numbers”markerstring“Section marker text”startNumberinteger“Starting page number.”numberingStylestring“Page number style (PageNumberStyle)”
“Show the document XML structure: the tag list and/or the element tree (tag, attribute and child counts, text preview)”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
3 inputs
includeTagsboolean“Include the list of XML tags”includeElementsboolean“Include the XML element tree”maxDepthinteger“Maximum element tree depth to show”
“Export the document XML structure (the Structure pane content) to an XML file”
Publisher declares: read-only no · destructive yes · idempotent yes · open-world no
2 inputs, 1 required
filePathstringrequired“Absolute path of the XML file to write”includeImagesboolean“Copy original images into an Images folder next to the XML file”
“Save the active document as an Adobe Creative Cloud document (Document.saveAsCloud / saveACopyCloud).”
Publisher declares: read-only no · destructive no · idempotent no · open-world yes
2 inputs, 1 required
cloudNamestringrequired“Name for the cloud document”modestring“SAVE_A_COPY keeps the open document as is; SAVE_AS makes the open document the cloud document”
“Open an Adobe Creative Cloud document by its asset reference (app.openCloudDocument).”
Publisher declares: read-only no · destructive no · idempotent no · open-world yes
1 input, 1 required
cloudDocumentIdstringrequired“Asset reference of the cloud document (as reported by InDesign, e.g.”
“Get the document grid and baseline grid settings (measurements in millimetres).”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
Takes no inputs.
“Set document grid and baseline grid settings (GridPreference).”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
14 inputs
documentGridShownboolean“documentGridShown”documentGridSnaptoboolean“documentGridSnapto”gridColorstring“gridColor (UIColors)”horizontalGridlineDivisionnumber“horizontalGridlineDivision.”horizontalGridSubdivisioninteger“horizontalGridSubdivision”verticalGridlineDivisionnumber“verticalGridlineDivision.”verticalGridSubdivisioninteger“verticalGridSubdivision”gridsInBackboolean“gridsInBack”baselineGridShownboolean“baselineGridShown”baselineColorstring“baselineColor (UIColors)”baselineStartnumber“baselineStart.”baselineDivisionnumber“baselineDivision.”baselineViewThresholdnumber“baselineViewThreshold”baselineGridRelativeOptionstring“baselineGridRelativeOption (BaselineGridRelativeOption)”
“Get Adjust Layout preferences (document) and Align & Distribute and Smart Guides preferences (application-wide).”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
Takes no inputs.
“Set Adjust Layout preferences (stored in the document) and Align & Distribute / Smart Guides preferences (application-wide in InDesign).”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs
adjustLayoutobject“Adjust Layout (document, AdjustLayoutPreference)”alignDistributeobject“Align & Distribute (application-wide, AlignDistributePreference)”smartGuidesobject“Smart Guides (application-wide, SmartGuidePreference)”
“Check the document for problems: missing/modified links, missing fonts, missing or low-resolution images, overset text and unused styles”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
6 inputs
checkLinksboolean“Report links that are missing, out of date or inaccessible”checkFontsboolean“Report fonts that are not installed (missing, substituted, faux)”checkImagesboolean“Report placed graphics with missing/modified links and images below minImagePpi”minImagePpinumber“Minimum effective resolution for images”checkOversetboolean“Report stories with overset text”checkStylesboolean“Report paragraph and character styles not applied to any text”
“Clean up the document by removing unused paragraph/character styles, unused swatches, empty layers and/or hidden page items.”
Publisher declares: read-only no · destructive yes · idempotent yes · open-world no
5 inputs
removeUnusedStylesboolean“Remove paragraph and character styles not applied to any text (built-in [bracketed] styles are kept) (default false)”removeUnusedColorsboolean“Remove unused swatches (built-in [bracketed] swatches are kept) (default false)”removeUnusedLayersboolean“Remove layers with no page items and no guides (the last layer is kept) (default false)”removeHiddenElementsboolean“Remove page items that are hidden (visible = false) (default false)”dryRunboolean“Only report what would be removed”
“Export the active document to PDF using a built-in or named PDF export preset”
Publisher declares: read-only no · destructive yes · idempotent yes · open-world no
6 inputs, 1 required
filePathstringrequired“Output PDF file path”qualitystring“Preset shortcut: PRESS = [Press Quality], PRINT = [High Quality Print], SCREEN = [Smallest File Size]”presetstring“Exact PDF export preset name (e.g.”includeMarksboolean“Force crop, bleed and registration marks, color bars and page info on (otherwise the preset decides)”includeBleedboolean“Force the document bleed settings on (otherwise the preset decides)”pagesstring“Pages to export: "all", or absolute 1-based page numbers/ranges such as "1-3,5"”
“Export pages as JPEG or PNG images, one file per page (page_<n>.jpg/png) in an output folder”
Publisher declares: read-only no · destructive yes · idempotent yes · open-world no
5 inputs, 1 required
outputPathstringrequired“Output folder path (created if missing)”formatstring“Image format; InDesign exports JPEG and PNG”resolutionnumber“Resolution in PPI (1-2400)”pagesstring“Pages to export: "all", or absolute 1-based page numbers/ranges such as "1-3,5"”qualitynumber“Quality 1-100, mapped to LOW (<=25), MEDIUM (<=50), HIGH (<=80) or MAXIMUM”
“Export the active document to EPUB (reflowable or fixed layout)”
Publisher declares: read-only no · destructive yes · idempotent yes · open-world no
5 inputs, 1 required
filePathstringrequired“Output EPUB file path”layoutstring“REFLOWABLE text that adapts to the reader, or FIXED_LAYOUT that keeps each page as designed”includeStylesboolean“Reflowable only: generate CSS and include style class names in the HTML”embedFontsboolean“Reflowable only: embed fonts”titlestring“EPUB title metadata (defaults to the document setting)”
“Package the active (saved) document for printing into an output folder”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
7 inputs, 1 required
outputPathstringrequired“Output folder path (created if missing)”includeFontsboolean“Copy fonts”includeLinksboolean“Copy linked graphics”includeProfilesboolean“Copy color profiles”includeHiddenLayersboolean“Include fonts and links from hidden layers”createReportboolean“Write the instructions/report file”forceSaveboolean“Save the document before packaging if it has unsaved changes”
“Create a new InDesign book file and leave it open (fails if a file already exists at the path)”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
1 input, 1 required
filePathstringrequired“Path for the new book file (".indb" is appended if missing)”
“Open an existing InDesign book (it stays open)”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
1 input, 1 required
filePathstringrequired“Path to the book file”
“List the books currently open in InDesign with their file paths and document counts”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
Takes no inputs.
“Add an InDesign document to the end of a book and save the book”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs, 2 required
bookPathstringrequired“Path to the book file”documentPathstringrequired“Path to the document to add”
“Synchronize styles, swatches and other enabled options from the book's style source document to all documents, then save the book”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
1 input, 1 required
bookPathstringrequired“Path to the book file”
“Repaginate all documents in a book and save it”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
1 input, 1 required
bookPathstringrequired“Path to the book file”
“Update all cross references in a book”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
1 input, 1 required
bookPathstringrequired“Path to the book file”
“Update all numbers (page numbers, chapter numbers, paragraph numbers) in a book”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
1 input, 1 required
bookPathstringrequired“Path to the book file”
- update_chapter_and_paragraph_numberson 1 other servercreates or changes datadescribed as changing data
“Update chapter and paragraph numbers in a book”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
1 input, 1 required
bookPathstringrequired“Path to the book file”
“Export an entire book to a single file”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
4 inputs, 2 required
bookPathstringrequired“Path to the book file”formatstring“Export format”outputPathstringrequired“Path for the exported file”pdfPresetstring“PDF export preset name for format PDF (e.g.”
“Package a book for print production into a folder (created if missing)”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
12 inputs, 2 required
bookPathstringrequired“Path to the book file”outputPathstringrequired“Path for the package folder”copyingFontsboolean“Copy fonts to package”copyingLinkedGraphicsboolean“Copy linked graphics”copyingProfilesboolean“Copy color profiles”updatingGraphicsboolean“Update graphics links”includingHiddenLayersboolean“Include hidden layers”ignorePreflightErrorsboolean“Ignore preflight errors”creatingReportboolean“Create package report”includeIdmlboolean“Include IDML file”includePdfboolean“Include PDF file”pdfStylestring“PDF export preset used when includePdf is true”
“Preflight a book and save the preflight report (PDF, or text if the path ends in .txt).”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
3 inputs, 1 required
bookPathstringrequired“Path to the book file”outputPathstring“Path for the preflight report (default: <book name>-preflight.pdf in the system temp folder)”autoOpenboolean“Automatically open the report”
“Print every document in a book with a printer preset, optionally showing the print dialog first”
Publisher declares: read-only no · destructive no · idempotent no · open-world yes
3 inputs, 1 required
bookPathstringrequired“Path to the book file”printDialogboolean“Show the print dialog and wait for the user (leave false for unattended use)”printerPresetstring“Printer preset name (e.g.”
“Get detailed information about a book”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
1 input, 1 required
bookPathstringrequired“Path to the book file”
“Set book options (only the ones given) and save the book”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
18 inputs, 1 required
bookPathstringrequired“Path to the book file”automaticPaginationboolean“Enable automatic pagination”automaticDocumentConversionboolean“Enable automatic document conversion”insertBlankPageboolean“Insert blank pages as necessary”mergeIdenticalLayersboolean“Merge identical layers when exporting to PDF”synchronizeBulletNumberingListboolean“Synchronize bullets and numbering”synchronizeCellStyleboolean“Synchronize cell styles”synchronizeCharacterStyleboolean“Synchronize character styles”synchronizeConditionalTextboolean“Synchronize conditional text”synchronizeCrossReferenceFormatboolean“Synchronize cross reference formats”synchronizeMasterPageboolean“Synchronize master pages”synchronizeObjectStyleboolean“Synchronize object styles”synchronizeParagraphStyleboolean“Synchronize paragraph styles”synchronizeSwatchboolean“Synchronize swatches”synchronizeTableOfContentStyleboolean“Synchronize table of content styles”synchronizeTableStyleboolean“Synchronize table styles”synchronizeTextVariableboolean“Synchronize text variables”synchronizeTrapStyleboolean“Synchronize trap styles”
“Health check: platform, resolved InDesign app name, optional live probe (version, open docs).”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
1 input
probeboolean“If true, run a lightweight InDesign script to report version and open documents (and, on the UXP backend, the UXP capability probe)”
“Execute custom InDesign ExtendScript code”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
1 input, 1 required
codestringrequired“ExtendScript code to execute”
“View document information and current state”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
Takes no inputs.
“Get current session information including page dimensions and active document”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
Takes no inputs.
“Clear all session data including page dimensions and document information”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
Takes no inputs.
“Get detailed information about a specific page item”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
2 inputs, 2 required
pageIndexintegerrequired“Index of the page containing the item (0-based)”itemIndexintegerrequired“Index of the page item to get info for, in page.allPageItems as numbered by list_page_items (nested items included)”
“Select a page item (by index from list_page_items) in the document window”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
pageIndexintegerrequired“Index of the page containing the item (0-based)”itemIndexintegerrequired“Index of the page item to select, in page.allPageItems as numbered by list_page_items (nested items included)”existingSelectionstring“How to handle existing selection”
“Move a page item so its top-left corner (geometric bounds) is at x, y mm on the page”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
4 inputs, 4 required
pageIndexintegerrequired“Index of the page containing the item (0-based)”itemIndexintegerrequired“Index of the page item to move, in page.allPageItems as numbered by list_page_items (nested items included)”xnumberrequired“New X of the item's top-left corner, in mm from the page left edge”ynumberrequired“New Y of the item's top-left corner, in mm from the page top edge”
“Resize a page item to width x height mm around an anchor point”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
5 inputs, 4 required
pageIndexintegerrequired“Index of the page containing the item (0-based)”itemIndexintegerrequired“Index of the page item to resize, in page.allPageItems as numbered by list_page_items (nested items included)”widthnumberrequired“New width in mm”heightnumberrequired“New height in mm”anchorPointstring“Anchor point for resizing”
Each quoted sentence is the first sentence of the publisher’s own description. The kind of tool and the “changes data” mark are our AI model’s reading of that description, not something we tested: two differently worded runs had to agree, otherwise no label is shown, and nobody has checked them by hand. A tool without the “changes data” mark is described as only reading, searching or calculating, or the two runs did not agree. No tool was called. Read the publisher’s full description before relying on it. “Publisher declares” lists the hints the server itself sends with the tool (MCP annotations: read-only, destructive, idempotent, open-world); they are the publisher's claims, not checked by us. Inputs are the parameters in the tool's own input schema: name, declared type, whether it is required, and the first sentence of its description. The first 100 of 137 tools are listed. Read 2026-10-23.
How well are its tools described?
Features #4 and #5
How clearly this server's own tool descriptions say what a tool does, and how consistent its tool list is. The first part is an AI model's yes/no reading of each description; the second part is counted. We do not turn it into a grade.
Descriptions
AI reading of each description
- Says what the tool does
- 100% of 120 tools
- Says what it returns
- 27% of 118 tools
- States limits, defaults or errors
- 4% of 116 tools
- Says when to use it
- 0% of 120 tools
- Items covered per tool
- 1.3 of 4 on average
Counted from the listing
- Parameters with a description
- 100% of 515
- Tools with a description
- 100% of 137
- Typical description length
- 98 characters
The tool set
Counted from the listing
- Tools
- 137
- Size of the list
- about 30,525 tokens for an agent to load (characters ÷ 4)
- Naming
- 135 of 137 names use snake_case
AI reading: easy to mix up
No pair found.
The AI items cover 120 of 137 tools: for a tool where two differently worded runs disagreed, that item is left out. They were not checked by hand, and no tool was called. “Easy to mix up” means two tools whose names or descriptions overlap without saying how they differ; the AI found none, comparing tools within groups of 40. We do not rate whether the tool set is complete or whether side effects are spelled out, because our AI reading of those was not reliable enough.
How do I add it to my client?
Config from the registry entry
From the npm package indesign-mcp-server
Our sandbox started this package on 2026-10-23 (a read-only session: no tool was called).
Add to CursorAn install link in the format Cursor documents, holding the Cursor config below. The command runs the publisher’s code on your machine.
Claude Desktop · claude_desktop_config.json (Settings → Developer → Edit Config)
{
"mcpServers": {
"indesign-mcp-server": {
"command": "npx",
"args": [
"-y",
"indesign-mcp-server@2.3.0"
]
}
}
}Cursor · .cursor/mcp.json in a project, or ~/.cursor/mcp.json
{
"mcpServers": {
"indesign-mcp-server": {
"command": "npx",
"args": [
"-y",
"indesign-mcp-server@2.3.0"
]
}
}
}VS Code · .vscode/mcp.json
{
"servers": {
"indesign-mcp-server": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"indesign-mcp-server@2.3.0"
]
}
}
}VS Code (command line) · Bash or zsh terminal (macOS, Linux)
code --add-mcp '{"name":"indesign-mcp-server","type":"stdio","command":"npx","args":["-y","indesign-mcp-server@2.3.0"]}'Claude Code
claude mcp add --transport stdio indesign-mcp-server -- npx -y indesign-mcp-server@2.3.0
Try it in the MCP Inspector · runs on your machine, opens in your browser · Node 22.19+
npx @modelcontextprotocol/inspector@2.11.0 -- npx -y indesign-mcp-server@2.3.0
- Optional settings the entry also lists (left out above): INDESIGN_APP_NAME, INDESIGN_ALLOWED_DIRS, INDESIGN_BACKEND.
- This runs the publisher's code on your machine (npx). Read its README first.
- The MCP Inspector lists the server's tools, resources and prompts; a tool you call there runs for real.
Built from the server's registry entry with each client's documented format (checked 2026-10-14; the Cursor link and the VS Code command 2026-10-19; the MCP Inspector command 2026-10-21). Values in < > are yours to fill in; this page never contains a key. Where the server needs a setting the entry does not declare, it can still fail to start.
Can it be installed, and is it up to date?
Version pin · advisories
Listed version
- Registry lists
- 2.3.0
- Latest stable
- 2.3.0
- Status
- current
- Withdrawn
- deprecated upstream
“Renamed to adobe-mcp-indesign. Replace the package name in your MCP client configuration: npx -y adobe-mcp-indesign” — the publisher's message
Source: registry.npmjs.org · 2026-10-23. About the version the registry lists; a manual install may resolve to a different one.
Dependency advisories
Counted in the full dependency tree as resolved on 2026-10-23 (npm audit). Bars share one scale. The package itself has no known vulnerability (OSV.dev).
Integrity, provenance, license
- Integrity
- sha512-+vJUfcUDryYvRSiM/…
- Signature
- signed
- License
- MIT
Source: the package registry · 2026-10-23.
Usage
- Downloads
- 69 in the last month
Source: api.npmjs.org · 2026-10-23.
Does the registry listing match what we found?
Feature #6The registry verifies a package once, when it is published, and does not re-check it. A difference below is about the listing, not a judgement of the publisher.
| Registry says | We found | Result | Source · date |
|---|---|---|---|
| Published package can be started | Started and answered | matches | our test · 2026-10-23 |
| Version 2.3.0 on npm | Exists and can be installed | matches | npm · 2026-10-23 |
| Repository github.com/zachshallbetter/indesign-mcp-server | Opens publicly | matches | api.github.com · 2026-10-23 |
Who made it?
Feature #7 · lineage
Facts about the publisher. We do not turn them into a trust score.
- Namespace
- io.github.zachshallbetter · 7 servers
- GitHub owner
- a personal account (zachshallbetter)
- Build record
- signed
- Repository
- github.com/zachshallbetter/indesign-mcp-server
- Stars
- 26
- Repository age
- over a year
- Last push
- 0–30 days ago
- Archived
- no
- Security policy
- SECURITY.md
Source: the registry entry and api.github.com · 2026-10-23; security policy read from GitHub · 2026-10-23.
Publish this server? Run these checks against it yourself before release, from your own machine: a server the command starts, or your own server at its URL after a one-time proof that you control it: npx protocolprobe-selftest.
Choosing
Record checks
Public records · not a safety rating6 of 9 record checks met
- Not ranked by downloads: deprecated in the registry
- Not ranked by stars: deprecated in the registry
- Not metRegistry entry is active and says how to run itThe registry marks this entry as deprecated.
- MetSource repository link opensThe linked GitHub repository is public.
- MetRepository is not archivedNot archived.
- MetCode pushed to the repository in the 90 days before our checkLast push 0-30 days before our check.
- MetRepository publishes a security policy (SECURITY.md)SECURITY.md found.
- MetPackage names its licence with a standard (SPDX) identifierMIT
- Not metThe version the registry lists can be installed and is not withdrawnThe listed version is deprecated (npm) or yanked (PyPI).
- Not metnpm package carries build provenance (attestation)Signed by npm, but no build attestation.
- MetNo known critical or high advisory in the package or its dependenciesNone known in the package or its dependency tree.
Read from public records only: the registry entry, npm/PyPI, GitHub and advisory databases, checked 2026-10-23. No tool was called. Only “met” and “not met” are counted, so the total differs between servers; a check that does not apply or that we could not run is listed, never counted against it. It is not a safety rating. How each check works · Leaderboards
Common questions about io.github.zachshallbetter/indesign-mcp-server
Answered from the data aboveIs io.github.zachshallbetter/indesign-mcp-server safe to install?
We do not rate servers as safe or unsafe. 6 of its 9 applicable record checks are met (facts from public records, each listed on this page). What the records show: Its source repository opens publicly. Its repository had a push in the last 90 days. Its registry entry is marked deprecated. The listed version is the latest stable release. The package itself has no known vulnerability (OSV.dev). Its full dependency tree has no known advisory. 90 of its tools describe changing data (our AI model's reading of the descriptions). These are facts with their sources on this page, not a safety guarantee, and we did not run its tools.
Has io.github.zachshallbetter/indesign-mcp-server been security tested?
Partly. 2 of the 12 checks that apply to it were exercised. We started the package in an isolated sandbox and read what it declares, but this test round was read-only, so its tools were not called. No security verdict is published before verification.
What can io.github.zachshallbetter/indesign-mcp-server do?
It lists 137 tools. In our AI model's reading of their descriptions (two runs had to agree, nobody checked it by hand), they include tools that read or search, create or change data, delete, run code or commands and control a browser or desktop. We did not call any tool, so this describes the text, not the behaviour.
Can io.github.zachshallbetter/indesign-mcp-server change or delete data?
90 of its tools say in their description that they create, edit, delete, send or run something (our AI model's reading). We did not call any tool, so we cannot say what actually happens.
Does io.github.zachshallbetter/indesign-mcp-server publish a security policy?
Yes: its repository has a public security policy (github.com/zachshallbetter/indesign-mcp-server/blob/HEAD/SECURITY.md). That is the publisher's statement, not permission for us to test the server, and we call none of its tools.
Is the listed version current?
Yes. The registry lists 2.3.0, the latest stable release on npm.
Where is the source code of io.github.zachshallbetter/indesign-mcp-server?
In github.com/zachshallbetter/indesign-mcp-server, which opens publicly.
Found this page useful?
Anonymous · no sign-inA quick, anonymous reaction — no account, no email. One per kind from your browser. The tally updates when the page is next refreshed, and it is only a rough count, never a safety rating or a measured number of people.
Similar servers
Same topic · AI-read
- io.github.leancoderkavy/premiere-proMCP for Adobe Premiere Proalso has tools that controls a browser or desktop, creates or changes data, deletes, runs code or commands, reads or searchescompare with this one
- io.github.KyaniteLabs/mcp-videomcp-videoalso has tools that controls a browser or desktop, creates or changes data, deletes, runs code or commands, reads or searchescompare with this one
- io.github.aadeshrao123/unreal-mcpUnrealMCP — AI Bridge for Unreal Engine 5also has tools that controls a browser or desktop, creates or changes data, deletes, runs code or commands, reads or searchescompare with this one
- io.github.wstierhout/ableton-live-mcpAbleton Live MCP Serveralso has tools that controls a browser or desktop, creates or changes data, deletes, runs code or commands, reads or searchescompare with this one
- io.github.zachshallbetter/adobe-mcp-aftereffectsAfter Effects MCP Serveralso has tools that controls a browser or desktop, creates or changes data, deletes, runs code or commands, reads or searchescompare with this one
- io.github.zachshallbetter/adobe-mcp-illustratorIllustrator MCP Serveralso has tools that controls a browser or desktop, creates or changes data, deletes, runs code or commands, reads or searchescompare with this one
Active servers whose topic is also “media-and-design” and that have at least one tool of the same kind; most kinds in common first, then most GitHub stars. The topic and the tool kinds are an AI model's reading of the publishers' descriptions, not checked by hand. Similar is not a recommendation.
Compare with another server
Side by side: registry entry, our read-only session, the tools and the 18 classification fields. Same values as each page; no score.
Security testing
What did we test, and what did we leave out?
18 checks · features #1, #2
Not probed (read-only run)
We started the package in an isolated sandbox and read what it declares, but this test round was read-only, so its tools were not called. No security score is given; a check we did not run is never counted as passed.
- Inventory: exercised
- Hidden instructions: exercised
- Real execution: not run · our policy
- Secret leak: not run · nothing to check it against
- Internal addresses: not run · our policy
- Unconfirmed changes: not run · our policy
- Bad input: not run · our policy
- Model requests: not run · nothing to check it against
- Sensitive questions: not run · nothing to check it against
- Folder boundary: not run · our policy
- Log leaks: not run · nothing to check it against
- Hidden content: not run · nothing to check it against
- Fake assistant turns: not applicable
- Token passthrough: not applicable
- Token audience: not applicable
- Sign-in redirect: not applicable
- Consent handling: not applicable
- Sign-in metadata: not applicable
2 exercised10 not run (reason given)6 not applicable
Each check ends in exactly one state: exercised, not run (with the reason), or not applicable (with the reason). 2 of the 12 checks that apply to it were exercised. We do not publish security-check outcomes for named servers.
- 1Inventory
tool-listReads the declared tools, resources and prompts.exercised - 2Hidden instructions
description-poisoningLooks for hidden instructions in tool descriptions.exercised
- 3Real execution
real-executionCalls a tool and checks what really happens.This check calls the package's tools. This test round was read-only, so no tool was called; tools can act on outside services with the publisher's or a user's account.not run · our policy - 4Secret leak
canary-leakPlants a fake secret and checks whether it leaks.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against - 5Internal addresses
ssrfChecks whether a tool can be steered to internal addresses.This check calls the package's tools. This test round was read-only, so no tool was called; tools can act on outside services with the publisher's or a user's account.not run · our policy - 6Unconfirmed changes
write-without-confirmationChecks whether tools that change data act without asking.This check calls the package's tools. This test round was read-only, so no tool was called; tools can act on outside services with the publisher's or a user's account.not run · our policy - 7Bad input
error-handlingSends bad input and watches how the server answers.This check calls the package's tools. This test round was read-only, so no tool was called; tools can act on outside services with the publisher's or a user's account.not run · our policy - 8Model requests
samplingChecks whether the server asks the client's model to act for it.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against - 9Sensitive questions
elicitation-sensitive-dataChecks whether the server asks users for sensitive data.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against - 10Folder boundary
root-boundaryChecks whether the server reaches outside the folders it was given.This check calls the package's tools. This test round was read-only, so no tool was called; tools can act on outside services with the publisher's or a user's account.not run · our policy - 11Log leaks
logging-side-channelChecks whether log messages carry data they should not.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against - 12Hidden content
audience-hidingChecks resources that hide content from the user.This check needs content the server returns, and nothing was read or called.not run · nothing to check it against
- 13Fake assistant turns
fake-assistant-turnChecks prompts that pose as the assistant's own words.The server exposes no prompts.not applicable - 14Token passthrough
token-passthroughChecks whether the server forwards a user's token to other services.The server runs locally over standard input/output, so there is no sign-in flow to check.not applicable - 15Token audience
token-audience-validationChecks whether tokens meant for another service are accepted.The server runs locally over standard input/output, so there is no sign-in flow to check.not applicable - 16Sign-in redirect
open-redirectChecks the sign-in redirect for abuse.The server runs locally over standard input/output, so there is no sign-in flow to check.not applicable - 17Consent handling
confused-deputyChecks consent handling when one service acts for another.The server runs locally over standard input/output, so there is no sign-in flow to check.not applicable - 18Sign-in metadata
oauth-url-schemeChecks the published sign-in metadata for unsafe URLs.The server runs locally over standard input/output, so there is no sign-in flow to check.not applicable
Source: our own test in an isolated sandbox, 2026-10-23, mcp-runtime-engine@0.1.0. Which checks count and why follows our published scoring model.
What happened during the test?
Feature #8
The steps in order, as the test record holds them.
- 0 msStarted the published package in an isolated sandbox (read-only mode)
- 3,743 msConnected after 0 redirects.
- Read the inventory: 137 tools, 0 resources, 0 prompts.
- 4,652 msFinished: 2 checks exercised.
Reference
How is it classified?
18 fields
One value per field, each with its source. Fields written by AI models are marked. A field with no value says why.
“Not stated” means the source did not state it; “does not apply” means it does not apply to this kind of server; “our limit” means our own lookup failed. A linked value opens the directory filtered to the same value.
Cite or correct this page
Sources and corrections
Suggested citation
ProtocolProbe. “io.github.zachshallbetter/indesign-mcp-server: MCP server record.” Data checked 2026-10-23. https://protocolprobe.com/mcp/servers/io.github.zachshallbetter/indesign-mcp-server
Figures are valid for the date shown. Our facts on this page are CC BY 4.0: reuse them with a link and the check date. Quoted text (the publisher’s descriptions, website quotes, tool names) is not ours to license.
As JSON: this record in the API · API documentation.
Badge for your README
[](https://protocolprobe.com/mcp/servers/io.github.zachshallbetter/indesign-mcp-server)
It shows this server's record-check count: facts from public records, no tool called. It is not a security rating or a pass. It links here and updates after each data reload.
Something wrong, or is this yours?
If a fact here is wrong, tell us and we will re-check it. If you operate this server, you can run our checks on it yourself with the free self-test command; we call no server’s tools ourselves for anything shown here.
Write to hello@protocolprobe.com · corrections log · methodology