Skip to main content
Glama

PaintPilot — AI Painting & Photoshop MCP

An open-source MCP bridge for AI agents to paint and edit with real Adobe Photoshop tools and layers on Windows. Requires a separately installed copy of Photoshop; experimental Developer Preview, not an autonomous professional-art guarantee.

Русский · English

Illustrated documentation: English chapters · Русские главы · Technical architecture · Current roadmap.

Ideas for real projects: album artwork, music-release campaigns, posters, game art, and iterative PSD editing. These are scoped pilot workflows, not guarantees of unattended professional-quality delivery.

Two connection options: Guarded painting or direct Photoshop tools.

Before selecting a painting profile: simple_graphic is the more direct starting point for flat/marker-style work. nontrivial_painting is an experimental, human-in-the-loop research workflow, not a “higher quality” or reliably unattended mode. Complex runs may repeatedly stop at Guard checks and may not reach a finished picture. Users can help diagnose constraints and guide supported alternatives, but this does not automatically teach the model new permanent skills or authorize bypassing safeguards. Auto may also select the experimental profile. See Painting profiles: expectations and limitations.

Which Guards apply to each profile? See the guard-by-guard comparison for shared technical safety, conditional artistic contracts, stricter Nontrivial requirements and plans to qualify Guards individually. Neither painting profile is the separate direct Photoshop Tools mode.

Independently maintained MCP system for AI-driven digital painting and evidence-bound Photoshop automation on Windows. Previously known as Photoshop MCP — Digital Painting Edition; the historical package/server identifiers are retained for compatibility.

Project: PaintPilot · lavalava45/paintpilot-mcp Historical provenance: NOTICE

License: MIT TypeScript Platform PaintPilot on Glama Listed on mcpservers.org PaintPilot on LobeHub

Independently maintained project. Not affiliated with or endorsed by Adobe Inc.

GuardBot — project mascot

GuardBot is the project mascot: a wind-up screenprint robot produced by the painting pipeline itself during a fresh holdout validation run. It represents the project's core ideas — recognition-first construction, stable layer targeting, protected achieved features, and mandatory visual review after each semantic mutation.

The mascot image is not an upstream Photoshop MCP asset and does not represent Adobe branding.

See docs/mascot.md for the story of the holdout run that produced him.

Related MCP server: photoshop-mcp-pro

See it in action — a 60-second painting process

Final frame of a Photoshop painting session showing a seated violinist by a window

Watch the 60-second MP4 demo (59.6 s, 1280 × 720, H.264, no audio).

A curated recording of actual agent-driven Photoshop painting operations: constructing a seated violinist, the instrument, the room and its lighting, then making local refinements. The video was edited from a longer recorded process; it is not a real-time, uninterrupted recording or an independently certified artistic result.

The showcase and editing notes explain the source process, the selected segments and the reproducible FFmpeg/Python montage script. No generative-video model was used to synthesize the clip.

Both video-processing scripts are published: assemble recorded clips into a long video with SRT captions, then edit the violinist session into a faster 60-second montage. The guides have Russian counterparts; the original ignored run recordings are not included in GitHub.

What the project provides

Digital Painting Edition combines broad Photoshop automation with a focused painting and visual-control layer for brush-driven work:

  • installed brush-preset discovery and exact preset selection;

  • brush size, hardness, opacity, flow, spacing, angle, roundness, flip, pressure, airbrush, and smoothing controls;

  • batched raster painting with Brush, Pencil, Eraser, and Smudge;

  • straight, polyline, and Bezier strokes;

  • ordered closed Bezier region fills for fast silhouettes and broad color/value block-ins;

  • one-point dabs/stamps;

  • per-stroke color, size, opacity, and flow overrides;

  • automatic cost-aware batching for large heterogeneous paint passes;

  • interpolated size/opacity/flow dynamics along open strokes;

  • Photoshop simulatePressure support;

  • point and local-average composite color sampling for reference-based painting;

  • explicit measurement, landmark, and guide tools for reference/proportion work;

  • reusable landmark-frame transforms and normalized landmark-set comparison;

  • a materialized preview pipeline for local MCP workflows without a second Photoshop export;

  • Windows-only host support with UXP-only / fail-closed production semantic execution; legacy COM/AppleScript execution transports have been removed rather than retained as fallback;

  • more reliable nested-layer targeting and ordering with recursive lookup and stable layer IDs;

  • strict optional document_id pinning for document-bound tools, with fail-closed validation, no automatic active-tab switching, and returned target metadata;

  • photoshop_execute_visual_microplan to collapse setup/read calls + one atomic visual mutation + its mandatory preview into one MCP round-trip without crossing the preview barrier;

  • an embedded durable Guard surface (photoshop_guard_*) that moves operation journaling, receipt/ack gates, preview/verdict barriers, uncertainty recovery, checkpoints, workflow metrics and async jobs into the MCP server itself;

  • a Photoshop-side UXP companion on localhost long-poll for Neural Filters, foreground-safe asCopy PSD/JPEG/PNG persistence, and low-latency fast-lane development/diagnostics;

  • an agent visual-control workflow with semantic passes, previews, measurement checkpoints, occlusion reasoning, cleanup, sticky Photoshop routing, and a state-based Definition of Done.

