Skip to main content
Glama

Photoshop MCP

Languages: English · 简体中文 · Español · Deutsch · 日本語 · Türkçe · Website

npm version GitHub release Action Plan Jev routing License: MIT TypeScript Platform MCP Registry MCP Toplist Website

Photoshop MCP Server MCP server – quality and maintenance score on Glama

Chat with Photoshop like a colleague. Describe what you want in plain words — "remove this background", "resize these for Instagram" — and your AI assistant does the clicking for you. Works with Cursor, Claude, or the built-in chat window. No code, no scripts, no IDE required.

Note: This is an unofficial, community-maintained project and is not affiliated with or endorsed by Adobe Inc.

New: instant edits with Jev

Not every prompt needs a language model. The built-in chat window can now ask Jev, TypeSafe AI's System One model, where each message should go before any LLM runs. When Jev is confident you asked for one of 26 safe commands and recipes (undo, opacity, blend mode, remove background, color grade, split carousel, …), or a short chain of them like "black and white, then opacity 50", it runs in Photoshop straight away: no LLM call, no LLM tokens. Anything else, and hard-to-undo steps like merge or flatten, goes to the Action Plan.

TYPESAFE_API_KEY=... npx -p @alisaitteke/photoshop-mcp ui

Experimental and opt-in. Without the key the UI works exactly as before and nothing is sent to TypeSafe; with it, prompts also go to api.typesafe.ai. Routes, thresholds and the off switch: docs/standalone-ui.md.

Related MCP server: Noun MCP Server

What can it do?

  • ✂️ Remove backgrounds — subject isolated with a clean, editable mask

  • 👤 Retouch portraits — skin smoothing, tone fixes, dodge & burn setup

  • 🌐 Export for web & social — sRGB, sharpened, correctly sized for Instagram, X, and more

  • 🎞️ Make carousels — split one wide design into seamless, numbered slides

  • 💧 Watermark in bulk — a whole folder of photos in one go, originals untouched

  • 🎨 Color grade & more — film looks, sky replacement, generative fill (Adobe account required)

  • ⏪ Stay safe — every multi-step "recipe" is a single undo step in Photoshop

Under the hood: 127 tools (111 atomic + 16 one-step recipes) — full list in docs/available-tools.md.

Try saying

Remove the background from this portrait — keep it editable with a mask.
Enhance this portrait — smooth the skin and fix the tones, medium intensity.
Prepare this design for web, then export Instagram and X post variants.
Split this wide banner into a 5-slide seamless Instagram carousel.

More recipes (batch watermark, passport photos, CSV-driven cards, mockups, …) and pre-engineered prompt templates: docs/prompt-layer.md.

Get started

You need Photoshop running (Windows or macOS, any version 2012+) and Node.js 18+.

Option 1 — Easiest: the built-in chat window

npx -p @alisaitteke/photoshop-mcp ui

A chat window opens in your browser. Sign in with an AI provider API key — or reuse your existing Claude Code / Gemini CLI account, no key needed.

Standalone UI Screenshot

Details, providers, Action Plan (API key or CLI account), and security notes: docs/standalone-ui.md.

Option 2 — Inside your AI app (Cursor, Claude, VS Code)

Cursor (shows the Photoshop logo in the MCP list): install the plugin from Customize → Plugins, or search the Cursor Marketplace for photoshop-mcp once it is listed. That package still launches npx -y @alisaitteke/photoshop-mcp; the plugin manifest is what supplies the icon.

Until the Marketplace listing is live, copy .cursor-plugin/, mcp.json, and assets/ into ~/.cursor/plugins/local/photoshop-mcp and reload the window — details in CONTRIBUTING.md. The Install-in-Cursor button and a raw mcp.json entry still work, but they show a generic icon.

Install in Cursor Install in VS Code

Claude Code:

claude mcp add photoshop -- npx -y @alisaitteke/photoshop-mcp

Or add this to your MCP client's config (Cursor, Claude Desktop, …):

{
  "mcpServers": {
    "photoshop": {
      "command": "npx",
      "args": ["-y", "@alisaitteke/photoshop-mcp"]
    }
  }
}

How it works

  1. You type what you want in plain language.

  2. The AI plans the steps, checking the document state first.

  3. Photoshop executes — each recipe lands as one undoable step.

Something went wrong? The AI reads the structured error and knows what to try next. Common fixes: docs/troubleshooting.md.

Documentation

Contributing

Contributions are welcome! Please read CONTRIBUTING.md before opening a PR.

❤️ Contributors & Credits

Thanks to all our contributors!

Maintainer

Built by Ali Sait Teke — GitHub · LinkedIn.

License

MIT

Anonymous, aggregated usage analytics are collected by default and can be disabled anytime — details in docs/anonymous-usage-analytics.md.

Available Tools

127 tools
photoshop_adjust_brightness_contrastA
Destructive

Apply Image > Adjustments > Brightness/Contrast once to the active layer. Values are deltas on pixels, not an adjustment layer.

Users often say: fix exposure, add contrast, brighten, darken.

Use when: a quick brightness/contrast pass on the current raster layer. Do NOT use when: exposure in stops on an editable layer — use photoshop_adjust_exposure. Do NOT use when: a non-destructive tonal curve — use photoshop_adjust_curves. Do NOT use when: automatic black and white points — use photoshop_auto_levels.

Returns: the brightness and contrast values applied. Preconditions: active document and active layer. Text and Smart Objects are rasterized first. Side effects: destructive pixels, one history step. Calling again applies another delta. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
contrastYesContrast adjustment (-100 to 100)
brightnessYesBrightness adjustment (-100 to 100)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructive=true, readOnlyHint=false and idempotentHint=false, and the description goes well beyond them: it warns that Text and Smart Objects are rasterized first, that pixels are destroyed, that it consumes one history step, that repeated calls stack additional deltas, and that photoshop_undo reverses it. This is exactly the extra behavioral context the annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the operation and the delta semantics, then uses tight labeled blocks (Users often say / Use when / Do NOT use when / Returns / Preconditions / Side effects). No sentence is filler; every clause either routes the agent or sets expectations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still states the return value (the applied brightness and contrast values) and covers preconditions (active document and layer), destructive side effects, reversibility, and the stacking behavior. Nothing needed to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so brightness/contrast ranges and the document_id resolution rules are already documented, setting the baseline at 3. The description adds genuine meaning beyond the schema by clarifying that the numbers are deltas applied to pixels rather than an adjustment-layer setting, which changes how an agent should reason about repeat calls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Apply Image > Adjustments > Brightness/Contrast once to the active layer') and immediately scopes the values as pixel deltas rather than an adjustment layer. This is enough to distinguish it from the many sibling adjustment tools without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use plus three when-not-to-use clauses, each naming the correct alternative sibling (photoshop_adjust_exposure for stops, photoshop_adjust_curves for tonal curves, photoshop_auto_levels for auto black/white points). It even captures the colloquial user phrasings ('fix exposure, brighten, darken') that trigger it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_adjust_curvesA

Create a Curves adjustment layer on the active document.

Users often say: make it pop, S-curve, fix flat image, auto tone, improve contrast.

Use when: global tonal correction via a non-destructive Curves adjustment layer. Do NOT use when: stylistic cinematic grade — use photoshop_recipe_apply_color_grade.

Returns: JSON { ok, summary, details: { layer_name, preset } }. Preconditions: active document. Side effects: adds Curves adjustment layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
presetNoauto_tone (S-curve) or neutral (identity curve)auto_tone
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnly=false, destructive=false, idempotent=false). The description adds value beyond them by disclosing the precondition (active document), the side effect (adds a Curves adjustment layer), and the return shape. It does not cover undo/reversibility or interaction with existing layers, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then structured into intent/use/do-not-use/returns/preconditions/side-effects blocks. Every line earns its place, though the 'Users often say' line is more helpful than strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description supplies the return JSON shape, preconditions, and side effects, which covers most of what an agent needs. Minor gaps around reversibility and how the layer interacts with existing layers keep it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema. The description mentions 'S-curve' and the returned 'preset', which loosely aligns with the auto_tone enum value but adds no syntax or format beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a Curves adjustment layer') and names the sibling it is not (photoshop_recipe_apply_color_grade). An agent can distinguish it from related tonal tools like photoshop_adjust_brightness_contrast or photoshop_auto_contrast via the 'non-destructive Curves adjustment layer' framing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' and 'Do NOT use when' clauses with a named alternative, plus user-intent synonyms ('make it pop', 'S-curve', 'fix flat image'). This routes the agent correctly without inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_adjust_exposureA

Create an Exposure adjustment layer (stops, offset, gamma correction).

Users often say: fix underexposed photo, brighten by a stop, gamma fix.

Returns: JSON { ok, summary, details: { layer_name, exposure, offset, gamma } }. Preconditions: active document. Side effects: adds an Exposure adjustment layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
gammaNoGamma correction (0.01 to 9.99)
offsetNoOffset (-0.5 to 0.5)
exposureNoExposure in stops (-20 to 20)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnly=false, destructive=false, idempotent=false), so the bar is lower, and the description adds real value beyond them: the precondition of an active document and the side effect of adding an adjustment layer. It could go further by noting that repeated calls stack new layers (non-idempotent behavior) or whether it is undoable, which is why it is not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight, front-loaded fragments covering purpose, user phrasing, return shape, preconditions and side effects. Every sentence earns its place and the most decision-relevant information (what it creates) leads.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly supplies the return shape, and it also covers the precondition and side effect an agent needs before invoking a mutation. Nothing material is missing for a 4-parameter adjustment-layer tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including units and ranges ('Exposure in stops (-20 to 20)', gamma/offset bounds), so the schema already carries the semantic load and the baseline is 3. The description's parenthetical '(stops, offset, gamma correction)' restates the same fields without adding format or interaction detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Create an Exposure adjustment layer') and names the three controlling parameters, which distinguishes it from generic layer creation. It does not explicitly contrast itself with near-neighbors like photoshop_adjust_brightness_contrast or photoshop_adjust_curves, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The line 'Users often say: fix underexposed photo, brighten by a stop, gamma fix' gives trigger phrasing and implied intent, which is genuinely useful. However, it never states when to prefer this over the sibling exposure-related tools (brightness/contrast, curves, auto_levels) or any exclusions, so usage guidance remains implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_adjust_hue_saturationA
Destructive

Shift hue, saturation, and lightness on the active layer via Image > Adjustments > Hue/Saturation. Values are applied once to pixels, not stored as an adjustment layer.

Use when: a direct color shift on the current layer is enough. Do NOT use when: the change must stay editable — use photoshop_adjust_vibrance or photoshop_adjust_curves. Do NOT use when: the user wants a cinematic grade — use photoshop_recipe_apply_color_grade.

Returns: the hue, saturation, and lightness that were applied. Preconditions: active document and active layer. Text and Smart Objects are rasterized first, and a non-Normal blend mode is reset to Normal. Side effects: destructive pixel edit, one history step. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
hueYesHue shift (-180 to 180)
lightnessYesLightness adjustment (-100 to 100)
saturationYesSaturation adjustment (-100 to 100)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, but the description adds far more: values are baked into pixels rather than stored as an adjustment layer, text/Smart Objects are rasterized, a non-Normal blend mode is reset, it consumes one history step, and it is reversible via photoshop_undo. This is exactly the beyond-annotation detail a mutation tool needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action, then uses labeled sections (Use when / Do NOT use when / Returns / Preconditions / Side effects), which makes it scannable. Slightly over-long with two separate 'Do NOT use when' lines and minor redundancy between 'Returns' and the opening sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by stating the return value, the preconditions (active document and layer), the destructive side effects, and the undo path. Nothing an agent needs to invoke it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — hue, saturation, lightness and document_id all carry ranges and semantics in the schema. The description adds no parameter-level detail beyond restating the three adjustment axes, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Shift hue, saturation, and lightness on the active layer') and anchors it to the concrete Photoshop menu path. It explicitly distinguishes itself from siblings that could be confused with it (vibrance, curves, color-grade recipe).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit 'Use when' condition plus two 'Do NOT use when' exclusions, each paired with the correct alternative tool. An agent can route between this, photoshop_adjust_vibrance, photoshop_adjust_curves and photoshop_recipe_apply_color_grade with no inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_adjust_vibranceA

Create a Vibrance adjustment layer. Vibrance boosts muted colors while protecting skin tones.

Users often say: make colors pop (safely), boost saturation without clown look.

Returns: JSON { ok, summary, details: { layer_name, vibrance, saturation } }. Preconditions: active document. Side effects: adds a Vibrance adjustment layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
vibranceNoVibrance (-100 to 100)
saturationNoSaturation (-100 to 100)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-idempotent write that is not destructive, and the description adds value beyond them: an explicit precondition (active document) and the concrete side effect (adds a layer), which also reinforces the non-idempotent hint. It does not discuss permissions or how repeated calls stack layers, keeping it at a 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then structured into short labeled lines (Returns, Preconditions, Side effects). The informal "Users often say" line is unconventional but earns its place as intent mapping; overall it is tight with little waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-param mutation tool with no output schema, the description covers the return shape, precondition, and side effect, matching the complexity well. Only the non-idempotency/stacking behavior of repeated calls goes unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so vibrance, saturation, and the rich document_id semantics are already fully documented in the schema. The description adds no additional parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb + resource ("Create a Vibrance adjustment layer") and adds the semantic distinction from plain saturation ("boosts muted colors while protecting skin tones"). It does not name any sibling such as photoshop_adjust_hue_saturation or photoshop_desaturate, so differentiation is implied rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The "make colors pop (safely)" / "boost saturation without clown look" line gives clear natural-language context for when this is the right adjustment versus a harsher saturation move. It stops short of naming the alternative tools or an explicit when-not, so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_apply_gaussian_blurB
Destructive

Apply Gaussian Blur filter to the active layer

ParametersJSON Schema
NameRequiredDescriptionDefault
radiusYesBlur radius in pixels (0.1-250)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered externally. The description adds only the target ('active layer') and no further behavioral context such as irreversibility, undo behavior, or whether the filter is applied nondestructively, so it does not meaningfully extend the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler, and it immediately states the operation, filter, and target. Every word earns its place for a simple filter operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward filter tool with a complete input schema and annotations covering its destructive nature, the description is minimally sufficient. It omits distinguishing context relative to sibling blur filters and does not mention undo or outcome, leaving some gaps despite the low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters are fully documented in the input schema (radius range, document_id behavior). The description adds no additional meaning beyond what the schema already provides, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (Apply) and a specific resource/filter (Gaussian Blur filter) and target (active layer). It clearly distinguishes this from vague processing tools, but does not explicitly differentiate it from sibling blur filters such as photoshop_apply_motion_blur or photoshop_apply_smart_blur.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no alternatives named, and no prerequisites or exclusions. The phrase 'to the active layer' implies a scope, but an agent gets no help choosing between Gaussian Blur and the other blur or filter tools in the same family.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_apply_gradient_mapA

Create a Gradient Map adjustment layer (black→white by default) for duotone/B&W tonal remapping.

Users often say: duotone look, gradient map B&W, remap tones.

Returns: JSON { ok, summary, details: { layer_name, reverse } }. Preconditions: active document. Side effects: adds a Gradient Map adjustment layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
reverseNoReverse the gradient (white→black)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the description's added value is the explicit side effect ('adds a Gradient Map adjustment layer'), the precondition, and the return shape. It does not explain that repeated calls stack additional layers (consistent with idempotentHint=false) or how existing pixel data is affected, so it is solid but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and its purpose, then compact labeled lines for Returns and Preconditions/Side effects. The 'Users often say' line is slightly colloquial but earns its place as intent-matching aid; no sentence is pure filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully documents the JSON return shape, and it covers preconditions and side effects for a mutation tool. Missing only edge-case behavior (layer stacking on repeat calls, whether it targets the active layer or the whole document), which is minor for a two-parameter adjustment tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents both document_id (including the null/0 active-document behavior) and reverse. The description only adds the default gradient direction (black→white) and echoes 'reverse' in the return payload, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb + resource ('Create a Gradient Map adjustment layer') plus its functional intent ('duotone/B&W tonal remapping'), which implicitly separates it from pixel-level siblings like photoshop_fill_gradient and from photoshop_apply_lut or photoshop_desaturate. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Supplies concrete user-intent triggers ('duotone look, gradient map B&W, remap tones') that make routing decisions easy, and states the precondition of an active document. It stops short of naming alternatives (e.g., desaturate or LUT for B&W conversion) or when-not to use it, so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_apply_gradient_maskA
Destructive

Apply a linear black-to-white gradient on the active layer mask channel (fade/blend).

Users often say: fade into background, gradient mask, blend subject, soft edge fade.

This paints on an existing layer mask — not a Gradient Fill layer. Use when: softening edges or fading a layer into the background through its mask. Do NOT use when: subject is not isolated — use photoshop_recipe_remove_background or photoshop_create_layer_mask first.

Returns: JSON { ok, summary, details: { applied, direction, angle, mask_auto_created? } }. Preconditions: active document and active layer. Creates a reveal-all mask if none exists. Side effects: modifies layer mask pixels; two history steps when mask is auto-created.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_pctNoGradient end along fade axis (0-100)
angle_degNoOverride gradient angle in degrees (optional)
directionNoGradient fade direction on the mask (default bottom_to_top)bottom_to_top
start_pctNoGradient start along fade axis (0-100)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint=true annotation by disclosing preconditions (active document and layer), the auto-creation of a reveal-all mask, the exact side effect (modifies layer mask pixels), and history behavior (two history steps when mask is auto-created). It also clarifies it paints on an existing mask rather than creating a Gradient Fill layer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then cleanly sectioned into synonyms, Use/Do-not-use, Returns, Preconditions, and Side effects. Minor redundancy in the synonym lists ('fade/blend', 'fade into background') but every section is purposeful and well organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mask operation with no output schema, the description supplies the return shape (ok, summary, details), preconditions, and side effects, leaving nothing an agent needs in order to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents document_id, direction, angle_deg, start_pct and end_pct with ranges and defaults. The description adds only marginal param context (direction/angle implied via the returns block), so the baseline of 3 is appropriate when the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Apply), resource (linear black-to-white gradient), and target (active layer mask channel), plus a parenthetical clarifying the intent as fade/blend. It explicitly distinguishes itself from a Gradient Fill layer, so an agent can tell it apart from siblings like photoshop_fill_gradient and photoshop_apply_gradient_map.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' (softening edges, fading a layer into background through its mask) and 'Do NOT use when' (subject not isolated) guidance, and names concrete alternatives (photoshop_recipe_remove_background, photoshop_create_layer_mask) to route the agent correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_apply_high_passA
Destructive

Apply the High Pass filter to the active raster layer — edge/detail extraction for sharpening workflows or frequency separation prep.

Users often say: high pass filter, sharpen edges, extract details, frequency separation high layer.

Use when: sharpening via overlay blend, detail extraction, or prepping a high-frequency layer. Do NOT use on text, Smart Objects, or the Background layer — rasterize or convert first (photoshop_rasterize_layer).

Returns: JSON { ok, summary, details: { filter, radius, context } }. Preconditions: active document; normal (raster) layer selected. Side effects: one history step.

ParametersJSON Schema
NameRequiredDescriptionDefault
radiusYesEdge retention radius in pixels (0.1-250)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, readOnlyHint=false and non-idempotency, so the safety profile is covered. The description adds genuinely new context: preconditions (active document, normal raster layer selected) and side effects (exactly one history step), which tells the agent the change is a single undoable operation. It doesn't state whether the filter clobbers existing pixel data beyond the layer itself, but that is largely implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then labeled sections for user phrasing, usage, exclusions, returns, preconditions and side effects. Every line carries information; nothing is repeated from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-param mutation with no output schema, the description covers purpose, when/not-when, precondition state, side effects and the return shape ({ok, summary, details}). An agent has everything needed to call it correctly without probing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so radius (0.1-250 px edge retention) and document_id semantics are already fully documented in the schema. The description adds no syntax, units, or trade-off guidance beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Apply) and resource (High Pass filter on the active raster layer) plus the intent (edge/detail extraction for sharpening or frequency separation prep). It also disambiguates from the closely related sibling photoshop_apply_sharpen by describing the underlying mechanism rather than the end goal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' conditions (overlay-blend sharpening, detail extraction, prepping a high-frequency layer) and explicit exclusions (text, Smart Objects, Background layer) with the remediation path named via photoshop_rasterize_layer. An agent knows both when to call this and when to call something else first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_apply_layer_maskA
Destructive

Bake the active layer mask into its pixels and remove the mask. Pixels the mask hid are deleted.

Use when: the user wants the mask permanently applied. Do NOT use when: the mask should stay editable — leave it, or create one with photoshop_create_layer_mask. Do NOT use when: the mask should be discarded without changing pixels — use photoshop_delete_layer_mask.

Returns: confirmation that the mask was applied. Preconditions: active document and an active layer that has a mask. Side effects: destroys masked-out pixels and the mask. Reversible with photoshop_undo while history holds it.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds what is destroyed (masked-out pixels and the mask itself), the precondition (active doc plus masked layer), and the recovery path (photoshop_undo while history holds it). This is rich behavioral detail beyond the annotation flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and consequence, then organized into tight labeled lines for condition, exclusions, return, and side effects. Every sentence carries distinct information with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-param tool with no output schema, the description covers return, preconditions, side effects, and reversibility. An agent has everything needed to decide and call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema description coverage is 100%, so the schema already documents document_id, null/0 semantics, and activation behavior. The description adds nothing about the parameter, which is the expected baseline for a fully-covered single-param tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource ('bake the active layer mask into its pixels and remove the mask') plus the pixel-level consequence. It explicitly names the two sibling masks tools it is not (create_layer_mask, delete_layer_mask), so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' plus two 'Do NOT use when' branches, each naming the alternative tool or action to take instead. The decision boundary between applying, keeping, and deleting a mask is fully specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_apply_layer_styleA
Idempotent

Apply a layer style (drop shadow, outer glow, stroke, bevel & emboss) to the active layer via Action Manager layer effects.

Users often say: add shadow, glow effect, outline this layer, stroke, bevel, 3D button look, katmana gölge ver.

Use when: quick presentational effects on the active layer (cards, buttons, mockups, text pop). Do NOT use when: you need full custom layer-effects control — use photoshop_execute_script with a custom layerEffects descriptor.

Returns: JSON { ok, summary, details: { style, layer_name } }. Preconditions: active document with an active pixel/text layer. Side effects: sets the chosen effect on the active layer. Drop shadow uses the given angle (Use Global Light is off).

ParametersJSON Schema
NameRequiredDescriptionDefault
redNoEffect color red (0-255)
blueNoEffect color blue (0-255)
sizeNoBlur/size in pixels (stroke width for stroke)
angleNoLight angle in degrees (drop shadow / bevel)
greenNoEffect color green (0-255)
styleNoWhich effect to applydrop_shadow
opacityNoEffect opacity (0-100)
distanceNoOffset distance in pixels (drop shadow only)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, idempotent, non-destructive behavior, so the bar is lower, but the description adds real value: preconditions (active document with active pixel/text layer), side effects (sets the chosen effect on the active layer), and the significant caveat that drop shadow uses the given angle with Use Global Light off. It also documents the return payload despite no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence, then clearly labeled Use/Do-not-use/Returns/Preconditions blocks — easy to scan. The mixed-language user-phrase list is slightly noisy but arguably earns its place for natural-language intent matching.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, no-output-schema mutation tool, the definition covers preconditions, side effects, the return shape, and routing to the alternative. Nothing essential to invoking it correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by clarifying that angle governs the drop shadow because global light is off, and by tying size semantics (stroke width) to the effect chosen. It does not, however, explain how color/opacity interact across the four styles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (apply) and resource (layer style) and enumerates the concrete effects covered (drop shadow, outer glow, stroke, bevel & emboss). It also names the sibling route for advanced cases, photoshop_execute_script, so an agent can distinguish it from the generic escape hatch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' (quick presentational effects on the active layer) and 'Do NOT use when' (needing full custom layer-effects control, use photoshop_execute_script) sections give both the trigger condition and the named alternative. The paraphrased user intents further help intent matching.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_apply_lutA

Apply a Color Lookup (3D LUT) adjustment layer for cinematic color grading. Accepts a built-in LUT name (e.g. "Crisp_Warm.3dl", "Kodak 5218 Fuji 3510.3dl", "Moonlight.3dl") or an absolute path to a .cube/.3dl/.look file.

Users often say: cinematic grade, film look, teal and orange, apply LUT, sinematik renk.

Use when: stylistic non-destructive color grade in one step. Do NOT use when: basic tonal fixes — use photoshop_adjust_curves or photoshop_auto_levels.

Returns: JSON { ok, summary, details: { layer_name, lut, lut_source } }. Preconditions: active document. Side effects: adds a Color Lookup adjustment layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
lutYesBuilt-in LUT file name (e.g. "Crisp_Warm.3dl") or absolute path to a .cube/.3dl/.look file
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (destructiveHint=false, idempotentHint=false). The description goes further by disclosing the precondition (active document), the concrete side effect (adds a Color Lookup adjustment layer), and the non-destructive nature — real value beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded with labeled blocks (Use when / Do NOT use when / Returns / Preconditions / Side effects) that are easy to scan. Minor redundancy between the opening sentence and the 'Use when' line, but the synonym list earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description spells out the return JSON shape, preconditions, and side effects, so an agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters including the built-in-name vs absolute-path distinction. The description adds a few concrete example filenames but largely restates the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Apply) and resource (Color Lookup / 3D LUT adjustment layer) with a scope qualifier (cinematic color grading). It clearly distinguishes itself from neighboring adjustment tools like curves and auto_levels.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when: stylistic non-destructive color grade in one step' and 'Do NOT use when: basic tonal fixes — use photoshop_adjust_curves or photoshop_auto_levels' names both the condition and the alternative siblings. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_apply_motion_blurA
Destructive

Apply Motion Blur to the active raster layer (angle in degrees, distance in pixels).

Use when: directional streak blur on one layer. Do NOT use when: a round blur is enough — use photoshop_apply_gaussian_blur. Do NOT use when: blur should keep edges — use photoshop_apply_smart_blur.

Returns: the angle and radius applied. Preconditions: active document and a normal raster layer. Text and Smart Objects are rasterized first. Side effects: destructive pixels, one history step. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
angleYesBlur angle in degrees (-360 to 360)
radiusYesBlur distance in pixels (1-999)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, but the description goes further: it names the precondition (active document plus a normal raster layer), discloses that text/Smart Objects get rasterized first, and quantifies the footprint as destructive pixels plus one history step that photoshop_undo reverses. That is substantive context beyond the boolean hints, though it stops short of describing failure modes or exact return shape nuance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then organized into short labeled lines for usage, returns, preconditions and side effects. Every sentence carries an actionable fact; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the description states what is returned (angle and radius applied) and covers preconditions, mutation scope and reversibility. For a destructive, non-idempotent layer operation this is complete enough for an agent to call it correctly and recover from it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter already carries its type, min/max range and meaning (including the detailed document_id semantics). The description only restates units for angle and radius, adding nothing the schema does not already provide, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (Apply Motion Blur to the active raster layer) and immediately gives units for both key inputs, so the agent knows exactly what operation this is. It differentiates itself from siblings by name, explicitly routing round blur to photoshop_apply_gaussian_blur and edge-preserving blur to photoshop_apply_smart_blur.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' and two 'Do NOT use when' clauses, each paired with the named alternative tool. The agent can select between the three blur tools without opening any schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_apply_noiseA
Destructive

Apply Add Noise to the active raster layer (amount percent, UNIFORM or GAUSSIAN, optional monochromatic).

Use when: grain or noise on one raster layer. Do NOT use when: the goal is blur or sharpen — use photoshop_apply_gaussian_blur or photoshop_apply_sharpen.

Returns: the amount, distribution, and monochromatic flag applied. Preconditions: active document and a normal raster layer. Text and Smart Objects are rasterized first. Side effects: destructive pixels, one history step. A second call adds more noise. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesNoise amount in percent (0.1-400)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
distributionNoNoise distribution typeUNIFORM
monochromaticNoApply monochromatic noise

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, but the description goes further: it states pixels are destructively modified, that it consumes one history step, that Text/Smart Objects are rasterized first, and that a second call stacks more noise. It also notes reversibility via photoshop_undo, which the annotations do not cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then organized into labeled sections (Use when / Do NOT use when / Returns / Preconditions / Side effects). Every sentence carries distinct information; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description states what is returned (amount, distribution, monochromatic flag), covers preconditions, side effects, idempotency, and reversibility. Nothing an agent needs to call this mutation correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents amount, document_id, distribution, and monochromatic in detail. The description only restates the amount range, the UNIFORM/GAUSSIAN choice, and the monochromatic flag without adding syntax or behavioral nuance beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource (Apply Add Noise to the active raster layer) and immediately scopes it against siblings by naming photoshop_apply_gaussian_blur and photoshop_apply_sharpen as the wrong tools for blur/sharpen goals. An agent can distinguish this tool from the other filter tools without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when: grain or noise on one raster layer' and 'Do NOT use when: the goal is blur or sharpen' with the correct alternative tools named. This is the full when/when-not/alternatives pattern with no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_apply_photo_filterA

Create a Photo Filter adjustment layer (warming/cooling/custom tint with density control).

Users often say: warm it up, cool it down, add a tint, golden hour look.

Returns: JSON { ok, summary, details: { layer_name, color, density } }. Preconditions: active document. Side effects: adds a Photo Filter adjustment layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
redNoFilter color red (0-255); warming ≈ 236
blueNoFilter color blue (0-255); warming ≈ 0
greenNoFilter color green (0-255); warming ≈ 138
densityNoFilter density percent (0-100)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
preserve_luminosityNoPreserve luminosity (default true)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, and the description adds genuinely useful context beyond them: the precondition (active document), the observable side effect (adds a new adjustment layer), and the return shape. It stops short of noting non-idempotency behavior or what happens when no document is active, keeping it out of the top tier.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short lines, front-loaded with the action, then intent examples, then return/preconditions/side effects. No filler sentences; every line carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description supplies the missing return contract (ok, summary, details with layer_name/color/density), the precondition, and the side effect. An agent has everything needed to call it correctly against its annotated safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter already carries a description with defaults and warm-color hints (e.g. red ≈ 236). The description only restates 'density control' and warming/cooling, adding no syntax or semantics beyond what the schema documents, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a Photo Filter adjustment layer') plus its scope (warming/cooling/custom tint with density control). This distinguishes it from the many sibling color tools (adjust_vibrance, adjust_exposure, apply_lut) without needing to open the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Maps concrete user phrasings ('warm it up, cool it down, add a tint, golden hour look') to invocation, which is strong intent-matching guidance. It does not, however, state when to prefer this over alternative color tools like recipe_apply_color_grade or apply_lut, so exclusion guidance is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_apply_sharpenA
Destructive

