MCP servers › io.github.zachshallbetter › adobe-mcp-photoshop
MCP server · registry snapshot 2026-10-23 · last tested 2026-10-23
io.github.zachshallbetter/adobe-mcp-photoshop
Drive Adobe Photoshop from any MCP client: layers, selections, adjustments, type and export. — the publisher's description
Summary
io.github.zachshallbetter/adobe-mcp-photoshop is a local MCP server listed in the official MCP registry at version 0.1.0. On 2026-10-23 ProtocolProbe started its published package in an isolated sandbox in read-only mode and read its inventory: 207 tools, 0 resources and 0 prompts.
Record checks
- 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
- 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: no download figure available
- #1,622 of 22,952 repositories by GitHub stars, tied with 34 others (repository shared with 5 other registry entries)
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
- 207
- Described as changing data
- 148 of 207 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
- 148 tools are described as changing something (create_document, open_document, save_document, …): our AI model's reading of the descriptions, not something we tested. We did not call them.
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
- 0.1.0, published 2026-10-20 (registry, as of the 2026-10-23 snapshot)
- First listed version
- 2026-10-20 (earliest version still in the registry; older removed versions would be earlier)
- 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 0.1.0 (published 2026-10-20).
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.
148 of 207 tools are described as changing something (creating, editing, deleting, sending or running). For 47 the reading was uncertain, so no mark is shown.
“List open documents with their size in pixels, resolution, colour mode, bit depth, file and whether they have unsaved changes”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
Takes no inputs.
“Describe the active document: size in pixels, resolution, mode, bit depth, colour profile, layer count, active layer, channels, guides, selection bounds and history”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
Takes no inputs.
“Create a document (File > New, Preset Details) with a size in pixels, resolution, colour mode, bit depth, background fill, pixel aspect ratio and optional colour profile, optionally as an artboard do…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
10 inputs, 2 required
widthnumberrequired“Pixels”heightnumberrequired“Pixels”resolutionnumber“Pixels per inch.”namestring“Document name”modestring“Default rgb”fillstring“Background contents.”bitsPerChannelinteger“Default 8”colorProfilestring“Profile name, e.g.”pixelAspectRationumber“Pixel width over height for video work, e.g.”artboardboolean“Create the document with an artboard (the New Document Artboards option).”
“Open a file (File > Open, Open As): PSD, PSB, TIFF, JPEG, PNG, GIF, BMP, PDF, EPS, DCS, camera raw and DNG, HEIF, WebP, AVIF, JPEG XL, JPEG 2000, OpenEXR, Radiance, Cineon, DICOM, IFF, PCX, PICT, Pix…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
4 inputs, 1 required
filePathstringrequired“Absolute path”asSmartObjectboolean“Open as a smart object.”openAsstring“Read the file as this format, with options.”optionsobject“pdf: select (page|image): open a page or an embedded image.”
“Save the active document in place, or at filePath in the format its extension names, with that format's options (File > Save As): PSD, PSB (Large Document Format), TIFF, PNG, JPEG, Photoshop PDF, GIF…”
Publisher declares: read-only no · destructive yes · idempotent yes · open-world no
17 inputs
filePathstring“Absolute path ending in .psd, .psb, .tif, .tiff, .png, .jpg, .jpeg, .pdf, .gif, .eps, .bmp, .tga, .pxr, .raw.”asCopyboolean“Save a copy.”layersboolean“PSD, TIFF, PDF: keep layers”embedColorProfileboolean“Embed the colour profile (PSD, TIFF, JPEG, PDF, EPS, DCS).”alphaChannelsboolean“PSD, TIFF: keep alpha channels”spotColorsboolean“PSD: keep spot channels”transparencyboolean“TIFF: keep transparency”compression“TIFF: none, lzw (default), zip or jpeg.”interlacedboolean“PNG: interlaced”qualityinteger“JPEG quality, 0-12.”formatstring“JPEG: baseline, optimized (default) or progressive”presetstring“PDF: Adobe PDF preset name, e.g.”standardstring“PDF: PDF/X standard”preserveEditingboolean“PDF: keep Photoshop editing capabilities”notesboolean“PSD, TIFF, PDF: save the document's notes with it (the Notes save option)”epsTypestring“.eps files: Photoshop EPS (default), Photoshop DCS 1.0 or DCS 2.0 (CMYK documents; DCS 2.0 keeps spot channels)”optionsobject“More options for the format.”
“Duplicate the active document (Image > Duplicate), optionally merged into one layer”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs
namestringmergeLayersboolean“Duplicate merged layers only.”
“Bring an open document to the front by name or index”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
2 inputs
namestringindexinteger
“Close the active document.”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
1 input
saveboolean“Save before closing.”
“Set the foreground and background colours used by fills, strokes, brushes and new documents”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
2 inputs
foregroundstring“"#RRGGBB", "rgb(r,g,b)" (0-255), "cmyk(c,m,y,k)" (0-100), "gray(g)" (0-100, 100 = black), "hsb(h,s,b)" (0-360, 0-100, 0-100) or "lab(L,a,b)"”backgroundstring“"#RRGGBB", "rgb(r,g,b)" (0-255), "cmyk(c,m,y,k)" (0-100), "gray(g)" (0-100, 100 = black), "hsb(h,s,b)" (0-360, 0-100, 0-100) or "lab(L,a,b)"”
“Resize the image (Image > Image Size): width and/or height in pixels (the other follows the aspect ratio when omitted), resolution, and the resampling method, with noise reduction for Preserve Detail…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
7 inputs
widthnumber“Pixels”heightnumber“Pixels”scalenumber“Percent of the current size, instead of width and height”resolutionnumber“Pixels per inch”resamplestring“Default automatic”reduceNoisenumber“Reduce Noise for resample "preserve_details", 0-100”scaleStylesboolean“Scale layer styles with the image (Scale Styles).”
“Change the canvas size (Image > Canvas Size) in pixels, keeping the image anchored at a side or corner.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
5 inputs
widthnumber“Pixels (added to the current width when relative)”heightnumber“Pixels (added to the current height when relative)”relativeboolean“Width and height are added to the current size.”anchorstring“Default center”extensionColorstring“Canvas Extension Color for new areas of a background layer.”
“Crop the image to a rectangle (Image > Crop, or the Crop tool), optionally rotating the crop and resampling the result to a size.”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
4 inputs, 1 required
boundsobjectrequired“A rectangle in pixels from the document's top-left corner”anglenumber“Rotate the crop, in degrees”widthnumber“Resample the result to this width in pixels”heightnumber“Resample the result to this height in pixels”
Show 88 more tools
- trim_imagedescribed as changing data
“Trim away transparent pixels, or pixels the colour of the top-left or bottom-right corner, from any of the four sides (Image > Trim)”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
5 inputs
basedOnstring“Default transparent”topbooleanleftbooleanbottombooleanrightboolean
- rotate_canvascreates or changes datadescribed as changing data
“Rotate the whole image by an angle in degrees (Image > Image Rotation); positive is clockwise.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs
anglenumberflipstring
- change_modecreates or changes datadescribed as changing data
“Convert the image to another colour mode (Image > Mode): RGB, CMYK, Grayscale, Lab, Bitmap, Indexed Color or Multichannel, and/or another bit depth.”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
4 inputs
modestringbitsPerChannelintegerindexedobject“Indexed Color options (mode "indexed")”bitmapobject“Bitmap options (mode "bitmap"; the image must be Grayscale)”
“Convert the image to another colour profile (Edit > Convert to Profile) with a rendering intent, black point compensation and dither”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
4 inputs, 1 required
profilestringrequired“Destination profile name, e.g.”intentstring“Default relative_colorimetric”blackPointCompensationbooleanditherboolean
“Flatten every layer into a background layer (Layer > Flatten Image), or merge only the visible layers (Merge Visible)”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
1 input
visibleOnlyboolean“Merge visible layers only.”
- reveal_allcreates or changes datadescribed as changing data
“Enlarge the canvas to show every pixel that extends beyond it (Image > Reveal All)”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
Takes no inputs.
- set_color_tablecreates or changes datadescribed as changing data
“Replace the colour table of an Indexed Color image (Image > Mode > Color Table) with a list of colours, in table order”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
1 input, 1 required
colorsarrayrequired“Up to 256 colours; each is stored as RGB”
- set_pixel_aspect_ratiocreates or changes datadescribed as changing data
“Set the document's pixel aspect ratio (View > Pixel Aspect Ratio), for video work with non-square pixels, and/or toggle View > Pixel Aspect Ratio Correction, which previews the image with those pixels”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs
rationumber“Pixel width divided by height: 1 is square, e.g.”toggleCorrectionboolean“Toggle Pixel Aspect Ratio Correction (on if it was off, off if it was on)”
“Read the histogram (Histogram panel) of the composite image or of one channel: the pixel count at each of the 256 levels, with the total, mean and median”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
1 input
channelstring“Channel name, e.g.”
“List the layers and groups, top to bottom, with id, name, kind (pixel, text, smart object, adjustment, shape...), visibility, opacity, blend mode, lock, bounds in pixels and parent group.”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
2 inputs
groupinteger“Only inside this group (id)”depthinteger“How many group levels to descend.”
“Add a new empty pixel layer or a group above the active layer, or inside a group”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
7 inputs
typestring“Default layer”groupinteger“Create inside this group (id)”namestringopacitynumberfillOpacitynumber“Fill opacity: affects pixels but not layer styles”blendModestringvisibleboolean
“Rename layers and set their opacity, fill opacity, blend mode, visibility and locks”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
10 inputs, 1 required
targetobjectrequired“Which layers to act on.”namestringopacitynumberfillOpacitynumber“Fill opacity: affects pixels but not layer styles”blendModestringvisiblebooleanlockedboolean“Lock all”lockPixelsboolean“Lock image pixels (pixel layers)”lockPositionboolean“Lock position (pixel layers)”lockTransparencyboolean“Lock transparent pixels (pixel layers)”
“Make a layer the active one; many commands work on the active layer”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
1 input, 1 required
targetobjectrequired“Which layers to act on.”
“Change the stacking order: bring to front, bring forward, send backward, send to back, or place above, below or inside another layer or group”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 2 required
targetobjectrequired“Which layers to act on.”orderstringrequiredrelativeTointeger“Layer or group id, for above, below and inside”
“Put layers into a new group (Layer > Group Layers), placed where the first of them was; they keep the order given”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs, 1 required
targetobjectrequired“Which layers to act on.”namestring
“Move a group's layers out to where the group was and remove the empty group (Layer > Ungroup Layers)”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
1 input, 1 required
targetobjectrequired“Which layers to act on.”
“Duplicate layers or groups (Layer > Duplicate Layer), placed above each original, optionally renamed”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs, 1 required
targetobjectrequired“Which layers to act on.”namestring“Name for the copy (one layer only)”
“Delete layers or groups (with everything inside them)”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
1 input, 1 required
targetobjectrequired“Which layers to act on.”
“Merge a layer into the one below (Merge Down), or merge a group into one layer (Merge Group)”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
1 input, 1 required
targetobjectrequired“Which layers to act on.”
- transform_layerscreates or changes datadescribed as changing data
“Move layers by dx, dy pixels, scale them by a percentage, rotate them by degrees, or flip them, around an anchor point; optionally transform a copy of each, keeping the original.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
9 inputs, 1 required
targetobjectrequired“Which layers to act on.”dxnumberdynumberscaleXnumber“Percent; negative flips”scaleYnumber“Percent; negative flips”anglenumber“Degrees, clockwise”flipstringanchorstring“Default center”duplicateboolean“Transform a copy of each layer, placed above it.”
- rasterize_layerscreates or changes datadescribed as changing data
“Rasterize type, shape, smart object or fill layers into pixels (Layer > Rasterize), or only one part of them”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
2 inputs, 1 required
targetobjectrequired“Which layers to act on.”whatstring“Default entire_layer”
- link_layerscreates or changes datadescribed as changing data
“Link layers together so they move and transform as one, or unlink them”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
2 inputs, 1 required
targetobjectrequired“Which layers to act on.”unlinkboolean
- convert_background_layercreates or changes datadescribed as changing data
“Turn the background layer into a normal layer that can move and hold transparency, or make a layer the background”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs
targetobject“Which layers to act on.”toBackgroundboolean“Make the target the background layer.”
- layer_compscreates or changes datadescribed as changing data
“Work with layer comps (Layer Comps panel): list, create, apply, update (recapture) or delete one; apply the previous or next comp; change a comp's options (Layer Comp Options); duplicate a comp; go b…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
7 inputs, 1 required
actionstringrequirednamestring“The comp to act on (create: the new comp's name)”newNamestring“options: rename the comp to this; duplicate: name for the copy”commentstring“create, options: the comp's comment”visibilityboolean“create, options: record layer visibility”positionboolean“create, options: record layer position”appearanceboolean“create, options: record layer appearance (layer styles)”
- new_layer_viacreates or changes datadescribed as changing data
“Make a new layer from existing pixels (Layer > New): Layer via Copy copies the selected pixels (or the whole layer when nothing is selected) to a new layer; Layer via Cut moves the selected pixels to…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 1 required
methodstringrequiredtargetobject“The one layer to copy or cut from, or to stamp above.”namestring“Name for the new layer”
- set_layer_selectioncreates or changes datadescribed as changing data
“Select several layers at once in the Layers panel, for commands that act on the selected layers: set or add to the selection, select All Layers, Deselect Layers, Select Linked Layers, Similar Layers …”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 1 required
actionstringrequired“set: select exactly the target layers; add: add them; all, none; linked and similar: start from the target layer; find: select layers whose name contains query”targetobject“set and add: the layers; linked and similar: the layer to start from (default the active layer)”querystring“find: text the layer name contains, ignoring case”
- process_all_layersdeletesdescribed as changing data
“Run a command on every layer of the document: Delete Hidden Layers (Layers panel menu) or Rasterize All Layers (Layer > Rasterize > All Layers)”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
1 input, 1 required
actionstringrequired
- lock_layerscreates or changes datadescribed as changing data
“Apply locks to layers, optionally to every layer inside the target groups (Layer > Lock Layers, Lock All Layers in Group).”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 2 required
targetobjectrequired“Which layers to act on.”locksarrayrequired“all, pixels (image pixels), position, transparency (transparent pixels), artboard (prevent auto-nesting).”includeGroupContentsboolean“Also lock every layer inside target groups”
- set_layer_link_enabledcreates or changes datadescribed as changing data
“Suspend a linked layer's link (the red X Shift-clicking the link icon shows) or restore it, without unlinking”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
2 inputs, 2 required
targetobjectrequired“Which layers to act on.”enabledbooleanrequired“false suspends the link, true restores it”
- set_layers_panel_viewdescribed as changing data
“Change what the Layers panel shows, without changing the document: Isolate Layers (show only the target layers), Remove from Isolation, or Collapse All Groups”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
2 inputs, 1 required
actionstringrequiredtargetobject“isolate: the layers to show.”
- reverse_layer_ordercreates or changes datadescribed as changing data
“Reverse the stacking order of two or more layers (Layer > Arrange > Reverse)”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
1 input, 1 required
targetobjectrequired“Which layers to act on.”
- apply_mattingdescribed as changing data
“Clean the edge pixels of a pixel layer (Layer > Matting): Defringe (replace fringe colours over a width in pixels), Remove Black Matte, Remove White Matte, or Color Decontaminate”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 1 required
methodstringrequiredtargetobject“Pixel layers.”widthnumber“defringe: width in pixels.”
- copy_layer_codedescribed as changing data
“Copy CSS for shape and type layers (size, position, colours, gradients, shadows, type settings), or SVG markup for a shape layer, to the clipboard (Layers panel context menu: Copy CSS, Copy SVG)”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
2 inputs, 1 required
targetobject“Default the active layer”formatstringrequired
- edit_layer_maskcreates or changes datadescribed as changing data
“Work with layer masks (Layer > Layer Mask and the Layers panel): add a mask (Reveal All, Hide All, Reveal Selection or Hide Selection), apply it to the pixels, delete it, disable or enable it, link o…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
6 inputs, 1 required
actionstringrequiredtargetobject“Which layers to act on.”revealstring“add: what the new mask shows.”showAloneboolean“target_mask: show the mask by itself in the document window”invertboolean“load_selection: select the hidden area instead”tointeger“copy_to, move_to: id of the layer that receives the mask; it must not have one”
- set_mask_propertiescreates or changes datadescribed as changing data
“Set the Density (opacity) and Feather of a layer's layer mask, vector mask or smart-filter mask (Properties panel, masks)”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
4 inputs
targetobject“Which layers to act on.”maskstring“Which mask.”densitynumber“Percent”feathernumber“Pixels”
- edit_vector_maskcreates or changes datadescribed as changing data
“Work with vector masks (Layer > Vector Mask): make one from a path (Current Path), disable or enable it, or delete it.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 1 required
actionstringrequiredtargetobject“Which layers to act on.”pathstring“create_from_path: the path's name in the Paths panel.”
- set_clipping_maskcreates or changes datadescribed as changing data
“Clip layers to the layer below them (Layer > Create Clipping Mask), so they show only where it has pixels, or release them (Layer > Release Clipping Mask)”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
2 inputs, 2 required
targetobjectrequired“Which layers to act on.”actionstringrequired
- set_quick_maskcreates or changes datadescribed as changing data
“Turn Quick Mask Mode on (the selection becomes a red overlay that painting edits) or off (the overlay becomes the selection again)”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
1 input, 1 required
enabledbooleanrequired“true enters Quick Mask Mode, false leaves it”
- refine_maskdescribed as changing data
“Refine a layer mask's edges as Select and Mask does, writing the result back to the layer mask.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
7 inputs
targetobject“One layer.”radiusnumber“Edge detection radius in pixels.”smartRadiusboolean“Smart Radius”smoothinteger“Default 0”feathernumber“Pixels.”contrastnumber“Percent.”shiftEdgenumber“Percent; negative moves the edge in.”
- mask_by_color_rangecreates or changes datadescribed as changing data
“Make a layer's mask from a colour range (Properties panel, masks: Color Range): a sampled colour with a fuzziness, or a preset range such as reds, highlights or skin tones.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
5 inputs
targetobject“One layer.”colorsstring“Default sampled”colorstring“sampled: the colour to keep.”fuzzinessinteger“sampled: how far from the colour still counts.”invertboolean“Mask out the range instead of keeping it”
- convert_to_smart_objectcreates or changes datadescribed as changing data
“Bundle layers into one embedded smart object (Layer > Smart Objects > Convert to Smart Object), or convert a layer so filters applied to it stay editable as Smart Filters (Filter > Convert for Smart …”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs
targetobject“Which layers to act on.”namestring“Name for the smart object layer”
- get_smart_object_inforeads or searches
“Describe smart object layers: whether they are linked or embedded, their source file, the layer comps of the placed document and which one shows, and their Smart Filters in order with whether each is…”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
1 input
targetobject“Which layers to act on.”
- edit_smart_objectcreates or changes datadescribed as changing data
“Smart object commands (Layer > Smart Objects): New Smart Object via Copy, Edit Contents (opens the source as the active document; save and close it to update the layer), Replace Contents, Export Cont…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
5 inputs, 1 required
actionstringrequiredtargetobject“One smart object layer.”filestring“Absolute path.”pageinteger“replace_contents: page of a multi-page file (PDF, Illustrator)”compstring“set_layer_comp: name of a layer comp in the placed document (get_smart_object_info lists them)”
- set_stack_modecreates or changes datadescribed as changing data
“Render a multi-layer smart object with a statistical stack mode (Layer > Smart Objects > Stack Mode), for example median to remove moving objects or mean to reduce noise.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs, 1 required
targetobject“A smart object, or the layers to stack.”modestringrequired
- set_smart_filter_visibilitycreates or changes datadescribed as changing data
“Turn one Smart Filter on a smart object, or all of them, off or on (the eye icons under the layer in the Layers panel)”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
3 inputs, 1 required
targetobject“Which layers to act on.”visiblebooleanrequired“true shows, false hides”indexinteger“Which filter, 1 = the first listed by get_smart_object_info.”
- set_layer_effectscreates or changes datadescribed as changing data
“Add, change, hide or remove layer style effects (Layer > Layer Style), as the Layer Style dialog does.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 1 required
targetobject“Which layers to act on.”effectsobjectrequired“For example { dropShadow: { distance: 8, size: 12 }, stroke: { size: 2, color: "#FFFFFF" }, outerGlow: false }”replaceboolean“Start from an empty style, dropping effects not given”
- get_layer_effectsreads or searches
“Describe layers' styles: whether effects are shown, and each effect and instance with whether it is on and, with detail, all its settings”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
2 inputs
targetobject“Which layers to act on.”detailboolean“Include every setting of each effect”
- copy_layer_stylecreates or changes datadescribed as changing data
“Copy one layer's style to other layers (Layer > Layer Style > Copy Layer Style, then Paste Layer Style, which replaces their styles), or copy only some effects, added to their own styles as Option/Al…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 2 required
sourceobjectrequired“The one layer to copy from”targetobjectrequired“The layers to paste onto”effectsarray“Copy only these effects (every instance), replacing the same effects on the targets.”
- manage_layer_styledeletesdescribed as changing data
“Layer style commands (Layer > Layer Style): Clear Layer Style, Rasterize Layer Style (bake the effects into pixels), Scale Effects by a percentage, or hide or show all of a layer's effects”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
3 inputs, 1 required
targetobject“Which layers to act on.”actionstringrequiredscalenumber“scale: percent”
- set_blending_optionscreates or changes datadescribed as changing data
“Set a layer's Blending Options (Layer Style dialog): blend mode, opacity and fill opacity; Advanced Blending knockout, the channels it blends into and the group options (Blend Interior Effects as Gro…”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
12 inputs, 1 required
targetobjectrequired“Which layers to act on.”blendModestring“Blend mode”opacitynumber“Percent”fillOpacitynumber“Fill opacity, percent (pixel, type and shape layers)”knockoutstring“Knockout”channelsarray“Channels the layer blends into, e.g.”blendInteriorEffectsboolean“blend interior effects”blendClippedLayersboolean“blend clipped layers”transparencyShapesLayerboolean“transparency shapes layer”layerMaskHidesEffectsboolean“layer mask hides effects”vectorMaskHidesEffectsboolean“vector mask hides effects”blendIfarray“Blend If, one entry per channel: { channel: "gray" or a colour channel, thisLayer: [black, black split, white split, white], underlyingLayer: [...] }, levels 0…”
- manage_style_presetscreates or changes datadescribed as changing data
“Use the Styles panel: apply a loaded style preset to layers by name (replacing their styles), load a style library (.asl) into the panel, or save the panel's styles as a library (Styles panel menu: L…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
5 inputs, 1 required
actionstringrequiredtargetobject“apply: the layers.”stylestring“apply: the style's name in the Styles panel”filestring“load, save: absolute path of the .asl file”appendboolean“load: add to the current styles (false replaces them)”
- select_areacreates or changes datadescribed as changing data
“Select a rectangle, an ellipse, a polygon or freehand outline (the Polygonal Lasso and Lasso tools), or a one-pixel row or column (Single Row and Single Column Marquee tools), in pixels from the docu…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
8 inputs
shapestring“Default rectangle”boundsobject“Rectangle or ellipse bounds”pointsarray“Polygon or lasso outline, [[x, y], ...]”ynumber“row: the row's top edge, pixels from the top”xnumber“column: the column's left edge, pixels from the left”combinestring“How it combines with the current selection.”feathernumber“Pixels.”antiAliasboolean
“Select the whole canvas (Select > All), deselect (Select > Deselect), or invert the selection (Select > Inverse)”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
1 input, 1 required
actionstringrequired
“Modify the selection (Select > Modify): expand, contract, feather, smooth or border by pixels; grow or select similar colours by tolerance”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs, 2 required
operationstringrequiredamountnumberrequired“Pixels (radius or width); tolerance 0-255 for grow and similar”
- transform_selectioncreates or changes datadescribed as changing data
“Move, scale or rotate the selection outline (Select > Transform Selection), or the selected pixels themselves”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
6 inputs
pixelsboolean“Transform the selected pixels, not just the outline.”dxnumberdynumberscaleXnumber“Percent”scaleYnumber“Percent”anglenumber
“Fill the selection on the active layer with a colour (Edit > Fill), with a blend mode, opacity and optionally preserving transparency”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
4 inputs
colorstring“"#RRGGBB", "rgb(r,g,b)" (0-255), "cmyk(c,m,y,k)" (0-100), "gray(g)" (0-100, 100 = black), "hsb(h,s,b)" (0-360, 0-100, 0-100) or "lab(L,a,b)".”blendModestring“Default normal”opacitynumberpreserveTransparencyboolean
“Stroke the selection's edge on the active layer (Edit > Stroke): colour, width in pixels, inside, centre or outside, blend mode and opacity”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
6 inputs, 1 required
colorstring“"#RRGGBB", "rgb(r,g,b)" (0-255), "cmyk(c,m,y,k)" (0-100), "gray(g)" (0-100, 100 = black), "hsb(h,s,b)" (0-360, 0-100, 0-100) or "lab(L,a,b)".”widthnumberrequiredlocationstring“Default center”blendModestring“Default normal”opacitynumberpreserveTransparencyboolean
“Store the selection in an alpha channel (Select > Save Selection), or load a channel as the selection (Select > Load Selection), combined with the current one”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
4 inputs, 2 required
actionstringrequiredchannelstringrequired“Alpha channel name.”combinestring“How it combines with the current selection.”invertboolean“Load: invert the channel.”
“Copy, copy merged, cut or clear the selection on the active layer, or paste as a new layer: paste, paste_into the selection, paste_in_place (Edit > Paste Special > Paste in Place: at the copied pixel…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
1 input, 1 required
actionstringrequired“What to do”
- activate_toolcontrols a browser or desktopdescribed as changing data
“Choose a tool in the Tools panel, such as a marquee, lasso, Quick Selection, Magic Wand, Crop, Perspective Crop, Eyedropper, Color Sampler, Ruler or Count tool, so it is ready for the user.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
1 input, 1 required
toolstringrequired
- select_color_rangecreates or changes datadescribed as changing data
“Select by colour (Select > Color Range): pixels near a sampled colour within a fuzziness, or a preset range (reds ...”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
5 inputs
colorstring“The colour to select (Sampled Colors).”presetstring“A preset range instead of a colour”fuzzinessinteger“Sampled colours and highlights/midtones/shadows: how far from the colour or tone still counts.”rangearray“highlights, midtones or shadows: the [lower, upper] tonal limits, 0-255”invertboolean“Select everything else.”
- select_contentdescribed as changing data
“Select automatically: the main subject (Select > Subject), the sky (Select > Sky), or the in-focus areas with Focus Area's automatic settings (Select > Focus Area).”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs, 1 required
whatstringrequiredsampleAllLayersboolean“subject and sky: look at every layer, not only the active one.”
- refine_selectiondescribed as changing data
“Refine the selection's edge as Select and Mask does, without opening the workspace: edge detection radius (optionally smart), smooth, feather, contrast, shift edge and colour decontamination, output …”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
10 inputs
radiusinteger“Edge detection radius, pixels.”smartRadiusboolean“Smart Radius.”smoothinteger“Default 0”feathernumber“Pixels.”contrastnumber“Percent.”shiftEdgenumber“Percent; negative moves the edge inward.”decontaminateboolean“Decontaminate Colors (needs an output to a new layer or document).”decontaminateAmountnumber“Percent.”sampleAllLayersboolean“Default false”outputstring“Default selection”
- select_layer_pixelscreates or changes datadescribed as changing data
“Load layers' transparency as the selection, as Cmd/Ctrl-clicking a layer thumbnail does: replace, add to, subtract from or intersect with the current selection.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs, 1 required
targetobjectrequired“Which layers to act on.”combinestring“How it combines with the current selection.”
“List the Channels panel: each channel's name, kind (component, alpha masked or selected areas, spot colour), visibility, opacity or spot solidity, colour, and whether it is targeted”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
Takes no inputs.
“Add an alpha channel (Channels panel > New Channel) whose colour shows masked or selected areas, or a spot colour channel (New Spot Channel) with its ink colour and solidity; optionally filled from t…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
5 inputs
namestring“Channel name; spot channels are usually named after the ink”kindstring“Default masked_areas (an alpha channel)”colorstring“Overlay colour of an alpha channel, or ink colour of a spot channel.”opacitynumber“Overlay opacity of an alpha channel, or Solidity of a spot channel, percent”fromSelectionboolean“Fill the channel from the current selection.”
“Change a channel's options (Channels panel > Channel Options): name, kind (converting an alpha channel to a spot channel or back), colour, opacity or solidity, and show or hide it (the eye icon).”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
6 inputs, 1 required
channelstringrequired“The channel's current name (list_channels)”namestringkindstringcolorstring“"#RRGGBB", "rgb(r,g,b)" (0-255), "cmyk(c,m,y,k)" (0-100), "gray(g)" (0-100, 100 = black), "hsb(h,s,b)" (0-360, 0-100, 0-100) or "lab(L,a,b)"”opacitynumber“Percent”visibleboolean
- manage_channelsdeletesdescribed as changing data
“Target channels for editing (clicking them in the Channels panel), duplicate a channel (into this or another open document), delete alpha or spot channels, or merge spot channels into the colour chan…”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
4 inputs, 2 required
actionstringrequiredchannelsarrayrequired“Channel names (list_channels)”namestring“duplicate: name for the copy (one channel)”toDocumentstring“duplicate: an open document of the same pixel size to copy into.”
- split_channelsdeletesdescribed as changing data
“Split the image into one grayscale document per channel (Channels panel > Split Channels).”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
Takes no inputs.
- merge_channelscreates or changes datadescribed as changing data
“Combine open grayscale documents of the same pixel size into one image (Channels panel > Merge Channels): three into RGB or Lab, four into CMYK, or two or more into Multichannel, in channel order (e.…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs, 1 required
documentsarrayrequired“Open grayscale document names, in channel order”modestring“Default rgb”
- apply_imagecreates or changes datadescribed as changing data
“Blend a source layer and channel, from this or another open document of the same pixel size, into the active layer (Image > Apply Image), with a blending mode, opacity, invert and preserve transparen…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
7 inputs
targetobject“The layer to change.”sourceobject“A source channel”blendModestring“Default normal”opacitynumber“Percent.”preserveTransparencyboolean“Default false”scalenumber“add and subtract: divide the result by this.”offsetinteger“add and subtract: add this brightness.”
- calculate_channelscreates or changes datadescribed as changing data
“Blend two source channels into a new alpha channel (Image > Calculations): each source is a layer (or merged) and channel, from this or another open document of the same pixel size, optionally invert…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
5 inputs, 2 required
source1objectrequired“A source channel”source2objectrequired“A source channel”blendModestring“Default multiply”opacitynumber“Percent.”namestring“Name for the new channel”
- align_layersdescribed as changing data
“Align layers by their top, vertical centre, bottom, left, horizontal centre or right edges (Layer > Align), or distribute them evenly by those edges (Layer > Distribute; three or more layers).”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
4 inputs, 2 required
targetobjectrequired“Which layers to act on.”edgestringrequireddistributeboolean“Distribute instead of align.”toSelectionboolean“Align to the current selection.”
- auto_align_layersdescribed as changing data
“Line up overlapping photos of the same scene (Edit > Auto-Align Layers) by their content, with the Auto or Perspective projection, optionally removing vignetting and correcting geometric distortion.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
4 inputs, 1 required
targetobjectrequired“Which layers to act on.”projectionstring“Default auto”removeVignetteboolean“Vignette Removal.”geometricDistortionboolean“Geometric Distortion correction.”
- auto_blend_layersdescribed as changing data
“Blend aligned layers into one seamless image (Edit > Auto-Blend Layers): a panorama, or a focus stack that keeps the sharpest areas of each layer, with Seamless Tones and Colors.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 1 required
targetobjectrequired“Which layers to act on.”methodstring“Default panorama”seamlessTonesboolean“Seamless Tones and Colors.”
“Transform layers or a path numerically, as Free Transform's options bar does: move, scale, rotate and skew (Edit > Transform > Skew) around a reference point; repeat the last transform (Edit > Transf…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
12 inputs
targetobject“Which layers to act on.”pathstring“A path name (Paths panel) to transform instead of layers”dxnumber“Move right, pixels”dynumber“Move down, pixels”scaleXnumber“Width, percent; negative flips”scaleYnumber“Height, percent; negative flips”anglenumber“Degrees, clockwise”skewXnumber“Horizontal skew, degrees”skewYnumber“Vertical skew, degrees”anchorstring“Reference point.”againboolean“Repeat the last transform instead of giving values (Transform Again)”duplicateboolean“Layers: transform a copy of each layer, placed above it.”
- warp_layersdescribed as changing data
“Warp layers with a preset style (Edit > Transform > Warp): arc, arch, bulge, flag, wave, fisheye, twist and the rest, with bend and horizontal and vertical distortion in percent, horizontal or vertic…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
6 inputs, 2 required
targetobjectrequired“Which layers to act on.”stylestringrequiredbendnumber“Percent.”horizontalDistortionnumber“Percent.”verticalDistortionnumber“Percent.”orientationstring“Default horizontal”
- warp_perspectivedescribed as changing data
“Correct or change a layer's perspective (Edit > Perspective Warp) with one quad: four corners in the image move to four new positions, e.g.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 3 required
targetobjectrequired“One layer”fromarrayrequired“The quad's corners in the image now, [[x, y] x 4]”toarrayrequired“Where those corners go, [[x, y] x 4]”
- scale_content_awaredescribed as changing data
“Resize a layer while keeping important content such as people and buildings unchanged (Edit > Content-Aware Scale): width and height in percent, the Amount of content-aware against normal scaling, Pr…”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
7 inputs, 1 required
targetobjectrequired“One layer”scaleXnumber“Width, percent.”scaleYnumber“Height, percent.”amountnumber“Percent of content-aware scaling.”protectSkinTonesboolean“Default false”protectChannelstring“Alpha channel whose white areas are protected (list_channels)”anchorstring“Reference point.”
- set_measurement_scalecreates or changes datadescribed as changing data
“Set the document's measurement scale (Image > Analysis > Set Measurement Scale): how many pixels make a length in logical units, e.g.”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
5 inputs
pixelLengthnumber“Pixels”logicalLengthnumber“The length those pixels stand for”logicalUnitsstring“Unit name, e.g.”namestring“Name for this scale preset”resetboolean“Reset to the default: 1 pixel = 1 pixel”
- record_measurementscreates or changes datadescribed as changing data
“Record measurements to the Measurement Log (Image > Analysis > Record Measurements) from the selection, the Ruler tool's line or the Count tool's items, with a chosen set of data points.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
2 inputs
sourcestring“What to measure.”dataPointsarray“Data points (Image > Analysis > Select Data Points), by their names in the Measurement Log, e.g.”
- manage_measurement_logdescribed as changing data
“Work with the Measurement Log panel (Window > Measurement Log): export all or the selected measurements to a tab-delimited text file, delete them, select or deselect all rows, toggle Auto Display Pan…”
Publisher declares: read-only no · destructive yes · idempotent no · open-world no
4 inputs, 1 required
actionstringrequiredrangestring“export and delete: all rows or the selected ones.”filePathstring“export: absolute path of a .txt or .csv file”dataPointsarray“Data points (Image > Analysis > Select Data Points), by their names in the Measurement Log, e.g.”
- manage_count_itemscreates or changes datadescribed as changing data
“List, add, remove or clear the Count tool's numbered markers (count items) in the document.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 1 required
actionstringrequiredpointsarray“add: positions, [[x, y], ...]”indexinteger“remove: the count item's index”
- adjust_layerscreates or changes datadescribed as changing data
“Apply an Image > Adjustments command to pixel layers (inside the selection, if there is one).”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 1 required
targetobject“Pixel layers.”adjustmentstringrequiredoptionsobject“Settings for the chosen type; omitted settings use the defaults Photoshop opens its dialog with”
“Apply a filter from the Filter menu to pixel layers (inside the selection, if there is one).”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
3 inputs, 1 required
targetobject“Pixel layers.”filterstringrequiredoptionsobject“Settings for the chosen type; omitted settings use the defaults Photoshop opens its dialog with”
- create_adjustment_layercreates or changes datadescribed as changing data
“Add an adjustment layer above the active layer (Layer > New Adjustment Layer, or the Adjustments panel), with its settings, optionally clipped to the layer below.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
7 inputs, 1 required
typestringrequired“Adjustment type”optionsobject“Settings for the chosen type; see the list in this tool's description.”aboveobject“Add it above this layer (the first match) instead of the active layer”namestring“Layer name.”opacitynumber“Layer opacity, percent”blendModestring“Blend mode”clipboolean“Use Previous Layer to Create Clipping Mask: affect only the layer below”
- edit_adjustment_layercreates or changes datadescribed as changing data
“Change the settings of existing adjustment layers (the Properties panel).”
Publisher declares: read-only no · destructive no · idempotent yes · open-world no
7 inputs, 2 required
targetobjectrequired“Adjustment layers of the given type”typestringrequired“Their adjustment type”optionsobject“Settings for the chosen type; see the list in this tool's description.”namestring“Layer name.”opacitynumber“Layer opacity, percent”blendModestring“Blend mode”clipboolean“Use Previous Layer to Create Clipping Mask: affect only the layer below”
- create_fill_layercreates or changes datadescribed as changing data
“Add a fill layer above the active layer (Layer > New Fill Layer): a solid colour, a gradient (defined as in the Gradient Editor) or a pattern, optionally clipped to the layer below.”
Publisher declares: read-only no · destructive no · idempotent no · open-world no
7 inputs, 1 required
typestringrequired“Fill type”optionsobject“Settings for the chosen fill.”aboveobject“Add it above this layer (the first match) instead of the active layer”namestring“Layer name.”opacitynumber“Layer opacity, percent”blendModestring“Blend mode”clipboolean“Use Previous Layer to Create Clipping Mask: affect only the layer below”
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 207 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 160 tools
- Says what it returns
- 8% of 157 tools
- States limits, defaults or errors
- 2% of 156 tools
- Says when to use it
- 0% of 160 tools
- Items covered per tool
- 1.1 of 4 on average
Counted from the listing
- Parameters with a description
- 91% of 1,046
- Tools with a description
- 100% of 207
- Typical description length
- 265 characters
The tool set
Counted from the listing
- Tools
- 207
- Size of the list
- about 73,761 tokens for an agent to load (characters ÷ 4)
- Naming
- 204 of 207 names use snake_case
AI reading: easy to mix up
No pair found.
The AI items cover 160 of 207 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 adobe-mcp-photoshop
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": {
"adobe-mcp-photoshop": {
"command": "npx",
"args": [
"-y",
"adobe-mcp-photoshop@0.1.0"
]
}
}
}Cursor · .cursor/mcp.json in a project, or ~/.cursor/mcp.json
{
"mcpServers": {
"adobe-mcp-photoshop": {
"command": "npx",
"args": [
"-y",
"adobe-mcp-photoshop@0.1.0"
]
}
}
}VS Code · .vscode/mcp.json
{
"servers": {
"adobe-mcp-photoshop": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"adobe-mcp-photoshop@0.1.0"
]
}
}
}VS Code (command line) · Bash or zsh terminal (macOS, Linux)
code --add-mcp '{"name":"adobe-mcp-photoshop","type":"stdio","command":"npx","args":["-y","adobe-mcp-photoshop@0.1.0"]}'Claude Code
claude mcp add --transport stdio adobe-mcp-photoshop -- npx -y adobe-mcp-photoshop@0.1.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 adobe-mcp-photoshop@0.1.0
- Optional settings the entry also lists (left out above): PHOTOSHOP_APP_NAME, PHOTOSHOP_ALLOWED_DIRS, PHOTOSHOP_SCRIPT_TIMEOUT_MS.
- 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
- 0.1.0
- Latest stable
- 0.1.0
- Status
- current
- Withdrawn
- no
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-j6JRlJUSvaw6lLB4Z…
- Signature
- signed
- License
- MIT
Source: the package registry · 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 0.1.0 on npm | Exists and can be installed | matches | npm · 2026-10-23 |
| Repository github.com/zachshallbetter/adobe-mcp | 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/adobe-mcp
- 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 rating8 of 9 record checks met
- Not ranked by downloads: no download figure available
- #1,622 of 22,952 repositories by GitHub stars, tied with 34 others (repository shared with 5 other registry entries)
- MetRegistry entry is active and says how to run itActive, with a package or a remote address.
- 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
- MetThe version the registry lists can be installed and is not withdrawnThe listed version exists and is current.
- 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/adobe-mcp-photoshop
Answered from the data aboveIs io.github.zachshallbetter/adobe-mcp-photoshop safe to install?
We do not rate servers as safe or unsafe. 8 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. 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. 148 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/adobe-mcp-photoshop 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/adobe-mcp-photoshop do?
It lists 207 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/adobe-mcp-photoshop change or delete data?
148 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/adobe-mcp-photoshop publish a security policy?
Yes: its repository has a public security policy (github.com/zachshallbetter/adobe-mcp/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 0.1.0, the latest stable release on npm.
Where is the source code of io.github.zachshallbetter/adobe-mcp-photoshop?
In github.com/zachshallbetter/adobe-mcp, 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,809 msConnected after 0 redirects.
- Read the inventory: 207 tools, 0 resources, 0 prompts.
- 4,750 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/adobe-mcp-photoshop: MCP server record.” Data checked 2026-10-23. https://protocolprobe.com/mcp/servers/io.github.zachshallbetter/adobe-mcp-photoshop
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/adobe-mcp-photoshop)
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