The current build exposes 135 tools (135 atomic/non-recipe) and 5 prompts.

The PaintPilot Painting Mode entry point is dist/painting-mode.js. It starts the MCP server with PHOTOSHOP_GUARD_MODE=required, so read-only tools remain callable while raw mutating tools fail closed and must be dispatched through photoshop_guard_cycle_auto. The direct Photoshop Tools entry point is dist/photoshop-tools.js and routes registered individual commands through UXP without the painting workflow. The retired external controller/daemon chain is no longer a production route.

Geometry, kinematics and painterly algorithms

Authored geometry, numerical solving and separately editable paint components

The violinist is real PaintPilot Photoshop artwork. Landmarks and component ownership are schematic overlays, not a claim that this historical run executed IK or a screenshot of its layer panel. Source and hashes.

These techniques support construction and rendering; they do not independently guarantee anatomical correctness or artistic quality. Authors, versions, licenses and usage details: THIRD_PARTY_NOTICES.md.

The illustrated English and Russian chapters cover the complete conceptual workflow and historical case studies. Their example images predate some current runtime contracts; they are preserved as historical evidence, not advertised as present-day artistic acceptance.

Implementation and workflow details: object construction and articulated pose, reference-guided painterly strokes, and same-chat visual criticism and its evidence limits.

Research directions

This project is also a testbed for stateful visual-agent control: how a multimodal model can inspect, modify, verify, recover, and progressively refine an image through a real editor rather than producing one opaque one-shot render. Three research ideas currently shape the painting architecture.

Adaptive Multiscale Visual Verification

Whole frame and exact nested window crops from one real saved Ontime process image

Real saved Ontime process frame with two exact nested crops. Source pixels, coordinates and hashes are retained with the illustration; no scene content was regenerated.

A single screenshot is not equally useful for every visual decision. Composition, object structure, and micro-detail require different observational scales, so the Guard selects a minimum review level:

COMPOSITION -> OBJECT -> MICRO

Whole-frame context is retained at every level. Exact source-document crops are added only when the semantic scope of the operation or a structured review finding requires more local evidence. If the first view is insufficient, the same artistic operation can acquire additional crops read-only without replaying the mutation. Review evidence is bound to exact document/frame identity so stale local evidence cannot silently satisfy a later verdict.

The working theory, multiscale evidence model, experiments and practical painting evaluation suite are documented in docs/visual-evaluation.md.

Bounded Artistic Autonomy

Same-chat Director, Painter and Critic roles with the Guard to UXP to Photoshop execution lane

The illustration uses our real Pink City painting. Role arrows explain the Guard/UXP contract, not a captured live trace; tool completion does not certify artistic success. Source.

Useful painting requires more than safe atomic tool calls, but unconstrained multi-step autonomy can drift, compound errors, or hide regressions. The project therefore explores a middle regime: semantic-pass autonomy inside an explicit artistic task.

The Art Director owns global intent, task boundaries, stage changes, and re-review. The Painter may execute a bounded sequence of coherent semantic passes inside the delegated task, while every pass still crosses a visual-evidence barrier. Serious regressions, uncertainty, strategy exhaustion, protected-quality loss, global/composition changes, or the autonomy horizon immediately return control to the stricter review path.

The research question is not "how many commands can the agent run by itself?" but rather how much locally coherent artistic work can be delegated without weakening perceptual control. The P0-C implementation is complete; its implementation history is recorded in CHANGELOG.md and its current acceptance status is recorded in docs/roadmap-final-acceptance-matrix.md rather than remaining in the forward-looking roadmap.

Evidence-Bound Recovery

Lost-reply recovery through durable journal, fresh state and preview, and original-operation reconciliation

The homestead is a historical PaintPilot artistic-rollback illustration; it is not evidence of a lost MCP reply. The no-replay decision flow is schematic. Source.

In a stateful editor, repeating an uncertain mutation is not a harmless retry: a brush stroke, transform, erase, fill, or composite may be applied twice and permanently diverge from the state that was being evaluated. Recovery therefore treats evidence, not replay, as the default response to uncertainty.

Operations are journaled with document identity, execution receipts, preview identity, visual-review state, and accepted artistic anchors. After interruption or ambiguous transport failure, the Guard recovers from fresh state/preview evidence, reconciles the existing operation, and only then permits a new mutation. Accepted-anchor restoration is likewise verified against the exact registered visual state rather than inferred from tool success alone.

This makes recovery part of the visual control theory: a system should preserve causal identity across failures and prove what state it is in before continuing. The current implementation is described in docs/architecture.md.

Digital-painting tools