Apply Unsharp Mask to the active raster layer (amount, radius, threshold). This is a pixel filter on one layer, not a web-export sharpen pass.

Use when: sharpening one layer in the open document. Do NOT use when: preparing a file for the web — use photoshop_recipe_prepare_for_web. Do NOT use when: you want edge extraction for an overlay sharpen — use photoshop_apply_high_pass.

Returns: the amount, radius, and threshold applied. Preconditions: active document and a normal raster layer. Text and Smart Objects are rasterized first, which drops live type and smart-object edits. Side effects: changes pixels in one history step. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesSharpening amount in percent (1-500)
radiusYesRadius in pixels (0.1-250)
thresholdNoThreshold levels (0-255)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructive/non-readonly/non-idempotent, and the description goes well beyond them: it warns that text and Smart Objects are rasterized first, dropping live type and smart-object edits, notes the change occupies one history step, and states it is reversible via photoshop_undo. This is the kind of side-effect disclosure annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core operation, then uses clearly labeled Use/Do NOT use/Returns/Preconditions/Side effects blocks. Every sentence conveys actionable information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return values, the preconditions on document/layer state, and the destructive side effects plus reversal path. An agent has everything needed to decide and to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so amount, radius, threshold and document_id are fully documented in the schema. The description's parenthetical (amount, radius, threshold) simply restates them, adding no new syntax or format detail. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Apply Unsharp Mask) and resource (the active raster layer) with the exact parameters named, and explicitly distinguishes itself from a web-export sharpen pass. An agent can tell this apart from photoshop_recipe_prepare_for_web and photoshop_apply_high_pass without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' and two 'Do NOT use when' clauses, each routing to a named alternative (photoshop_recipe_prepare_for_web, photoshop_apply_high_pass). This is the strongest tier of when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_apply_smart_blurA
Destructive

Apply the Smart Blur filter to the active raster layer — edge-preserving blur for smoothing skin or simplifying backgrounds.

Users often say: smart blur, edge-preserving blur, smooth skin blur, blur but keep edges.

Use when: subtle smoothing that respects edges (portraits, product cleanup). Do NOT use on text, Smart Objects, or the Background layer — rasterize first (photoshop_rasterize_layer). Do NOT use when: uniform blur is enough — use photoshop_apply_gaussian_blur.

Returns: JSON { ok, summary, details: { filter, radius, threshold, mode, quality, context } }. Preconditions: active document; normal (raster) layer selected. Side effects: one history step.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoSmart blur mode (default: NORMAL)NORMAL
radiusYesBlur radius (0.1-100)
qualityNoBlur quality / smoothness (default: MEDIUM)MEDIUM
thresholdYesBlur threshold — higher values restrict blur to stronger edges (0.1-100)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=true, idempotentHint=false), so the description adds real value beyond them: it states preconditions (active document, normal raster layer selected) and side effects (one history step). Returning the JSON shape also clarifies behavior. It doesn't contradict the destructive hint — the operation rewrites pixels, even if undoable in one history step.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then cleanly segmented into synonyms, use/don't-use, returns, and preconditions. The 'Users often say' line is slightly extra but earns its place as natural-language routing cues. Overall tight with no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter destructive filter with no output schema, the description covers preconditions, side effects, return shape, and exclusion cases, so an agent has everything needed to invoke it correctly. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters, including enum values and numeric ranges. The description only echoes field names in the returns list (radius, threshold, mode, quality) without adding syntax or semantics beyond the schema. Baseline 3 is appropriate when the schema carries parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource (apply Smart Blur filter to the active raster layer) and explains what it does functionally (edge-preserving blur for smoothing skin or simplifying backgrounds). It explicitly distinguishes itself from photoshop_apply_gaussian_blur, so an agent can separate the two blur siblings without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' (subtle smoothing that respects edges) and 'Do NOT use' clauses naming concrete blockers (text, Smart Objects, Background layer — rasterize first via photoshop_rasterize_layer). It also routes the agent to the correct alternative (photoshop_apply_gaussian_blur) when uniform blur suffices. This is about as complete as routing guidance gets.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_auto_contrastA
Destructive

Run Auto Contrast on the active layer. Photoshop picks the contrast; there is no amount parameter.

Use when: a one-shot automatic contrast fix on the current layer. Do NOT use when: you need numeric brightness and contrast — use photoshop_adjust_brightness_contrast. Do NOT use when: black, white, and gray points should move — use photoshop_auto_levels. Do NOT use when: a non-destructive curve — use photoshop_adjust_curves.

Returns: confirmation that Auto Contrast ran. Preconditions: active document and active layer. Text and Smart Objects are rasterized first. Side effects: destructive pixels, one history step. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and non-idempotent, but the description goes well beyond them: it discloses preconditions (active document and layer), that text and Smart Objects are rasterized first, that pixels are destructively altered, that one history step is consumed, and that photoshop_undo reverses it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action in the first sentence, then organizes the remaining information into labeled lines (Use when / Do NOT use / Returns / Preconditions / Side effects). No filler sentences; every line carries decision-relevant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description covers the return value ('confirmation that Auto Contrast ran'), preconditions, side effects, and reversibility. Nothing an agent needs to invoke this destructive one-parameter tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single document_id parameter is fully documented in the schema, including the null/0 active-document convention. The description adds only the useful negative fact that no amount parameter exists, so the baseline 3 applies with a small bump for that clarification.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Run Auto Contrast on the active layer') and immediately characterizes the operation ('Photoshop picks the contrast; there is no amount parameter'), which separates it from parametric siblings like photoshop_adjust_brightness_contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit 'Use when' plus three 'Do NOT use when' cases, each naming the alternative tool (adjust_brightness_contrast, auto_levels, adjust_curves) and the condition that selects it. Routing is fully determined without inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_auto_levelsA
Destructive

Run Auto Levels on the active layer. Photoshop sets the black, white, and gray points; there is no amount parameter.

Users often say: fix flat image, auto tone, make it pop (mild).

Use when: a one-shot automatic level fix on the current layer. Do NOT use when: only contrast should move — use photoshop_auto_contrast. Do NOT use when: you want a specific brightness and contrast delta — use photoshop_adjust_brightness_contrast. Do NOT use when: the correction must stay an editable adjustment layer — use photoshop_adjust_curves.

Returns: confirmation that Auto Levels ran. Preconditions: active document and active layer. Text and Smart Objects are rasterized first. Side effects: destructive pixels, one history step. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds substantial context beyond them: text and Smart Objects are rasterized first, the edit is destructive to pixels, it consumes one history step, it is reversible via photoshop_undo, and it has no amount parameter. That is exactly the kind of pre-call behavioral disclosure an agent needs before a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, then layers intent phrasing, usage routing, return value, preconditions, and side effects in labeled blocks. Every line is actionable; no filler or repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Though there is no output schema, the description states the return ('confirmation that Auto Levels ran'), the preconditions (active document and layer), the side effects, and the undo path. Nothing an agent needs to call this safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single document_id parameter is fully documented in the schema, so the baseline is 3. The description adds value by explicitly stating 'there is no amount parameter', preempting an agent from searching for an intensity control — a real clarification beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Run Auto Levels on the active layer') and immediately defines the operation's semantics (Photoshop sets black, white, and gray points). It explicitly distinguishes itself from three close siblings (auto_contrast, adjust_brightness_contrast, adjust_curves), so an agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' plus three 'Do NOT use when' clauses, each naming the alternative tool and the condition that selects it. It also maps colloquial user phrasings ('fix flat image', 'auto tone', 'make it pop') to the tool, closing the intent-matching gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_close_documentA
Destructive

Close a Photoshop document tab. Defaults to the active document; pass document_id to close a specific open file.

Use when: the user is done with a file, or when cleaning up extra open tabs after photoshop_list_documents. Do NOT use when: you only need to switch tabs — use photoshop_set_active_document.

Returns: confirmation that the document closed. Preconditions: target document is open. Side effects: closes that tab; save=true writes unsaved changes first.

ParametersJSON Schema
NameRequiredDescriptionDefault
saveNoWhether to save changes before closing
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, so the description adds value by disclosing preconditions (target document must be open), side effects (closes that tab), and the save=true semantics (writes unsaved changes first). It stops short of stating that unsaved changes are discarded when save=false, which is the key irreversible consequence of a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and default, then organized into labeled lines (Use when / Do NOT use when / Returns / Preconditions / Side effects). Every sentence carries actionable information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter closing tool with no output schema, the description covers purpose, routing, preconditions, side effects, and the return value, and annotations carry the safety profile. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema description already covers the null/0 active-document convention and stale-id behavior, so baseline 3 applies. The description's note that document_id targets a specific open file is largely redundant with the schema and does not resolve the oddity that document_id is marked required while being described as optional-defaulted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (close a Photoshop document tab) and immediately clarifies scope: defaults to the active document unless document_id is passed. The distinction from photoshop_set_active_document is explicit, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit "Use when" (user is done with a file, cleanup after photoshop_list_documents) and "Do NOT use when" clauses, naming the correct alternative (photoshop_set_active_document) for the switch-tabs case. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_content_aware_fillA
Destructive

Fill the current pixel selection using Content-Aware Fill.

Users often say: remove distraction, erase object, content aware fill, inpaint selection.

Use when: a rectangular or other selection covers the area to remove/replace. Do NOT use when: no selection exists — use photoshop_select_rectangle first. Do NOT use when: generative remove is requested — not scriptable; use this fill or manual touch-up.

Returns: JSON { ok, summary, details: { filled } }. Preconditions: active document and active pixel selection. Side effects: modifies pixels inside selection; deselects afterward.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds genuinely new behavioral context: preconditions (active document AND active pixel selection), the concrete side effect of deselecting after fill, and that pixels inside the selection are modified. It also discloses that generative remove is not scriptable, which shapes agent behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then structured into use/when-not/returns/preconditions/side-effects blocks with no wasted sentences. The 'Users often say' synonym list is slightly padding but aids natural-language matching, so it earns its place reasonably.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description spells out the return shape (JSON { ok, summary, details: { filled } }), plus preconditions and side effects, leaving nothing an agent needs to invoke it correctly undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single document_id parameter is fully documented in the schema (null/0 for active doc, positive number activates). The description adds no additional parameter meaning, so the baseline 3 for schema-documented params applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Fill the current pixel selection using Content-Aware Fill') and immediately distinguishes the tool from the generative-remove sibling by noting that path is not scriptable. An agent can tell exactly what this does versus photoshop_generative_remove or photoshop_fill_layer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' (a selection covers the area) and two 'Do NOT use when' clauses that name the required prerequisite alternative (photoshop_select_rectangle first) and the unsupported generative-remove request. This is full when/when-not/alternative coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_contract_selectionA

Contract (shrink) the active pixel selection inward by a pixel amount.

Use when: tightening a loose selection or trimming halo after expand. Do NOT use when: no selection exists — create one first.

Returns: JSON { ok, summary, details: { pixels, bounds?, context } }. Preconditions: active document and active pixel selection. Side effects: modifies selection.

ParametersJSON Schema
NameRequiredDescriptionDefault
pixelsYesPixels to contract by (minimum 1)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations covering the safety profile (readOnly=false, destructive=false), the description still adds real value: stated preconditions (active document and active pixel selection), an explicit side effect (modifies selection), and the JSON return shape. It could go further on whether repeated calls compound (idempotentHint=false) or how the operation interacts with undo, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded verb+resource, then labeled Use when / Do NOT use when / Returns / Preconditions / Side effects lines. Every line carries distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description supplies the return shape, preconditions, and side effects, which is what an agent needs to invoke this selection-mutating tool correctly. Nothing material is missing given the rich schema and annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (pixels, document_id) are already documented in detail, including the null/0 active-document behavior. The description only echoes 'by a pixel amount', adding no syntax or constraint detail beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb (contract/shrink), the resource (active pixel selection), and the direction/quantity (inward by a pixel amount). The 'inward' direction cleanly separates it from the sibling photoshop_expand_selection without needing to name it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives when-to-use (tightening a loose selection, trimming a halo after expand) and when-not-to-use (no selection exists — create one first), pointing the agent at the fix. This is exactly the when/when-not/alternative structure the rubric rewards.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_convert_to_smart_objectA

Convert the active layer (or a named layer) to an embedded Smart Object.

Users often say: convert to smart object, make smart layer, embed layer.

Use when: non-destructive transforms/filters are needed on a raster or shape layer. Do NOT use when: the layer is already a Smart Object — returns success with already_smart_object. Do NOT use on background layers — unlock or duplicate first.

Returns: JSON { ok, summary, details: { layer_name, kind, already_smart_object? } }. Preconditions: active document; target layer must be selected or named. Side effects: one history step.

ParametersJSON Schema
NameRequiredDescriptionDefault
layer_nameNoOptional exact layer name (recursive search). Default: active layer.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (readOnly=false, destructive=false, idempotent=false). The description goes further, disclosing the already_smart_object no-op path, the background-layer restriction, preconditions (active document, layer selected or named) and side effects (one history step), which the annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then segmented into Use when / Do NOT use / Returns / Preconditions / Side effects. Every sentence carries actionable information and none is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description supplies the return shape (ok, summary, details with layer_name, kind, already_smart_object?), plus preconditions and side effects. Nothing needed to call this mutation correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so layer_name and document_id are fully documented in the schema itself. The description restates the active-layer default but adds no format or edge-case detail beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (convert) and resource (active or named layer to embedded Smart Object), which cleanly separates it from siblings like photoshop_create_smart_object_via_copy and photoshop_rasterize_layer. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' (non-destructive transforms/filters on raster or shape layers) plus two 'Do NOT use' exclusions (already-Smart-Object layers, background layers), each with the resulting behavior or remedy. It also lists common user phrasings, which aids intent matching.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_create_artboardA

Create a Photoshop artboard (AM artboardSection) at an explicit origin or placed to the right of existing artboards.

Users often say: add iPhone frame, new artboard, multi-screen layout, 画板 ekle.

Use when: building a multi-device / multi-screen document. First artboard converts a regular canvas into an artboard document. Do NOT use when: you only need a new document tab — use photoshop_create_document.

Returns: JSON { ok, summary, details: { artboard, count } }. Preconditions: active document. Side effects: adds an artboard layer group.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoTop origin in pixels (default: aligned with existing artboards, or 0)
leftNoLeft origin in pixels (default: 32px to the right of existing artboards, or 0)
nameNoArtboard name (default Artboard)
widthYesArtboard width in pixels
heightYesArtboard height in pixels
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the mutation profile (readOnly=false, destructive=false, idempotent=false), and the description adds genuinely new behavioral facts: preconditions ('active document'), side effects ('adds an artboard layer group'), and a non-obvious state transition ('First artboard converts a regular canvas into an artboard document').

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded verb+resource, then labeled sections (Use when / Do NOT use when / Returns / Preconditions / Side effects). Every line carries distinct information; no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the description specifies the return shape ({ ok, summary, details: { artboard, count } }), preconditions, and side effects. For a 6-parameter mutation tool, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are already fully documented in the schema. The description adds only the high-level notion of 'explicit origin or placed to the right of existing artboards', which largely restates the schema's left/top defaults. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Create a Photoshop artboard (AM artboardSection)') and immediately distinguishes it from the neighboring sibling by giving the alternative explicitly (photoshop_create_document). The scope is clear enough that an agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Contains explicit 'Use when' (multi-device/multi-screen documents, first artboard converting a canvas) and 'Do NOT use when' (need a new document tab → photoshop_create_document) sections. Also supplies trigger phrases users actually say, which is directly actionable for routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_create_clipping_maskA
Idempotent

Create a clipping mask on the active layer (or a named layer).

Users often say: clip to layer below, clipping mask, clip this layer, mask to shape below.

Use when: the active layer should be visible only where the layer directly below it has opaque pixels. Do NOT use when: the layer is already clipped — returns success with already_clipping. Do NOT use when: the layer is the bottom-most layer — there is no base layer to clip into.

Returns: JSON { ok, summary, details: { layer_name, is_clipping, already_clipping? } }. Preconditions: active document; target layer must sit directly above the base layer below it in the same group/stack. Side effects: one history step (groupEvent).

ParametersJSON Schema
NameRequiredDescriptionDefault
layer_nameNoOptional exact layer name (recursive search). Default: active layer.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-destructive/idempotent, but the description goes further: it names the already_clipping success case, spells out preconditions (active document, target must sit directly above its base in the same group), and discloses the side effect (one history groupEvent step). This is rich context beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then synonym phrases for user intent, then when/when-not, then returns, preconditions, and side effects in labeled blocks. Every sentence carries distinct information with no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return JSON shape (ok, summary, details with layer_name, is_clipping, already_clipping). Combined with preconditions, side effects, and exclusions, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are fully documented in the schema. The description repeats that layer_name defaults to the active layer but adds no syntax or format detail beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Create) and resource (clipping mask) with scope (on the active layer or a named layer). It is immediately distinguishable from the sibling photoshop_release_clipping_mask.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' condition (layer should be visible only where the layer below has opaque pixels) and two explicit 'Do NOT use when' exclusions (already clipped; bottom-most layer) with the resulting behavior noted. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_create_documentA

Create a new empty Photoshop document with specified dimensions and color mode.

Use when: starting a design from scratch or no document is open. Do NOT use when: opening an existing file — use photoshop_open_image.

Returns: created document id and name. Preconditions: none. Side effects: creates a new document and makes it active.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthNoDocument width in pixels. Default 1920 when the request names no size.
heightNoDocument height in pixels. Default 1080 when the request names no size.
colorModeNoColor mode (RGB, CMYK, Grayscale)RGB
resolutionNoDocument resolution in DPI (default: 72)
document_idNoIgnored. photoshop_create_document and photoshop_open_image do not target an existing tab. Omit this, or send null or 0.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation profile is partly covered; the description adds genuinely new context by stating there are no preconditions and that the tool makes the new document active. It does not address edge behavior such as what happens if a document is already open, so it falls short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four labeled, front-loaded lines covering purpose, routing, returns, and side effects with zero filler. The alternative tool is called out early enough to redirect an agent before it reads further.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by naming the return values (document id and name), and it closes the two remaining gaps an agent would care about — preconditions and side effects. Nothing needed to invoke this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter (including defaults and the intentionally-ignored document_id) is documented in the schema itself. The description only echoes 'dimensions and color mode' without adding format or unit detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a new empty Photoshop document') plus the configurable axes (dimensions, color mode). It explicitly differentiates itself from the nearest sibling by naming photoshop_open_image as the tool to use for existing files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' (starting from scratch, no document open) and 'Do NOT use when' (opening an existing file) clauses, and routes to the correct alternative by name. Nothing about tool selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_create_layerA

Create a new empty layer above the active layer.

Use when: user needs a blank layer for painting, fills, or stacking content. Do NOT use when: adding text — use photoshop_create_text_layer.

Returns: created layer name and context. Preconditions: active document. Side effects: adds layer to history.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName for the new layer (optional)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the description's job is added context. It does add real value: preconditions (active document) and a side effect (adds layer to history), which tells the agent the action is undoable. It stops short of describing failure modes when no document is open, so not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five short labeled lines, each carrying distinct information (action, when, when-not, return, preconditions/side effects), with the core action front-loaded in the first sentence. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the explicit 'Returns: created layer name and context' line is necessary and present. Preconditions and side effects are covered, and the schema handles the parameters, leaving nothing an agent needs missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters (name, document_id) are thoroughly documented in the schema, including the null/0 active-document convention. The description adds no parameter-level guidance beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (create) plus resource (empty layer) and the placement rule (above the active layer). It also implicitly distinguishes itself from the text-layer sibling, so an agent can differentiate it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' clause names the concrete scenarios (painting, fills, stacking content) and the 'Do NOT use when' clause names the exact alternative (photoshop_create_text_layer) for the text case. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_create_layer_maskA

Create a layer mask on the active layer from the current selection (reveal selection).

Users often say: mask this, hide the background, non-destructive cutout (after selection).

Use when: non-destructive hide/show after a selection exists. Do NOT use when: no selection exists — create selection first or use remove_background recipe.

Returns: maskCreated confirmation. Preconditions: active document and active selection. Side effects: adds mask to active layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (not read-only, not destructive, not idempotent). The description adds genuinely non-structured context: preconditions (active document + active selection), the side effect (adds a mask to the active layer), and the return confirmation. It does not spell out what happens on repeated invocation, which is the one remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded verb sentence, then clearly labelled blocks (use / do not use / returns / preconditions / side effects). The 'Users often say' line is slightly unconventional but earns its place by mapping natural language to the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter mutation with no output schema, the description covers preconditions, side effects, return value, and routing to alternatives — everything an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the sole parameter (document_id) is fully documented in the schema, including null/0 semantics and stale-id behavior. The description adds no parameter detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Create a layer mask') plus the source (current selection) and target (active layer), which distinguishes it cleanly from siblings like photoshop_create_clipping_mask, photoshop_apply_gradient_mask, and photoshop_apply_layer_mask.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' and 'Do NOT use when' clauses, plus a named fallback ('create selection first or use remove_background recipe'). It also lists colloquial user phrasings ('mask this', 'hide the background', 'non-destructive cutout'), which directly aids intent matching.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_create_smart_object_via_copyA

Create an independent Smart Object via Copy — unlinked duplicate with its own embedded contents.

Users often say: new smart object via copy, independent smart copy, duplicate smart object separately.

Use when: you need a second Smart Object that does not share embedded data with the original. Do NOT use when: you want linked instances — use photoshop_duplicate_layer (Layer via Copy).

Returns: JSON { ok, summary, details: { source_layer_name, new_layer_name, kind } }. Preconditions: Smart Object layer active or named. Side effects: adds a new Smart Object layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
layer_nameNoOptional source Smart Object layer name. Default: active layer.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safety profile (readOnly=false, destructive=false, non-idempotent), and the description adds preconditions ('Smart Object layer active or named') and the side effect ('adds a new Smart Object layer'), plus the return shape. It stops short of noting irreversibility/undo behavior, so not a 5, but it clearly exceeds the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then cleanly partitioned into synonyms, Use/Do NOT use, Returns, Preconditions, and Side effects. Slightly verbose due to the 'Users often say' synonym line, but each block serves retrieval or invocation and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description supplies the return shape, preconditions, side effects, and the alternative tool. An agent has everything needed to decide and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents both layer_name (default active layer) and document_id. The description only echoes 'active or named' for the layer parameter and adds no new syntax or format detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (create) and resource (Smart Object via Copy) with the distinguishing scope 'independent... unlinked duplicate with its own embedded contents.' It explicitly contrasts with linked instances, so an agent can distinguish it from photoshop_duplicate_layer without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Uses explicit 'Use when' and 'Do NOT use when' clauses, and names the alternative tool (photoshop_duplicate_layer / Layer via Copy) for the linked-instance case. Selection criteria are fully spelled out rather than implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_create_text_layerA

Create a text layer with content, position, font, and optional typography (tracking, leading, paragraph box, alignment, color).

Users often say: add title, letter spacing, line height, text box, 字间距, 行高, 排版.

Use when: adding labels, titles, or typography to the design. Do NOT use when: editing existing text — use photoshop_update_text_content / photoshop_set_text_style. Do NOT use execute_script for tracking/leading/box — pass those fields here.

Returns: JSON { ok, summary, details: { layerName, text, style, context } }. Use photoshop_list_fonts to discover font names; photoshop_set_text_font / photoshop_set_text_style to change later. Preconditions: active document. Side effects: adds text layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX position in pixels (default: 100)
yNoY position in pixels (default: 100)
redNoText color red 0–255
blueNoText color blue 0–255
kindNopoint = single-line; paragraph = wrapped text box (default point unless box_width/height set)
textYesText content
greenNoText color green 0–255
leadingNoLine height in points. Sets auto_leading false.
fontNameNoOptional font display or PostScript name (resolved via app.fonts; see photoshop_list_fonts)
fontSizeNoFont size in points (default: 24)
trackingNoCharacter spacing in 1/1000 em (−1000 to 10000). Photoshop tracking.
alignmentNoParagraph/point justification
box_widthNoParagraph text box width in pixels (implies kind=paragraph)
box_heightNoParagraph text box height in pixels (implies kind=paragraph)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
auto_leadingNoUse Photoshop auto leading (ignores leading when true)

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (not readOnly, not destructive, not idempotent), so the description builds on that by disclosing preconditions (active document) and side effects (adds a text layer) plus a return shape. It stops short of richer behavioral detail such as how the layer is named or how conflicts with the active document selection are handled, but the added context is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then layered with user-phrase synonyms, when/when-not rules, return shape, related tools, and pre/post conditions. Dense but every block is functional; only the synonym line ('Users often say…') is slightly filler, keeping it just under the top mark.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter mutation tool with no output schema, the description supplies the missing pieces: an explicit return shape (JSON { ok, summary, details }), a precondition, side effects, and pointers to sibling tools for fonts and later edits. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds value beyond the schema: font resolution is routed through app.fonts via photoshop_list_fonts, and it flags that tracking/leading/box should be passed here rather than scripted. These are semantic aids the schema alone does not supply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (create a text layer) and enumerates the domain fields it controls: content, position, font, and optional typography (tracking, leading, paragraph box, alignment, color). The agent can distinguish this from photoshop_create_layer and the various text-editing siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' (labels, titles, typography) and 'Do NOT use when' clauses that name the exact alternatives (photoshop_update_text_content / photoshop_set_text_style) for editing existing text. It further warns against routing tracking/leading/box through execute_script, closing off a plausible wrong path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_crop_documentA
Destructive

Crop the active document to a pixel rectangle (left, top, right, bottom). Pixels outside that rectangle are deleted and the canvas shrinks.

Use when: the user gives explicit crop bounds in pixels. Do NOT use when: only one layer should scale inside the existing canvas — use photoshop_fit_layer_to_document or photoshop_scale_layer. Do NOT use when: the whole image should be resampled to a new width and height — use photoshop_resize_image.

Returns: the new document width and height. Preconditions: active document; right > left and bottom > top. Side effects: destructive crop of every layer, one history step. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
topYesTop edge position in pixels
leftYesLeft edge position in pixels
rightYesRight edge position in pixels
bottomYesBottom edge position in pixels
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and readOnlyHint=false, but the description adds substantial behavioral context: the crop is destructive to every layer, consumes one history step, is reversible via photoshop_undo, and requires right > left and bottom > top. It also states the return values (new width and height).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tightly structured with a front-loaded purpose statement followed by labeled sections for usage, returns, preconditions, and side effects. Every sentence carries concrete information about scope, validation, or reversibility.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive crop tool with no output schema, the description covers the operation, required parameters, validation constraints, side effects, reversibility, and what the tool returns. An agent has everything needed to call it correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds a validation rule not present in the schema ('right > left and bottom > top') and reinforces the pixel-coordinate nature of the rectangle. The schema already documents document_id behavior, so the description does not need to repeat it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Crop the active document') plus the exact geometric scope (pixel rectangle left/top/right/bottom) and the consequence (canvas shrinks, outside pixels deleted). It clearly distinguishes itself from sibling operations like fit_layer_to_document, scale_layer, and resize_image.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' and two 'Do NOT use when' clauses, each naming the correct alternative tool and the condition that selects it. This leaves no ambiguity about when to choose crop versus layer scaling or image resampling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_delete_layerA
Destructive

Delete the active layer, including its pixels, mask, and effects.

Use when: the user wants that layer removed from the stack. Do NOT use when: it should only be hidden — use photoshop_set_layer_visibility. Do NOT use when: only the mask should go — use photoshop_delete_layer_mask. Do NOT use when: the whole stack should collapse — use photoshop_flatten_image.

Returns: confirmation that the layer was deleted. Preconditions: active document and a deletable active layer. Side effects: destroys the layer. Reversible with photoshop_undo while history holds it.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true, but the description adds materially more: preconditions (active document and a deletable active layer), the exact side effect (destroys pixels, mask, and effects), and reversibility ('Reversible with photoshop_undo while history holds it') — the last being behavior no annotation conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose, then tightly labeled sections (Use when / Do NOT use when / Returns / Preconditions / Side effects). Each Do NOT line carries distinct routing value, so there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive one-param mutation with no output schema, the description covers purpose, routing, preconditions, side effects, reversibility, and the return shape. Nothing an agent needs to invoke it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (document_id) and schema description coverage is 100%, so the schema fully documents fallback-to-active-document semantics. The description adds nothing about the parameter, making 3 the correct baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Delete the active layer') and immediately qualifies the scope ('including its pixels, mask, and effects'), which differentiates it from sibling destructive operations like photoshop_delete_layer_mask and photoshop_flatten_image.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Three explicit 'Do NOT use when' clauses each name the correct alternative sibling (set_layer_visibility, delete_layer_mask, flatten_image) with the condition that selects it. This is textbook when/when-not/alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_delete_layer_maskB
Destructive

Delete the layer mask from active layer

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a destructive write. The description adds the useful scope fact that the target is the active layer (not a parameter-selected one), but says nothing about irreversibility, undo, or what remains of the layer afterward.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the scope qualifier ('from active layer') comes after the core action, which is appropriately tight for a one-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive toggle with full schema coverage and clear annotations, the description is adequate but thin: it omits whether the mask is recoverable, what happens if no mask exists, and how it relates to sibling mask tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so document_id is already fully documented. The description adds only the implicit note that the affected layer is the active one rather than a parameter, which is a minor clarification. Baseline 3 applies when the schema carries the parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Delete the layer mask'), and 'from active layer' scopes where the operation lands. It is inherently distinguishable from photoshop_delete_layer, though it never names that sibling or any alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus photoshop_delete_layer, photoshop_apply_layer_mask, or photoshop_create_layer_mask. The only scoping cue is 'active layer', with no prerequisites or exclusions stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_desaturateB
DestructiveIdempotent

