Show HN: I gave Claude control of Photoshop Developer kathan3009 released photoshop-mcp, a free, MIT-licensed Model Context Protocol server that lets MCP clients including Claude Code, Claude Desktop, Cursor and Codex drive a Mac's Photoshop via AppleScript, with no Photoshop plugin required. The server wraps each edit in a single undo step that rolls back automatically on failure, requires `overwrite: true` to replace existing files, and returns sRGB renders plus histogram numbers before and after each change; it is macOS-only, requires Node.js 18+ and a licensed Photoshop, and was tested only against Photoshop 27.11.0. The existing 1.2.0 DMGs are unnotarized and can trigger macOS's "damaged" warning, so the author directs users to the source installation until a notarized build is advertised. Let Claude or Cursor, Codex, any MCP client drive the Photoshop running on your Mac : open files, build layers, grade colour with adjustment layers, Select Subject, masks, text, smart objects, export. No Photoshop plugin to install. Claude Code / Claude Desktop / Cursor / Codex ──MCP──▶ photoshop-mcp ──AppleScript──▶ Photoshop shell / scripts ──────────────────────────────psctl──▶ same core Every edit is one undo step that rolls back automatically if it fails. The agent gets a safety checkpoint before its first edit, requires overwrite: true to replace an existing file, and sees the picture sRGB renders + histogram numbers before and after each change. macOS only. You need an installed/licensed copy of Photoshop, Git, Node.js 18+ with npm prefer a supported Node LTS , and an MCP client. Tested with Photoshop 27.11.0 ; other versions are unverified. The server is free and MIT-licensed; Photoshop and your model provider may charge separately. git clone https://github.com/kathan3009/photoshop-mcp.git cd photoshop-mcp ./scripts/install.sh --client claude-code Use claude-desktop , cursor , or codex instead of claude-code for your client. Omit --client to configure all detected clients. The installer installs locked dependencies, backs up existing client config files, adds the Photoshop MCP entry, and links the Claude skill and CLI tools. No sudo or desktop app is needed. Keep this clone in place: clients use its absolute path. Restart your client, open Photoshop, and ask it to run ps status . Allow the macOS Automation request to control Photoshop. For diagnostics, run node bin/photoshop-mcp.mjs doctor . If psctl is not found, use node cli.mjs or add ~/.local/bin to PATH. Try a disposable photo first: ask the agent to render it, add a named exposure adjustment layer, render again, then undo that step. The source server exposes the editing, history and checkpoint tools; the optional desktop app adds the menu-bar UI. Installation, troubleshooting, privacy, and uninstall https://github.com/kathan3009/photoshop-mcp/blob/main/docs/INSTALLATION.md · Report an issue https://github.com/kathan3009/photoshop-mcp/issues The existing 1.2.0 DMGs are unnotarized and can trigger macOS's “damaged” warning. Use the source installation above for now. The repo now separates notarized public builds from explicitly named -unnotarized local test builds; a new notarized download is not yet being advertised. See release procedure https://github.com/kathan3009/photoshop-mcp/blob/main/docs/RELEASING.md . The app bundles its own runtime, shows activity/previews/checkpoints, and provides Pause, Undo and Revert controls. If using it, copy it to Applications and launch it there before connecting clients. Any other MCP client: photoshop-mcp setup prints the JSON snippet, which is just { "mcpServers": { "photoshop": { "command": "/absolute/path/to/node", "args": "/absolute/path/to/photoshop-mcp/server.mjs" } } } | Area | Tools | |---|---| | See | ps status docs, history, EXIF · ps snapshot layer tree with stable ids, filterable · ps inspect exact adjustment settings, text styling, smart filters · ps render sRGB composite, crop at full res, or one layer solo → image · ps analyze histogram stats, clipping, colour cast, point samples · ps fonts | | Documents | ps document open / create / activate / duplicate / save psd, tiff, png, jpg — exports converted to sRGB / close / resizeImage / resizeCanvas / crop / trim / flatten | | Layers | ps create layer pixel, group, solid & gradient fills, rectangle, ellipse · ps add text / ps edit text point & paragraph text, fonts, tracking, leading — true pixels at any ppi · ps place image smart object; contain / cover / stretch into a box · ps set layers visibility, opacity, blend, move, resize, rotate, align; one layer or many · ps layer op delete, duplicate, group, ungroup, merge, rasterize, smart object, clip, move | | Grade & retouch | ps adjustment — curves, levels, brightnessContrast, light, hueSaturation with per-colour ranges , colorBalance, vibrance, photoFilter, exposure, blackAndWhite, gradientMap, invert, posterize, threshold create, update, clip to a layer, mask from selection · ps filter — gaussianBlur, unsharpMask, addNoise, highPass, motionBlur, median smart filters by default · ps selection rect, ellipse, AI Select Subject with add/subtract/intersect, layer pixels, feather, expand, fill… · ps mask add / replace / delete / apply / invert / enable / disable | | Control | ps history list, undo, redo, goto, snapshot, revert · ps batch many ops = one atomic undo step · ps actions play your recorded Photoshop Actions · ps exec ExtendScript escape hatch, opt-in | The server ships instructions that teach any connecting agent the house rules: look first render + analyze , edit non-destructively, verify after each change, undo bad steps, never overwrite the user's file. Not covered: Camera Raw local masks / Texture / Clarity, generative fill, brushes, 3D. Raw develop settings can still be driven by writing an .xmp sidecar next to the raw before opening it. | Risk | Safeguard | |---|---| | Agent edits the wrong file when you switch documents | Each session is pinned to one document first worked on, or last opened/created/activated . Your view is restored after every call. docId targets another one explicitly. | | Photoshop crashes mid-session and unsaved work is lost | Checkpoint before the first edit : a history snapshot ps history revert plus a layered copy of unsaved work in ~/Library/Application Support/photoshop-mcp/checkpoints newest 20 / 7 days kept . Re-taken before every ps exec . PS MCP CHECKPOINT=full\|history\|off . | | Agent overwrites or discards your work | Saving in place needs overwrite: true ; closing a dirty document needs discard: true ; existing files are never replaced without overwrite — except files the same session exported itself. | | Arbitrary code | ps exec is off by default PS MCP ALLOW EXEC=1 , or setup --exec . | | A dialog is open / Photoshop hangs | Per-tool timeouts; on timeout the bridge pings Photoshop and reports "a dialog is probably open" vs "still working". | | Opaque Photoshop errors | Locked/hidden layers, wrong layer type, wrong colour mode, targeted mask… are checked up front with actionable messages; raw "not currently available" errors get likely causes appended. | | Silent no-ops | Adjustment/filter params are strictly validated; tools return what Photoshop actually stored. | | Debugging | Every call is logged to ~/Library/Logs/photoshop-mcp/YYYY-MM-DD.jsonl 14 days; PS MCP LOG=off . | | Photoshop updates | test/last-green.json records the version the suite passed on; ps status and doctor flag untested versions. Optional daily launchd watcher: scripts/watcher.sh install . | psctl status psctl snapshot depth=2 psctl render out=/tmp/look.jpg maxSize=1200 psctl adjustment type=hueSaturation params='{"reds":{"saturation":25}}' psctl set layers layer=12 opacity=60 psctl batch @grade.json psctl run script.jsx docId=5 ExtendScript file as one undo step psctl help ps set layers JSON schema for any tool psctl doctor Args are key=value values parsed as JSON , one JSON object, @file.json , or - for stdin. The CLI is stateless: pass docId when more than one document is open. Execution is local, but requested previews and tool results are returned to your MCP client and may be sent to its model provider. Local execution is not a promise that images never leave your Mac. Logs and checkpoints can contain sensitive data. Overwrite/discard flags are programmatic guards, not independent human approval dialogs. See details https://github.com/kathan3009/photoshop-mcp/blob/main/docs/INSTALLATION.md privacy-costs-and-permissions . npm run test:smoke MCP startup and tool discovery, without Photoshop npm run test:release release policy and isolated client-configuration regression checks npm test end-to-end over real MCP against the running Photoshop The suite covers every tool, RGB/CMYK/Grayscale and 300 ppi documents, a 300-layer document, document pinning, checkpoints, the close guard, locked layers, busy detection, logging and exec gating. It works only in scratch e2e- documents, verifies your own document is untouched, and refuses to run while any document has unsaved changes a malformed Photoshop command can crash Photoshop and take every open document with it . On a full pass it writes test/last-green.json . node test/agent-trial.mjs