photoshop_list_brush_presets
photoshop_select_brush_preset
photoshop_get_brush_settings
photoshop_set_brush
photoshop_set_foreground_color
photoshop_sample_color
photoshop_paint_strokes
photoshop_paint_regions
photoshop_paint_dabs
photoshop_execute_visual_microplan
photoshop_measure_points
photoshop_add_guides
photoshop_list_guides
photoshop_clear_guides
photoshop_transform_landmarks
photoshop_compare_landmarks

For proportion-sensitive work, the landmark tools let an agent reuse the same named points across differently sized or framed references without hard-coding portrait-specific math. photoshop_transform_landmarks maps points between semantic frames while preserving local u/v position; photoshop_compare_landmarks reports per-point normalized error plus mean, RMSE, and maximum error. Both are pure geometry helpers and do not perform automatic landmark detection.

The painting workflow is also exposed as the MCP guide prompt:

ps.digital_painting_control

That guide is intended for iterative drawing rather than one-shot stroke dumping:

recognition block-in → preview → shape/value → preview → form → preview
→ edge/material → preview → detail → preview → cleanup → final preview

Install from source

MCPB upgrade work (preview.2 release candidate): A two-mode Windows MCPB is prepared with stable %LOCALAPPDATA%\PaintPilot data and UXP locations. The published 1.8.0-preview.1 MCPB remains Photoshop Tools only; do not treat an untagged or locally built preview.2 candidate as a public release. See the MCPB installation and upgrade guide and preview.2 release notes.

Install this repository from GitHub. Historical upstream packages and registry identities are separate projects and do not distribute Digital Painting Edition; see NOTICE.

Requirements:

  • Adobe Photoshop;

  • Node.js 18 or newer;

  • Windows 10/11;

  • Git, or a downloaded GitHub source archive.

Clone and build:

git clone https://github.com/lavalava45/paintpilot-mcp.git
cd paintpilot-mcp
pnpm install --frozen-lockfile
npm run build:server

Two ways to connect to Photoshop

Both modes use the same build and Photoshop UXP companion. Add a local stdio server in an MCP-compatible client with node as the command and the absolute script path below as its argument.

MCP directory installation note (including LobeHub): An automatically inferred configuration such as node dist/index.js with a relative path is not a reliable installation recipe for PaintPilot: MCP clients may run from a different working directory, and it does not distinguish the two modes. Install and load the Photoshop UXP companion as described below, then use one of the absolute-path configurations here instead.

1. PaintPilot Painting Mode. Choose this for AI-driven painting with Art Director, Painter, Critic, visual reviews, journaling and Guard-controlled changes. Mutating operations go through photoshop_guard_cycle_auto.

{
  "mcpServers": {
    "paintpilot-painting": {
      "command": "node",
      "args": ["C:/path/to/paintpilot-mcp/dist/painting-mode.js"],
      "env": { "PHOTOSHOP_GUARD_MODE": "required" }
    }
  }
}

2. PaintPilot Photoshop Tools — direct commands. Choose this for ordinary edits such as moving layers up/down, changing opacity, renaming a layer or undoing an action. Registered Photoshop tools are called directly via MCP → UXP, with no Art Director, Critic, artistic Guard gate or mandatory cycle_auto. Photoshop History and the photoshop_get_history, photoshop_undo and photoshop_redo tools remain available.

Direct-mode connection example:

{
  "mcpServers": {
    "paintpilot-direct": {
      "command": "node",
      "args": ["C:/path/to/paintpilot-mcp/dist/photoshop-tools.js"],
      "env": { "PHOTOSHOP_GUARD_MODE": "off" }
    }
  }
}

Replace C:/path/to/paintpilot-mcp with the absolute path to your checkout. These are alternative modes, not two scripts launched together in one connection. To switch, change the server script path (painting-mode.js ↔ photoshop-tools.js) and restart the selected MCP connection. The Photoshop UXP companion stays loaded in either mode.

This is a connection setting, not the simple_graphic / nontrivial_painting painting-profile selector. Direct commands bypass the painting Guard, but the native Photoshop tool may still return its own errors; not every Photoshop feature has an MCP implementation. Photoshop History/Undo works as it does for ordinary document editing. Direct changes are not automatically added to the existing Guard painting journal; inspect the document state before resuming an interrupted guarded run. PHOTOSHOP_PATH is only required when Photoshop is not detected automatically.

Windows: background-safe Photoshop control

Production semantic Photoshop operations use the UXP companion and fail closed when required UXP readiness is unavailable. Retained Windows COM/legacy executor code is bounded to detection/versioning, diagnostics and historical fixtures; it is not a selectable production semantic backend.

The retained Windows platform helper attaches to an already-running Photoshop instance with GetObject and refuses foreground-prone CreateObject launch by default. If a bounded diagnostic integration explicitly needs to permit UI activation / automatic Photoshop launch, opt in with:

PHOTOSHOP_MCP_ALLOW_UI_ACTIVATION=1

Leave that variable unset for normal background workflows.