Desaturate the active layer (convert to grayscale)

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true, covering the safety profile. The description adds that the effect applies to the active layer, which is useful scoping, but doesn't explain permanence, undoability, or behavior on non-pixel layers, so it adds modest value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the effect front-loaded in parentheses. No wasted words, though the brevity comes at the cost of missing usage context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter mutating tool with no output schema, the description is minimally adequate. It lacks guidance on when to prefer this over related adjustments and gives no note on scope (active-layer requirement, effect on locked/hidden layers).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter is fully documented in the schema (100% coverage), including null/0 handling and stale-id behavior, so the schema carries the semantic load. The description adds no parameter detail, which is acceptable given the high coverage; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Desaturate') and resource ('the active layer'), with a parenthetical clarifying effect. It is distinguishable from siblings like photoshop_adjust_hue_saturation, though it doesn't explicitly differentiate from them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, no mention of alternatives such as photoshop_adjust_hue_saturation for more controlled desaturation. The description assumes the agent already knows it wants this operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_deselectA
Idempotent

Clear the current pixel selection. Pixels are unchanged.

Use when: a selection should be cleared before the next edit. Do NOT use when: you want the inverse region selected — use photoshop_invert_selection. Do NOT use when: you want every pixel selected — use photoshop_select_all.

Returns: confirmation that the selection was cleared. Preconditions: active document. Safe when nothing is selected. Side effects: selection only. Idempotent. Reversible with photoshop_undo if a selection existed.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, but the description adds substantial context: pixels are unchanged, side effects are limited to selection, it is safe when nothing is selected, and it is reversible via photoshop_undo if a selection existed. These details go well beyond the annotations and align with readOnlyHint=false without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first sentence, followed by clearly labeled usage, return, precondition, and side-effect sections. Every line is useful, especially the return note since no output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple selection-clearing tool, the description covers purpose, sibling routing, return value, preconditions, side effects, and reversibility. Nothing an agent needs in order to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single document_id parameter has 100% schema description coverage, so the schema already explains accepted values and active-document behavior. The description adds only the precondition 'active document,' which is already implied by the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Clear the current pixel selection.' It explicitly distinguishes itself from photoshop_invert_selection and photoshop_select_all, so an agent can route correctly without opening sibling schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' guidance and two 'Do NOT use when' exclusions with named alternatives. This fully covers when to use this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_duplicate_layerA

Duplicate the active layer. The duplicate becomes the active layer; returns its name and, when available, its layer id.

ParametersJSON Schema
NameRequiredDescriptionDefault
newNameNoName for the duplicated layer (optional)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare it is a non-read-only, non-destructive, non-idempotent mutation. The description adds meaningful context beyond that: the active-layer selection changes as a side effect, and the call returns the new layer's name and (when available) its id. It stops short of saying what happens if no layer is active or where the duplicate is inserted in the stack.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short clauses, zero filler, with the core action and its result front-loaded. Every phrase carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, no-output-schema tool, the description covers action, side effect, and return values, which is nearly everything an agent needs. Minor gaps remain around failure modes (no active layer) and duplicate placement, but nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema itself richly documents document_id (null/0 semantics, activation behavior, stale-id handling). The description adds nothing about parameters, so the baseline 3 applies – the schema is doing all the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('duplicate the active layer') and immediately adds the observable result (the duplicate becomes active and returns its name/id). This is distinct from siblings like photoshop_create_layer or photoshop_merge_visible_layers without needing the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the phrase 'active layer' – the agent must first ensure a layer is selected – but the description never states prerequisites or when to prefer this over photoshop_create_layer or photoshop_apply_layer_mask workflows. No exclusions or alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_edit_smart_object_contentsA

Open a Smart Object for editing (double-click / Edit Contents). The embedded .psb becomes the active document until you save and close it.

Users often say: edit smart object, open embedded file, double-click smart layer.

Use when: modifying pixels inside an embedded Smart Object non-destructively. Do NOT use when: replacing the whole asset — use photoshop_replace_smart_object_contents.

Returns: JSON { ok, summary, details: { parent_document, embedded_document, layer_name } }. Preconditions: Smart Object layer active or named. Side effects: active document switches to the embedded .psb — save/close it to return to the parent document.

ParametersJSON Schema
NameRequiredDescriptionDefault
layer_nameNoOptional exact Smart Object layer name. Default: active layer.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic safety profile (readOnly=false, destructive=false, idempotent=false); the description goes well beyond them by disclosing the document-state side effect (active document switches to the embedded .psb, requiring save/close to return), a precondition, and the return payload shape. This is exactly the kind of context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action and effect in the first sentence, then organizes usage, routing, returns, preconditions and side effects into scannable labeled lines. The 'Users often say' paraphrase line is retrieval-oriented filler but short enough to be defensible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers everything an agent needs to call this stateful tool correctly: precondition, side effect on the active document, the required save/close follow-up, and the return JSON shape in lieu of an output schema. No meaningful gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both document_id and layer_name are already fully documented in the schema, making 3 the baseline. The description adds only the 'Smart Object layer active or named' precondition, which is a precondition rather than added parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource ('Open a Smart Object for editing') and immediately disambiguates from the closest sibling by naming photoshop_replace_smart_object_contents. An agent can distinguish it from convert_to_smart_object, create_smart_object_via_copy, and replace_smart_object_contents without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' condition (modifying pixels inside an embedded Smart Object non-destructively) paired with an explicit 'Do NOT use when' that routes to the correct alternative tool. Nothing about tool selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_execute_scriptA
Destructive

Execute custom ExtendScript (JSX) code inside Photoshop (advanced escape hatch).

Use when: no existing tool covers the operation and you can write safe JSX. Do NOT use when: a recipe or atomic tool exists — prefer photoshop_recipe_* or photoshop_* tools. Do NOT use when: painting a two-color gradient — use photoshop_fill_gradient. Document.gradients does not exist and throws "undefined is not an object".

Returns: script return value serialized as text/JSON. IMPORTANT: Your code runs inside a wrapping IIFE. Use an explicit return to pass data back — a bare trailing expression returns undefined. Example: return { ok: true }; Objects are serialized with toSource() and parsed automatically on macOS and Windows. Long scripts: pass timeout_ms (up to 600000) so the default 30s budget does not kill the job. Preconditions: valid ExtendScript; active document if script expects one. Side effects: depends on code.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesExtendScript code to execute
timeout_msNoScript timeout in milliseconds (default 30000, max 600000). Override with env PHOTOSHOP_SCRIPT_TIMEOUT. Use for long loops, batch jobs, or large documents.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive/openWorld/idempotent=false, and the description adds substantial context beyond them: the IIFE wrapping requirement, the explicit-return semantics, toSource() serialization, timeout budget override behavior, and preconditions/side-effects caveat. This is the rare case where a description genuinely augments the safety profile rather than restating it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then labeled Use/Do NOT use/Returns/Preconditions blocks that are easy to scan. The Document.gradients aside is a niche gotcha that is useful but slightly tangential to the core definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so ('script return value serialized as text/JSON'), plus preconditions, side-effect caveat, and timeout behavior. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three params, setting the baseline at 3. The description still adds operational meaning: guidance to pass timeout_ms for long scripts so the default 30s budget does not kill the job, and the active-document precondition for document_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (execute) and resource (ExtendScript/JSX code) plus its role as an 'advanced escape hatch'. This framing immediately distinguishes it from the ~100 atomic and recipe siblings that do bounded operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' and two 'Do NOT use when' clauses naming the preferred alternatives (photoshop_recipe_*, photoshop_fill_gradient) with a concrete failure case for gradients. An agent has a complete routing rule for picking this over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_expand_selectionA

Expand the active pixel selection outward by a pixel amount.

Use when: growing a tight subject selection or adding padding before feather/fill. Do NOT use when: no selection exists — create one first.

Returns: JSON { ok, summary, details: { pixels, bounds?, context } }. Preconditions: active document and active pixel selection. Side effects: modifies selection.

ParametersJSON Schema
NameRequiredDescriptionDefault
pixelsYesPixels to expand by (minimum 1)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by naming the return envelope (JSON with ok, summary, details.pixels, bounds, context), the preconditions (active document and active pixel selection), and the side effect (modifies selection). The annotations only cover safety hints; the description carries the operational burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five short labeled lines, front-loaded with the core action, then when/when-not, then return shape, preconditions and side effects. Every sentence adds distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the description describes the return envelope, the preconditions, and the mutation side effect, which is everything needed to invoke a two-parameter selection tool correctly. No meaningful gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (pixels, document_id) are already fully documented in the schema, including the null/0 active-document convention. The description only restates 'by a pixel amount' and adds no syntax or constraint detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (expand) on a specific resource (the active pixel selection) with the direction of change made explicit by 'outward'. This immediately distinguishes it from the sibling photoshop_contract_selection, which does the inverse operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit 'Use when' clause (growing a tight subject selection, adding padding before feather/fill) and a 'Do NOT use when' exclusion with the required remedy (create a selection first). No inference is left to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_export_artboardsA

Export every artboard in the active document to a folder (duplicate + crop to artboardRect, then PNG/JPEG/WebP/AVIF).

Users often say: export all artboards, multi-screen PNG, 画板 çıktısı.

Use when: delivering one file per artboard. Long jobs use a 600s script timeout. Do NOT use when: exporting the whole canvas once — use photoshop_export_as.

Returns: JSON { ok, summary, details: { exported[], failed[], folder } }. Preconditions: document with at least one artboard. Side effects: writes files; does not modify the original.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderYesAbsolute output folder (created if missing)
formatNoExport formatPNG
qualityNoQuality 0-100 (JPEG/WebP/AVIF)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the generic safety profile (non-readonly, non-destructive, non-idempotent). The description adds real behavioral context beyond that: a 600s script timeout for long jobs, preconditions (document must have at least one artboard), and side effects (writes files, does not modify the original).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then labelled Use/Do-not-use/Returns/Preconditions/Side-effects blocks that are easy to scan. The multilingual trigger phrases earn their place for intent matching. No filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return shape (JSON { ok, summary, details: { exported[], failed[], folder } }), preconditions, side effects, and timeout behavior. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents folder, format, quality, and document_id semantics in detail. The description only restates the supported formats, adding nothing beyond the enum. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: 'Export every artboard in the active document to a folder,' and even names the implementation (duplicate + crop to artboardRect, then PNG/JPEG/WebP/AVIF). This clearly distinguishes it from photoshop_export_as and the artboard siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when: delivering one file per artboard' and 'Do NOT use when: exporting the whole canvas once — use photoshop_export_as' names the alternative and the condition that selects it. Nothing left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_export_asA

Export a copy of the active document as PNG, JPEG, WebP or AVIF without changing the open document. WebP/AVIF require Photoshop 23.2+/recent builds and return a clear error when unsupported.

Users often say: export for web, save as webp, quick export png.

Use when: web-ready delivery formats are needed (WebP/AVIF/modern pipelines), or one artboard from a multi-screen file. Do NOT use when: saving the working document itself — use photoshop_save_document. For every artboard at once use photoshop_export_artboards.

Returns: JSON { ok, summary, details: { path, format, method, artboard_id? } }. Preconditions: active document. Side effects: writes one file to path. Optional artboard_id exports only that board (duplicate + crop).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute output file path (extension should match format)
formatNoExport formatPNG
qualityNoQuality 0-100 (JPEG/WebP/AVIF)
artboard_idNoOptional artboard layer id from photoshop_list_artboards — export that board only instead of the full canvas
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly=false, destructive=false, idempotent=false), and the description adds version gating for WebP/AVIF ('Photoshop 23.2+' with a clear error), side effects ('writes one file to path'), preconditions (active document), and the return shape — well beyond the annotations. Minor gap: it doesn't warn that an existing file at path may be overwritten, which matters for a file-writing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded — purpose, then when/when-not, then returns and preconditions. Slightly padded by the 'Users often say' search-phrase line and some redundancy between the prose and the parameter descriptions, but every section is scannable and earns most of its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by spelling out the JSON return shape, the side effect of writing to path, the active-document precondition, and the version constraints for modern formats. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented, which sets the baseline at 3. The description adds only marginal meaning ('optional artboard_id exports only that board (duplicate + crop)' and the quality/format interaction are already implied by the schema), so it does not elevate beyond baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Export a copy of the active document') plus supported formats, and explicitly distinguishes itself from photoshop_save_document and photoshop_export_artboards. An agent can pick this over its closest siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Has explicit 'Use when' and 'Do NOT use when' blocks that name the two alternatives and the exact conditions selecting each (web-ready formats, single artboard vs. all artboards, saving the working document). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_feather_selectionA

Feather (soften) the edges of the active pixel selection.

Use when: soft transitions before fill, mask, or delete operations. Do NOT use when: a hard edge is required or no selection exists.

Returns: JSON { ok, summary, details: { pixels, bounds?, context } }. Preconditions: active document and active pixel selection. Side effects: modifies selection edges.

ParametersJSON Schema
NameRequiredDescriptionDefault
pixelsYesFeather radius in pixels (minimum 1)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a non-read-only, non-idempotent, non-destructive mutation, and the description adds preconditions (active document and active pixel selection) plus the side effect that selection edges are modified. That goes beyond the annotations. It stops short of 5 only because it doesn't say whether the operation is repeatable/accumulative on an already-feathered selection.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then uses tight labeled lines (Use when / Do NOT use when / Returns / Preconditions / Side effects). Every sentence carries information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description names the return shape and the key fields, and covers preconditions and side effects. For a two-parameter selection-mutation tool, an agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (pixels radius, document_id resolution rules) are already fully documented in the schema. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Feather (soften) the edges of the active pixel selection'), which clearly separates it from sibling selection tools like photoshop_expand_selection or photoshop_contract_selection. The parenthetical gloss removes any ambiguity about what feathering means.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' (soft transitions before fill, mask, or delete) and 'Do NOT use when' (hard edge required, or no selection exists) clauses give both positive and negative routing conditions. Nothing is left for the agent to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_fill_gradientA
DestructiveIdempotent

Paint a two-color linear gradient on the active layer pixels.

Use when: the user asks for a color gradient, blend, or "mavi yeşil" style ramp on a layer. Do NOT use when: a flat color is enough — use photoshop_fill_layer. Do NOT use when: the gradient should fade the layer into the background — use photoshop_recipe_gradient_fade. Do NOT use when: you would write ExtendScript. Document.gradients does not exist.

Returns: the two colors and direction applied. Preconditions: active document and an unlocked non-text layer. Side effects: overwrites those pixels, one history step. The same colors on the same pixels are idempotent. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
toRedYesEnd red (0-255)
toBlueYesEnd blue (0-255)
fromRedYesStart red (0-255)
toGreenYesEnd green (0-255)
fromBlueYesStart blue (0-255)
directionNoGradient axis. Default left_to_right.
fromGreenYesStart green (0-255)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, but the description goes further: it names preconditions (active document, unlocked non-text layer), side effects (overwrites pixels, one history step), confirms idempotency for identical colors/pixels, and states reversibility via photoshop_undo. Consistent with, and additive to, the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line purpose followed by labeled sections (Use when / Do NOT use when / Returns / Preconditions / Side effects). Every sentence carries distinct operational value; no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description states the return value, preconditions, side effects, idempotency, and reversibility — everything an agent needs to call and reason about a destructive pixel operation correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 8 parameters (RGB channels, direction enum, document_id) are already documented in the schema. The description adds only 'two colors and direction' at a high level, which matches the schema without adding format or edge-case detail. Baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (Paint) + resource (two-color linear gradient) + scope (active layer pixels). Clearly distinguishable from photoshop_fill_layer and photoshop_recipe_gradient_fade, both of which are named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' with concrete triggers (gradient/blend/color ramp) and three 'Do NOT use when' clauses that each route to a specific alternative (photoshop_fill_layer for flat color, photoshop_recipe_gradient_fade for fading into background). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_fill_layerA
DestructiveIdempotent

Fill the active layer with a solid RGB color. If a selection exists, only that region is filled and the selection stays; otherwise the whole layer is filled and the selection is cleared.

Use when: a flat color fill on the active layer or on the current selection. Do NOT use when: a new empty layer is needed first — use photoshop_create_layer, then this. Do NOT use when: the fill should be a two-color gradient — use photoshop_fill_gradient. Do NOT use when: the selection should be filled with surrounding content — use photoshop_content_aware_fill. Do NOT use when: the active layer is text — rasterize with photoshop_rasterize_layer first, or recolor type with photoshop_set_text_color. A smart object is rasterized in place and then filled. No extra layer is created.

Returns: the RGB color applied. Preconditions: active document and an unlocked non-text layer. Side effects: overwrites those pixels. The same color on the same pixels is idempotent. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
redYesRed component (0-255)
blueYesBlue component (0-255)
greenYesGreen component (0-255)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive/idempotent, but the description adds substantial context beyond them: the selection-vs-whole-layer branching and whether the selection is preserved or cleared, that smart objects are rasterized in place with no extra layer, preconditions (active document, unlocked non-text layer), and that photoshop_undo reverses it. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded core behavior in the first sentence, then labeled blocks (Use when / Do NOT use when / Returns / Preconditions / Side effects). Dense but every line carries routing or safety information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema, the description supplies the return value ('the RGB color applied'), preconditions, side effects, idempotency note, and undo path. Nothing an agent needs to invoke it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all four params are self-documenting (RGB ranges, document_id null/0 semantics), so the schema carries this dimension. The description only restates that an RGB color is applied and adds no syntax or format detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Fill the active layer with a solid RGB color') and immediately distinguishes itself from the three near-neighbor siblings (photoshop_fill_gradient, photoshop_content_aware_fill, photoshop_generative_fill). An agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' plus four 'Do NOT use when' clauses, each naming the correct alternative tool and the condition that selects it (create_layer for an empty layer, fill_gradient for two-color, content_aware_fill for surround-content fill, rasterize_layer/set_text_color for text). This is the textbook shape for routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_fit_layer_to_documentA
Destructive

Scale the active layer to the document canvas, keeping aspect ratio. fillDocument: false (default) fits inside and may letterbox; true covers the canvas and may crop the layer.

Use when: a placed layer should match the canvas size. Do NOT use when: you want a specific percent — use photoshop_scale_layer. Do NOT use when: the document canvas itself should change size — use photoshop_resize_image or photoshop_crop_document.

Returns: confirmation of the fit. Preconditions: active document and active layer. Side effects: transforms that layer. Does not change document dimensions. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
fillDocumentNoIf true, fills entire canvas (may crop). If false, fits within canvas (may have margins). Default: false

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, but the description goes further: it states preconditions (active document and active layer), the exact side effect (transforms that layer, does not change document dimensions), that the operation is reversible via photoshop_undo, and that fillDocument=true may crop the layer — consistent with the destructive annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then a clean labeled block (Use when / Do NOT use when / Returns / Preconditions / Side effects). Every sentence carries distinct, actionable information with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with no output schema, the description covers return value ('confirmation of the fit'), preconditions, side effects, reversibility, and the destructive crop case. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description's explanation of fillDocument (fits inside and may letterbox vs covers the canvas and may crop) largely restates what the schema already documents for that parameter, adding only a framing of the default's consequences.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (scale) plus resource (active layer) and scope (to the document canvas, keeping aspect ratio), and explicitly names the sibling tools it is not (photoshop_scale_layer, photoshop_resize_image, photoshop_crop_document). An agent can distinguish it from the ~120 siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' and two 'Do NOT use when' clauses, each routing to a named alternative (photoshop_scale_layer for a specific percent; photoshop_resize_image / photoshop_crop_document for changing canvas size). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_flatten_imageA
Destructive

Flatten the active document into a single Background layer. Hidden layers are discarded.

Use when: the user explicitly wants one background layer and no remaining layer stack. Do NOT use when: hidden layers should survive — use photoshop_merge_visible_layers. Do NOT use when: layers must stay editable.

Returns: confirmation that the document was flattened. Preconditions: active document. Side effects: destroys every layer, mask, and hidden pixel. photoshop_undo can restore the stack while history still holds it.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, but the description goes well beyond them by disclosing exactly what is destroyed (every layer, mask, and hidden pixel) and that photoshop_undo can restore the stack while history still holds it. It also states the precondition (active document) and the return confirmation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action, then organized under explicit 'Use when', 'Do NOT use when', 'Returns', 'Preconditions', and 'Side effects' cues. Every sentence carries actionable information with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-parameter tool with rich annotations and no output schema, the description covers purpose, routing alternatives, preconditions, side effects, reversibility, and return value. Nothing an agent needs to invoke it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the document_id parameter is thoroughly documented in the schema, including null/0 behavior and stale-id handling. The description adds no parameter-level detail, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Flatten the active document into a single Background layer') and immediately adds the non-obvious scope detail that hidden layers are discarded. It clearly distinguishes the operation from sibling tools like photoshop_merge_visible_layers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit 'Use when' and two 'Do NOT use when' conditions, including the precise alternative to choose when hidden layers must survive or editability must be preserved. An agent can route between flatten and merge_visible_layers without inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_generate_from_datasetsA

Batch-export the active document once per data set: applies each data set, saves a copy, moves on. "Mail merge for images".

Users often say: generate all variants, batch personalize, render every row.

Use when: data sets are already imported (photoshop_import_datasets) and you want one file per row.

Returns: JSON { ok, summary, details: { exported, skipped, output_paths } }. Preconditions: active document with data sets. Side effects: writes files to output_dir.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput formatJPEG
output_dirYesDirectory for generated files (created if missing)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
dataset_namesNoSubset of data set names to export (default: all)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety hints (readOnly=false, destructive=false, idempotent=false, openWorld=false), and the description adds real value beyond them: file-writing side effects to output_dir, the precondition of an active document with data sets, and the return payload shape. It stops short of saying whether existing files in output_dir are overwritten or how name collisions are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core operation, then tiered into user phrasings, use-when, returns, preconditions and side effects. Every sentence carries distinct information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-param mutation tool with no output schema, the description supplies preconditions, side effects, and a return shape, which is close to complete. Minor gaps remain around overwrite/name-collision behavior and what happens to skipped rows.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents output_dir, document_id, format, and dataset_names in detail (including null/0 active-document behavior). The description adds only the row-to-file framing and does not expand on format choices or dataset subsetting, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb, resource and mechanism: batch-export one file per data set by applying each set, saving, and moving on. The 'mail merge for images' analogy plus the explicit per-row semantics distinguish it from photoshop_export_as, photoshop_export_artboards, and photoshop_recipe_batch_mockup_replace, which could otherwise look similar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' clause names the prerequisite tool (photoshop_import_datasets) and the goal condition ('one file per row'). It also lists the user phrasings that should route here, which is directly actionable for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_generate_imageA

Photoshop Generate Image (Firefly ImageGen): create an image from a text prompt.

Use when: the user asks for ImageGen, text-to-image, or a new picture from a description.

Returns: { ok, summary, details }. Preconditions: generative_fill capability; Adobe generative credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthNoWidth if creating new doc (default 1024)
heightNoHeight if creating new doc (default 1024)
promptYesImage description
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutating, non-idempotent, open-world, non-destructive profile, and the description adds value beyond that: a preconditions block naming the generative_fill capability and Adobe generative credit consumption, plus an explicit return shape. It doesn't clarify whether the result lands in a new document or a new layer, which is the main behavioral unknown.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short labeled lines (purpose, Use when, Returns, Preconditions) with the purpose front-loaded and zero filler. The labeled format is slightly mechanical but every line carries information an agent would otherwise have to infer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter, no-output-schema tool the description covers purpose, triggers, return shape, and capability/credit prerequisites, so the calling agent has enough to invoke it. The remaining ambiguity is whether output goes to a new document (implied by width/height) or the active document, which the description never resolves.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so prompt, document_id, width, and height are already documented in the schema, including the null/0 active-document convention and stale-id tolerance. The description adds no extra parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('create an image from a text prompt') and adds the engine qualifier (Firefly ImageGen / text-to-image), which separates it from generic image tools. It does not explicitly contrast with the nearest siblings such as photoshop_generative_fill or photoshop_place_image, so an agent still has to reason about whether it wants generation or placement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use when' clause gives concrete trigger conditions (user asks for ImageGen, text-to-image, or a new picture from a description), which is clear routing guidance. It stops short of stating when NOT to use it (e.g., inpainting inside a selection should use photoshop_generative_fill instead), so the sibling boundary is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_generative_expandA
Destructive

Extend the canvas beyond its edges using Generative Expand (Firefly).

Use when: outpainting, extending background, or expanding composition.

Returns: { ok, summary, details: { direction, prompt, wait } }. Preconditions: active document; generative_fill capability. Side effects: enlarges canvas with generated content.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptNoDescribe how to extend the imageextend the background naturally
directionNoExpand direction (default all)all
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, openWorldHint=true and non-idempotency; the description adds value beyond them by stating preconditions (active document, generative_fill capability) and a concrete side effect ('enlarges canvas with generated content'). This meaningfully explains what the destructive annotation implies, though it omits any note on reversibility/undo or rate/cost behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is tightly organized into front-loaded purpose plus labeled 'Use when', 'Returns', 'Preconditions' and 'Side effects' lines. Every sentence carries distinct information with no repetition of the tool name or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter outpainting tool with no output schema, the description supplies the return shape, preconditions and side effects, which covers most of what an agent needs. Minor gaps remain (e.g. the unexplained 'wait' return field, no guidance on prompt quality or canvas-size limits), keeping it below a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents prompt, direction (with enum) and document_id in detail. The description only echoes 'direction' and 'prompt' inside the return shape and adds no syntax, defaults or format guidance beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource — 'Extend the canvas beyond its edges using Generative Expand (Firefly)' — so the agent immediately knows this is outpainting. It distinguishes itself implicitly from generative_fill/remove/upscale by the 'beyond its edges' scope, but never names or contrasts a sibling explicitly, which keeps it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use when: outpainting, extending background, or expanding composition' gives clear triggering contexts that an agent can match against user intent. It stops short of a 5 because it names no exclusions or alternative tools (e.g. when generative_fill would be preferred instead).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_generative_fillA
Destructive

Fill the current selection using Adobe Generative Fill (Firefly) with a text prompt.

Use when: adding or replacing content inside a selection with generative AI. Do NOT use when: no selection exists — create one first or use photoshop_select_subject. Do NOT use when: Photoshop version lacks generative_fill — check photoshop_get_capabilities.

Returns: { ok, summary, details: { action_id, prompt, wait } }. Preconditions: PS 24+ with generative credits; active pixel selection. Side effects: modifies pixels in selection; may consume Adobe generative credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesDescribe what to generate in the selection
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (destructive/openWorld/non-idempotent) by stating preconditions (PS 24+ with generative credits, active pixel selection), concrete side effects (pixel mutation, credit consumption), and the return shape. The credit-consumption warning is operationally important and is nowhere in the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Labeled sections (Use when / Do NOT use when / Returns / Preconditions / Side effects) put the action first and the caveats after. Every sentence carries distinct information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description supplies the return shape, required environment, destructiveness, and cost implications. An agent has everything needed to call this safely without further discovery.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the document_id semantics (null/0 fallback, stale-id tolerance) are fully documented in the schema. The description only restates 'with a text prompt', adding no syntax or constraints beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (fill) + resource (current selection) + mechanism (Adobe Generative Fill/Firefly) + input (text prompt). This clearly separates it from photoshop_content_aware_fill and photoshop_generate_image, which an agent must choose between.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' plus two 'Do NOT use when' clauses, each naming the alternative to reach for instead (photoshop_select_subject for creating a selection, photoshop_get_capabilities for version checks). Routing is fully determined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_generative_removeA
Destructive

Remove content using the AI Remove tool (or generative fill fallback) on the current selection.

Use when: erasing distractions, people, or objects with generative AI. Do NOT use when: generative unavailable — fallback to photoshop_recipe_remove_distraction.

Returns: { ok, summary, details }. Preconditions: selection or auto_select_subject; generative_fill capability. Side effects: inpaints selected region; consumes generative credits when cloud-backed.

ParametersJSON Schema
NameRequiredDescriptionDefault
feather_pxNoEdge feather before remove (0-20, default 0)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
auto_select_subjectNoRun Select Subject when no selection exists (default false)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive/openWorld/non-idempotent, and the description goes further by naming preconditions (existing selection or auto_select_subject; generative_fill capability) and side effects (inpainting the selected region, consuming generative credits on cloud-backed runs) that the annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five labeled, front-loaded lines (action, use when, do not use when, returns, preconditions, side effects) with no filler; each sentence carries distinct operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive generative tool with no output schema, the description still supplies the return shape ({ ok, summary, details }), preconditions, fallback routing, and side effects — everything needed to invoke it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so document_id, feather_px, and auto_select_subject are already documented in the schema. The description only echoes auto_select_subject in the precondition line and adds no format or interaction detail beyond it, matching the baseline for fully covered schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove content using the AI Remove tool ... on the current selection') and explicitly notes the generative-fill fallback path, which separates it from the many other fill/selection siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit 'Use when' (erasing distractions, people, objects with generative AI) and 'Do NOT use when' (generative unavailable) clauses that route the agent to a named alternative, photoshop_recipe_remove_distraction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_generative_upscaleA
Destructive

Upscale the active document using Generative Upscale (PS 27+).

Use when: increasing resolution with AI detail recovery. Do NOT use when: generative_upscale flag is false — use photoshop_resize_image.

Returns: { ok, summary, details }. Preconditions: generative_upscale capability; signed-in Adobe account.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
target_scaleNoTarget scale factor (2 or 4)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered structurally. The description adds value beyond that with the PS 27+ version gate, the generative_upscale capability precondition and the Adobe account sign-in requirement, plus an inline return shape for a tool with no output schema. It stops short of saying whether the original pixels are overwritten in place.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action in one sentence, then labels each remaining line (Use when / Do NOT use when / Returns / Preconditions). No sentence is redundant or padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with no output schema, the description supplies the return shape, the capability and account preconditions, and the sibling routing rule. Nothing an agent needs to select or invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including detailed semantics for document_id (null/0 for active document, stale ids tolerated) and the 2/4 enum for target_scale. The description adds nothing beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (upscale), resource (active document) and named technology (Generative Upscale, PS 27+). It is unambiguously distinguishable from the nearest sibling, photoshop_resize_image, which it names explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit 'Use when' (increasing resolution with AI detail recovery) and 'Do NOT use when' (generative_upscale flag is false) with the alternative tool named. The routing decision is fully specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_get_capabilitiesA
Read-onlyIdempotent