This transport behavior is separate from document targeting. document_id is now a fail-closed guard, not an automatic tab switch: a pinned call proceeds only when that document is already active; if another Photoshop document is active, the call stops instead of changing the user's tab.

The guarded painting path is MCP client → dist/painting-mode.js → embedded Guard → UXP → Photoshop. The former external controller/daemon route has been removed; recovery stays on Guard status/resume/reconcile surfaces.

Stop limitation: a client chat Stop button has not been shown to cancel an in-flight Photoshop MCP call. PaintPilot supports an independent photoshop_guard_request_stop for one known operation_id, which prevents subsequent guarded mutation dispatch for that operation; it neither observes a host-specific button nor undoes commands already dispatched to Photoshop. When an MCP host actually delivers a cancellation signal, PaintPilot blocks new UXP commands from that cancelled request. In-flight results still require Guard receipt/History reconciliation. No custom host modifications are required.

For local development after npm run build:server, restart only the configured PaintPilot MCP child. A tool-catalog refresh does not guarantee the server has reloaded compiled code; do not restart the entire host application or use legacy restart-helper scripts. The UXP companion is reloaded separately in Adobe UXP Developer Tool (Reload for main.js; Unload → Load for manifest changes). photoshop_save_document is intentionally UXP-only: it verifies that document/layer/tool/ selection state remains unchanged and never falls back to COM persistence if the companion is offline.

See INSTALL.md for the full clean-machine setup.

Verify the installation

Static checks:

npm run build:server
npm run lint
npm run verify:photoshop-prompts
npm run verify:tool-counts

With Photoshop running, execute the live painting smoke test:

node scripts/test-painting-tools.mjs
node scripts/test-measurement-tools.mjs
node scripts/test-landmark-ergonomics.mjs
npm run test:painting-batching-live
npm run test:document-targeting
npm run test:document-targeting-live

The current verified tool-count result is:

catalog counts consistent: 135 = 135 atomic + 0 recipes; 16 Guard tools; 5 MCP prompt templates

The project has been live-tested primarily on Photoshop 2026 for Windows. During the current validation, 123 installed brush presets were enumerated and the painting smoke test completed with PAINTING_TEST_OK.

Documentation

Historical origin and upstream attribution are centralized in NOTICE; current documentation describes the maintained Digital Painting Edition surface.

Layer API consistency

The project also tightens several layer-operation contracts that matter in multi-layer painting workflows:

  • photoshop_get_layers now exposes recursive layer id, path, and depth metadata;

  • layer ordering resolves targets recursively, so layers returned by photoshop_get_layers can also be targeted when they live inside groups;

  • photoshop_move_layer_to_position accepts targetLayerId (preferred over a possibly duplicated name);

  • photoshop_move_layer_up, photoshop_move_layer_down, photoshop_move_layer_to_top, and photoshop_move_layer_to_bottom keep nested layers inside their current parent stack;

  • structural layer tools use stable atomic JSON envelopes; property/transform tools retain their existing public confirmation text for compatibility.

Regression coverage is provided by:

npx vitest run tests/layer-domain-contract.test.ts src/tools/layer-uxp-routing.test.ts tests/blend-mode.test.ts tests/document-target.test.ts

These tests exercise the UXP-only production route and central pinned-document contract; the retired ExtendScript-only layer fixture is no longer part of verification. Real-Photoshop behavior remains covered by the current UXP/live acceptance ledger.

Provenance

Historical origin, the reproducible source-independence baseline, upstream distribution separation, and retained copyright/licensing attribution are documented in NOTICE.

License

MIT. See LICENSE and NOTICE.

Available Tools

39 tools
photoshop_analyze_value_structureA

Analyze large-form light/dark structure when Director value/refinement review needs grayscale evidence; use photoshop_get_preview for ordinary color inspection and photoshop_guard_review_image for stored operation review images. Requires pinned document_id. In Guard, analyzes the exact delivered current frame and automatically registers materialized grayscale/luminance evidence; standalone preview-only catalogs capture a non-destructive preview instead. Returns two MCP JPEG images (full grayscale and low-frequency thumbnail), source/derived SHAs, dimensions and descriptive luminance summaries; Guard also returns a real evidence_operation_id and director_evidence_fields for Director updates. The thumbnail suppresses small texture/noise so major-form claims can be checked independently of surface activity. Writes derived JPEG files when a materialization path is available and registers Guard evidence, but does not modify the PSD or declare artistic PASS. Inspect both images before making an observed claim. materialize_path must be absolute; invalid paths or unavailable preview images fail, and overwriting the source frame is forbidden.

Inputs: document_id (required), materialize_path, max_dimension_px.

photoshop_compare_landmarksA

Compare two caller-supplied named landmark sets in their own semantic frames. Returns per-point normalized error plus mean/RMSE/max error. Pure geometry: does not inspect Photoshop or detect landmarks.

Inputs: candidate_frame (required), reference_frame (required), candidate_points (required), reference_points (required).

photoshop_geometry_calculateB

Pure deterministic source-pixel geometry for Scene Geometry Model / Geometry Preflight work. The caller supplies semantic line endpoints, points or polygons plus exact source-frame provenance; this tool performs no semantic detection and creates no Photoshop history.

Inputs: operation (required), source_frame (required), axis, lines, +7 more.

photoshop_get_brush_settingsA

Read active Photoshop paint-brush settings used for digital painting, including geometry, opacity/flow, pressure overrides, airbrush and smoothing.

Inputs: no named parameters.

photoshop_get_capabilitiesA

Report version-derived Photoshop feature flags plus current UXP bridge availability. Use for installation/version compatibility and whether the UXP bridge is reachable; use photoshop_get_version for version alone, photoshop_guard_capabilities for Guard rules/exact command schemas, and photoshop_get_painting_method_capabilities for registered painting methods. Takes no arguments. Reads the detected Photoshop version and probes bridge reachability without painting or changing document state. Returns JSON with version and features, including uxp_bridge_reachable; neural_filters is gated by bridge reachability and the version-derived UXP flag. Feature flags are not proof that a particular document operation will succeed or that Guard permits direct mutation. Detection/probe failures return the structured error response.

Inputs: no named parameters.

photoshop_get_document_infoA

Read the active Photoshop document and active-layer metadata through Photoshop/UXP without painting or switching tabs. Use this when an open document is required; photoshop_get_state also supports checking whether a document exists, while photoshop_list_documents lists all open tabs. Returns a text response headed "Document info:" containing the JSON state snapshot (hasDocument, document and activeLayer metadata). Requires a working Photoshop/UXP connection and an active document; no active document returns isError=true with "Error getting document info: No active document". Optional document_id verifies that the expected document is already active and fails closed on a mismatch; it never activates that document.

Inputs: document_id.

photoshop_get_historyB

Read the active document history states without mutation.

Inputs: document_id.

photoshop_get_layersA

List all layers in the active document with kind, visibility, and opacity.

Use photoshop_get_state for a lighter session summary.

Inputs: document_id.

photoshop_get_painting_method_capabilitiesB

Return the executable painting-method capability map derived from tools actually registered in this runtime. Unsupported methods remain explicit instead of being invented.

Inputs: document_id.

photoshop_get_previewB

Capture a JPEG preview of the active/pinned document, optionally with a local focus crop or materialized filesystem copy.

Inputs: quality, document_id, focus_region, include_image, +3 more.

photoshop_get_selection_boundsA

Read the active pixel selection bounds in document pixels (read-only).

Inputs: document_id.

photoshop_get_stateB

When the user requests PaintPilot Photoshop/MCP drawing or forbids imagegen/image_gen, use only the connected PaintPilot Photoshop MCP tools for that task. Start with photoshop_get_state to establish the document, or photoshop_guard_resume for an interrupted run; reuse an already confirmed target. Draw through photoshop_guard_cycle_auto. If the intended open document is inactive, discover photoshop_set_active_document via photoshop_guard_capabilities(tool_names) even when no standalone tool appears. With explicit authorization to switch focus, activate its exact document_id through photoshop_guard_cycle_auto, then verify photoshop_get_state before painting. Without focus permission ask permission to activate through MCP, not for a manual tab click. Never switch silently or remove document_id pinning. A decision-loop stall is advisory, not a mutation blocker: dispatch the next meaningful visual pass or one bounded diagnostic. Do not call built-in/external image generation, even for a reference, preview or fallback. If the selected tools are unavailable, report the exact blocker and stop; only an explicit later user change authorizes another execution mode. Read current document/layer/selection state without mutation; establish or recover the document target.

Inputs: document_id.

photoshop_get_versionA

Return the detected Photoshop version string.

For feature support use photoshop_get_capabilities.

Inputs: no named parameters.

photoshop_guard_art_directorA

Persist Director plans and evidence-bound assessments for a verified art-run document; use photoshop_guard_resume(document_id, director_fields) to read saved fields and photoshop_guard_status for readiness. review requires directive and issues/updates tasks; interrupt requires an allowed reason and marks an active directive for replanning; complete requires final_comparison and pre_final_hostile_review against the exact current frame and rejects outstanding completion blockers. This closes a satisfied directive, not the whole painting, and does not certify painted quality. directive carries style/strategy and observed value/refinement assessments; observed claims need current registered image evidence. anchor_decision explicitly manages classified whole-frame anchors; capture_restore_state additionally reads pinned layer/selection state. incomplete_hypothesis records a bounded experiment with rollback and review horizon; its resolution is explicit. whole_image_glance supplies due whole-frame/relationship review, never an invented pass. Writes Guard state without painting; optional anchor capture reads Photoshop. Returns ok, bounded document/Director state and next guidance. Payload errors return guard_art_director_contract_invalid with issues; state/evidence failures return guard_art_director_rejected. Retrieve saved fields and correct the request; do not replay painting or bypass evidence gates.