Return version-aware feature flags for the installed Photoshop (Select Subject v2, Generative Fill, etc.).

Use when: once per session before suggesting AI-powered features or gated recipes. Do NOT use when: Photoshop version is already known from photoshop_get_version.

Returns: JSON { version, features: { select_subject_v2, generative_fill, ... } }. Preconditions: none. Side effects: none.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Announces preconditions (none) and side effects (none), and adds the 'once per session' caching/usage rhythm, which is behavioral context beyond the structured fields. Some of this overlaps with readOnlyHint/destructiveHint, but the session-cadence advice is genuinely additive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line purpose followed by labeled Use/Do-not-use/Returns/Preconditions/Side effects sections. Every line earns its place; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description supplies the return shape (JSON with version and a features map), and preconditions/side effects cover the operational envelope. Nothing needed to call this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the schema carries nothing to disambiguate and the baseline of 4 applies. The description correctly implies no inputs are required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Return) and resource (version-aware feature flags) with concrete examples (Select Subject v2, Generative Fill). It is clearly distinguished from the sibling photoshop_get_version by describing capabilities rather than version info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when: once per session before suggesting AI-powered features or gated recipes' and 'Do NOT use when: Photoshop version is already known from photoshop_get_version' — names both the condition and the alternative sibling tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_get_document_infoA
Read-onlyIdempotent

Read the active document id, name, size, resolution, and color mode. Does not change pixels or which tab is active.

Use when: you need dimensions or color mode of the front document only. Do NOT use when: several documents are open and you need every tab — use photoshop_list_documents. Do NOT use when: you also need the active layer and selection — use photoshop_get_state.

Returns: document context JSON. Preconditions: an open document. Side effects: none.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real value on top: a stated precondition (an open document), an explicit 'Side effects: none', and the non-goal of not changing pixels or the active tab. Minor tension: the parameter doc says a positive document_id activates that document, which sits awkwardly with 'does not change ... which tab is active' – worth flagging, though it concerns the schema rather than the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded summary sentence, then tightly labelled Use / Do NOT use / Returns / Preconditions / Side effects blocks. Every line carries information an agent needs; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates reasonably by naming the returned fields and characterizing the payload as 'document context JSON', and it states preconditions and side effects. A slightly fuller note on the return shape would close the last gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single document_id parameter is fully documented in the schema (including the null/0 and activation semantics). The description says nothing about the parameter and its 'active document' framing is narrower than what the schema allows, so it adds no meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb (Read) and enumerates exactly which document attributes are returned (id, name, size, resolution, color mode), which immediately separates it from sibling readers like photoshop_list_documents or photoshop_get_state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when/when-not structure with two named alternatives and the precise condition selecting each: multi-tab enumeration goes to photoshop_list_documents, layer/selection needs go to photoshop_get_state. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_get_historyA
Read-onlyIdempotent

Read the history stack of the active document, including which state is current. Does not change pixels.

Use when: deciding how many steps photoshop_undo or photoshop_redo should take. Do NOT use when: you want to change the document — use photoshop_undo or photoshop_redo.

Returns: the history state list as text. Preconditions: active document. Side effects: none.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful context beyond those annotations: the 'active document' precondition, the return format (history state list as text), and a no-side-effects statement. The 'does not change pixels' line is somewhat redundant with the annotations, keeping this from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose, then structures the remainder into compact labeled sections (Use when, Do NOT use when, Returns, Preconditions, Side effects). Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only, single-parameter tool with no output schema, the description covers purpose, usage conditions, alternatives, return shape, and preconditions. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, fully documenting the single document_id parameter including null/0 behavior and activation semantics. The description adds no parameter-level detail, so the baseline of 3 is appropriate when the schema carries the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Read the history stack of the active document, including which state is current.' It also explicitly distinguishes its scope from sibling tools photoshop_undo and photoshop_redo, so an agent can tell what this tool is for without opening its schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' and 'Do NOT use when' guidance, naming the alternatives (photoshop_undo, photoshop_redo) and the condition that selects them. Nothing about tool selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_get_layersA
Read-onlyIdempotent

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

Use when: choosing a layer to edit, debugging structure, or after organize_layers. Do NOT use when: only session summary is needed — use photoshop_get_state (lighter).

Returns: layerCount, layers array (LayerSets include is_artboard), context. Preconditions: active document. Side effects: none.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as read-only, idempotent, non-destructive, and not open-world, so the safety profile is covered. The description adds useful context with 'Preconditions: active document' and 'Side effects: none,' plus the returned layer structure, though it does not discuss rate limits or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, then structured into concise sections for usage, returns, preconditions, and side effects. Every sentence earns its place and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the description summarizes the key return fields (layerCount, layers array, context) and notes LayerSet artboard behavior. Combined with the rich annotations and complete parameter schema, an agent has enough information to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single document_id parameter is thoroughly documented in the schema, including null/0 behavior and document activation. The description mentions the active document but does not add parameter semantics beyond what the schema already provides, so the baseline score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: list all layers in the active document, including the fields returned (kind, visibility, opacity). It also implicitly distinguishes itself from broader state inspection by noting LayerSets and artboards in the return structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit 'Use when' guidance and a clear 'Do NOT use when' exclusion pointing to photoshop_get_state as the lighter alternative. This directly helps an agent choose between inspecting layer detail and fetching only session summary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_get_previewA
Idempotent

Export the active document as a base64 JPEG preview for visual verification.

Use when: after visual edits to confirm result before reporting success to the user. Do NOT use when: you only need numeric state — use photoshop_get_state (much cheaper).

Returns: MCP image content block (JPEG) plus metadata text (document size, color mode, up to 40 top-level layer names). Hosts that support MCP Apps also render ui://photoshop/preview. Preconditions: active document required. Side effects: creates and deletes a temp file; does not modify the document.

ParametersJSON Schema
NameRequiredDescriptionDefault
qualityNoJPEG quality 1–12 (default 8)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
max_dimension_pxNoMaximum long edge in pixels (default 1024)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, but the description explains WHY it is not read-only (creates and deletes a temp file) and explicitly reassures that the document is not modified, plus a precondition (active document required). That is meaningful context beyond the boolean flags, though it omits things like latency or size limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence followed by clearly labeled Use when / Do NOT use when / Returns / Preconditions / Side effects blocks. Every sentence carries distinct information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully covers the return shape (MCP image content block plus metadata text, and the MCP Apps UI render), plus preconditions and side effects. An agent has everything needed to call and interpret it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents quality, max_dimension_px and the document_id resolution rules in detail. The description adds no parameter-level detail (e.g., how quality affects verification fidelity), so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Export the active document as a base64 JPEG preview') with an explicit rationale ('for visual verification'). It is clearly distinguishable from retrieval/state siblings like photoshop_get_state and photoshop_get_layers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' and 'Do NOT use when' clauses, and names the cheaper alternative (photoshop_get_state) with the condition that selects it. Nothing about routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_get_selection_boundsA
Read-onlyIdempotent

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

Use when: verifying selection exists and its size/position before mask, fill, or recipe steps. Do NOT use when: creating or modifying a selection — use photoshop_select_rectangle or photoshop_select_subject.

Returns: JSON { ok, summary, details: { has_selection, bounds?, context } }. Preconditions: active document. Side effects: none.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, and non-destructive hints, and the description's '(read-only)' plus 'Side effects: none' partly restate them. It does add value beyond the annotations by stating the precondition (an active document must exist) and disclosing the return envelope shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Sectioned and front-loaded: purpose first, then Use when / Do NOT use when, then Returns and Preconditions. Every line carries distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description discloses the return JSON shape (ok, summary, details with has_selection, bounds, context) and the precondition. Combined with full annotation coverage, an agent has everything needed to call and interpret this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single document_id parameter is fully documented in the schema itself (active-document fallback, stale-id behavior). The description adds no parameter-level detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Read) plus resource (active pixel selection bounds) with units (document pixels) and a read-only qualifier. An agent can distinguish it from selection-creating siblings like photoshop_select_rectangle without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' clause names the verification scenario before mask/fill/recipe steps, and the 'Do NOT use when' clause names two concrete alternatives (photoshop_select_rectangle, photoshop_select_subject) for the excluded case. Both the triggering and excluding conditions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_get_stateA
Read-onlyIdempotent

Return a cheap read-only snapshot of Photoshop session state (active document, layer, selection).

Use when: before any tool that needs an active document/layer, or after an error to recover context. Do NOT use when: you only need a visual preview — use photoshop_get_preview instead.

Returns: JSON with hasDocument, openDocumentCount, documents[] (id, name, width, height, saved, is_active for every open file), document (id, name, path, saved, width, height, resolution, colorMode, bitsPerChannel, layerCount, layers[] up to 40 top-level layers, artboards), activeLayer, activeArtboard, hasSelection. path is omitted until the file has been saved. Capture document.id and pass it as document_id on later mutating calls. Artboard ids come from document.artboards[].id. Preconditions: none (safe on empty session). Side effects: none.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, and 'Preconditions: none / Side effects: none' largely restates them. The description does add genuinely new behavior: the 40 top-level layer truncation cap, that path is omitted until the file is saved, and that it is 'cheap' and safe on an empty session.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Labeled sections (Use when / Do NOT use when / Returns / Preconditions / Side effects) make it front-loaded and scannable. The Returns block is a long enumeration and partly repeats the opening parenthetical, but it substitutes for the absent output schema so the length is largely earned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the full return-value burden and does so thoroughly (field list, truncation cap, conditional path field). Preconditions, side effects, and downstream parameter usage are all covered, leaving nothing an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, and the description goes beyond it by explaining the workflow contract: capture document.id and pass it as document_id on later mutating calls, and artboard ids come from document.artboards[].id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Return a cheap read-only snapshot of Photoshop session state') and enumerates the scope (active document, layer, selection). It explicitly separates itself from the nearest confusable sibling, photoshop_get_preview, so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' (before any tool needing an active document/layer, or after an error to recover context) and 'Do NOT use when' (visual preview -> photoshop_get_preview). The alternative and the condition that selects it are named outright.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_get_versionA
Read-onlyIdempotent

Return the detected Photoshop version string.

Use when: user asks about compatibility or before version-gated features. Do NOT use when: you need feature flags — prefer photoshop_get_capabilities.

Returns: version string. Preconditions: none. Side effects: none.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds preconditions ('none') and side effects ('none') explicitly, which is useful confirmation, though it doesn't describe the version string's format or source of detection.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose followed by tightly labeled Use when / Do NOT use when / Returns / Preconditions / Side effects lines. Every sentence earns its place with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read tool with no output schema, the description covers purpose, routing, return type, and pre/post-conditions. Only a note on the version string's expected format would make it fully exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so per the rubric the baseline is 4. The description adds nothing parameter-related (there is nothing to add) and notes only the return value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Return the detected Photoshop version string.' It clearly distinguishes itself from the nearest sibling by naming photoshop_get_capabilities as the tool for feature flags.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('user asks about compatibility or before version-gated features') and when-not-to-use with a named alternative ('prefer photoshop_get_capabilities'). This is the full when/when-not/alternatives pattern.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_image_stackA

Load 2+ image files into one document, convert to a smart object and apply a stack mode (mean/median/max/min/...). Classic "remove tourists from N shots" or noise reduction — no generative AI involved.

Users often say: remove tourists, median stack, average these photos, noise stack, turistleri sil.

Use when: the user has multiple aligned shots of the same scene and wants a statistical blend. Do NOT use when: removing a single object from one photo — use photoshop_generative_remove or photoshop_content_aware_fill.

Returns: JSON { ok, summary, details: { file_count, mode, layer_name } }. Preconditions: 2+ existing image files. Side effects: opens the files; the stacked result becomes the active document.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoStack mode — median removes transient objects, mean reduces noisemedian
filesYesAbsolute paths of the images to stack (min 2)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnly=false, destructive=false, idempotent=false, so safety profile is partly covered, but the description adds real value beyond them: preconditions (2+ existing files), side effects (files are opened, stacked result becomes active document), and the no-generative-AI behavioral note. It does not state undo/reversibility, so not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence, then labeled Use/Do-NOT/Returns/Preconditions/Side-effects sections. Every block is scannable and earns its place, including the user-phrase line that maps natural language to the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description supplies the return shape, preconditions, and side effects, and gives explicit routing to alternatives. For a 3-parameter tool with 100% schema coverage, nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the mode enum is already documented in the schema (including the median/mean meanings the description repeats). The description adds no syntax or format detail beyond the structured fields, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States specific verbs and resource: load 2+ files, convert to smart object, apply a stack mode. The 'remove tourists / noise reduction' framing and 'no generative AI' note let an agent distinguish it from the many generative and blur siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' (multiple aligned shots of the same scene needing a statistical blend) and 'Do NOT use when' (single-object removal) with named alternatives photoshop_generative_remove and photoshop_content_aware_fill. The user-phrase triggers ('median stack', 'turistleri sil') further aid intent routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_import_datasetsA

Import a Photoshop variables/data-sets XML file into the active document (the same file Image > Variables > Data Sets > Import accepts).

Users often say: load data sets, import variables XML, data-driven graphics.

Use when: the template PSD already has variable-bound layers and you want to load rows from an XML file. Do NOT use when: generating a batch from a CSV directly — use photoshop_recipe_csv_to_cards.

Returns: JSON { ok, summary, details: { count, datasets } }. Preconditions: active document with variables defined (Image > Variables > Define).

ParametersJSON Schema
NameRequiredDescriptionDefault
xml_pathYesAbsolute path to the variables/data-sets XML file
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=false, destructive=false, openWorld=false, so the safety profile is largely covered. The description adds real value beyond that: the precondition (active document with variables defined via Image > Variables > Define), the return payload shape, and the aliases users may use. It does not clarify what happens to pre-existing data sets on repeat import, which the idempotentHint=false makes a natural question.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then a compact alias line, then Use/Do-NOT-Use, return shape, and preconditions. Every line carries information an agent needs; no filler or repetition of structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by specifying the return shape ({ ok, summary, details: { count, datasets } }) and the prerequisite document state. For a 2-parameter import tool this covers everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so xml_path and document_id are already fully documented, including the null/0 active-document convention and the stale-id behavior. The description adds no parameter-level detail, so the baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (import) and resource (a Photoshop variables/data-sets XML file into the active document), and grounds it in the equivalent UI action (Image > Variables > Data Sets > Import). It also names the sibling it is not (photoshop_recipe_csv_to_cards), so an agent can distinguish it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' and 'Do NOT use when' clauses, with the alternative tool named and the selecting condition (template PSD has variable-bound layers vs. generating a batch from CSV directly). This is exactly the when/when-not/alternative structure that makes routing unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_install_fontA

Install a font file for the current user and reload Photoshop's font list without quitting.

Use when: photoshop_list_fonts does not include a font the user wants, and they already have the font file. Does not download fonts. file_path is an absolute path to a .ttf, .otf, .ttc, or .otc. macOS copies it to ~/Library/Fonts (Font Book, Current User). Windows installs it for the current user only, not for all users. If Photoshop is open, this calls app.refreshFonts() so the new PostScript names are listed immediately. Do not quit Photoshop.

Fredoka Bold is the Bold named instance inside the variable font Fredoka[wdth,wght].ttf (SIL Open Font License, Google Fonts). Its PostScript name is Fredoka-Bold. There is no separate Fredoka Bold file in that release.

Returns: installed_path, post_script_names, fonts_refreshed. Side effects: writes the current-user font folder and reloads the open app's font list.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesAbsolute path to a .ttf, .otf, .ttc, or .otc file
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: documents per-platform install targets (macOS ~/Library/Fonts, Windows current-user only), that app.refreshFonts() is called when Photoshop is open, the explicit instruction not to quit Photoshop, and the side effects of writing the font folder and reloading the app's font list. Annotations only say non-read-only, non-destructive, non-idempotent; the description supplies the operational reality.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded with clear labels ('Use when:', 'Returns:', 'Side effects:') and no wasted preamble. The multi-sentence Fredoka Bold digression is a single-font tangent that, while illustrative, spends description budget on trivia not needed to invoke the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by naming the return fields (installed_path, post_script_names, fonts_refreshed) and enumerating side effects and platform differences. An agent has everything required to call this correctly and predict the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so file_path and document_id are already documented in the schema, and the description largely restates the accepted extensions and absolute-path requirement. The Fredoka paragraph adds a nuance about how one variable font file maps to multiple PostScript names, which is genuinely beyond the schema, but it is narrowly scoped to one example rather than general parameter guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Install a font file for the current user') plus the accompanying behavior (reload Photoshop's font list without quitting). This is clearly distinguishable from siblings like photoshop_list_fonts or photoshop_set_text_font, which are referenced or implied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when: photoshop_list_fonts does not include a font the user wants' names the triggering sibling and the prerequisite condition (user already has the file). It also gives a clear exclusion ('Does not download fonts'), so the agent knows when to route elsewhere.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_invertB
Destructive

Invert colors of the active layer

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds the target scope ('active layer'), but does not disclose anything beyond that, such as whether the operation is undoable or how it interacts with layer masks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It is appropriately sized for a simple one-parameter operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive adjustment with one well-documented parameter and annotations covering safety, the description is close to sufficient. However, it lacks any indication of when to use this tool versus the many other color and adjustment siblings, leaving a contextual gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the document_id parameter is fully documented in the schema. The description mentions 'active layer' rather than the document parameter, adding little semantic value beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Invert colors of the active layer.' It distinguishes itself from photoshop_invert_selection by specifying 'colors of the active layer,' but it does not explicitly differentiate itself from other layer adjustments such as desaturate or adjust_curves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. The description does not mention when inversion is preferable to other tonal adjustments, nor does it state any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_invert_selectionA

Invert the current pixel selection: selected pixels become unselected and the rest become selected. Layer pixels are unchanged.

Use when: a selection exists and the user wants the opposite region. Do NOT use when: no selection exists — create one with photoshop_select_rectangle or photoshop_select_all. Do NOT use when: the layer colors should invert — use photoshop_invert.

Returns: confirmation that the selection was inverted. Preconditions: active document and an existing selection. Side effects: selection only. Calling twice restores the original selection. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing preconditions (active document plus an existing selection), bounded side effects (selection only), an involution property (calling twice restores the original selection) and reversibility via photoshop_undo. The involution note is important because idempotentHint=false leaves an agent unsure what a repeat call does, and the description resolves that; nothing here contradicts the declared hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core semantic definition, then organized as labeled lines (Use when / Do NOT use when / Returns / Preconditions / Side effects). Every sentence carries distinct information — routing, return value, precondition, reversibility — with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the explicit 'Returns: confirmation that the selection was inverted' covers the return contract, and preconditions/side effects cover the risky parts of a non-read-only call. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single document_id parameter is already fully documented (including the null/0 active-document convention), so the description's only added signal is the generic 'active document' precondition. Per the baseline rule for complete schemas, a 3 is appropriate with no compensating param detail needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource (invert the current pixel selection) and immediately defines the operation's meaning: selected pixels become unselected and the rest become selected. It also explicitly carves out scope ('Layer pixels are unchanged') and names the sibling it must not be confused with (photoshop_invert), so an agent can distinguish it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Contains explicit 'Use when' and two 'Do NOT use when' clauses, each routing to a named alternative (photoshop_select_rectangle, photoshop_select_all for missing selections; photoshop_invert for layer color inversion). This is exactly the when/when-not/alternatives structure that earns the top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_list_artboardsA
Read-onlyIdempotent

List artboards in the active document with id, name, pixel bounds, and which one contains the active layer.

Users often say: artboards, 画板, multi-screen, iPhone and iPad frames, device layouts.

Use when: the document is an artboard file (UI/multi-screen) and you need artboard_id before export or edits. Do NOT use when: listing open document tabs — use photoshop_list_documents.

Returns: JSON { ok, summary, details: { count, artboards[] } }. Empty list if the document has no artboards. Preconditions: active document. Side effects: none.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so the safety profile is covered. The description adds genuinely new context beyond that: preconditions (active document), side effects (none), empty-list behavior, and the return shape. It stops short of richer behavioral detail but is solid given annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then structured labels for triggers, alternatives, returns, preconditions, and side effects. The "Users often say" synonym line (including 画板) earns its place for retrieval matching, though the description is on the longer side.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description supplies the return JSON shape and the empty-list edge case, plus preconditions and side effects. An agent has everything needed to call it correctly for a single-parameter list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single document_id parameter is fully documented in the schema (including null/0 semantics). The description adds only the phrase "active document," which mirrors the schema rather than extending it, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("List") and resource ("artboards in the active document") and enumerates the returned fields (id, name, pixel bounds, active-layer containment). An agent can immediately distinguish it from sibling listing tools like photoshop_list_documents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: "Use when: the document is an artboard file... you need artboard_id before export or edits" and "Do NOT use when: listing open document tabs — use photoshop_list_documents." Both the trigger condition and the named alternative are present, which is the top of the scale.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_list_datasetsA
Read-onlyIdempotent

List the data sets defined on the active document (Image > Variables > Data Sets).

Use when: before applying data sets or debugging a data-driven template.

Returns: JSON { ok, summary, details: { datasets, active, count } }. Preconditions: active document with variables/data sets defined.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so safety is covered. The description adds genuinely new context beyond the annotations: the precondition that the active document must have variables/data sets defined, and the exact return envelope. It does not say what happens when zero data sets exist, which is the remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four labeled lines (purpose, Use when, Returns, Preconditions), each earning its place, with the core purpose front-loaded. No filler or restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool, the description supplies the return shape (compensating for the absent output schema), the precondition, and the invocation context. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the document_id description already explains null/0 activation semantics in detail, so the schema carries the load. The description's mention of "active document" is consistent with, but adds nothing beyond, the parameter documentation; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (data sets) and scopes it to the active document, with the Photoshop UI path (Image > Variables > Data Sets) as disambiguation. It does not explicitly name the sibling tools it is distinct from (photoshop_import_datasets, photoshop_generate_from_datasets), so an agent must infer the boundary, but the verb+resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use when: before applying data sets or debugging a data-driven template" gives a clear triggering context. It lacks an explicit when-not clause or a named alternative (e.g. use generate_from_datasets to actually apply them), so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_list_documentsA
Idempotent

List every open Photoshop document with id, dimensions, saved flag, artboard_count, and which tab is active.

Use when: multiple documents are open and you need document_id before switching tabs, previewing, or closing a specific file. Do NOT use when: you only need the active document — use photoshop_get_document_info or photoshop_get_state.

Returns: JSON { ok, summary, details: { count, documents[] (id, name, width, height, saved, artboard_count, is_active), active_document_id, context } }. Preconditions: none (safe when zero documents open). Side effects: briefly activates each tab to read artboard_count, then restores the original active document.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the non-obvious side effect (each tab is briefly activated to read artboard_count, then the original active document is restored) and stating 'Preconditions: none (safe when zero documents open)'. This usefully explains why readOnlyHint is false despite the operation being non-destructive. It does not cover failure/error behavior, but that is a minor gap given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then clearly labeled Use when / Do NOT use when / Returns / Preconditions / Side effects sections. Every sentence carries information an agent needs; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the full return shape, the precondition state, and the side-effect caveat, which is everything an agent needs to call this zero-argument tool safely and interpret its result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description still documents the return payload fields (id, name, width, height, saved, artboard_count, is_active), which is more than the schema requires.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (every open Photoshop document) and enumerates exactly what is returned (id, dimensions, saved flag, artboard_count, active tab). It is immediately distinguishable from siblings like photoshop_get_document_info and photoshop_get_state, which it explicitly frames as the narrower alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' (multiple documents open, need document_id before switching/previewing/closing) and 'Do NOT use when' clauses that name the two competing tools. Nothing about selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_list_fontsA
Read-onlyIdempotent

List installed fonts available to Photoshop.

Use when: choosing a font for photoshop_create_text_layer or photoshop_set_text_font. TextItem.font requires the PostScript name — use postScriptName from results, or pass display name to set/create tools (they resolve automatically).

Returns: fonts array ({ name, postScriptName, family, style }), total count, truncated flag. First call may be slow (app.fonts.length can exceed 1000). Side effects: none.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum fonts to return (default: 200)
queryNoOptional substring filter (matches name, postScriptName, or family)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), but the description adds genuinely new behavioral context: explicit 'Side effects: none' and the first-call latency warning tied to app.fonts.length exceeding 1000. It does not cover pagination interaction with the truncation flag, so it falls short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Short labeled sections ('Use when', 'Returns', side-effect note) with the identity sentence front-loaded. Every sentence carries information: routing, parameter format, return shape, latency, safety.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description enumerates the return shape (fonts array with name/postScriptName/family/style, total count, truncated flag), the required downstream identifier, latency expectations, and safety. Nothing needed to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline would be 3, but the description adds downstream meaning beyond the schema: the returned postScriptName is the required identifier for TextItem.font, and display names are auto-resolved by the set/create tools. That is real semantic value the schema does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('list installed fonts available to Photoshop') and immediately differentiates itself from the mutation-oriented siblings (install_font, set_text_font) by being a read of available font resources. An agent knows exactly what this returns without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use when' clause names the two downstream consumers (photoshop_create_text_layer, photoshop_set_text_font) and explains the routing decision: pass postScriptName from results, or a display name to the set/create tools which resolve automatically. This removes the most likely invocation error.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_merge_visible_layersA
Destructive

Merge every visible layer into one layer. Hidden layers stay in the stack.

Use when: the user wants visible layers combined and hidden layers kept. Do NOT use when: every layer, including hidden ones, should become a single Background — use photoshop_flatten_image. Do NOT use when: only two named layers should combine — this always merges all visible layers.

Returns: confirmation that visible layers were merged. Preconditions: active document with at least one visible layer. Side effects: destroys the separate visible layers in one history step. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and idempotentHint=false, and the description meaningfully extends this: it states the precondition (active document with at least one visible layer), the side effect (visible layers destroyed in one history step, hidden layers preserved), reversibility via photoshop_undo, and the return value. This is more behavioral context than the annotations alone convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then tightly organized into when/do-not-use/returns/preconditions/side-effects blocks. Every sentence carries distinct information with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description states the return value, preconditions, destructiveness, and undo path. For a single-parameter destructive merge tool, an agent has everything needed to invoke it correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter and schema description coverage is 100%, including the null/0 active-document convention, so the schema already carries the semantics. The description never mentions document_id, so it adds nothing on this axis beyond what is already documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names a specific verb and resource (merge visible layers into one) and immediately states the scoping rule that hidden layers stay in the stack. This distinguishes it from photoshop_flatten_image, which is named explicitly, so an agent can choose correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Uses explicit 'Use when' and two 'Do NOT use when' clauses, each pointing at the alternative behavior (photoshop_flatten_image for all-layer flattening, and the rejection of a two-layer-only merge). Nothing about selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_move_layerC

Move the active layer by specified offset

ParametersJSON Schema
NameRequiredDescriptionDefault
deltaXYesHorizontal offset in pixels (can be negative)
deltaYYesVertical offset in pixels (can be negative)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and the description adds nothing beyond them. It does not disclose that repeated calls compound the offset (consistent with idempotentHint=false), nor that a layer must already be active/selected for the tool to act on, which is the key operational prerequisite.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is efficient, though the brevity comes at the cost of the missing behavioral detail noted elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description omits how the active layer is established, what happens when no layer is selected, and how this differs from the five other layer-move siblings. The schema covers parameters well, but the description leaves real operational questions unanswered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already explains deltaX/deltaY as pixel offsets that can be negative and document_id's activation behavior. The description's 'specified offset' phrase adds no syntax, units, or semantics beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb+resource (move the active layer) and implies relative movement via 'by specified offset'. However, it does not distinguish itself from the many move siblings (photoshop_move_layer_to_position, _to_top, _to_bottom, _up, _down); an agent cannot tell from the description alone whether this is relative or absolute positioning.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of the alternative move tools. The agent must infer that this is the relative-offset variant versus the absolute-position sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_move_layer_downA

Move the active layer down one position in the layer stack

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation profile: readOnlyHint=false, destructiveHint=false, idempotentHint=false. The description adds useful behavioral scope by specifying that only the active layer is moved and that it moves exactly one position down, but it does not describe return values, error cases, or permission needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It is exactly the right size for a simple one-parameter operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete enough for a simple move operation: the schema covers document_id, annotations cover safety and idempotency, and the description states scope and direction. It omits edge-case behavior when no layer exists below, which keeps it from being fully exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single document_id parameter is fully documented in the schema. The description adds no additional parameter semantics, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Move the active layer') and adds precise scope ('down one position in the layer stack'). This scope distinguishes it from siblings like photoshop_move_layer_up and photoshop_move_layer_to_bottom without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the directive phrasing and the mention of 'active layer', but the description gives no explicit when-to-use guidance or comparison against alternatives like photoshop_move_layer_to_position or photoshop_move_layer_up. No prerequisites or exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_move_layer_to_bottomB
Idempotent

Move the active layer to the bottom of the layer stack

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (destructiveHint=false, idempotentHint=true, readOnlyHint=false), so the description only needs to add context. Saying it acts on 'the active layer' usefully implies a prerequisite that a layer must be selected first, but it doesn't state how groups/nested layers are treated or what reordering side effects occur.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One clean sentence with the action front-loaded and zero filler. It is appropriately sized, though it is perhaps terse enough to omit useful scoping detail rather than being minimal-but-complete.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, idempotent, non-destructive reorder tool with a fully covered schema and no output schema, the description is nearly sufficient. The only meaningful omission is the implicit prerequisite that an active layer must exist/be selected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single document_id parameter is fully documented in the schema (including null/0 behavior and stale-id handling). The description adds no parameter detail, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Move') and resource ('the active layer'), plus a precise destination ('to the bottom of the layer stack'). It clearly distinguishes itself from move_layer_to_top/up/down by naming the target position, though it does not explicitly name those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance is given. With four closely related siblings (move_layer_to_top, move_layer_up, move_layer_down, move_layer_to_position), the description never routes the agent between them; the choice is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_move_layer_to_positionA