Inputs: action (required), document_id (required), detail, reason, +8 more.

photoshop_guard_brush_pack_ingestA

Import supplied .abr assets and return brush_pack_id with verified presets; changes Photoshop brush inventory, not canvas pixels.

Inputs: source_path, source_files.

photoshop_guard_brush_pack_profileA

Profile an already imported brush pack; use photoshop_guard_brush_pack_ingest to import first. plan compares cached profiles to preset_states and returns role coverage and probe candidates. probe_media requires Photoshop/UXP, draws a disposable sheet and saves preview evidence plus a receipt when preset identity is verified; it may also return a JPEG. record_media/record_stamp save observed classifications to local profile records. build_preflight reads profiles against preset_states and returns complete with brush_preflight or missing_role_coverage; ok=true alone does not mean complete. Rejections return ok=false, code and message.

Inputs: action (required), profile, preset_name, brush_pack_id, +5 more.

photoshop_guard_capabilitiesA

Discover Guard workflow/recovery rules and exact registered command contracts without source inspection. With no arguments returns Guard mode, protocol/runtime revisions, running deployment and command_sets; this is not document readiness (photoshop_guard_status) or Photoshop version-derived feature flags (photoshop_get_capabilities). tool_name returns one exact executable argument schema and dispatch route; tool_names batches up to 8. Mutating commands discovered here still run through photoshop_guard_cycle_auto, never a raw bypass. Returns discovery_revision; cache contracts once per art run and use if_revision only for a deliberate recheck (a match returns unchanged=true). deployment_health=true is a separate source/dist/running-MCP/loaded-UXP comparison after activation or a freshness blocker; omit tool names and if_revision. Does not paint, restart components or reconcile operations. Unknown names return guard_tool_contract_unknown with supported alternatives; incompatible argument modes are rejected.

Inputs: tool_name, tool_names, if_revision, deployment_health.

photoshop_guard_cycle_autoB

When the user requests PaintPilot Photoshop/MCP drawing or forbids imagegen/image_gen, use only the connected PaintPilot Photoshop MCP tools for that task. Start with photoshop_get_state to establish the document, or photoshop_guard_resume for an interrupted run; reuse an already confirmed target. Draw through photoshop_guard_cycle_auto. If the intended open document is inactive, discover photoshop_set_active_document via photoshop_guard_capabilities(tool_names) even when no standalone tool appears. With explicit authorization to switch focus, activate its exact document_id through photoshop_guard_cycle_auto, then verify photoshop_get_state before painting. Without focus permission ask permission to activate through MCP, not for a manual tab click. Never switch silently or remove document_id pinning. A decision-loop stall is advisory, not a mutation blocker: dispatch the next meaningful visual pass or one bounded diagnostic. Do not call built-in/external image generation, even for a reference, preview or fallback. If the selected tools are unavailable, report the exact blocker and stop; only an explicit later user change authorizes another execution mode. Run one bounded semantic pass, not an entire artistic stage, in local Photoshop; keep this route unless the user explicitly changes execution mode. After inspecting exact review images, send previous_operation_id + previous_observation (critic_review at its checkpoint) with optional next_pass; fetch missing images via photoshop_guard_review_image and poll returned job_id via photoshop_guard_job_poll.

Inputs: next_pass, painting_intent, protocol_version, review_operation_id, +2 more.

photoshop_guard_job_pollA

Inspect one asynchronous Guard job using the job_id returned by photoshop_guard_cycle_auto; use photoshop_guard_status for document/global readiness instead. Returns immediately without waiting for completion, starting replacement work or painting; polling may record a bookkeeping event in the Guard journal. Returns ok, job_id, state, process_state, timing/heartbeat fields, next and result when available. starting/running means poll the same job again; completed means inspect result and fetch missing completed visual review via photoshop_guard_review_image before submitting previous_observation. A completed process can still have state=uncertain and ok=false when its operation is partial or uncertain: process_state is not proof of successful execution. For uncertain/stalled/failed jobs follow next and the recovery guidance from photoshop_guard_resume and photoshop_guard_reconcile; never replace running/uncertain work with another mutation and never replay uncertain execution. Unknown or unreadable job ids return isError=true with code=guard_job_not_found.

Inputs: job_id (required).

photoshop_guard_keep_logical_layerB

Commit a visually accepted temporary component on a predeclared independent unit using its journal-bound hypothesis_id and layer_id; does not alter pixels or layer structure. A temporary composition-scaffold unit cannot be promoted or relabelled.

Inputs: layer_id (required), document_id (required), request_key (required), hypothesis_id (required), +2 more.

photoshop_guard_lint_next_passA

Optionally validate a complete proposed Guard continuation before execution, including its previous observation. Use for a new risky draft; cycle_auto already validates, so do not lint each normal component or separately close a reviewed previous pass. Requires next_pass; retain its pinned document_id and complete construction/ownership fields. Include previous_operation_id plus previous_observation when continuing an operation, or review_operation_id for retained-frame re-evaluation, following the existing review instructions. Reads Guard state under a temporary controller lock and compiles the proposal without painting, persisting a review or closing an operation. Returns ok, execution=not-executed, visual_mutation_started=false, violations, error_codes, normalizations, compiled_operation and rejection. ok=false means correct the listed fields; success is not execution or artistic approval. Submit the same validated continuation once to photoshop_guard_cycle_auto, without another lint or close-only call. Runtime failures return isError=true with guard_next_pass_lint_failed.

Inputs: next_pass (required), document_id, review_operation_id, previous_observation, +1 more.

photoshop_guard_reconcileA

Reconcile uncertain execution without replay. For a user-confirmed closed document, send id + outcome=abandoned + document_closed_confirmed=true + reason; Guard collects fresh document-list evidence internally. Do not read source or manufacture evidence ids.

Inputs: id (required), reason, outcome, state_id, +4 more.

photoshop_guard_recover_lockA

Release locks only for dead owners; embedded_guard_job_stalled with a live PID requires MCP-child restart before recovery, never mutation replay.

Inputs: no named parameters.

photoshop_guard_request_stopA

Explicit PaintPilot Stop for one known Guard execution operation_id. Blocks subsequent Photoshop mutations in that execution, including queued work. This does not detect or replace the MCP host chat Stop button, and cannot undo an already dispatched command.

Inputs: operation_id (required), document_id.

photoshop_guard_resumeA

Recover the local Photoshop workflow without replaying uncertain mutations; keep it unless the user explicitly changes execution mode. After a UXP session change, same_document_confirmed=true requires user confirmation and internally compares fresh pixels/owners with the preserved frame; mismatch keeps work quarantined. No source inspection is needed.

Inputs: owner_id, projection, document_id, director_fields, +1 more.

photoshop_guard_review_imageA

Deliver stored exact-image evidence for a completed visual Guard operation; use photoshop_get_preview for a fresh document preview instead. Obtain operation_id from photoshop_guard_cycle_auto or its completed job result. Returns JSON review instructions, operation_id and per-role delivery/omission metadata, plus MCP image blocks with recorded MIME types (normally JPEG); roles and image count depend on the stored review package. Omit roles for all required images, or request only missing roles. Already delivered exact images may be reused as confirmed same-chat references without resending bytes. Does not paint or capture a replacement frame, but records delivery receipts/timing and updates the review cache; delivery is not proof of visual observation. Inspect the actual images before submitting previous_observation through cycle_auto. review_scope=whole-scene requests whole-scene review metadata using the same images. Force redelivery only for unavailable/failed images with redelivery_reason; repeated forced delivery is rejected. Missing previews or invalid roles return isError=true with an error code; incomplete delivery lists undelivered_roles and next_required_action, not successful visual review.

Inputs: operation_id (required), roles, document_id, review_scope, +2 more.

photoshop_guard_set_art_runA

Create or update durable art-run settings for a verified document; use photoshop_guard_resume to retrieve an existing run rather than registering it again. Requires document_id and process_dir; bind document and immutable process_dir, and preserve the original user request verbatim as original_brief, never a success summary. Probes Photoshop/UXP readiness and document identity, creates the process directory and persists Guard settings without painting. Honor presentation_context.painting_profile_selection from the Photoshop panel for NEW art runs; auto allows an explicit choice based on the brief and defaults to nontrivial_painting if omitted. Existing profile locks and transition gates remain enforced. Brush preflight is required before dependent brush operations; supply observed evidence or the brush_pack_profile preflight, not invented preset claims. Commentary settings control presentation, not execution permission. Returns ok, art_run, capability context and next guidance; invalid identity/path/profile/preflight returns isError=true with guard_art_run_rejected and message. Changing original_brief invalidates its evaluation binding; settings alone do not prove painting completion.

Inputs: document_id (required), process_dir (required), original_brief, brush_preflight, +6 more.

photoshop_guard_set_prioritiesA

Persist the document's whole-frame problem priorities after visual assessment; use photoshop_guard_status to inspect readiness and photoshop_guard_lint_next_pass to validate a proposed pass. Writes Guard state without painting. problems supplies the ordinary problem set for this update, matched by stable problem_id; omitted ordinary problems are removed, while unresolved structural defects are retained. Open larger must-fix problems block finer work, and dependencies constrain blocker selection. Each problem needs scale and severity; status defaults to open. Changing an existing open problem's status/scale/severity requires evidence_operation_id from an exact-current visual operation with a verdict. Structural defects require an exact-current Critic finding and cannot be resolved by a priority label. current_stage cannot override the durable painting stage. Returns ok=true, updated document state and next guidance; rejected updates return isError=true with ok=false, code=guard_priority_rejected and message. Recording priorities does not certify image quality.

Inputs: problems (required), document_id (required), current_stage, evidence_operation_id.

photoshop_guard_statusA