Reorder the active layer relative to a named layer. position is ABOVE, BELOW, TOP, or BOTTOM of targetLayerName. This changes stacking order, not canvas pixels.

Use when: the active layer must sit above or below a specific other layer. Do NOT use when: it should go to the top or bottom of the whole stack — use photoshop_move_layer_to_top or photoshop_move_layer_to_bottom. Do NOT use when: it should move one step — use photoshop_move_layer_up or photoshop_move_layer_down. Do NOT use when: you mean a pixel offset on the canvas — use photoshop_move_layer.

Returns: text confirmation of the new stack position. Preconditions: active document, an active layer, and an existing targetLayerName. Side effects: stacking order only. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
positionYesPosition relative to target layer
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
targetLayerNameYesName of the layer to move relative to

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic mutation profile (readOnly=false, destructive=false, idempotent=false). The description adds the real behavioral context: preconditions (active document, active layer, existing targetLayerName), the side effect (stacking order only, no pixel change), reversibility via photoshop_undo, and the return shape (text confirmation). That is meaningful value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then clearly delimited sections for usage, returns, preconditions, and side effects. Despite being fairly long, every clause earns its place given the number of near-sibling move tools it must be disambiguated from.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers returns, preconditions, side effects, and reversibility, and resolves ambiguity against five competing move-layer siblings. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real semantic meaning: it states that position is relative to targetLayerName and enumerates the four enum meanings in context, and clarifies that this is stacking order rather than a canvas offset. document_id semantics are left entirely to the schema, which is fine given its coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Reorder the active layer relative to a named layer') and immediately clarifies scope: stacking order, not canvas pixels. It explicitly names the sibling tools it is not, so an agent can distinguish it from photoshop_move_layer, move_layer_up/down, and move_layer_to_top/bottom without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Includes an explicit 'Use when' plus three separate 'Do NOT use when' clauses, each routing to a named alternative (move_layer_to_top, move_layer_to_bottom, move_layer_up, move_layer_down, move_layer). This is exactly the when/when-not/alternatives structure that earns a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_move_layer_to_topB
Idempotent

Move the active layer to the top of the layer stack

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, and the description is consistent with them (repositioning to the top is naturally idempotent and non-destructive). It adds one useful behavioral fact — that the operation targets the currently active layer, implying a layer must be selected first — but says nothing about groups, clipping stacks, or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler, stating verb, target, and destination immediately. It is efficiently structured, though the terseness is also the source of its coverage gaps.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter mutation with a fully documented schema and no output schema, the description is minimally sufficient: the agent knows what it does and that it acts on the active layer. It omits any note about layer selection prerequisites, behavior inside groups/clipping masks, or what happens when the layer is already at the top.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single document_id parameter is fully documented in the schema, including null/0 semantics and stale-id behavior. The description adds nothing beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Move the active layer') plus the destination ('top of the layer stack'), so the action is unambiguous. It does not distinguish itself from close siblings like photoshop_move_layer_to_bottom, photoshop_move_layer_to_position, or photoshop_move_layer_up, which the agent must infer from names alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no routing to alternatives such as move_layer_to_position or move_layer_up. The agent gets no help deciding between the several layer-reordering tools in the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_move_layer_upA

Move the active layer up one position in the layer stack

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (mutation, non-idempotent, non-destructive, closed-world), so the description only needs to add context. It adds that the target is the currently active layer, but does not disclose the boundary behavior at the top of the stack (no-op vs error) or any permission/selection requirement, leaving a meaningful gap for a mutating reorder tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero padding that conveys operation, target and magnitude of the move.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, fully-annotated reorder tool with no output schema, the description is nearly sufficient; the only omission an agent might want is the edge-case behavior when the layer is already at the top of the stack.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the document_id description is unusually rich (null/0 means active document, positive id activates it first, stale ids don't block the call). The description adds nothing about the parameter, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('move'), resource ('the active layer') and a quantified scope ('up one position in the layer stack'), which cleanly separates it from photoshop_move_layer_down, photoshop_move_layer_to_top, photoshop_move_layer_to_bottom and photoshop_move_layer_to_position without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'up one position' phrasing implicitly signals this is the incremental up-move versus the absolute variants, but the description never names those alternatives or states prerequisites (e.g. a layer must be selected/active, and what to do if it is already at the top). Usage is inferable rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_neural_filterA
Destructive

Apply a Photoshop Neural Filter via the companion UXP bridge plugin.

Use when: skin smoothing, harmonize composite layers, depth blur, super zoom, or colorizing B&W photos. Do NOT use when: uxp_bridge_reachable is false — install uxp-plugin per docs/development.md.

Returns: { ok, summary, details }. Preconditions: UXP bridge plugin running in Photoshop; PS 22+.

ParametersJSON Schema
NameRequiredDescriptionDefault
blurNoSkin smoothing blur 0-100 (skin_smoothing only)
filterYesNeural filter to apply
smoothnessNoSkin smoothing smoothness 0-100 (skin_smoothing only)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
reference_layer_idNoLayer id for harmonize reference (harmonize only)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds genuinely new behavioral context: preconditions (UXP plugin running, PS 22+), a bridge-reachability gate, and the return shape. It does not, however, explain what the destructive behavior actually does (e.g. whether the effect is applied destructively to the layer or requires a smart object), which is the main remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then tightly organized into Use when / Do NOT use when / Returns / Preconditions. Every line earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with no output schema, the description supplies the return shape ({ ok, summary, details }), environmental preconditions, and a fallback path. It stops short of describing undo-ability or exactly which document/layer state is altered by the operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents filter, document_id, blur, smoothness, and reference_layer_id including their per-filter applicability. The description adds no parameter-level meaning beyond restating filter scenarios that already match the enum, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Apply a Photoshop Neural Filter") and identifies the required mechanism (companion UXP bridge plugin). This clearly distinguishes it from the many sibling blur/sharpen/filter tools, which are not neural-filter based.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit "Use when" list enumerates five concrete scenarios (skin smoothing, harmonize, depth blur, super zoom, colorize) that map to the filter enum, and "Do NOT use when" names the blocking condition (ux_bridge_reachable false) with a remediation pointer. Both the positive and negative conditions are stated, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_open_imageA

Open an image file as a new Photoshop document.

Use when: user provides a file path to edit or no document is open yet. Do NOT use when: adding to an existing composite — use photoshop_place_image.

Returns: document id, name, width, height. Preconditions: file must exist on disk. Side effects: opens document as active.

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathYesFull path to the image file
document_idNoIgnored. photoshop_create_document and photoshop_open_image do not target an existing tab. Omit this, or send null or 0.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, covering the safety profile. The description goes beyond them by stating a precondition (file must exist on disk) and a side effect (opens document as active), which materially helps invocation. It stops short of richer detail like error behavior on missing files, hence a 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then labeled sections (Use when / Do NOT use when / Returns / Preconditions / Side effects). Every line earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although no output schema exists, the description lists the return fields (document id, name, width, height), plus preconditions and side effects. An agent has everything needed to decide and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both filePath and the ignored document_id with explanatory text. The description adds no parameter-level syntax or format beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (open) and resource (image file as a new Photoshop document), making the operation unambiguous. It is clearly distinguished from sibling document tools like photoshop_create_document and photoshop_place_image.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the when ('user provides a file path to edit or no document is open yet'), the when-not ('adding to an existing composite'), and names the alternative (photoshop_place_image). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_pingA
Idempotent

Verify that the Photoshop scripting engine can run a script.

Use when: once at session start, and after extendscript_timeout until this call succeeds. Do NOT use when: on every tool call — after a successful ping, use photoshop_get_state. Do not call get_state or get_layers while this ping is still failing.

Returns: "Successfully connected to Photoshop" only after a short script runs inside Photoshop. While a previous script is still running, returns extendscript_timeout — retry photoshop_ping. If that timeout happens while the OS drive has under 10 GB free, returns scratch_disk_full instead: free space on the scratch disk and restart Photoshop. If Photoshop is not installed or not running, returns a failure string and does not launch the app. May append a FEEDBACK_NUDGE block 15 minutes after the first successful ping, then at most once per 7 days (disabled with PSMCP_FEEDBACK=0). May append an UPDATE_AVAILABLE block when a newer photoshop-mcp release is on npm, at most once per 7 days (disabled with PSMCP_UPDATE_CHECK=0). A single ping carries at most one of these blocks. Preconditions: none. Side effects: may trigger Photoshop detection. Does not launch Photoshop.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare idempotentHint and non-destructive, but the description adds substantial behavior beyond them: exact success string, extendscript_timeout retry semantics, scratch_disk_full tied to <10 GB free on the OS drive, failure-without-launching behavior, and the FEEDBACK_NUDGE / UPDATE_AVAILABLE blocks with their env-var opt-outs. This is far more than structured fields convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but tightly organized under explicit labels (Use when, Do NOT use when, Returns, Preconditions, Side effects), with the decision-relevant routing information front-loaded. The environment-variable and nudge details are the only verbose passages, and they help interpret anomalous output.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries the full burden of explaining return values — it enumerates the success string and each failure mode (timeout, scratch_disk_full, not-installed/not-running) plus the two optional appended blocks. Preconditions and side effects are stated explicitly. Nothing an agent needs to interpret a result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the baseline there is nothing to document and no ambiguity to resolve. No param-level value could be added here, and none is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Verify that the Photoshop scripting engine can run a script') and explicitly distinguishes itself from siblings, naming photoshop_get_state and photoshop_get_layers as the follow-on tools. An agent can tell exactly what this does and where it sits in the workflow without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' (once at session start, and after extendscript_timeout until success) and 'Do NOT use when' (not on every tool call; do not call get_state or get_layers while ping is failing) guidance. The alternative and the condition that selects it are both named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_place_imageA

Place an external image file as a new layer in the active document.

x/y are absolute canvas coordinates for the placed layer's top-left bound in pixels (0,0 = document top-left). They are NOT an offset from Photoshop's default centered Place.

Use when: compositing assets into an open document at a known position. Do NOT use when: opening a file as a new document — use photoshop_open_image.

Returns: placed layer name, bounds, and position.semantics = absolute_top_left. Preconditions: active document; file must exist. Side effects: adds a new layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoAbsolute canvas X of the placed layer top-left, in pixels (default: 0)
yNoAbsolute canvas Y of the placed layer top-left, in pixels (default: 0)
filePathYesFull path to the image file (JPEG, PNG, PSD, etc.)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), so the description's added preconditions ('active document; file must exist') and side effect ('adds a new layer') are genuine value-adds. It stops short of noting whether the placement replaces or supersedes anything else, but the mutation contract is clear and consistent with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence, then labeled lines for coordinates, usage, returns, preconditions and side effects. Every line carries distinct information with no repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return shape (layer name, bounds, position), preconditions, side effects, and coordinate semantics. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description goes beyond the schema by clarifying that x/y are absolute canvas coordinates and explicitly are NOT an offset from Photoshop's default centered Place — a non-obvious semantic that would otherwise cause wrong placements. It also restates the return semantics (absolute_top_left).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Place an external image file as a new layer in the active document') and immediately distinguishes itself from the closest sibling by pointing to photoshop_open_image for the open-as-new-document case. An agent can pick between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when: compositing assets into an open document at a known position' plus 'Do NOT use when: opening a file as a new document — use photoshop_open_image.' Both the positive trigger and the exclusion with a named alternative are stated, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_play_actionA
Destructive

Play a named action from a named action set in the Actions panel. The action runs whatever steps were recorded; this tool does not limit them.

Use when: the user names an existing action and action set to replay. Do NOT use when: no recorded action exists — use a photoshop_recipe_* tool or an atomic photoshop_* tool. Do NOT use when: you need to run arbitrary JSX — use photoshop_execute_script.

Returns: the action result text. Preconditions: actionName and actionSetName must match the Actions panel; an open document if the action expects one. Side effects: whatever the action recorded (it may delete layers, change pixels, or save). photoshop_undo reverts only the history steps the action left behind.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNameYesName of the action to play
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
actionSetNameYesName of the action set containing the action

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, but the description goes far beyond: it warns that the action may delete layers, change pixels, or save, states that undo only reverts the history steps the action left behind, and lists preconditions around action/action set names and open documents.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is front-loaded with the core action, then uses labeled sections for usage, returns, preconditions, and side effects. Every sentence carries operational value, and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, free-form action player with no output schema, the description is complete: it explains return text, preconditions, side effects, and undo limitations. An agent has everything needed to call it safely and correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds useful parameter-related preconditions: actionName and actionSetName must match the Actions panel, and a document is required if the action expects one. This meaningfully supplements the schema without needing to restate field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Play a named action from a named action set in the Actions panel.' It also clarifies scope ('runs whatever steps were recorded; this tool does not limit them'), which distinguishes it from atomic tools and script execution siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' and two 'Do NOT use when' clauses name the exact alternatives: photoshop_recipe_* / atomic photoshop_* tools for missing actions, and photoshop_execute_script for arbitrary JSX. This is precisely the routing guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_rasterize_layerA
Destructive

Rasterize the active layer (convert text/smart object to normal layer)

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotent=false, so the safety profile is covered. The description adds value by specifying what is lost — the editable text/smart object nature of the layer — but does not state that the change is irreversible or what happens if the active layer is already a normal raster layer. With annotations carrying the safety burden, this is a modest but real addition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the parenthetical earns its place by explaining the transformation rather than restating the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with full schema coverage, annotations, and no output schema, the description covers the essentials. It omits the prerequisite that the target layer must be active/selected and the irreversibility of the conversion, which an agent manipulating layers would benefit from knowing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single document_id parameter is thoroughly documented in the schema (null/0 for active document, positive id activates it). The description adds nothing about document handling, so the baseline 3 for full schema coverage is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (rasterize) and resource (the active layer), and the parenthetical clarifies the effect: converting text/smart object layers into normal layers. This differentiates it from the inverse sibling photoshop_convert_to_smart_object, though it doesn't distinguish it from other layer-destroying siblings like flatten_image or merge_visible_layers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the parenthetical '(convert text/smart object to normal layer)' tells the agent this applies when the active layer is a text or smart object layer. There is no explicit when-not guidance, no mention of alternatives such as flatten_image, and no statement that the layer must first be selected as active.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_recipe_apply_color_gradeA

Apply a named color grading preset as a non-destructive layer group (Hue/Saturation adjustment + brightness/contrast tweak).

Users often say: cinematic look, teal and orange, moody grade, color grade.

Use when: the user wants a quick stylistic look applied to the active document. Do NOT use when: the user wants subject-specific color edits (e.g. only the skin) — current recipe applies globally.

Returns: { ok, summary, details: { preset, group_name } }.

Preconditions: active document in RGB mode. CMYK/Grayscale return unsupported_color_mode. Side effects: adds one layer group with adjustment layers; one undo reverts.

ParametersJSON Schema
NameRequiredDescriptionDefault
presetNoPreset name. One of: cinematic, vintage, teal_orange, bw, warm_film, cool_dusk. Default cinematic.cinematic
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses preconditions ('active document in RGB mode'), error behavior (CMYK/Grayscale return unsupported_color_mode), side effects (adds one layer group with adjustment layers; one undo reverts), and the return shape. This goes well beyond the annotations, which only supply generic safety hints and align with the 'non-destructive' claim.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Content is front-loaded (purpose first), grouped under labeled clauses (Use when / Do NOT use when / Returns / Preconditions / Side effects), and each sentence carries distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating recipe tool with no output schema, the description covers everything needed to invoke correctly: intent matching, exclusions, required document state, failure mode, side effects, and the response shape. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters including the enum and default. The description adds only the loose mapping of user phrases to preset style, not syntax or edge-case meaning, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('apply a named color grading preset') and goes further by describing the mechanism ('non-destructive layer group: Hue/Saturation adjustment + brightness/contrast tweak'). An agent can distinguish this from generic adjustment tools like adjust_hue_saturation or apply_lut without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' and 'Do NOT use when' clauses are both present, with the exclusion naming a concrete failure scenario (subject-specific color edits applied globally). It also lists the natural-language phrasings users would say ('cinematic look', 'teal and orange'), which directly maps user intent to this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_recipe_batch_mockup_replaceA
Destructive

Iterate a directory of asset images, replace the contents of the named Smart Object in the active mockup PSD for each asset, and export a flattened JPEG per variant. The mockup's perspective/warp on the Smart Object is preserved.

Use when: the user has a mockup PSD and wants to render it once per design asset (logos, screens, product photos). Do NOT use when: the asset is not a single layer (use photoshop_place_image manually) or when the active document has no Smart Object with the requested name.

Returns: { ok, summary, output_paths, details: { variants: [{ source_asset, output_path }] } }.

Preconditions: active document containing a Smart Object layer named exactly as requested; assets_dir must exist and be readable. Side effects: writes one JPEG per asset; the active mockup PSD ends up with the LAST asset placed.

ParametersJSON Schema
NameRequiredDescriptionDefault
qualityNoJPEG quality on the Photoshop 1-12 scale. Default 10.
assets_dirYesAbsolute path to the directory containing asset files. Subdirectories are NOT recursed. Allowed extensions: jpg/jpeg/png/tif/tiff/psd/psb/webp.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
smart_object_layer_nameYesExact name of the Smart Object layer in the active document. Case-sensitive.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, but the description goes further by disclosing that perspective/warp is preserved, that one JPEG is written per asset, and critically that the active PSD ends up holding the LAST asset placed. That last detail is a non-obvious state side effect not captured by annotations. It could still say whether the source assets are modified or whether the export overwrites existing files, so it falls just short of the top mark.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first sentence, followed by clearly labeled Use when / Do NOT use when / Returns / Preconditions / Side effects blocks. Every sentence carries distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully inlines the return shape and covers preconditions and side effects for a multi-asset, state-mutating batch operation. Remaining minor gaps (behavior on a missing/invalid asset file mid-batch, whether outputs overwrite) keep it slightly short of fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (quality scale, allowed extensions, non-recursion, document_id activation semantics, case-sensitive layer name) is already documented in the schema. The description adds only the preconditions that assets_dir must exist and be readable and that the layer name must match exactly, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise chain of verbs and resources: iterate a directory, replace the named Smart Object's contents per asset, export a flattened JPEG per variant. This is clearly distinguishable from adjacent siblings like photoshop_recipe_batch_watermark or photoshop_replace_smart_object_contents, which operate on a single asset.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides an explicit 'Use when' condition (user has a mockup PSD and wants one render per design asset) and a 'Do NOT use when' clause naming two failure conditions plus the fallback (photoshop_place_image manually). This is exactly the when/when-not/alternative structure an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_recipe_batch_watermarkA

Apply a text or logo watermark to every image in a folder and export watermarked JPEGs. Replaces the clunky record-an-action + File > Automate > Batch workflow.

Use when: the user wants to watermark many photos at once (copyright text, studio logo). Do NOT use when: watermarking a single open document (use photoshop_create_text_layer / photoshop_place_image directly) or removing watermarks (not supported).

Returns: { ok, summary, output_paths, details: { processed, failed: [{ file, error }] } }. Files that fail are skipped, not fatal.

Preconditions: assets_dir exists; either text or logo_path given. No active document required. Side effects: writes one JPEG per source image; source files are never modified.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoWatermark text (e.g. "© Jane Doe 2026"). White, semi-transparent. Required unless logo_path is given.
opacityNoWatermark layer opacity 0-100. Default 40.
qualityNoJPEG quality on the Photoshop 1-12 scale. Default 10.
positionNoWatermark placement. Default bottom_right.bottom_right
font_sizeNoText watermark size in pixels. Default 0 = auto (4% of each image height, min 8px).
logo_pathNoAbsolute path to a logo image (transparent PNG recommended). Required unless text is given. If both are given, text wins.
margin_pxNoDistance from the chosen edge(s) in pixels. Default 24 (ignored for center).
scale_pctNoLogo watermark width as a percentage of image width (1-100). Default 15. Logo mode only.
assets_dirYesAbsolute path to the folder of images to watermark. Subdirectories are NOT recursed. Allowed extensions: jpg/jpeg/png/tif/tiff/webp.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare this is a write operation (readOnlyHint=false) that is non-destructive and non-idempotent; the description goes further by stating side effects ('writes one JPEG per source image; source files are never modified'), failure semantics ('Files that fail are skipped, not fatal'), and preconditions (assets_dir exists; text or logo_path given). This is strong disclosure. It stops short of covering overwrite behavior for existing output files or output naming/location, which keeps it off a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence followed by labeled sections (Use when / Do NOT use when / Returns / Preconditions / Side effects) with no filler. Every line carries actionable information for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description supplies the return shape ({ ok, summary, output_paths, details: { processed, failed } }), preconditions, side effects, and failure handling. For a 10-parameter batch tool with full annotation coverage, nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each of the 10 parameters already carries a rich inline description (ranges, defaults, text-vs-logo precedence). The description adds only the summary precondition 'either text or logo_path given,' so the baseline 3 applies — the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource+scope: 'Apply a text or logo watermark to every image in a folder and export watermarked JPEGs.' It also positions itself against the legacy Batch workflow, making it clearly distinct from single-document siblings like photoshop_create_text_layer and photoshop_place_image.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' (many photos at once, copyright text or studio logo) and 'Do NOT use when' (single open document, watermark removal) clauses, naming the alternative sibling tools directly. Routing is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_recipe_csv_to_cardsA

Data-driven graphics batch: convert a CSV file into Photoshop data sets, apply each row to the active template document and export one image per row. "Mail merge for images" — name cards, badges, certificates, personalized banners.

Users often say: csv to images, batch name cards, personalized banners, generate badges from spreadsheet, sertifika bastır.

CSV rules: first row = variable names matching the variables defined in the template PSD (Image > Variables > Define). A cell holding an absolute path to an image file (.png/.jpg/.webp/.tif/.psd) is treated as a pixel-replacement variable.

Use when: the user has a template PSD with variable-bound layers and a CSV of rows. Do NOT use when: the document has no variables defined — define them in Photoshop first (Image > Variables > Define).

Returns: { ok, summary, details: { rows, exported, output_paths, xml_path } }.

Preconditions: active document with variable-bound layers; readable CSV file. Side effects: writes a temp variables XML and one output file per row into output_dir.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format (default JPEG)JPEG
csv_pathYesAbsolute path to the CSV file (first row = variable names)
output_dirYesDirectory for generated files (created if missing)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic safety profile (readOnlyHint=false, destructiveHint=false, non-idempotent), so the description carries real weight and delivers it: preconditions, side effects (writes a temp variables XML plus one output file per row into output_dir), and the return shape. It leaves one notable gap: it never says whether applying rows mutates or saves the active template document, which matters for a non-destructive-hinted write tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but well-structured with labeled sections (CSV rules, Use when, Do NOT use when, Returns, Preconditions, Side effects), so scannability is high and the core purpose is front-loaded. The 'Users often say' line is slightly padded with a non-English example, but it serves retrieval.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-parameter batch tool with no output schema, the description supplies the return shape, the CSV contract, preconditions, and side effects, plus clear sibling routing. An agent has everything needed to decide to call it and to prepare valid inputs; only document-mutation behavior is left slightly open.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantics not in the schema: the CSV's first row must match variables defined in the template PSD, and cells containing absolute image paths are treated as pixel-replacement variables. It does not expand on format/output_dir behavior specifically, so it stays short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('convert a CSV file into Photoshop data sets, apply each row ... export one image per row') and names its scope as a batch/mail-merge operation. This clearly separates it from nearby siblings like photoshop_import_datasets, photoshop_generate_from_datasets, and photoshop_export_as, which an agent could otherwise confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit 'Use when' condition (template PSD with variable-bound layers plus a CSV of rows) and a matching 'Do NOT use when' exclusion with a remediation path (define variables in Photoshop first). It even lists colloquial user phrasings, which helps the agent route natural-language requests.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_recipe_dodge_burnA

One-shot dodge & burn setup: creates a 50% gray layer in Overlay or Soft Light mode for non-destructive light sculpting. Wrapped in a single undoable history step.

Users often say: dodge and burn, sculpt light, lighten face, darken shadows.

Use when: the user wants a ready-to-paint dodge & burn layer above the subject. Do NOT use when: the user wants automated retouch — this only sets up the paint layer; paint white (dodge) and black (burn) manually at low opacity. Do NOT use when: automated portrait smoothing is enough — use photoshop_recipe_enhance_portrait instead.

Returns: { ok, summary, undo_history_states_consumed, details: { layer_name, blend_mode } }.

Preconditions: active document with a raster-compatible active layer. Side effects: adds one "Dodge & Burn" layer above the active layer; one undo reverts.

ParametersJSON Schema
NameRequiredDescriptionDefault
blend_modeNoRetouch blend mode: overlay (default, stronger) or soft_light (gentler)overlay
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (non-read-only, non-destructive, non-idempotent), and the description goes well beyond them: preconditions (active raster-compatible layer), side effects (adds a 'Dodge & Burn' layer above the active layer, revertible with one undo), and the returned payload shape including undo_history_states_consumed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line summary, then labeled sections (Use when / Do NOT use when / Returns / Preconditions / Side effects) with zero filler. The 'Users often say' line adds retrieval synonyms rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description supplies the return shape, preconditions, and side effects, plus the workflow context an agent needs to call it correctly. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (blend_mode enum, document_id fallback semantics) are fully documented in the schema, so baseline 3 applies. The description adds no parameter-level detail such as how blend_mode interacts with painting behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (creates a 50% gray layer in Overlay/Soft Light mode for non-destructive dodge & burn) plus the atomic-history guarantee. It also names the sibling it is not (photoshop_recipe_enhance_portrait), so an agent can distinguish it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' condition, two 'Do NOT use when' exclusions, and a named alternative (photoshop_recipe_enhance_portrait) for the automated-retouch case. It also clarifies the manual-paint workflow so the agent knows this tool only sets up the layer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_recipe_enhance_portraitA

Set up a non-destructive portrait enhancement: duplicates the active layer, builds a frequency separation pair (low/high) for skin smoothing, and adds an auto-tone curves adjustment on top. Grouped as "Enhance Portrait" and reversible with one undo.

Users often say: smooth skin, retouch portrait, fix blemishes, clean up face.

Use when: the user asks to "enhance", "retouch", "clean up" or "smooth" a portrait photo and is happy with a baseline that they can further tweak interactively. Do NOT use when: the user wants destructive, final edits — recommend manual frequency separation work via photoshop_recipe_frequency_separation instead so they can paint by hand.

Returns: { ok, summary, details: { intensity, radius_px, group_name } }.

Preconditions: active document with a NORMAL or background-converted raster layer. Side effects: appends one layer group of 2-3 layers above the active layer; original layer untouched.

ParametersJSON Schema
NameRequiredDescriptionDefault
intensityNoRetouch strength: low (subtle), medium (default), high (heavier smoothing).medium
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
skin_smoothingNoWhether to build the frequency separation pair. When false, only the auto-tone curves are added.
use_neural_skinNoApply Neural Filter skin smoothing via UXP bridge before frequency separation (default false)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare non-readonly, non-idempotent, non-destructive, but the description adds substantive context beyond them: reversibility with one undo, required precondition (active document with NORMAL or background-converted raster layer), and precise side effects (appends a 2-3 layer group above the active layer, original layer untouched).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then clearly labeled sections for intent phrases, use/don't-use, returns, preconditions and side effects. Slightly long, but nearly every line earns its place; the intent-phrase line materially aids matching.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return shape, plus preconditions, side effects and a routing alternative. An agent has everything needed to decide and call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents intensity, document_id, skin_smoothing and use_neural_skin fully. The description alludes to skin smoothing and auto-tone but adds no syntax or format detail beyond the schema, so baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource (non-destructive portrait enhancement) and enumerates the exact operations performed: layer duplication, frequency-separation pair, auto-tone curves. This distinguishes it clearly from sibling photoshop_recipe_frequency_separation and other adjustment tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Has explicit 'Use when' (enhance/retouch/clean up/smooth a portrait with a baseline the user can tweak) and 'Do NOT use when' (destructive final edits), naming the alternative tool (photoshop_recipe_frequency_separation) and the reason to prefer it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_recipe_export_social_variantsA

Render one JPEG per requested social-media platform from the active document. Each variant is center-cropped/resized to the platform spec and saved to disk.

Use when: the user wants multi-platform deliverables in one shot. Do NOT use when: only one export is needed (use photoshop_recipe_prepare_for_web instead) or when platforms differ by content rather than crop (recipe does not change content, only frame).

Returns: { ok, summary, output_paths, details: { variants } }.

Preconditions: active document. Aspect ratios that differ from the source result in a center-crop (no padding). Side effects: writes one file per platform; source unchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
qualityNoJPEG quality on the Photoshop 1-12 scale. Default 9.
platformsNoSlugs of platforms to export. Known: instagram_post, instagram_story, instagram_reel, x_post, x_header, facebook_post, facebook_cover, linkedin_post, linkedin_banner, youtube_thumbnail, tiktok_vertical, pinterest_pin. Default: instagram_post, instagram_story, x_post.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare non-readonly, non-destructive, non-idempotent, but the description goes further: it discloses side effects (writes one file per platform), that the source document is unchanged, and center-crop behavior with no padding when aspect ratios differ. It stops short of stating overwrite behavior or the save destination, which is a real gap for a file-writing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then labeled sections for usage, returns, preconditions, and side effects. Every sentence earns its place; the return-shape line is justified because no output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, routing, preconditions, return shape, and side effects for a 3-param write tool with no output schema. The one omission is where files land and whether existing files are overwritten, which matters for an export tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with quality, platforms (enumerated), and document_id all documented inline, so the baseline is 3. The description adds crop/resize semantics but no parameter-specific detail (e.g., how quality interacts with resize, or output naming) beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb+resource+scope: render one JPEG per requested social platform from the active document, with center-crop/resize to platform spec. It explicitly names the sibling it is not (photoshop_recipe_prepare_for_web), so an agent can distinguish it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' and 'Do NOT use when' blocks name the alternative tool and the exact condition selecting it (single export vs. multi-platform). It also clarifies a subtle exclusion: platforms that differ by content rather than crop are out of scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_recipe_frequency_separationA

Build a frequency separation stack (Low + High) on top of the active layer for hands-on retouching. Does not apply any smoothing itself — the user paints into the layers afterwards.

Users often say: frequency separation, split texture and color, manual retouch setup.

Use when: the user explicitly wants frequency separation setup, typically for portrait or product retouching. Do NOT use when: the user wants a one-shot result without painting — use photoshop_recipe_enhance_portrait instead.

Returns: { ok, summary, details: { radius_px, group_name } }.

Preconditions: active document with a NORMAL raster active layer. Side effects: appends a "Frequency Separation" layer group with 2 prepared layers; one undo reverts everything.

ParametersJSON Schema
NameRequiredDescriptionDefault
radius_pxNoGaussian blur radius for the low-frequency layer. 4-8 for portraits, 10-20 for products. Default 6. Range 1-50.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (which only say not-read-only, not-destructive, not-idempotent) by disclosing the precondition (active document with a NORMAL raster active layer), the concrete side effect (appends a 'Frequency Separation' group with 2 prepared layers), reversibility (one undo reverts everything), and the crucial semantic that no smoothing is applied so the user paints afterward.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then cleanly sectioned into usage, returns, preconditions, and side effects. Slightly padded by the 'Users often say' synonym line, which aids matching but is the only sentence that could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description compensates by stating the return shape ({ ok, summary, details: { radius_px, group_name } }), plus preconditions and side effects. An agent has everything needed to call this tool safely and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (radius_px with its portrait/product ranges and document_id resolution rules) are already fully documented in the schema. The description adds no additional parameter syntax or format guidance, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Build a frequency separation stack (Low + High) on top of the active layer') and immediately narrows scope with 'does not apply any smoothing itself'. An agent can distinguish it from photoshop_apply_gaussian_blur or photoshop_recipe_enhance_portrait without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' condition (explicit frequency-separation setup for portrait/product retouching) and explicit 'Do NOT use when' with a named alternative tool (photoshop_recipe_enhance_portrait) for the one-shot case. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_recipe_gradient_fadeA
Destructive

One-shot gradient fade on the active layer mask: creates a reveal-all mask if needed, then paints a linear black-to-white gradient for soft edge blending. Wrapped in a single undoable history step.

Users often say: fade into background, gradient mask, blend subject, soft edge fade, arka planı yumuşat.

This applies a linear gradient on the layer mask channel — not a Gradient Fill layer. Use when: the user wants the active layer to fade into the background or layers below through its mask. Do NOT use when: the subject is not isolated — use photoshop_recipe_remove_background first. Do NOT use when: replacing the sky with an external image — use photoshop_recipe_sky_blend.

Returns: { ok, summary, undo_history_states_consumed, details: { direction, start_pct, end_pct, mask_created, layer_name } }.

Preconditions: active document with an active layer. Side effects: creates or modifies the active layer mask; one undo reverts everything.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_pctNoGradient end along fade axis (0-100)
angle_degNoOptional gradient angle override in degrees
directionNoGradient fade direction on the mask (default bottom_to_top)bottom_to_top
start_pctNoGradient start along fade axis (0-100)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructive=true and non-idempotent, and the description goes further by stating it creates a reveal-all mask if needed, wraps everything in a single undoable history step, names preconditions (active document with active layer), and spells out side effects and one-undo reversal. This adds real context beyond the annotation hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then cleanly sectioned into Use/Do NOT use, Returns, Preconditions, and Side effects. The multi-language user-phrase list ('arka planı yumuşat') is slightly noisy but aids intent matching, so it mostly earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description supplies the return shape ({ ok, summary, undo_history_states_consumed, details... }), preconditions, and side effects, which is everything an agent needs to call it correctly and predict the outcome.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents direction, start_pct, end_pct, angle_deg, and document_id, meeting the baseline. The description references the fade axis and direction only in passing and adds no format or syntax detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('gradient fade on the active layer mask') and immediately clarifies the mechanism ('paints a linear black-to-white gradient'), distinguishing it from the Gradient Fill layer sibling and from photoshop_apply_gradient_mask. An agent can identify the exact operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' and two 'Do NOT use when' clauses that route to named alternatives (photoshop_recipe_remove_background for unisolated subjects, photoshop_recipe_sky_blend for sky replacement). Also maps common user phrasings, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_recipe_organize_layersA

Tidy the active document's layer stack: rename layers using a consistent scheme and optionally auto-group them by kind. Never deletes, merges or rasterizes — visual output stays identical.

Use when: the user complains about layer mess ("layer 1 copy 2", "untitled 7") or asks for organization. Do NOT use when: the user wants smart, semantic naming based on layer content beyond text — recipe only summarizes text layers, not image content.

Returns: { ok, summary, details: { renamed_count, group_count } }.

Preconditions: active document. Side effects: renames top-level layers and (optionally) moves them into kind-grouped folders; one undo reverts everything.

ParametersJSON Schema
NameRequiredDescriptionDefault
auto_groupNoGroup layers by kind (text / image / shape / adjustment). Default true.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
naming_schemeNoHow to rename layers: type_index (default, e.g. text_01), content_summary (text layers get a slug of their content; other kinds get type_index), preserve (do not rename).type_index

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses the precondition (active document), the side effects (renames top-level layers, optionally moves them into kind folders), the reversibility guarantee (one undo reverts everything), and confirms visual output is unchanged — consistent with destructiveHint=false. The only mild tension is idempotentHint=false, but content_summary renaming is not strictly idempotent, so no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then cleanly partitioned into Use when / Do NOT use when / Returns / Preconditions / Side effects. Every line carries information an agent needs, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating recipe tool with no output schema, the description supplies the return shape ({ ok, summary, details: { renamed_count, group_count } }), preconditions and side effects. An agent has everything needed to call it and predict its effect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents auto_group, document_id and the naming_scheme enum with examples, so the baseline is 3. The description only restates 'rename ... and optionally auto-group them by kind' without adding format or edge-case detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb (tidy/rename/group), a precise resource (the active document's layer stack), and scope (top-level layers). The clause 'Never deletes, merges or rasterizes' immediately separates it from sibling operations like photoshop_merge_visible_layers, photoshop_flatten_image and photoshop_rasterize_layer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' (user complains about messy layer names) and 'Do NOT use when' (user wants semantic naming from image content, which the recipe cannot do) boundaries are given. It never names a concrete alternative sibling to route to, but the selection conditions are otherwise unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_recipe_passport_photoA

Turn the active portrait into a passport/ID photo: removes the background via Select Subject, replaces it with white, crops around the subject with ICAO-style headroom, resizes to the exact official pixel size at 300 DPI, and exports a JPEG. Optionally also builds a 10×15 cm print sheet with multiple copies.

Use when: passport photo, visa photo, ID photo, vesikalık, biyometrik fotoğraf. Do NOT use when: the document has no clear single subject, or official compliance must be guaranteed — head-size rules are approximated from subject bounds (no face detection); official acceptance is NOT guaranteed.

Returns: { ok, summary, output_paths, details: { spec, width, height, sheet } }.

Preconditions: PS ≥ 23 (Select Subject v2); active document with a single-person portrait. Side effects: writes one JPEG (+ one sheet JPEG when make_sheet); source document is unchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
specNoTarget size: us_2x2 (600×600 px), eu_35x45 (413×531 px), tr_50x60 (591×709 px). All at 300 DPI. Default us_2x2.us_2x2
qualityNoJPEG quality on the Photoshop 1-12 scale. Default 11.
make_sheetNoAlso export a 10×15 cm (1200×1800 px @300 DPI) print sheet tiled with copies. Default false.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give the generic non-readOnly/non-destructive profile; the description adds real behavioral detail: it writes one JPEG (plus a sheet JPEG), leaves the source document unchanged, requires PS >= 23 for Select Subject v2, and needs a single-person portrait. It also discloses the approximation limitation (no face detection) which is critical for trust.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-sentence summary followed by clearly labeled sections (Use when / Do NOT use when / Returns / Preconditions / Side effects). Dense but every sentence carries operational information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return shape ({ ok, summary, output_paths, details }), preconditions, side effects, and the non-guarantee caveat. An agent has everything needed to decide whether to call it and what to expect back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents spec, quality, make_sheet and document_id fully. The description corroborates the workflow meaning (exact pixel size at 300 DPI, 10x15 cm sheet) but adds little syntax beyond what the schema states, so it sits just above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Turn the active portrait into a passport/ID photo') and enumerates the exact pipeline steps (Select Subject, white replace, ICAO crop, resize, JPEG export). It is clearly distinguishable from generic siblings like photoshop_crop_document or photoshop_resize_image because it names the composite recipe outcome.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' triggers (passport, visa, ID, vesikalık, biyometrik fotoğraf) and explicit 'Do NOT use when' exclusions (no single subject, official compliance required). This is exactly the when/when-not routing an agent needs, including the important caveat that official acceptance is not guaranteed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_recipe_prepare_for_webA

Export a web-optimized version of the active document: duplicate, convert to sRGB, downscale longest edge, sharpen for screen, save to disk. The source PSD stays untouched.

Use when: the user wants a shareable JPEG/PNG sized for the web from the current artwork. Do NOT use when: the user wants multiple platform-specific exports — use photoshop_recipe_export_social_variants. Do NOT call photoshop_save_document afterwards; this recipe already wrote the file.

Returns: { ok, summary, output_paths, undo_history_states_consumed }.

Preconditions: active document. Format is jpeg (default) or png. Side effects: writes one file to disk; the source document is unchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional output path. Absolute paths used as-is. Relative paths resolve under ~/.photoshop-mcp/exports[/<chat-id>]. Omit to auto-generate.
formatNoOutput format: jpeg (default) or png.jpeg
qualityNoJPEG quality on the Photoshop 1-12 scale. Default 9. Ignored for png.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
max_dimension_pxNoLongest-edge pixel cap (default 2048). Min 64, max 8192.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnly=false, destructive=false, openWorld=false, idempotent=false; the description goes beyond this by naming the side effect ('writes one file to disk'), the precondition (active document), and that 'the source PSD stays untouched'. It stops short of stating that repeated calls write additional files rather than overwriting, which is the main behavioral consequence of idempotentHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the operation in one dense sentence, then organizes guidance into labeled Use when / Do NOT use / Returns / Preconditions / Side effects blocks. Every sentence carries non-redundant information; nothing needs trimming.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by documenting the return shape ({ ok, summary, output_paths, undo_history_states_consumed }) and by covering preconditions and side effects. For a 5-parameter, file-writing recipe, nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents path, format, quality, document_id, and max_dimension_px in detail. The description only restates default format (jpeg/png) and the downscale concept, adding no syntax or constraint information beyond the schema — the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource ('Export a web-optimized version of the active document') and enumerates the pipeline steps (duplicate, sRGB, downscale longest edge, sharpen, save). It is clearly distinguishable from generic siblings like photoshop_export_as or photoshop_save_document because it is a composite web-export recipe.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' and 'Do NOT use when' clauses name the alternative sibling (photoshop_recipe_export_social_variants) for the multi-platform case. It also explicitly forbids a follow-up call ('Do NOT call photoshop_save_document afterwards'), which prevents a real error mode.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_recipe_remove_backgroundA

THE tool for "remove background" / "arka planı sil" / cut out / isolate subject. Call this once and stop. Unlocks a locked Background layer, then runs Photoshop native Remove Background (Select Subject / Color Range only if native is unavailable). One undo reverts everything.

Use when: the user wants the background gone. Hair, busy interiors, product shots — still this tool. Do NOT rasterize, duplicate, hide layers, select_subject, create_layer_mask, or execute_script instead of this recipe.

Returns: { ok, summary, undo_history_states_consumed, details.method = remove_background | remove_layer_background | select_subject | color_range_fallback }.

Preconditions: an active document. Native Remove Background needs a current Photoshop; Select Subject fallback needs PS ≥ 23. Side effects: may unlock/rename the Background layer; attaches a pixel mask; no pixels destroyed; one undo reverts everything.

ParametersJSON Schema
NameRequiredDescriptionDefault
feather_pxNoEdge feather in pixels (0-20). 0 = hard edge (default for product shots), 1-3 = soft edge for portraits.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
keep_shadowNoReserved for a future iteration; currently recorded in the response but no shadow layer is created yet.
use_generativeNoAfter masking, run generative edge cleanup on inverted background selection (default false)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond annotations: discloses the layer-unlock/rename side effect, the method fallback chain (native → select_subject → color_range), that no pixels are destroyed, that one undo reverts everything, and version preconditions (PS ≥ 23 for fallback). Annotations only carry the generic safety flags; the description carries the real behavioral burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded with 'THE tool...' and cleanly sectioned into Use when / Returns / Preconditions / Side effects. Minor redundancy — 'one undo reverts everything' appears twice — keeps it just short of a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description spells out the return shape (ok, summary, undo_history_states_consumed, details.method) and enumerates the method values. Preconditions and side effects are both covered, so an agent has everything needed to call and interpret the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema itself already documents feather_px, document_id, keep_shadow (reserved), and use_generative in detail. The description adds no parameter-level syntax or format guidance beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Remove Background') with multilingual aliases, and explicitly distinguishes itself from siblings by naming select_subject, create_layer_mask, and execute_script as things NOT to use instead. An agent can identify this as the canonical background-removal recipe without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit 'Use when' condition ('the user wants the background gone') with edge cases (hair, busy interiors, product shots), plus a 'Do NOT ... instead of this recipe' exclusion list naming concrete alternatives. Routing is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_recipe_remove_distractionA
Destructive

One-shot distraction removal: generative AI remove when available, else content-aware fill. Wrapped in a single undoable history step.

Users often say: remove that person, erase distraction, content aware remove, clone out object.

Use when: the user has selected the object or region to remove. Do NOT use when: no selection exists — use photoshop_select_rectangle or photoshop_select_subject first.

Returns: { ok, summary, undo_history_states_consumed, details }. Preconditions: active document with an active pixel selection. Side effects: fills/removes selected pixels; clears selection.

ParametersJSON Schema
NameRequiredDescriptionDefault
feather_pxNoEdge feather in pixels before remove (0-20, default 0)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
use_generativeNoPrefer generative remove when Photoshop supports it (default true when capable)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds context annotations can't: that the whole operation collapses into a single undoable history step, the precondition of an active pixel selection, and the concrete side effect that selected pixels are filled/removed and the selection is cleared.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core behavior and mechanism lead the description, followed by labeled trigger phrases, when/when-not rules, return shape, preconditions, and side effects. Every section is short and earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive recipe tool with no output schema, the description covers everything an agent needs: mechanism, return shape, preconditions, and side effects. The absence of an output schema is compensated by the explicit 'Returns: { ok, summary, undo_history_states_consumed, details }' line.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (feather_px, document_id, use_generative) are already fully documented in the schema. The description's 'generative AI remove when available' loosely maps to use_generative but adds no format, range, or default detail beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

It states a specific verb+resource (distraction removal) and describes the mechanism precisely: generative remove when available, otherwise content-aware fill, as one undoable step. This clearly differentiates the wrapper recipe from sibling primitives like photoshop_generative_remove and photoshop_content_aware_fill, which do only one of the two paths.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit 'Use when' (user has selected the object) and 'Do NOT use when' (no selection) rules, and names the exact alternatives to reach for instead (photoshop_select_rectangle or photoshop_select_subject). Nothing about tool selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_recipe_sky_blendA

One-shot sky composite: places an external sky image, adds a layer mask, and applies a horizon gradient fade. Wrapped in a single undoable history step.

Users often say: replace sky, fix blown sky, better clouds, swap sky background.

Use when: the user provides a sky image path and native sky replacement is unavailable or manual blend is preferred. Do NOT use when: no sky_image_path is available — ask the user for an absolute file path first. Do NOT use when: fading the active subject layer only — use photoshop_recipe_gradient_fade.

Returns: { ok, summary, undo_history_states_consumed, details: { sky_image_path, layer_name, horizon_pct, feather_pct, direction } }.

Preconditions: active document; sky image file must exist on disk. Side effects: adds a placed sky layer with gradient mask; one undo reverts everything.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoPlacement X offset in pixels (default 0)
yNoPlacement Y offset in pixels (default 0)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
feather_pctNoHalf-width of the transition zone around the horizon (0-50, default 15)
horizon_pctNoDocument-height percentage where sky meets landscape (0-100, default 50)
sky_image_pathYesAbsolute path to the sky image file (JPEG, PNG, etc.)
use_native_skyNoTry native Sky Replacement first when supported (default true when capable)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, the description discloses that the operation is wrapped in one undoable history step, states preconditions (active document, existing sky file), and describes side effects (placed sky layer with gradient mask; one undo reverts everything). This adds meaningful behavior beyond the readOnly/idempotent/destructive hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured into a front-loaded summary, trigger phrases, use/do-not-use rules, return shape, preconditions, and side effects. Every section earns its place and there is no wasted prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 7-parameter recipe with no output schema, the description supplies the return object shape, preconditions, side effects, and undo behavior. Nothing essential for correct invocation appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with every parameter documented in the input schema, so the baseline is 3. The description reinforces that sky_image_path must be an absolute path and mentions returned fields, but it does not add significant parameter-level meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'One-shot sky composite: places an external sky image, adds a layer mask, and applies a horizon gradient fade.' It distinguishes the tool from native sky replacement and from photoshop_recipe_gradient_fade, so an agent can identify it without inspecting siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit 'Use when' criteria, two 'Do NOT use when' exclusions, and names the alternative tool photoshop_recipe_gradient_fade for subject-only fading. It also lists user phrases that should trigger this tool, leaving little ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_redoA
Destructive

Redo the previously undone operation(s), equivalent to Ctrl/Cmd+Shift+Z.

Users often say: redo, yinele, geri alınanı uygula. Use when: reapplying the change that was just undone. Do NOT use when: stepping back through history — use photoshop_undo.

Returns: text confirmation with the step count. Preconditions: active document with something on the redo stack. Side effects: moves the history state forward.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsNoNumber of steps to redo (default: 1)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=true, idempotentHint=false), so the bar is lower; the description still adds preconditions (active document with something on the redo stack), side effects (moves history state forward), and the return format (text confirmation with step count). It does not describe what happens when the redo stack is empty or how errors surface, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core definition, then labeled blocks for usage, return, preconditions, and side effects. The multilingual trigger phrases (redo, yinele, geri alınanı uygula) earn their place by aiding intent matching rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so ('text confirmation with the step count'). Preconditions, side effects, and the sibling alternative are all present, so an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the document_id parameter's null/0/stale-id behavior is fully documented in the schema itself. The description adds nothing new about parameters beyond implying a step count via the return value, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (redo) and resource (previously undone operations) plus the keyboard-equivalent anchor Ctrl/Cmd+Shift+Z, which pins the semantics precisely. It explicitly names the sibling it is not (photoshop_undo), so an agent can disambiguate without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit 'Use when' condition (reapplying the change just undone) and a 'Do NOT use when' exclusion that routes the agent to photoshop_undo for stepping back through history. Both the trigger and the alternative are stated, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_release_clipping_maskA
Idempotent

Release (remove) the clipping mask from the active layer (or a named layer).

Users often say: unclip, release clipping mask, remove clipping mask.

Use when: a clipped layer should become independent again. Do NOT use when: the layer is not clipped — returns not_clipping error.

Returns: JSON { ok, summary, details: { layer_name, is_clipping: false } }. Preconditions: active document; target layer must currently be a clipping mask (grouped). Side effects: sets layer.grouped = false; one history step.

ParametersJSON Schema
NameRequiredDescriptionDefault
layer_nameNoOptional exact layer name (recursive search). Default: active layer.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety/idempotency profile; the description goes further by naming preconditions (active document, target must currently be a clipping mask), the concrete side effect (layer.grouped = false, one history step), and the error behavior. This is well beyond what structured fields convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then organized into labeled Use/Do-not-use/Returns/Preconditions/Side-effects sections. Each line carries distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return shape, preconditions, side effects and error case, so an agent has everything needed to call it correctly. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both document_id and layer_name are already documented. The description restates that the target may be the active or a named layer but adds no format or edge-case detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Release/remove) and resource (clipping mask) plus scope (active or named layer), and it is trivially distinguishable from the sibling photoshop_create_clipping_mask. The natural-language synonyms (unclip, remove clipping mask) further aid matching.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' and 'Do NOT use when' clauses, with the failure condition spelled out (layer not clipped returns not_clipping error). The inverse sibling is implied clearly by the operation, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_rename_layerA
Idempotent

Rename the active layer. Does not change pixels, order, or visibility.

Use when: the active layer needs a stable name for a later photoshop_select_layer_by_name. Do NOT use when: many layers should be renamed by kind — use photoshop_recipe_organize_layers. Do NOT use when: a different layer is the target — use photoshop_select_layer_by_name first.

Returns: the new layer name. Preconditions: active document and active layer. Side effects: the name only. Setting the same name is idempotent. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNew name for the layer
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly=false, destructive=false, idempotent=true), and the description adds substantial beyond-schema context: explicit non-effects on pixels/order/visibility, preconditions (active document + active layer), side effects scoped to the name only, idempotency on identical names, and reversibility via photoshop_undo.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then organized under terse labeled clauses ('Use when', 'Do NOT use when', 'Returns', 'Preconditions', 'Side effects'). Every sentence carries distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-param mutation tool with no output schema, the description supplies the return value, preconditions, side effects, idempotency, and reversibility. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both params (name, document_id) are already documented in detail, including the null/0 active-document behavior. The description adds no syntax or format meaning beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Rename the active layer') and immediately bounds the scope by clarifying it does not change pixels, order, or visibility. The 'active layer' qualifier distinguishes it from generic layer mutation tools in the large sibling set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' and two 'Do NOT use when' clauses, each naming the alternative tool (photoshop_recipe_organize_layers for bulk renaming, photoshop_select_layer_by_name when the wrong layer is active). This is exactly the when/when-not/alternatives structure that scores top marks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_replace_smart_object_contentsA
DestructiveIdempotent

Replace the embedded contents of a Smart Object layer from an image file. Preserves transforms, warps, and Smart Filters on the layer.

Users often say: replace smart object, swap mockup screen, relink embedded file.

Use when: updating a mockup or template Smart Object with a new asset file. Do NOT use when: the target is not a Smart Object — convert first or use photoshop_place_image. Do NOT use for linked Smart Objects that need Relink to File — this replaces embedded contents.

Returns: JSON { ok, summary, details: { layer_name, file_path } }. Preconditions: Smart Object layer active or named; file_path must exist (absolute). Side effects: replaces embedded pixels.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesAbsolute path to the replacement image file (JPEG, PNG, PSD, etc.)
layer_nameNoOptional exact Smart Object layer name. Default: active layer.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructive=true/idempotent=true, and the description goes well beyond them: it states what is preserved (transforms, warps, Smart Filters), the side effect (replaces embedded pixels), and preconditions (active/named Smart Object, file must exist). This is exactly the non-obvious behavior an agent cannot get from the annotation flags alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and the preservation guarantee, then cleanly sectioned into trigger phrases, Use when / Do NOT use when, Returns, Preconditions, and Side effects. Every line carries information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return shape (JSON with ok/summary/details), preconditions, side effects, and the safety-relevant preservation behavior, so an agent has everything needed to invoke it correctly in one place.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description nonetheless adds real requirement context the schema lacks — 'file_path must exist (absolute)' and 'Smart Object layer active or named' — which clarifies the required/optional parameter contract beyond the field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (replace) and resource (embedded contents of a Smart Object layer) plus the source (an image file), and explicitly distinguishes itself from siblings by noting it is NOT for linked Smart Objects needing Relink and pointing at photoshop_place_image for non-Smart-Object targets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when', 'Do NOT use when' clauses with named alternatives (convert first, or use photoshop_place_image), plus colloquial trigger phrases ('swap mockup screen', 'relink embedded file'). Nothing about routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_resize_imageA
Destructive

Resample the active document to a new pixel width and height (bicubic). Every layer scales and the canvas size changes.

Use when: the user gives exact output pixel dimensions for the whole document. Do NOT use when: only one layer should scale — use photoshop_scale_layer or photoshop_fit_layer_to_document. Do NOT use when: AI upscale is requested and photoshop_get_capabilities reports generative_upscale — use photoshop_generative_upscale. Do NOT use when: cropping to a region — use photoshop_crop_document.

Returns: the resulting width and height in pixels. Preconditions: active document. Side effects: resamples all layers, one history step. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthYesNew width in pixels
heightYesNew height in pixels
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveness but the description goes further, disclosing that every layer scales, canvas size changes, a single history step is created, an active document is required, and the operation is reversible via photoshop_undo. This is richer than the annotation set alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the operation, then clean scannable sections for Use/Do NOT use/Returns/Preconditions/Side effects. Every sentence carries routing or behavioral information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description supplies the return values (width and height), preconditions, side effects, and reversibility, leaving nothing an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so width, height, and document_id are already fully documented, including the null/0 active-document behavior. The description adds the bicubic interpolation detail but no additional parameter semantics beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (resample) and resource (active document) with the exact operation scope (whole-document pixel width/height, bicubic) and explicitly distinguishes itself from siblings that scale layers or crop.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' plus three 'Do NOT use when' exclusions, each naming the correct alternative (photoshop_scale_layer, photoshop_fit_layer_to_document, photoshop_generative_upscale, photoshop_crop_document) and the condition that selects it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_rotate_layerA
Destructive

Rotate the active layer by degrees (positive is clockwise) around its center. The document canvas does not rotate.

Use when: one layer needs a rotation. Do NOT use when: the layer should scale or move in pixels — use photoshop_scale_layer or photoshop_move_layer. Do NOT use when: the whole canvas orientation should change — this tool does not rotate the document.

Returns: the degrees applied. Preconditions: active document and active layer. Side effects: transforms that layer, one history step. A second call adds another rotation. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
degreesYesRotation angle in degrees (positive = clockwise, negative = counter-clockwise)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true and idempotent=false, but the description adds real substance beyond them: preconditions (active document and layer), side effects (transforms that layer, one history step), the cumulative nature of repeated calls, and the exact undo path. That is exactly the extra context the annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Labeled, front-loaded sections (behavior, Use when, Do NOT use when, Returns, Preconditions, Side effects) that an agent can scan in one pass. No filler sentences; each line carries a distinct constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no output schema, the description covers the return value, preconditions, side effects, reversibility and repeat-call semantics. An agent has everything needed to call it correctly and to recover from it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already fully documented, including the clockwise/counter-clockwise sign convention the description repeats. The description adds only the behavioral fact that rotation is about the layer's center, which is marginal beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (rotate) and resource (active layer), with the scope qualifier 'around its center' and an explicit boundary ('The document canvas does not rotate'). This cleanly separates it from photoshop_resize_image, photoshop_crop_document and the other layer-transform siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Contains an explicit 'Use when' clause plus two 'Do NOT use when' exclusions that name the correct alternatives (photoshop_scale_layer, photoshop_move_layer) and the canvas-vs-layer distinction. Nothing about tool selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_save_documentA
DestructiveIdempotent

Save the active document to disk in PSD, JPEG, or PNG format.

Use when: user requests export/save with a specific path and format. Do NOT use when: web-optimized resize+sharpen pipeline is needed — use photoshop_recipe_prepare_for_web.

Returns: confirmation with saved path and format. Preconditions: active document; path required. Side effects: writes file to disk.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFull path where to save the document
formatNoFile format (PSD, JPEG, PNG)PSD
qualityNoQuality for JPEG (1-12, default: 8)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false and openWorldHint=false; the description adds context they don't carry — that it writes a file to disk, requires an active document, requires a path, and returns the saved path and format. It does not say what happens if the target path already exists (overwrite vs. error), which matters given destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action in one sentence, then uses labeled clauses (Use when / Do NOT use when / Returns / Preconditions / Side effects) with no filler. Every sentence carries operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly compensates by stating the return value, plus preconditions and side effects. The one missing piece for a file-writing tool is overwrite/conflict behavior on an existing path, which neither annotations nor schema resolve.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented, and the description only echoes the format enum and the required path. It adds no semantics for the quality parameter (JPEG-only, 1-12 scale) beyond what the schema states, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (save), resource (active document), destination (disk) and the supported format set (PSD/JPEG/PNG), which lets an agent place it immediately among ~90 siblings. It also names the sibling it is not (photoshop_recipe_prepare_for_web), so the boundary is visible without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' and 'Do NOT use when' clauses with a named alternative give strong routing guidance. The gap is that the near-duplicate sibling photoshop_export_as (and photoshop_export_artboards) is never addressed, so an agent still has to guess between two save/export paths for the plain case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_save_selectionA

Save the active pixel selection to a new alpha channel.

Use when: preserving a selection for later reload or batch workflows. Do NOT use when: no selection exists — create one first.

Returns: JSON { ok, summary, details: { channel_name, context } }. Preconditions: active document and active pixel selection. Side effects: adds alpha channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
channel_nameNoOptional name for the new alpha channel (auto-generated if omitted)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag this as a non-read-only, non-destructive, non-idempotent write. The description adds value beyond them by stating preconditions (active document and active pixel selection) and the side effect (adds an alpha channel), which together imply repeated calls accumulate channels. It stops short of explicitly stating the non-idempotency or any auth/quota constraints, so a 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Labeled sections (Use when, Do NOT use when, Returns, Preconditions, Side effects) keep it front-loaded and scannable, and every line carries distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description compensates by sketching the return shape (ok, summary, details.channel_name, context). Combined with preconditions and side effects, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (document_id and channel_name) are already fully documented in the schema, including the null/0 active-document semantics and auto-generated channel naming. The description adds no parameter-level detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (save) and resource (active pixel selection) and states the destination artifact (new alpha channel). This distinguishes it from selection-manipulation siblings like contract_selection and feather_selection, which modify rather than persist a selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit 'Use when' (preserving a selection for reload or batch workflows) and 'Do NOT use when' (no selection exists — create one first) guidance, including the remediation step. Nothing about tool selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_scale_layerA
Destructive

Scale the active layer by a percentage (100 leaves the size unchanged). centerAnchor true (default) scales from the center; false scales from the top-left.

Use when: a numeric percent scale on one layer. Do NOT use when: the layer should fit the canvas automatically — use photoshop_fit_layer_to_document. Do NOT use when: the document dimensions should change — use photoshop_resize_image. Do NOT use when: the layer has no pixels yet — fill it first. An empty layer fails with an empty bounding rectangle.

Returns: the scale percent applied. Preconditions: active document and active layer. Side effects: transforms that layer, one history step. 100% does not change size; any other percent is not idempotent. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
centerAnchorNoScale from center (true) or top-left (false). Default: true
scalePercentYesScale percentage (e.g., 50 for 50%, 200 for 200%)

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true and idempotent=false, so the safety profile is partly covered, but the description adds meaningful context beyond them: required preconditions (active document and layer), the empty-layer-bounding-rect failure mode, the "one history step" cost, and that any percent other than 100 is non-idempotent and reversible via photoshop_undo. It does not, however, describe authorization or performance/rate characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then organized into scannable Use/Do-not-use/Returns/Preconditions/Side-effects blocks that map onto how an agent decides to call it. Slight redundancy (the 100%-no-op fact appears twice) and a few of the preconditions restate schema defaults.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-param mutation with no output schema, the description covers the return value, preconditions, side effects, failure mode, and reversal path, leaving nothing an agent needs before invoking it. Complexity is low and coverage is proportionate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns a bump by clarifying that 100 is a true no-op and by restating the center-vs-top-left anchor semantics in behavioral terms rather than just field labels. The centerAnchor meaning largely duplicates the schema text, so it is not fully additive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb+resource+unit ("Scale the active layer by a percentage") and immediately disambiguates from siblings like photoshop_fit_layer_to_document and photoshop_resize_image. An agent can distinguish the three scaling/moving tools without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides an explicit "Use when" and three explicit "Do NOT use when" branches, each naming the alternative tool that should be used instead (fit_layer_to_document, resize_image) plus the condition that selects it (no pixels yet). Routing is fully determined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_select_allA
Idempotent

Select every pixel of the active document. Does not change layer pixels.

Use when: the next fill, mask, or filter should cover the whole canvas. Do NOT use when: only a region is needed — use photoshop_select_rectangle or photoshop_select_subject. Do NOT use when: the selection should be cleared — use photoshop_deselect.

Returns: confirmation that the document is selected. Preconditions: active document. Side effects: replaces the current selection. Idempotent. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (idempotentHint=true, destructiveHint=false, readOnlyHint=false), it discloses preconditions (active document), a side effect ('replaces the current selection'), reversibility ('Reversible with photoshop_undo'), and idempotency. These are the exact behavioral facts an agent needs before mutating selection state, and none are restated from the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line action statement followed by labeled Use/Do NOT use/Returns/Preconditions/Side effects lines. Every line carries distinct information with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, no-output-schema tool, the definition covers purpose, routing, return value, preconditions, and side effects; nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and document_id carries a thorough description (null/0 = active document, positive id activates first, stale ids tolerated), so the schema does the heavy lifting. The tool description adds nothing about the parameter, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Select every pixel of the active document') and immediately scopes the effect ('Does not change layer pixels'), so it is unambiguously distinguishable from sibling selection tools like photoshop_select_rectangle and photoshop_select_subject.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('the next fill, mask, or filter should cover the whole canvas') plus two explicit when-not clauses that name the correct alternatives (photoshop_select_rectangle / photoshop_select_subject for a region, photoshop_deselect to clear). This is textbook routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_select_ellipseA

Create an elliptical pixel selection from a bounding box (anti-aliased).

Use when: circular or oval masks, vignettes, or radial edits inside a region. Do NOT use when: a rectangular region is enough — use photoshop_select_rectangle.

Returns: JSON { ok, summary, details: { shape, bounds?, context } }. Preconditions: active document; right > left and bottom > top. Side effects: replaces current selection.

ParametersJSON Schema
NameRequiredDescriptionDefault
topYesTop edge of bounding box in pixels
leftYesLeft edge of bounding box in pixels
rightYesRight edge of bounding box in pixels
bottomYesBottom edge of bounding box in pixels
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description goes further by disclosing the side effect that it replaces the current selection and the preconditions (active document, right>left, bottom>top). It stops short of covering permission/auth requirements or repeat-call behavior, so it adds real value but is not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line purpose, then labeled Use/Do-NOT/Returns/Preconditions/Side-effects blocks. Every sentence carries information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description supplies the return shape, the side effect on existing selections, and the preconditions. An agent has everything needed to call this correctly against a 5-required-param tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the four bounding-box edges and document_id are already documented; baseline would be 3. The description adds genuine param-level meaning the schema lacks: the right>left and bottom>top ordering constraint on the bounding box, which an agent must satisfy before calling.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (create) and resource (elliptical pixel selection) plus the construction method (from a bounding box, anti-aliased), which cleanly separates it from photoshop_select_rectangle and the other selection siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' cases (circular/oval masks, vignettes, radial edits) and an explicit 'Do NOT use when' with the named alternative photoshop_select_rectangle. The routing decision requires no inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_select_layer_by_nameA
Idempotent

Select the active layer by exact name, including layers inside groups.

Use when: a transform or property tool must target a named layer (photoshop_scale_layer, etc.). Do NOT use when: the layer is already active — check photoshop_get_state first.

Returns: selected, layerName, kind, bounds (best-effort), context. First depth-first name match wins when duplicate names exist in different groups. Preconditions: active document. Side effects: changes active layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact layer name (case-sensitive)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it declares the precondition (active document), the side effect (changes the active layer), and a tie-breaking rule for duplicate names that annotations cannot express. The disclosed mutation matches readOnlyHint=false and the deterministic first-match rule is consistent with idempotentHint=true, so nothing is contradicted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Labeled sections (Use when / Do NOT use when / Returns / Preconditions / Side effects) front-load the routing decision, and each line carries distinct information. No filler sentences or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the return fields (selected, layerName, kind, bounds, context). Preconditions, side effects, and duplicate-name behavior are all covered, so an agent has everything needed to call this correctly in a multi-step transform workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already carries both parameters (name case-sensitivity, document_id null/0 semantics), making 3 the baseline. The description adds genuine value on top by specifying that the first depth-first name match wins when duplicates exist across groups — resolution semantics absent from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (select) and resource (active layer by exact name), plus a non-obvious scope detail: layers nested inside groups are reachable. An agent can distinguish this from siblings like photoshop_rename_layer, photoshop_get_layers, or the set_active_artboard tools without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' names the downstream consumers (photoshop_scale_layer and other transform/property tools), and 'Do NOT use when' gives the exclusion condition with the exact alternative to run first (photoshop_get_state to check whether the layer is already active). Both the positive and negative routing cases are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_select_rectangleA

Create a rectangular pixel selection from corner coordinates.

Use when: masking, cropping a region, or preparing for layer mask. Do NOT use when: subject isolation is needed — use photoshop_recipe_remove_background.

Returns: selection bounds [left, top, right, bottom]. Preconditions: active document. Side effects: replaces, adds, subtracts, or intersects the current selection. mode intersect/add/subtract uses Action Manager and does not depend on the SelectionType enum.

ParametersJSON Schema
NameRequiredDescriptionDefault
topYesTop edge in pixels
leftYesLeft edge in pixels
modeNoHow this rectangle combines with the current selection. Default replace. Use intersect when SelectionType.INTERSECT is unavailable.
rightYesRight edge in pixels
bottomYesBottom edge in pixels
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic mutation profile (readOnlyHint=false, destructiveHint=false, non-idempotent). The description goes well beyond that: it states the precondition (active document), the side effect that the current selection is replaced/added/subtracted/intersected, the returned value, and the implementation quirk that add/subtract/intersect modes use Action Manager rather than the SelectionType enum.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line purpose followed by labelled Use when / Do NOT use / Returns / Preconditions / Side effects blocks. Every sentence carries information an agent needs; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter mutation tool with no output schema, the description supplies the missing pieces: return value, preconditions, side effects on existing selection, and the mode caveat. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents every parameter and the baseline would be 3. The description adds one genuine clarification beyond the schema for the mode parameter (that add/subtract/intersect bypass the SelectionType enum), which justifies a small bump but no more.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Create), resource (rectangular pixel selection) and method (from corner coordinates), which is enough to distinguish it from photoshop_select_ellipse, photoshop_select_all and photoshop_select_subject among the selection siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' list (masking, cropping a region, preparing for layer mask) plus an explicit 'Do NOT use when' case that names the correct alternative (photoshop_recipe_remove_background for subject isolation). Both the positive and negative routing conditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_select_subjectA

Run Select Subject on the active layer (creates a pixel selection only, no mask).

Users often say: cut out, isolate subject, select person, select object.

Use when: you need a subject selection for masking, fill, or further edits. Do NOT use when: full background removal with mask — use photoshop_recipe_remove_background.

Returns: JSON { ok, summary, details: { selected, method } }. Preconditions: PS ≥ 23, active document, non-Background active layer with a recognizable subject. Side effects: replaces current selection.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
sample_all_layersNoSample all layers for autoCutout fallback (default false)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (readOnly=false, destructive=false, idempotent=false); the description adds the genuinely useful traits: preconditions (PS >= 23, active non-Background layer with recognizable subject) and side effects ('replaces current selection'). It also discloses the return shape, which the tool lacks in structured form.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then uses short labeled lines (Users often say / Use when / Do NOT use when / Returns / Preconditions / Side effects) so an agent can scan to the needed facet. Every sentence carries distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, non-idempotent selection tool with no output schema, the description supplies return shape, preconditions, side effects, and alternatives to a rival recipe tool. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (document_id, sample_all_layers) are already documented in-schema, so the baseline of 3 applies. The description only indirectly references the active layer and adds no syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Run Select Subject on the active layer') and immediately disambiguates scope by declaring it 'creates a pixel selection only, no mask'. This lets an agent distinguish it from mask-producing siblings like photoshop_create_layer_mask without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit 'Use when' conditions (masking, fill, further edits), an explicit 'Do NOT use when' with a named alternative (photoshop_recipe_remove_background for full background removal with mask), and even maps common user phrasings ('cut out, isolate subject, select person'). Full when/when-not/alternative coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_set_active_artboardA
Idempotent

Select an artboard layer group by artboard_id (preferred) or unique name so subsequent edits and Select All target that board.

Use when: switching between device frames in an artboard document. Do NOT use when: switching document tabs — use photoshop_set_active_document.

Returns: JSON { ok, summary, details: { artboard } }. Preconditions: target artboard exists (photoshop_list_artboards). Side effects: changes the active layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoExact artboard name (ambiguous if duplicates — use artboard_id)
artboard_idNoLayer id from photoshop_list_artboards / photoshop_get_state
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true, destructive=false. The description adds value beyond them by naming the precondition (target artboard must exist, discoverable via photoshop_list_artboards) and the side effect (changes the active layer), which the annotations do not cover. It stops short of describing failure behavior or ambiguity resolution details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and primary identifier, then cleanly partitioned into Use when / Do NOT use when / Returns / Preconditions / Side effects. Every sentence carries operational information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description supplies the return shape (JSON with ok, summary, details.artboard), the precondition, and the side effect. An agent has everything needed to call it correctly and understand the consequence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3, but the description adds a meaningful selection preference (artboard_id over name) that the schema only hints at via the 'ambiguous if duplicates' note. It does not explain the null/0 document_id convention, which the schema already handles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (select) and resource (artboard layer group) with the exact discriminators (artboard_id preferred, unique name fallback) and the downstream effect ('so subsequent edits and Select All target that board'). It is clearly distinguishable from the sibling photoshop_set_active_document, which it explicitly names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' and 'Do NOT use when' clauses and routes the agent to the correct alternative (photoshop_set_active_document) for the confusable case of switching document tabs. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_set_active_documentA
Idempotent

Switch the active document tab by document_id (preferred), zero-based index, or name.

Use when: working across multiple open files and mutations must target a specific document. Do NOT use when: only one document is open — it is already active. Do NOT use document_name when duplicate names exist — use document_id from photoshop_list_documents.

Returns: JSON { ok, summary, details: { activated: { id, name }, context } }. Preconditions: target document must be open. Provide exactly one of document_id, index, or document_name. Side effects: changes active tab.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNoZero-based tab order index (leftmost tab is 0)
document_idNoUnique internal document id from photoshop_list_documents (preferred)
document_nameNoDocument name/title (ambiguous if multiple tabs share the same name)

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

While annotations cover idempotence and non-destructiveness, the description adds important behavior beyond structured fields: preconditions, the exactly-one-selector rule, side effects on the active tab, and a return JSON shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and tightly organized with labeled sections for usage, exclusions, returns, preconditions, and side effects. Every line contributes actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description still documents the return shape. It covers selection constraints, preconditions, and side effects, leaving no significant gap for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds valuable constraints beyond the schema: document_id is preferred, duplicate names make document_name ambiguous, and exactly one selector must be provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: switching the active document tab. It distinguishes the tool from siblings like photoshop_list_documents and photoshop_set_active_artboard by naming the exact target and the accepted selectors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use and when-not-to-use guidance, including the single-document case. It also names the correct sibling for resolving duplicate document names and tells the agent to prefer document_id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_set_layer_blend_modeB
Idempotent

Set the blend mode of the active layer.

COLOR is the Photoshop UI name (Colorize); it is mapped to ExtendScript BlendMode.COLORBLEND.

ParametersJSON Schema
NameRequiredDescriptionDefault
blendModeYesBlend mode (Photoshop UI name). COLOR maps to BlendMode.COLORBLEND. DARKERCOLOR / LIGHTERCOLOR use Action Manager if the DOM enum is missing.
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false, so the mutation/safety profile is covered. The description adds one genuinely useful behavioral detail (UI 'COLOR' maps internally to BlendMode.COLORBLEND), but says nothing about failure modes when no layer is active or what other modes require fallbacks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, purpose front-loaded in the first, with the mapping caveat as a secondary note. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple annotated setter with full schema coverage and no output schema, the description covers the action and the one non-obvious enum mapping. Error behavior and active-layer requirements are the only unaddressed gaps, which are minor here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The COLOR/COLORBLEND mapping note largely repeats what the blendMode schema description already states, adding little beyond structured data; document_id semantics are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Set the blend mode of the active layer'), which is unambiguous. It does not, however, distinguish itself from near siblings such as photoshop_set_layer_opacity or photoshop_set_layer_visibility beyond the resource name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives, nor any note on prerequisites such as needing a layer selected/active. The phrase 'active layer' is the only implicit usage cue.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_set_layer_lockedA
Idempotent

Set the all-lock flag on the active layer. locked: true blocks further edits to that layer; false clears the lock.

Use when: the user asks to lock or unlock the current layer. Do NOT use when: the layer should only be hidden — use photoshop_set_layer_visibility. Do NOT use when: a different layer is the target — use photoshop_select_layer_by_name first.

Returns: confirmation of the lock state. Preconditions: active document and active layer. Side effects: sets layer.allLocked. The same boolean is idempotent. Reversible with photoshop_undo or by calling again with the opposite value.

ParametersJSON Schema
NameRequiredDescriptionDefault
lockedYesWhether the layer should be locked
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior: preconditions (active document and active layer required), the concrete side effect (sets layer.allLocked), and reversibility via photoshop_undo or the opposite value. The only redundancy is restating idempotency, which the annotation already provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then labeled blocks (Use when / Do NOT use when / Returns / Preconditions / Side effects) that make scanning trivial. Every sentence carries a distinct fact; nothing is padding despite the length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description states what comes back (confirmation of lock state) plus preconditions, side effects, idempotency and undo path. For a two-parameter, low-risk mutation, an agent has everything needed to call it correctly and recover from it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, and the description earns above baseline by explaining what the boolean actually does ("true blocks further edits to that layer; false clears the lock") rather than only echoing the schema's "Whether the layer should be locked". document_id semantics remain schema-only, which is fine at full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Set the all-lock flag on the active layer") and immediately differentiates from the nearest sibling by naming photoshop_set_layer_visibility as the wrong tool for hiding. An agent can distinguish this from the other ~120 layer/selection tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit "Use when" and two "Do NOT use when" clauses, each naming the correct alternative (photoshop_set_layer_visibility for hide-only, photoshop_select_layer_by_name when the target is a different layer). Routing is fully determined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_set_layer_opacityA
Idempotent

Set the active layer opacity to an absolute 0–100 value. The number replaces the current opacity; it is not added to it.

Use when: the active layer should be more or less transparent. Do NOT use when: the layer should be fully hidden from the stack — use photoshop_set_layer_visibility. Do NOT use when: fading into the background with a mask gradient — use photoshop_recipe_gradient_fade.

Returns: the opacity that was set. Preconditions: active document and active layer. Side effects: opacity only. The same value is idempotent. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
opacityYesOpacity value (0-100)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover idempotency and non-destructiveness, and the description goes further: preconditions (active document and active layer), side effects ('opacity only'), reversibility ('Reversible with photoshop_undo'), and the return value. This is substantive behavioral disclosure beyond the annotation set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core semantics, then uses compact labeled sections (Use when / Do NOT use when / Returns / Preconditions / Side effects) with no filler. Every sentence carries a distinct, actionable fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return value ('the opacity that was set'), preconditions, side effects, idempotency, and undo path. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds the critical absolute-vs-relative semantic ('replaces the current opacity; it is not added to it') that the schema's 'Opacity value (0-100)' does not convey. document_id semantics are left entirely to the schema, which handles them adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (set) and resource (layer opacity) with scope precision: 'absolute 0–100 value' that 'replaces the current opacity; it is not added to it.' This distinguishes it from sibling tools without needing to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' plus two 'Do NOT use when' clauses, each naming the correct alternative by name (photoshop_set_layer_visibility for full hiding, photoshop_recipe_gradient_fade for mask-gradient fading). Routing is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_set_layer_visibilityB
Idempotent

Show or hide the active layer

ParametersJSON Schema
NameRequiredDescriptionDefault
visibleYesWhether the layer should be visible
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, covering the safety and repeatability profile. The description adds only the scope (active layer) and no additional behavioral context such as effects on child layers or document switching.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. It is appropriately sized for a simple toggle operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity mutation tool with full schema coverage and annotations carrying the safety profile, the description is nearly sufficient. It could mention that a positive document_id activates the target document before toggling, but that nuance is already covered by the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both visible and document_id are fully documented in the input schema, including document activation behavior. The description adds no parameter meaning beyond what the schema already provides, making 3 the correct baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (show/hide) and resource (active layer), so an agent can distinguish it from siblings like set_layer_opacity or set_layer_blend_mode. It does not explicitly name or rule out alternatives, but the purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no alternatives are mentioned. The description only says what the tool does, leaving the agent to infer that this is the way to toggle visibility.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_set_text_alignmentA
Idempotent

Set justification on the whole active text layer (LEFT through FULLYJUSTIFIED).

Use when: the entire text layer should share one alignment. Do NOT use when: creating the layer — pass alignment on photoshop_create_text_layer. Do NOT use when: only a character range should change, or font, color, and tracking should change too — use photoshop_set_text_ranges or photoshop_set_text_style.

Returns: confirmation of the alignment. Preconditions: active document and an active text layer. Side effects: updates TextItem.justification. The same alignment is idempotent. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
alignmentYesText alignment
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, destructive=false, and idempotent=true, but the description goes further: it names the precondition (active document plus active text layer), the exact side effect (updates TextItem.justification), and the recovery path (photoshop_undo). The idempotency restatement is redundant with the annotation, which keeps this from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Labeled one-line clauses (Use when, Do NOT use when, Returns, Preconditions, Side effects) are front-loaded with the core action and contain no filler. Every sentence carries actionable information for invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description explicitly states the return value, preconditions, side effect target, idempotency, and undo reversibility for a mutation tool. Nothing an agent needs to call this correctly, or to recover from it, is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and both parameters (alignment enum values, document_id null/0 semantics) are fully documented in the schema itself. The description only alludes to the alignment range, adding no syntax or behavior beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Set justification on the whole active text layer') plus the enum range, so scope is unambiguous. It explicitly distinguishes itself from photoshop_create_text_layer, photoshop_set_text_ranges, and photoshop_set_text_style by naming what those handle instead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Uses an explicit when / do-NOT-use-this structure, calling out two exclusion cases and routing each to the correct alternative tool by name. An agent can pick between the text tools without opening any schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_set_text_colorA
Idempotent

Set one RGB color on the whole active text layer.

Use when: the entire text layer should share one color. Do NOT use when: creating the layer — pass red, green, and blue on photoshop_create_text_layer. Do NOT use when: only a character range should change color — use photoshop_set_text_ranges. Do NOT use when: font, size, tracking, or alignment should change too — use photoshop_set_text_style.

Returns: the RGB color applied. Preconditions: active document and an active text layer. Side effects: updates the text color. The same RGB is idempotent. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
redYesRed component (0-255)
blueYesBlue component (0-255)
greenYesGreen component (0-255)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readOnly, idempotent, and non-destructive, but the description goes further: it names preconditions (active document and active text layer), the side effect (updates text color), reconfirms idempotency for identical RGB, and states reversibility via photoshop_undo. This is substantive behavioral context beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action, then layers Use/Do-NOT-use/Returns/Preconditions/Side-effects in scannable blocks. Every line carries distinct information; no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the definition covers purpose, exclusions, return value ('the RGB color applied'), preconditions, side effects, idempotency, and reversibility. An agent has everything needed to call it correctly and predict the outcome.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the red/green/blue 0-255 bounds and the document_id semantics are already fully documented in the schema. The description references the RGB inputs but adds no format or value guidance beyond what the schema supplies, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Set), resource (RGB color), and scope (whole active text layer) in one sentence. It explicitly distinguishes itself from photoshop_set_text_ranges, photoshop_set_text_style, and photoshop_create_text_layer, so an agent can pick it out of a large sibling set without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' and three 'Do NOT use when' clauses, each naming the correct alternative tool (create_text_layer for new layers, set_text_ranges for character ranges, set_text_style for font/size/tracking/alignment). Routing is fully determined with no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_set_text_fontA
Idempotent

Set font family and size for active text layer.

Accepts display name (e.g. "Arial") or PostScript name (e.g. "ArialMT") — resolved via app.fonts. Use photoshop_list_fonts to discover available fonts. If the font is not listed, install its file with photoshop_install_font. That reloads the open app's font list; do not quit Photoshop.

ParametersJSON Schema
NameRequiredDescriptionDefault
fontNameYesFont display or PostScript name (see photoshop_list_fonts)
fontSizeNoFont size in points (optional)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, idempotent, non-destructive, non-open-world behavior. The description adds genuine context beyond them: font names are resolved via app.fonts, both display and PostScript names are valid, and installing a font reloads the live app's font list. It does not state the failure mode when no text layer is active, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the action and followed by resolution semantics and the discovery/install workflow. The final clause about not quitting Photoshop is slightly tangential but earns its place by preventing a real failure mode.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a non-destructive mutation tool with no output schema and fully covered parameters, the description supplies the key prerequisites (text layer, font availability) and the fallback workflow. The main remaining gap is not naming the error condition when the active layer is not text.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: fontName accepts either a display name ("Arial") or PostScript name ("ArialMT") and is resolved through app.fonts, which the schema only gestures at. fontSize is left to the schema, which documents it adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource (set font family and size) and the target scope (active text layer), which cleanly separates it from siblings like photoshop_set_text_color, photoshop_set_text_alignment and photoshop_set_text_style. An agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to photoshop_list_fonts for discovery and to photoshop_install_font when a font is missing, including the operational caveat that installing reloads the app font list and Photoshop must not be quit. This is a concrete when/when-not decision path rather than vague advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_set_text_rangesA
Idempotent

Apply mixed fonts, sizes, and colors inside a single text layer (Action Manager textStyleRange).

Users often say: mixed type, two fonts in one line, multicolor text, 混排, 同一文字层.

Use when: one layer must contain more than one font or color. from is inclusive, to is exclusive (JavaScript slice / ExtendScript string indexes). Do NOT use when: the whole layer shares one style — use photoshop_set_text_style. Do NOT split into extra layers for mixed type unless this tool errors.

Returns: JSON { ok, summary, details: { style, ranges } }. Preconditions: active text layer. Unspecified gaps keep the layer default style. Side effects: rewrites character styles; restores tracking/leading/box afterward.

ParametersJSON Schema
NameRequiredDescriptionDefault
rangesYesNon-overlapping character spans (from inclusive, to exclusive)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply the generic mutating/idempotent profile; the description adds real behavioral context beyond them: the active-text-layer precondition, that unspecified gaps keep the layer default style, that character styles get rewritten, and that tracking/leading/box are restored afterward. The return shape is also stated despite there being no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, then usage, return, preconditions, and side effects in a scannable order. The multilingual synonym block ('混排', '同一文字层') is slightly noisy but serves intent matching, so it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter mutating tool with no output schema and thin annotations, the description covers purpose, routing to the sibling alternative, preconditions, gap behavior, return JSON, and post-call side effects. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds semantics the schema does not: unspecified gaps inherit the layer default style and index boundaries follow JavaScript/ExtendScript slicing. It does not explain the 64-span cap or what happens to overlapping spans, keeping it short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: applying mixed fonts/sizes/colors within a single text layer, with the Action Manager mechanism named. It explicitly distinguishes itself from the sibling photoshop_set_text_style, so an agent can tell them apart without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit 'Use when' condition (one layer must contain more than one font or color), an explicit 'Do NOT use when' exclusion routing to photoshop_set_text_style, plus a fallback rule about not splitting layers unless this tool errors. This is exactly the when/when-not/alternative structure.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_set_text_styleA
Idempotent

Set layer-wide typography on the active text layer: tracking, leading, point vs paragraph box, alignment, font, size, color.

Users often say: letter spacing, tracking, line height, leading, text box width, paragraph text, 字间距, 行高, 文本框.

Use when: tightening/loosening type, setting line height, converting to a wrapped paragraph box, or batching several text attributes in one undo-friendly call. Do NOT use when: creating a new layer — pass the same fields on photoshop_create_text_layer. Do NOT use when: mixed fonts/colors inside one layer — use photoshop_set_text_ranges. Do NOT use execute_script for tracking/leading/box.

Returns: JSON { ok, summary, details: { style } }. Preconditions: active text layer. Side effects: mutates TextItem attributes.

ParametersJSON Schema
NameRequiredDescriptionDefault
redNoRed 0–255
blueNoBlue 0–255
kindNopoint or paragraph (wrapped) text
greenNoGreen 0–255
leadingNoLine height in points. Sets auto_leading false.
fontNameNoFont display or PostScript name
fontSizeNoSize in points
trackingNoCharacter spacing in 1/1000 em (−1000 to 10000)
alignmentNoJustification (same enum as photoshop_set_text_alignment)
box_widthNoParagraph box width in pixels (implies kind=paragraph)
box_heightNoParagraph box height in pixels (implies kind=paragraph)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
auto_leadingNoUse Photoshop auto leading

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readOnly, idempotent, non-destructive, so the mutation profile is partly covered; the description adds real value on top by stating the precondition (active text layer), the side effect (mutates TextItem attributes), the return payload shape, and that batching is undo-friendly. It does not describe failure/partial-application behavior when only some attributes are valid, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and its attribute list, then routing, then returns/preconditions. The synonym line is slightly redundant but earns its place for intent matching in multilingual prompts; a few clauses could be trimmed but nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter mutation tool with no output schema, the description supplies the return shape, preconditions, side effects, and sibling routing, so an agent has everything needed to call it correctly and to know when not to.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds meaning by mapping user-colloquial vocabulary to parameters ('letter spacing'/'字间距'→tracking, 'line height'/'行高'→leading, 'text box width'/'文本框'→box_width/kind), which helps an agent translate an ambiguous request into the right fields. It does not, however, clarify units or too-many-attribute precedence beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Set layer-wide typography on the active text layer') and enumerates the exact attributes it controls (tracking, leading, point vs paragraph box, alignment, font, size, color). An agent can distinguish it from photoshop_set_text_font, photoshop_set_text_color, photoshop_set_text_alignment, and photoshop_set_text_ranges without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' with concrete scenarios (tightening type, line height, converting to a paragraph box, batching attributes in one undo step) and two explicit 'Do NOT use when' exclusions naming the correct alternatives (photoshop_create_text_layer, photoshop_set_text_ranges) plus a negative routing away from execute_script. This is the strongest possible routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_sky_replacementA
Destructive

Replace the sky using Photoshop native Sky Replacement when available.

Use when: a sky image path is provided and native AI sky replacement is supported. Fallback: photoshop_recipe_sky_blend for manual composite.

Returns: { ok, summary, details }. Preconditions: active document; optional sky_image_path for custom sky.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.
sky_image_pathNoOptional absolute path to a sky image file

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description adds useful context the annotations don't carry: the active-document precondition, the optional custom-sky input, and the return envelope. However, it never says what actually happens to the existing layer stack (new layer vs. destructive merge), whether the operation is undoable, or whether the AI feature requires a specific Photoshop version/build — meaningful gaps for a destructive edit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence followed by clearly labelled Use when / Fallback / Returns / Preconditions blocks — very scannable and no filler prose. The 'Returns: { ok, summary, details }' line is marginally generic, which keeps it just under a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter, annotation-covered, no-output-schema tool, the description supplies the missing pieces an agent needs: selection conditions, the fallback path, the precondition, and a return shape. The only thing left unstated is what the edit does to the document's layers/reversibility.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema itself fully documents document_id (null/0 = active document, positive number activates) and sky_image_path. The description only restates these at a higher level ('preconditions: active document; optional sky_image_path for custom sky') without adding format or constraint detail beyond the schema. Baseline 3 when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb+resource (replace the sky) and immediately scopes it to the native Photoshop Sky Replacement feature 'when available'. It also names the sibling it is not (photoshop_recipe_sky_blend), so an agent can distinguish it from the manual blend recipe without reading either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' clause gives the two conditions that select this tool (a sky image path is provided, native AI sky replacement is supported), and the fallback line names the concrete alternative for the case where those conditions fail. This is the when/when-not/alternative pattern done properly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_submit_feedbackA

Record the user's answer to a Photoshop MCP product-feedback nudge.

Use when: photoshop_ping returned a FEEDBACK_NUDGE block and you already asked the user via the host question UI (Cursor AskQuestion / Claude AskUserQuestion) or chat. Do NOT use when: ping had no FEEDBACK_NUDGE — never invent this question. Do not start implementing the suggestion.

Returns: { ok, recorded, next }. After this call, immediately continue the user's original Photoshop request. Preconditions: none. Side effects: persists a local cooldown flag and may send an anonymous analytics event.

ParametersJSON Schema
NameRequiredDescriptionDefault
choiceYesyes = they have a feature request; not_now = skip this week; dont_ask = never prompt again
suggestionNoShort feature request. Include when choice is yes; omit otherwise.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark it as a non-idempotent write with openWorld access, and the description goes well beyond them by disclosing side effects (persists a local cooldown flag, may send an anonymous analytics event), preconditions (none), and the return shape { ok, recorded, next }.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose followed by clearly labeled blocks (Use when, Do NOT use when, Returns, Preconditions, Side effects) with no wasted prose. Every sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter side-effecting tool with no output schema, the description covers triggering condition, exclusions, preconditions, side effects, and the return shape, plus the post-call instruction to resume the original request. Nothing an agent needs is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the enum values already carry their own meanings (yes/not_now/dont_ask, suggestion text), so the schema does the heavy lifting. The description adds no additional parameter semantics, which matches the baseline 3 when coverage is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Record) and resource (the user's answer to a Photoshop MCP product-feedback nudge), which no sibling tool covers. An agent can immediately tell this is not a Photoshop editing operation like the rest of the family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' ties invocation to photoshop_ping returning a FEEDBACK_NUDGE block and to having already asked via the host question UI. 'Do NOT use when' forbids inventing the question, and it warns not to start implementing the suggestion — genuine negative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_undoA
Destructive

Step the active document back through history (Ctrl/Cmd+Z). Each call moves the active history state earlier by steps (default 1).

Users often say: undo, geri al, ctrl z, cmd z, son değişikliği geri al. Use when: reverting the last edit or a short run of edits. Do NOT use when: you need to reapply an undone edit — use photoshop_redo. Do NOT use when: you only need to inspect the stack — use photoshop_get_history.

Returns: text confirmation with the step count. Preconditions: active document with history. Side effects: restores an earlier state and drops the current one onto the redo stack. Not idempotent — a second call undoes further. Reversible with photoshop_redo while those states remain.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsNoNumber of steps to undo (default: 1)
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive=true and idempotent=false, but the description goes further: it discloses preconditions (active document with history), the redo-stack side effect, non-idempotency across repeat calls, and reversibility via photoshop_redo. This is rich behavioral context beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then cleanly segmented into aliases, use/don't-use, returns, and preconditions/side-effects. Every line is functional; the alias list aids matching rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still states the return ('text confirmation with the step count'), and it covers preconditions, side effects, and reversibility. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so document_id's null/0/stale-id semantics are already fully documented. The description still adds value by explaining what `steps` actually does ('moves the active history state earlier by steps'), though it largely restates the default of 1.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: stepping the active document back through its history, with the concrete Ctrl/Cmd+Z mapping. It is unmistakably distinct from siblings like photoshop_redo and photoshop_get_history, which it names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' guidance plus two 'Do NOT use when' clauses that name the correct alternatives (photoshop_redo for reapplying, photoshop_get_history for inspecting). No inference is left to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

photoshop_update_text_contentA
Idempotent

Replace the string contents of the active text layer. Font, color, and alignment stay as they are.

Use when: the wording of an existing text layer should change. Do NOT use when: no text layer exists yet — use photoshop_create_text_layer. Do NOT use when: only style should change — use photoshop_set_text_style, photoshop_set_text_font, photoshop_set_text_color, or photoshop_set_text_alignment.

Returns: confirmation with the new text. Preconditions: active document and an active text layer. Side effects: replaces the characters. The same string is idempotent. Reversible with photoshop_undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesNew text content
document_idYesPhotoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false, so the safety profile is partly covered. The description still adds real value beyond them: preconditions (active document and active text layer required) and reversibility via photoshop_undo. It does restate idempotency, which annotations already provide, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded statement of the action, then clearly labeled Use/Do-NOT/Returns/Preconditions/Side-effects lines. Every sentence is scannable and earns its place, with no wasted prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description states the return ('confirmation with the new text'), preconditions, side effects, and reversibility. For a two-parameter mutation tool this is fully sufficient for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema documents document_id thoroughly (null/0 = active document, positive id activates it). The description adds no parameter syntax beyond 'the active text layer', which is essentially the schema's default behavior. Baseline 3 is appropriate when the schema carries the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Replace the string contents of the active text layer') and immediately scopes what is preserved (font, color, alignment). This clearly distinguishes it from create_text_layer and the set_text_* style tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' plus two 'Do NOT use when' clauses naming the exact alternative tools (photoshop_create_text_layer for missing text; the set_text_style/font/color/alignment tools for styling). An agent can route correctly without inferring anything.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 121 tool updatesv1.7.33
    • Changedphotoshop_adjust_brightness_contrast1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_adjust_curves1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_adjust_exposure1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_adjust_hue_saturation1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_adjust_vibrance1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_apply_gaussian_blur1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_apply_gradient_map1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_apply_gradient_mask1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_apply_high_pass1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_apply_layer_mask1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_apply_layer_style1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_apply_lut1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_apply_motion_blur1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_apply_noise1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_apply_photo_filter1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_apply_sharpen1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_apply_smart_blur1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_auto_contrast1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_auto_levels1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_close_document1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_content_aware_fill1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_contract_selection1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_convert_to_smart_object1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_create_artboard1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_create_clipping_mask1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_create_document2 fields changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Ignored. photoshop_create_document and photoshop_open_image do not target an existing tab. Omit this, or send null or 0."
      • changedInput schema / required
        Previous value: -[
        -  "document_id"
        -]New value: +[]
    • Changedphotoshop_create_layer1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_create_layer_mask1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_create_smart_object_via_copy1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_create_text_layer1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_crop_document1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_delete_layer1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_delete_layer_mask1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_desaturate1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_deselect1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_duplicate_layer1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_edit_smart_object_contents1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_execute_script1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_expand_selection1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_export_artboards1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_export_as1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_feather_selection1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_fill_gradient1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_fill_layer1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_fit_layer_to_document1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_flatten_image1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_generate_from_datasets1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_generate_image1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_generative_expand1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_generative_fill1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_generative_remove1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_generative_upscale1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_get_document_info1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_get_history1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_get_layers1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_get_preview1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_get_selection_bounds1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_get_state1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_image_stack1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_import_datasets1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_install_font1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_invert1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_invert_selection1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_list_artboards1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_list_datasets1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_list_fonts1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_merge_visible_layers1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_move_layer1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_move_layer_down1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_move_layer_to_bottom1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_move_layer_to_position1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_move_layer_to_top1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_move_layer_up1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_neural_filter1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_open_image2 fields changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Ignored. photoshop_create_document and photoshop_open_image do not target an existing tab. Omit this, or send null or 0."
      • changedInput schema / required
        Previous value: -[
        -  "filePath",
        -  "document_id"
        -]New value: +[
        +  "filePath"
        +]
    • Changedphotoshop_place_image1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_play_action1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_rasterize_layer1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_apply_color_grade1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_batch_mockup_replace1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_batch_watermark1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_csv_to_cards1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_dodge_burn1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_enhance_portrait1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_export_social_variants1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_frequency_separation1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_gradient_fade1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_organize_layers1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_passport_photo1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_prepare_for_web1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_remove_background1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_remove_distraction1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_sky_blend1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_recipe_split_carousel1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_redo1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_release_clipping_mask1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_rename_layer1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_replace_smart_object_contents1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_resize_image1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_rotate_layer1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_save_document1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_save_selection1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_scale_layer1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_select_all1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_select_ellipse1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_select_layer_by_name1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_select_rectangle1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_select_subject1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_set_active_artboard1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_set_layer_blend_mode1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_set_layer_locked1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_set_layer_opacity1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_set_layer_visibility1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_set_text_alignment1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_set_text_color1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_set_text_font1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_set_text_ranges1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_set_text_style1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_sky_replacement1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_undo1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
    • Changedphotoshop_update_text_content1 field changed
      • changedInput schema / properties / document_id / description
        Previous value: -"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null or 0 to use the active document. A positive number activates that document before the tool runs. When no document is open, a stale id does not block the call."
  2. 121 tool updatesv1.7.32
    • Changedphotoshop_adjust_brightness_contrast4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "brightness",
        -  "contrast"
        -]New value: +[
        +  "brightness",
        +  "contrast",
        +  "document_id"
        +]
    • Changedphotoshop_adjust_curves4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_adjust_exposure4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_adjust_hue_saturation4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "hue",
        -  "saturation",
        -  "lightness"
        -]New value: +[
        +  "hue",
        +  "saturation",
        +  "lightness",
        +  "document_id"
        +]
    • Changedphotoshop_adjust_vibrance4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_apply_gaussian_blur4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "radius"
        -]New value: +[
        +  "radius",
        +  "document_id"
        +]
    • Changedphotoshop_apply_gradient_map4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_apply_gradient_mask4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_apply_high_pass4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "radius"
        -]New value: +[
        +  "radius",
        +  "document_id"
        +]
    • Changedphotoshop_apply_layer_mask4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_apply_layer_style4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_apply_lut4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "lut"
        -]New value: +[
        +  "lut",
        +  "document_id"
        +]
    • Changedphotoshop_apply_motion_blur4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "angle",
        -  "radius"
        -]New value: +[
        +  "angle",
        +  "radius",
        +  "document_id"
        +]
    • Changedphotoshop_apply_noise4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "amount"
        -]New value: +[
        +  "amount",
        +  "document_id"
        +]
    • Changedphotoshop_apply_photo_filter4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_apply_sharpen4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "amount",
        -  "radius"
        -]New value: +[
        +  "amount",
        +  "radius",
        +  "document_id"
        +]
    • Changedphotoshop_apply_smart_blur4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "radius",
        -  "threshold"
        -]New value: +[
        +  "radius",
        +  "threshold",
        +  "document_id"
        +]
    • Changedphotoshop_auto_contrast4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_auto_levels4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_close_document4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_content_aware_fill4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_contract_selection4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "pixels"
        -]New value: +[
        +  "pixels",
        +  "document_id"
        +]
    • Changedphotoshop_convert_to_smart_object4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_create_artboard4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "width",
        -  "height"
        -]New value: +[
        +  "width",
        +  "height",
        +  "document_id"
        +]
    • Changedphotoshop_create_clipping_mask4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_create_document8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / properties / height / default
        Added value: +1080
      • changedInput schema / properties / height / description
        Previous value: -"Document height in pixels"New value: +"Document height in pixels. Default 1080 when the request names no size."
      • addedInput schema / properties / width / default
        Added value: +1920
      • changedInput schema / properties / width / description
        Previous value: -"Document width in pixels"New value: +"Document width in pixels. Default 1920 when the request names no size."
      • changedInput schema / required
        Previous value: -[
        -  "width",
        -  "height"
        -]New value: +[
        +  "document_id"
        +]
    • Changedphotoshop_create_layer4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_create_layer_mask4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_create_smart_object_via_copy4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_create_text_layer4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "text"
        -]New value: +[
        +  "text",
        +  "document_id"
        +]
    • Changedphotoshop_crop_document4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "left",
        -  "top",
        -  "right",
        -  "bottom"
        -]New value: +[
        +  "left",
        +  "top",
        +  "right",
        +  "bottom",
        +  "document_id"
        +]
    • Changedphotoshop_delete_layer4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_delete_layer_mask4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_desaturate4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_deselect4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_duplicate_layer4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_edit_smart_object_contents4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_execute_script4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "code"
        -]New value: +[
        +  "code",
        +  "document_id"
        +]
    • Changedphotoshop_expand_selection4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "pixels"
        -]New value: +[
        +  "pixels",
        +  "document_id"
        +]
    • Changedphotoshop_export_artboards4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "folder"
        -]New value: +[
        +  "folder",
        +  "document_id"
        +]
    • Changedphotoshop_export_as4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "path"
        -]New value: +[
        +  "path",
        +  "document_id"
        +]
    • Changedphotoshop_feather_selection4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "pixels"
        -]New value: +[
        +  "pixels",
        +  "document_id"
        +]
    • Addedphotoshop_fill_gradient
    • Changedphotoshop_fill_layer4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "red",
        -  "green",
        -  "blue"
        -]New value: +[
        +  "red",
        +  "green",
        +  "blue",
        +  "document_id"
        +]
    • Changedphotoshop_fit_layer_to_document4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_flatten_image4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_generate_from_datasets4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "output_dir"
        -]New value: +[
        +  "output_dir",
        +  "document_id"
        +]
    • Changedphotoshop_generate_image4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "prompt"
        -]New value: +[
        +  "prompt",
        +  "document_id"
        +]
    • Changedphotoshop_generative_expand4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_generative_fill4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "prompt"
        -]New value: +[
        +  "prompt",
        +  "document_id"
        +]
    • Changedphotoshop_generative_remove4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_generative_upscale4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_get_document_info4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_get_history4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_get_layers4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_get_preview4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_get_selection_bounds4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_get_state4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_image_stack4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "files"
        -]New value: +[
        +  "files",
        +  "document_id"
        +]
    • Changedphotoshop_import_datasets4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "xml_path"
        -]New value: +[
        +  "xml_path",
        +  "document_id"
        +]
    • Changedphotoshop_install_font4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "file_path"
        -]New value: +[
        +  "file_path",
        +  "document_id"
        +]
    • Changedphotoshop_invert4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_invert_selection4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_list_artboards4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_list_datasets4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_list_fonts4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_merge_visible_layers4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_move_layer4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "deltaX",
        -  "deltaY"
        -]New value: +[
        +  "deltaX",
        +  "deltaY",
        +  "document_id"
        +]
    • Changedphotoshop_move_layer_down4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_move_layer_to_bottom4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_move_layer_to_position4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "targetLayerName",
        -  "position"
        -]New value: +[
        +  "targetLayerName",
        +  "position",
        +  "document_id"
        +]
    • Changedphotoshop_move_layer_to_top4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_move_layer_up4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_neural_filter4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "filter"
        -]New value: +[
        +  "filter",
        +  "document_id"
        +]
    • Changedphotoshop_open_image4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "filePath"
        -]New value: +[
        +  "filePath",
        +  "document_id"
        +]
    • Changedphotoshop_place_image4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "filePath"
        -]New value: +[
        +  "filePath",
        +  "document_id"
        +]
    • Changedphotoshop_play_action4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "actionName",
        -  "actionSetName"
        -]New value: +[
        +  "actionName",
        +  "actionSetName",
        +  "document_id"
        +]
    • Changedphotoshop_rasterize_layer4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_recipe_apply_color_grade4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_recipe_batch_mockup_replace4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "smart_object_layer_name",
        -  "assets_dir"
        -]New value: +[
        +  "smart_object_layer_name",
        +  "assets_dir",
        +  "document_id"
        +]
    • Changedphotoshop_recipe_batch_watermark4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "assets_dir"
        -]New value: +[
        +  "assets_dir",
        +  "document_id"
        +]
    • Changedphotoshop_recipe_csv_to_cards4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "csv_path",
        -  "output_dir"
        -]New value: +[
        +  "csv_path",
        +  "output_dir",
        +  "document_id"
        +]
    • Changedphotoshop_recipe_dodge_burn4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_recipe_enhance_portrait4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_recipe_export_social_variants5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / properties / platforms / items / enum
        Added value: +[
        +  "instagram_post",
        +  "instagram_story",
        +  "instagram_reel",
        +  "x_post",
        +  "x_header",
        +  "facebook_post",
        +  "facebook_cover",
        +  "linkedin_post",
        +  "linkedin_banner",
        +  "youtube_thumbnail",
        +  "tiktok_vertical",
        +  "pinterest_pin"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_recipe_frequency_separation4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_recipe_gradient_fade4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_recipe_organize_layers4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_recipe_passport_photo4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_recipe_prepare_for_web4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_recipe_remove_background4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_recipe_remove_distraction4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_recipe_sky_blend4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "sky_image_path"
        -]New value: +[
        +  "sky_image_path",
        +  "document_id"
        +]
    • Changedphotoshop_recipe_split_carousel4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "slides"
        -]New value: +[
        +  "slides",
        +  "document_id"
        +]
    • Changedphotoshop_redo4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_release_clipping_mask4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_rename_layer4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "name"
        -]New value: +[
        +  "name",
        +  "document_id"
        +]
    • Changedphotoshop_replace_smart_object_contents4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "file_path"
        -]New value: +[
        +  "file_path",
        +  "document_id"
        +]
    • Changedphotoshop_resize_image4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "width",
        -  "height"
        -]New value: +[
        +  "width",
        +  "height",
        +  "document_id"
        +]
    • Changedphotoshop_rotate_layer4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "degrees"
        -]New value: +[
        +  "degrees",
        +  "document_id"
        +]
    • Changedphotoshop_save_document4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "path"
        -]New value: +[
        +  "path",
        +  "document_id"
        +]
    • Changedphotoshop_save_selection4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_scale_layer4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "scalePercent"
        -]New value: +[
        +  "scalePercent",
        +  "document_id"
        +]
    • Changedphotoshop_select_all4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_select_ellipse4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "left",
        -  "top",
        -  "right",
        -  "bottom"
        -]New value: +[
        +  "left",
        +  "top",
        +  "right",
        +  "bottom",
        +  "document_id"
        +]
    • Changedphotoshop_select_layer_by_name4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "name"
        -]New value: +[
        +  "name",
        +  "document_id"
        +]
    • Changedphotoshop_select_rectangle4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "left",
        -  "top",
        -  "right",
        -  "bottom"
        -]New value: +[
        +  "left",
        +  "top",
        +  "right",
        +  "bottom",
        +  "document_id"
        +]
    • Changedphotoshop_select_subject4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_set_active_artboard4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_set_layer_blend_mode4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "blendMode"
        -]New value: +[
        +  "blendMode",
        +  "document_id"
        +]
    • Changedphotoshop_set_layer_locked4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "locked"
        -]New value: +[
        +  "locked",
        +  "document_id"
        +]
    • Changedphotoshop_set_layer_opacity4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "opacity"
        -]New value: +[
        +  "opacity",
        +  "document_id"
        +]
    • Changedphotoshop_set_layer_visibility4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "visible"
        -]New value: +[
        +  "visible",
        +  "document_id"
        +]
    • Changedphotoshop_set_text_alignment4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "alignment"
        -]New value: +[
        +  "alignment",
        +  "document_id"
        +]
    • Changedphotoshop_set_text_color4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "red",
        -  "green",
        -  "blue"
        -]New value: +[
        +  "red",
        +  "green",
        +  "blue",
        +  "document_id"
        +]
    • Changedphotoshop_set_text_font4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "fontName"
        -]New value: +[
        +  "fontName",
        +  "document_id"
        +]
    • Changedphotoshop_set_text_ranges4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "ranges"
        -]New value: +[
        +  "ranges",
        +  "document_id"
        +]
    • Changedphotoshop_set_text_style4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_sky_replacement4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_undo4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • addedInput schema / required
        Added value: +[
        +  "document_id"
        +]
    • Changedphotoshop_update_text_content4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / document_id / description
        Previous value: -"Optional Photoshop document id from photoshop_get_state / photoshop_list_documents. When set, the tool activates that document before running so a UI tab switch cannot retarget the edit."New value: +"Photoshop document id from photoshop_get_state / photoshop_list_documents. Send null to use the active document. A number activates that document before the tool runs."
      • changedInput schema / properties / document_id / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "text"
        -]New value: +[
        +  "text",
        +  "document_id"
        +]
  3. 1 tool updatev1.7.29
    • Addedphotoshop_install_font
  4. 10 tool updatesv1.7.20
    • Addedphotoshop_create_artboard
    • Changedphotoshop_create_text_layer10 fields changed
      • addedInput schema / properties / alignment
        Added value: +{
        +  "description": "Paragraph/point justification",
        +  "enum": [
        +    "LEFT",
        +    "CENTER",
        +    "RIGHT",
        +    "LEFTJUSTIFIED",
        +    "CENTERJUSTIFIED",
        +    "RIGHTJUSTIFIED",
        +    "FULLYJUSTIFIED"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / auto_leading
        Added value: +{
        +  "description": "Use Photoshop auto leading (ignores leading when true)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / blue
        Added value: +{
        +  "description": "Text color blue 0–255",
        +  "maximum": 255,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / box_height
        Added value: +{
        +  "description": "Paragraph text box height in pixels (implies kind=paragraph)",
        +  "minimum": 1,
        +  "type": "number"
        +}
      • addedInput schema / properties / box_width
        Added value: +{
        +  "description": "Paragraph text box width in pixels (implies kind=paragraph)",
        +  "minimum": 1,
        +  "type": "number"
        +}
      • addedInput schema / properties / green
        Added value: +{
        +  "description": "Text color green 0–255",
        +  "maximum": 255,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / kind
        Added value: +{
        +  "description": "point = single-line; paragraph = wrapped text box (default point unless box_width/height set)",
        +  "enum": [
        +    "point",
        +    "paragraph"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / leading
        Added value: +{
        +  "description": "Line height in points. Sets auto_leading false.",
        +  "minimum": 0.1,
        +  "type": "number"
        +}
      • addedInput schema / properties / red
        Added value: +{
        +  "description": "Text color red 0–255",
        +  "maximum": 255,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / tracking
        Added value: +{
        +  "description": "Character spacing in 1/1000 em (−1000 to 10000). Photoshop tracking.",
        +  "type": "number"
        +}
    • Changedphotoshop_execute_script1 field changed
      • addedInput schema / properties / timeout_ms
        Added value: +{
        +  "description": "Script timeout in milliseconds (default 30000, max 600000). Override with env PHOTOSHOP_SCRIPT_TIMEOUT. Use for long loops, batch jobs, or large documents.",
        +  "maximum": 600000,
        +  "minimum": 1000,
        +  "type": "number"
        +}
    • Addedphotoshop_export_artboards
    • Changedphotoshop_export_as1 field changed
      • addedInput schema / properties / artboard_id
        Added value: +{
        +  "description": "Optional artboard layer id from photoshop_list_artboards — export that board only instead of the full canvas",
        +  "type": "number"
        +}
    • Addedphotoshop_list_artboards
    • Changedphotoshop_select_rectangle1 field changed
      • addedInput schema / properties / mode
        Added value: +{
        +  "description": "How this rectangle combines with the current selection. Default replace. Use intersect when SelectionType.INTERSECT is unavailable.",
        +  "enum": [
        +    "replace",
        +    "add",
        +    "subtract",
        +    "intersect"
        +  ],
        +  "type": "string"
        +}
    • Addedphotoshop_set_active_artboard
    • Addedphotoshop_set_text_ranges
    • Addedphotoshop_set_text_style
  5. 1 tool updatev1.7.17
    • Addedphotoshop_submit_feedback
  6. 118 tool updatesv0.1.0
    • First observedphotoshop_adjust_brightness_contrast
    • First observedphotoshop_adjust_curves
    • First observedphotoshop_adjust_exposure
    • First observedphotoshop_adjust_hue_saturation
    • First observedphotoshop_adjust_vibrance
    • First observedphotoshop_apply_gaussian_blur
    • First observedphotoshop_apply_gradient_map
    • First observedphotoshop_apply_gradient_mask
    • First observedphotoshop_apply_high_pass
    • First observedphotoshop_apply_layer_mask
    • First observedphotoshop_apply_layer_style
    • First observedphotoshop_apply_lut
    • First observedphotoshop_apply_motion_blur
    • First observedphotoshop_apply_noise
    • First observedphotoshop_apply_photo_filter
    • First observedphotoshop_apply_sharpen
    • First observedphotoshop_apply_smart_blur
    • First observedphotoshop_auto_contrast
    • First observedphotoshop_auto_levels
    • First observedphotoshop_close_document
    • First observedphotoshop_content_aware_fill
    • First observedphotoshop_contract_selection
    • First observedphotoshop_convert_to_smart_object
    • First observedphotoshop_create_clipping_mask
    • First observedphotoshop_create_document
    • First observedphotoshop_create_layer
    • First observedphotoshop_create_layer_mask
    • First observedphotoshop_create_smart_object_via_copy
    • First observedphotoshop_create_text_layer
    • First observedphotoshop_crop_document
    • First observedphotoshop_delete_layer
    • First observedphotoshop_delete_layer_mask
    • First observedphotoshop_desaturate
    • First observedphotoshop_deselect
    • First observedphotoshop_duplicate_layer
    • First observedphotoshop_edit_smart_object_contents
    • First observedphotoshop_execute_script
    • First observedphotoshop_expand_selection
    • First observedphotoshop_export_as
    • First observedphotoshop_feather_selection
    • First observedphotoshop_fill_layer
    • First observedphotoshop_fit_layer_to_document
    • First observedphotoshop_flatten_image
    • First observedphotoshop_generate_from_datasets
    • First observedphotoshop_generate_image
    • First observedphotoshop_generative_expand
    • First observedphotoshop_generative_fill
    • First observedphotoshop_generative_remove
    • First observedphotoshop_generative_upscale
    • First observedphotoshop_get_capabilities
    • First observedphotoshop_get_document_info
    • First observedphotoshop_get_history
    • First observedphotoshop_get_layers
    • First observedphotoshop_get_preview
    • First observedphotoshop_get_selection_bounds
    • First observedphotoshop_get_state
    • First observedphotoshop_get_version
    • First observedphotoshop_image_stack
    • First observedphotoshop_import_datasets
    • First observedphotoshop_invert
    • First observedphotoshop_invert_selection
    • First observedphotoshop_list_datasets
    • First observedphotoshop_list_documents
    • First observedphotoshop_list_fonts
    • First observedphotoshop_merge_visible_layers
    • First observedphotoshop_move_layer
    • First observedphotoshop_move_layer_down
    • First observedphotoshop_move_layer_to_bottom
    • First observedphotoshop_move_layer_to_position
    • First observedphotoshop_move_layer_to_top
    • First observedphotoshop_move_layer_up
    • First observedphotoshop_neural_filter
    • First observedphotoshop_open_image
    • First observedphotoshop_ping
    • First observedphotoshop_place_image
    • First observedphotoshop_play_action
    • First observedphotoshop_rasterize_layer
    • First observedphotoshop_recipe_apply_color_grade
    • First observedphotoshop_recipe_batch_mockup_replace
    • First observedphotoshop_recipe_batch_watermark
    • First observedphotoshop_recipe_csv_to_cards
    • First observedphotoshop_recipe_dodge_burn
    • First observedphotoshop_recipe_enhance_portrait
    • First observedphotoshop_recipe_export_social_variants
    • First observedphotoshop_recipe_frequency_separation
    • First observedphotoshop_recipe_gradient_fade
    • First observedphotoshop_recipe_organize_layers
    • First observedphotoshop_recipe_passport_photo
    • First observedphotoshop_recipe_prepare_for_web
    • First observedphotoshop_recipe_remove_background
    • First observedphotoshop_recipe_remove_distraction
    • First observedphotoshop_recipe_sky_blend
    • First observedphotoshop_recipe_split_carousel
    • First observedphotoshop_redo
    • First observedphotoshop_release_clipping_mask
    • First observedphotoshop_rename_layer
    • First observedphotoshop_replace_smart_object_contents
    • First observedphotoshop_resize_image
    • First observedphotoshop_rotate_layer
    • First observedphotoshop_save_document
    • First observedphotoshop_save_selection
    • First observedphotoshop_scale_layer
    • First observedphotoshop_select_all
    • First observedphotoshop_select_ellipse
    • First observedphotoshop_select_layer_by_name
    • First observedphotoshop_select_rectangle
    • First observedphotoshop_select_subject
    • First observedphotoshop_set_active_document
    • First observedphotoshop_set_layer_blend_mode
    • First observedphotoshop_set_layer_locked
    • First observedphotoshop_set_layer_opacity
    • First observedphotoshop_set_layer_visibility
    • First observedphotoshop_set_text_alignment
    • First observedphotoshop_set_text_color
    • First observedphotoshop_set_text_font
    • First observedphotoshop_sky_replacement
    • First observedphotoshop_undo
    • First observedphotoshop_update_text_content

TDQS

A3.6/5.0

Scored across 127 tools

Disambiguation4/5

With 127 tools there is genuine overlap (multiple blur/fill/export/adjustment variants, recipe_* vs atomic equivalents, adjust_curves vs apply_lut vs recipe_apply_color_grade). However, descriptions are unusually strong at disambiguation, explicitly embedding 'Do NOT use when... use X instead' cross-references that resolve nearly every near-duplicate. An agent can tell tools apart, but the sheer number of similar-sounding options keeps it short of a perfect score.

Naming Consistency4/5

Nearly all tools share a uniform photoshop_ prefix in snake_case with a verb_noun structure (create_layer, set_layer_opacity, apply_gaussian_blur), which is highly predictable. Minor deviations exist: verb-only names (desaturate, invert, undo, ping), noun-only (image_stack, neural_filter), verb_preposition (export_as), and a recipe_/generative_ sub-namespace. These are small wrinkles in an otherwise consistent scheme.

Tool Count1/5

127 tools is an extreme count far beyond any well-scoped surface, even accounting for Photoshop's genuinely vast domain. Numerous near-duplicate operations (multiple blurs, multiple fills, adjustment-vs-adjustment-layer pairs, several export paths) inflate the set well past the point of cognitive manageability. This is a clear extreme mismatch.

Completeness5/5

Coverage is remarkably thorough: documents, layers, masks, selections, text/typography, filters, adjustments, smart objects, generative AI, artboards, data sets, history, session state, and high-level recipes are all present with full lifecycle operations. CRUD-style coverage for each sub-domain is essentially complete, with only minor edge gaps (e.g. path/pen tools, arbitrary layer-effect editing).

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to programmatically control Adobe Photoshop on Windows to create documents, manipulate layers, and manage image adjustments. It provides a bridge between the Model Context Protocol and the Photoshop Python API for automated graphic design workflows.
    306
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI assistants to search, browse, and download professional icons from The Noun Project directly within MCP-compatible environments. It supports SVG and PNG formats with customizable styles and provides optimized modes for free and paid API tiers.
    7
    74 npm
    6
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to control Adobe Photoshop programmatically through natural language, with state awareness, recipe tools, and a standalone UI.
    14,938 npm
    MIT