Inspect Guard readiness, pending review/ack debts, active jobs and uncertain work. Use photoshop_get_state for Photoshop/UI state or photoshop_guard_lint_next_pass for lint alone. No arguments returns global status; document_id scopes readiness, next_pass adds candidate lint, and construction_model or construction_ref selects a geometry solve instead. Returns readiness/next_required_action or solved geometry; geometry is not image proof. Does not paint; never replay uncertain mutations. Status may reconcile missing-document journal state; diagnostic_timing_marker writes benchmark metadata. Keep the established local Photoshop workflow unless its route is unavailable.

Inputs: next_pass, document_id, construction_ref, construction_model, +1 more.

photoshop_list_brush_presetsA

List installed Photoshop brush presets. Supports optional case-insensitive filtering and a result limit.

Inputs: limit, query.

photoshop_list_documentsA

List all open Photoshop documents, their ids/dimensions, and the active document without changing tabs.

Inputs: no named parameters.

photoshop_list_fontsA

List Photoshop fonts, optionally filtered by name/family/PostScript name. Returns font records, total count, and truncation state without changing Photoshop.

Inputs: limit, query.

photoshop_list_guidesA

List Photoshop guides with index, orientation, pixel position, and normalized position for the active document.

Inputs: document_id.

photoshop_measure_pointsA

Measure user-supplied named points in the active Photoshop document. Returns pixel and normalized coordinates, vector distances, and optional ratios between named measurements. This tool does not detect facial/anatomical landmarks automatically.

Inputs: points (required), ratios, document_id, measurements.

photoshop_pingA

Verify Photoshop/UXP readiness and report transport, version, bridge revision, active document and document count. Use for route/bootstrap checks, not every call.

Inputs: no named parameters.

photoshop_sample_colorA

Sample the visible composite color at a document-space pixel coordinate. With radius=0, returns a point sample. With radius>0, returns the Photoshop Average-equivalent color of the clipped square neighborhood without changing the source document. Useful for painting from references, skin/hair/lip palette pickup, and local color checks.

Inputs: x (required), y (required), radius, document_id.

photoshop_sample_colorsA

Sample many visible-composite point colors from one pinned Photoshop document in a single operation. Large requests are automatically split into bounded batches; up to 1024 total point samples are returned without changing the source document. Use for reference-driven painting value maps, palette studies, and dense visual checkpoints where repeated photoshop_sample_color calls would be inefficient.

Inputs: points (required), document_id.

photoshop_select_painting_methodA

Choose an executable painting method from registered runtime capabilities without contacting or mutating Photoshop. Use photoshop_get_painting_method_capabilities to inspect the full map; use this tool for a specific construction_role or visual_intent plus required impact_class. construction_role takes precedence and derives the intent when both are supplied. Excludes avoid_method_ids, then uses the ordered intent preferences unless a valid preferred_method_id is supplied; an unavailable, avoided or incompatible preference is rejected rather than silently replaced. With edge_class, returns a separate edge_selection and tries preferred_method_id first for that edge choice; incompatible edge preferences are listed as rejected and may fall back. Returns ok=true, selection (selected method, fallbacks and rejected candidates), execution_contract with registered commands/input schemas and fallback_commands. This is planning guidance, not execution or pixel verification; required preparation and state still apply. Missing role/intent or no compatible method returns isError=true with ok=false, code=no_painting_method_available and message.

Inputs: impact_class (required), stage, edge_class, document_id, +4 more.

photoshop_transform_landmarksA

Transform a caller-supplied named landmark set from one axis-aligned semantic frame to another while preserving local u/v coordinates. Pure geometry: does not inspect Photoshop or detect landmarks.

Inputs: points (required), source_frame (required), target_frame (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 39 tools

    Disambiguation3/5

    The server has clear tool families for document inspection, color sampling, geometry, brush settings, and Guard workflow, but within Guard there are several adjacent readiness/recovery tools (status, resume, reconcile, recover_lock, job_poll, capabilities) whose boundaries require careful reading. Descriptions cross-reference each other, but an agent could still misselect among the recovery/capability tools.

    Naming Consistency4/5

    Nearly all tools use a consistent photoshop_ prefix with snake_case, and Guard tools share a photoshop_guard_ namespace. Some names are noun-oriented rather than strict verb_noun (guard_status, guard_capabilities) and many are long, but the overall convention is readable and predictable.

    Tool Count2/5

    39 tools is heavy for this server, with many specialized Guard lifecycle, recovery, linting, capability-discovery, and evidence-review variants. The domain is complex, but the surface feels overgrown and likely to overwhelm an agent selecting among closely related workflow tools.

    Completeness4/5

    The set covers a broad Photoshop painting workflow: document/layer/selection/history inspection, previews, color sampling, measurements, guides, brushes, painting-method selection, geometry, and extensive Guard orchestration. Direct layer/document creation, save/export, and standalone mutation tools are not present, but core painting work is routed through Guard cycle tools, making these manageable gaps.

    Maintenance

    ActivityActive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers