Skip to main content
Glama

Demo

Related MCP server: Photoshop MCP Server

How It Works

graph LR
    A[Agent] <-->|stdio| B[MCP Server]
    B <-->|WebSocket| C[Browser]
    C <-->|postMessage| D[Photopea]

Your agent sends editing commands through the MCP protocol. The server translates these into Photopea JavaScript API calls and executes them via a WebSocket bridge to the browser.

Note: A browser window will open automatically on the first tool call. This is expected -- Photopea runs entirely in the browser and the server needs it to perform image editing operations.

Quick Start

claude mcp add -s user photopea -- npx -y photopea-mcp-server

Then start a new Claude Code session and ask it to edit images. The Photopea editor will open in your browser automatically on the first tool call.

Installation

Claude Code

npx (recommended):

claude mcp add -s user photopea -- npx -y photopea-mcp-server

Global install:

npm install -g photopea-mcp-server
claude mcp add -s user photopea -- photopea-mcp-server

Claude Desktop

Add to your Claude Desktop config file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "photopea": {
      "command": "npx",
      "args": ["-y", "photopea-mcp-server"]
    }
  }
}

Cursor

Add to Cursor MCP settings (.cursor/mcp.json in your project or ~/.cursor/mcp.json globally):

{
  "mcpServers": {
    "photopea": {
      "command": "npx",
      "args": ["-y", "photopea-mcp-server"]
    }
  }
}

VS Code (Copilot)

Add to .vscode/mcp.json in your project:

{
  "servers": {
    "photopea": {
      "command": "npx",
      "args": ["-y", "photopea-mcp-server"]
    }
  }
}

Windsurf

Add to Windsurf MCP settings (~/.windsurf/mcp.json):

{
  "mcpServers": {
    "photopea": {
      "command": "npx",
      "args": ["-y", "photopea-mcp-server"]
    }
  }
}

Available Tools

Document (5 tools)

Tool

Description

photopea_create_document

Create a new document with specified dimensions and settings

photopea_open_file

Open an image from a URL or local file path

photopea_get_document_info

Get active document info (name, dimensions, resolution, color mode)

photopea_resize_document

Resize the active document (resamples content to fit)

photopea_close_document

Close the active document

Layer (11 tools)

Tool

Description

photopea_add_layer

Add a new empty art layer

photopea_add_fill_layer

Add a solid color fill layer

photopea_delete_layer

Delete a layer by name or index

photopea_select_layer

Make a layer active by name or index

photopea_set_layer_properties

Set opacity, blend mode, visibility, name, or lock state

photopea_move_layer

Translate a layer by x/y offset

photopea_duplicate_layer

Duplicate a layer with optional new name

photopea_reorder_layer

Move a layer in the stack (above, below, top, bottom)

photopea_group_layers

Group named layers into a layer group

photopea_ungroup_layers

Ungroup a layer group

photopea_get_layers

Get the full layer tree as JSON

Text & Shape (3 tools)

Tool

Description

photopea_add_text

Add a text layer at specified coordinates

photopea_edit_text

Edit content or style of an existing text layer

photopea_add_shape

Add a shape (rectangle or ellipse)

Image & Effects (9 tools)

Tool

Description

photopea_place_image

Place an image from URL or local path

photopea_apply_adjustment

Apply brightness/contrast, hue/saturation, levels, or curves

photopea_apply_filter

Apply gaussian blur, sharpen, unsharp mask, noise, or motion blur

photopea_transform_layer

Scale, rotate, or flip a layer

photopea_add_gradient

Apply a linear gradient fill

photopea_make_selection

Create a rectangular, elliptical, or full selection

photopea_modify_selection

Expand, contract, feather, or invert a selection

photopea_fill_selection

Fill the current selection with a color

photopea_clear_selection

Deselect the current selection

Export & Utility (6 tools)

Tool

Description

photopea_export_image

Export to PNG, JPG, WebP, PSD, or SVG

photopea_load_font

Load a custom font from a URL (TTF, OTF, WOFF2)

photopea_list_fonts

List available fonts, with optional search filter

photopea_run_script

Execute arbitrary Photopea JavaScript

photopea_undo

Undo one or more actions

photopea_redo

Redo one or more actions

Usage Examples

Once installed, ask your agent to perform image editing tasks:

Create a poster:

"Create a 1920x1080 document with a dark blue background, add the title 'Hello World' in white 72px Arial, and export it as a PNG to ~/Desktop/poster.png"

Edit a photo:

"Open ~/photos/portrait.jpg, increase the brightness by 30, apply a slight gaussian blur of 2px, and export as JPG to ~/Desktop/edited.jpg"

Composite images:

"Create a 1200x630 document, place ~/assets/background.png as the base layer, then place ~/assets/logo.png and move it to the top-right corner"

Batch adjustments:

"Open ~/photos/sunset.jpg, apply hue/saturation with +20 saturation, apply an unsharp mask with amount 50 and radius 2, then export as PNG"

Development

git clone https://github.com/attalla1/photopea-mcp-server.git
cd photopea-mcp-server
npm install
npm run build

Commands

Command

Description

npm run build

Compile TypeScript to dist/

npm run dev

Watch mode with auto-reload

npm test

Run unit and integration tests

npm start

Start the server

Architecture

The server has four main components:

MCP Server (src/server.ts) -- Registers all 34 tools with the MCP SDK and connects via stdio transport.

WebSocket Bridge (src/bridge/websocket-server.ts) -- Manages the connection between the MCP server and the browser. Queues script execution requests and handles responses with timeouts.

Script Builder (src/bridge/script-builder.ts) -- Pure functions that translate tool parameters into Photopea JavaScript API calls. Each builder function generates a script string that Photopea can execute.

Browser Frontend (src/frontend/index.html) -- A single-page app that loads Photopea in an iframe, connects to the WebSocket bridge, and relays scripts to Photopea via postMessage. Returns results back through the WebSocket.

src/
  index.ts              # Entry point: HTTP server, browser launch, MCP startup
  server.ts             # MCP server initialization and tool registration
  bridge/
    websocket-server.ts # WebSocket bridge with request queue
    script-builder.ts   # Photopea JS code generators
    types.ts            # Protocol message types
  tools/
    document.ts         # Document operations (5 tools)
    layer.ts            # Layer operations (11 tools)
    text.ts             # Text and shape operations (3 tools)
    image.ts            # Image, adjustment, filter operations (9 tools)
    export.ts           # Export and utility operations (6 tools)
  utils/
    file-io.ts          # Local file read/write, URL fetching
    platform.ts         # Port discovery, browser launch
  frontend/
    index.html          # Browser UI with Photopea iframe

Security

  • The MCP server binds to 127.0.0.1 (localhost only) and is not accessible from the network.

  • The photopea_run_script tool executes arbitrary JavaScript inside Photopea's sandboxed iframe. It is marked as destructive and requires user approval in MCP clients that support tool annotations.

  • File operations (open_file, export_image, place_image) read and write files with the same permissions as the user running the server.

Known Limitations

  • Heavy scripts (e.g., gradients with many color steps) may cause the Photopea browser UI to become unresponsive. The operations still complete successfully in the background and exports will work as expected.

  • Refreshing the browser page will discard all unsaved work. Export your documents before refreshing.

  • Only one browser tab should be open at a time. Multiple tabs will conflict over the WebSocket connection.

  • The reorder_layer tool may cause the Photopea UI to become unresponsive. To avoid this, create layers in the desired order rather than reordering after creation.

Requirements

  • Node.js >= 18

  • A modern web browser (Chrome, Firefox, Edge, Safari)

License

MIT

Available Tools

34 tools
photopea_add_fill_layerAdd Fill LayerA

Add a non-destructive solid color fill layer that covers the entire canvas. Unlike fill_selection, this creates a separate adjustment-style layer that can be toggled, recolored, or deleted without affecting other layers. Use set_layer_properties to change its opacity or blend mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesFill layer type (currently only 'solid' is supported)
colorYesFill color as hex string (e.g. #ff0000)
nameNoDisplay name for the fill layer in the layers panel

TDQS

A4.6/5.0
Behavior5/5

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

Annotations provide no safety details (destructiveHint=false), but the description clarifies the tool is non-destructive and creates an adjustment-style layer that can be toggled, recolored, or deleted without affecting others. This goes beyond annotations, fully disclosing behavioral traits.

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?

Three sentences: first defines the primary action, second differentiates from a sibling, third suggests next steps. No redundant words, front-loaded with key purpose.

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 covers the tool's purpose, alternatives, and follow-up actions. It lacks explicit mention of prerequisites like an open document, but given the simplicity and context from sibling tools, it is largely complete. Minor gap regarding error handling or unsupported types.

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 description does not add new information about parameters beyond what the schema already provides (e.g., hex color pattern, enum for type). The description focuses on overall behavior rather than parameter details, earning a baseline score.

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 clearly states the verb 'add' and the resource 'non-destructive solid color fill layer' that covers the entire canvas. It distinguishes from the sibling tool 'fill_selection' by explaining the different behavior, making it easy for an agent to select correctly.

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 description explicitly contrasts with 'photopea_fill_selection' and advises when to use this tool (for a non-destructive layer versus a direct fill). It also directs to 'set_layer_properties' for further adjustments, providing clear guidance on usage and alternatives.

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

photopea_add_gradientAdd GradientA

Apply a linear gradient fill to a layer, replacing its current pixel content. The target layer must already exist — use add_layer to create one first. Colors are distributed evenly across the gradient.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesLayer name (string) or index (number)
typeYesGradient type (currently only 'linear' is supported)
colorsYesArray of hex color stops distributed evenly along the gradient (minimum 2, e.g. ['#ff0000', '#0000ff'])
angleNoGradient angle in degrees (0 = left-to-right, 90 = top-to-bottom, default 0)

TDQS

A3.5/5.0
Behavior1/5

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

The description states the tool 'replaces its current pixel content', which implies destructive behavior. However, annotations set 'destructiveHint' to false, contradicting the description. This is a serious inconsistency, and the description does not disclose other behavioral traits beyond this 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 description is only two sentences, each serving a purpose: stating the action and providing a usage hint. No redundant or unnecessary words.

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 tool with four parameters and no output schema, the description covers the main behavior and a key prerequisite. However, it lacks details about error conditions (e.g., layer locked) or the outcome (e.g., whether the gradient is applied as a fill effect or rasterized). The high schema coverage partially compensates.

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 description adds minimal value. It mentions that colors are distributed evenly, reinforcing the schema's 'minItems: 2' and lack of stop positions. The prerequisite about layer existence is useful but already implied by the schema's required parameter.

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 clearly states the tool applies a linear gradient fill to a layer and replaces its pixel content. It uses a specific verb and resource, and the mention of 'replacing' distinguishes it from sibling tools like 'photopea_add_fill_layer' which likely add a fill as a new layer effect.

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 description provides a prerequisite: the target layer must already exist, and directs the user to use 'add_layer' first. It also clarifies that colors are evenly distributed. However, it does not explicitly state when not to use this tool or provide alternatives for other gradient types.

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

photopea_add_layerAdd LayerA

Add a new empty layer to the active document. The new layer becomes the active layer. Use this before operations that draw onto a layer, such as fill_selection or add_gradient.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name for the new layer in the layers panel
opacityNoLayer opacity percentage (0 = fully transparent, 100 = fully opaque, default 100)
blendModeNoBlend mode (e.g. normal, multiply, screen, overlay, darken, lighten). Defaults to normal.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations are present (readOnlyHint=false, destructiveHint=false). Description adds that the new layer becomes active, which is useful behavioral context 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.

Conciseness5/5

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

Two sentences, no unnecessary words, front-loaded with purpose and outcome.

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, but the tool is simple. Description gives outcome (layer added and active) and usage example. Could mention return value, but still adequate.

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 baseline is 3. Description does not add further parameter details; schema already covers name, opacity, and blendMode.

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?

Clearly states it adds a new empty layer to the active document and that the new layer becomes active. Distinguishes from sibling tools like photopea_add_fill_layer by specifying 'empty 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?

Explicitly advises to use this tool before operations that draw onto a layer, such as fill_selection or add_gradient. Provides direct usage context.

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

photopea_add_shapeAdd ShapeA

Add a vector shape layer (rectangle or ellipse) to the active document. The shape layer becomes the active layer. Shapes are non-destructive and can be resized with transform_layer without quality loss.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesShape type to create
boundsYesShape bounds
fillColorNoColor as hex string (e.g. #ff0000)
strokeColorNoColor as hex string (e.g. #ff0000)
strokeWidthNoStroke width in pixels
nameNoName for the shape layer

TDQS

A4.2/5.0
Behavior4/5

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

Annotations provide basic safety info (readOnlyHint=false, destructiveHint=false). The description adds behavioral details: the shape layer becomes the active layer, shapes are non-destructive and scalable. This provides useful context beyond structured fields, though it omits potential side effects like clearing 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?

Two sentences with no filler: first sentence states action and resource, second adds behavior. Front-loaded and efficient.

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 6 parameters (nested bounds), no output schema, and moderate complexity, the description covers key aspects: what it does, result (active layer), and property (non-destructive). It does not mention prerequisites like active document or error handling, but is adequate for an agent.

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, so the schema already explains all 6 parameters. The description does not add new meaning to parameters beyond stating the shape types. Baseline 3 is appropriate given high schema 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?

The description clearly states the action ('Add a vector shape layer'), specifies the shape types ('rectangle or ellipse'), and distinguishes from sibling tools like photopea_add_fill_layer or photopea_add_text by focusing on vector shapes.

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 description implies when to use this tool (for vector shapes) and hints at advantages (non-destructive, resizable without quality loss), but does not explicitly contrast with other add tools or state when not to use it.

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

photopea_add_textAdd TextA

Add a new text layer to the active document at the specified position. The text layer becomes the active layer. Use paragraphBounds to create a text box with word wrapping, or omit for point text. Use load_font to add custom fonts, and list_fonts to find available font names.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesText content to display on the layer
xYesX position in pixels from the left edge of the document
yYesY position in pixels from the top edge of the document
fontNoFont PostScript name (e.g. ArialMT, Helvetica-Bold). Use list_fonts to find available names.
sizeNoFont size in points (default varies by document resolution)
colorNoColor as hex string (e.g. #ff0000)
alignmentNoText alignment
boldNoApply faux bold
italicNoApply faux italic
letterSpacingNoLetter tracking/spacing
lineHeightNoLine height (leading)
paragraphBoundsNoParagraph text box bounds

TDQS

A4.4/5.0
Behavior4/5

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

Disclosure that the text layer becomes active adds behavioral context beyond annotations (which are non-contradictory). No details on error handling or permission needs, but adequate for a creation 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?

Two sentences with no redundancy. First sentence covers purpose and side effect; second sentence adds key parameter guidance and references to sibling tools.

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?

Completeness is high given no output schema: covers side effects, parameter behavior, and tool interdependencies. Missing mention of return value or error cases, but acceptable for a straightforward creation 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?

Adds meaning beyond schema by explaining paragraphBounds distinction and font discovery workflow. Schema coverage is 100%, so description enhances rather than compensates.

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 clearly states the action: 'Add a new text layer to the active document at the specified position.' It distinguishes from siblings like edit_text and adds behavioral context (layer becomes active).

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?

Provides explicit guidance on using paragraphBounds for word wrapping vs point text, and references load_font/list_fonts for font setup. Could be more explicit about when to avoid this tool, but the context is sufficient.

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

photopea_apply_adjustmentApply AdjustmentA

Apply a destructive image adjustment to the active layer's pixel data. Use select_layer to target a specific layer first. Modifies pixels directly — use undo to revert if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesAdjustment type: 'brightness' for brightness/contrast, 'hue_sat' for hue/saturation/lightness, 'levels' for input levels, 'curves' for tone curves
settingsNoKey-value settings for the adjustment. For brightness: { brightness: -100..100, contrast: -100..100 }. For hue_sat: { hue: -180..180, saturation: -100..100, lightness: -100..100 }. For levels: { inputBlack: 0..255, inputWhite: 0..255 }

TDQS

A3.6/5.0
Behavior1/5

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

The description explicitly states the adjustment is 'destructive', but the annotations have destructiveHint: false, directly contradicting the description. This contradiction undermines transparency.

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 two sentences, front-loaded with the core purpose, and every sentence adds value. No unnecessary words or repetition.

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?

Given no output schema and two parameters, the description adequately explains the destructive behavior and undo capability. It could mention adjustment types, but the schema covers those.

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 description does not discuss parameters, but the input schema covers 100% of parameter descriptions. Thus, the description adds no additional meaning beyond the schema, meeting 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 clearly states it applies a destructive image adjustment to the active layer's pixel data, which is specific and distinguishes it from sibling tools like apply_filter or add_layer. The verb 'apply adjustment' matches the title and 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?

The description advises to use select_layer first to target a specific layer and mentions using undo to revert, providing clear context for when to use this tool. However, it does not explicitly state when not to use it or mention alternatives.

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

photopea_apply_filterApply FilterA

Apply a destructive filter effect to the active layer's pixel data. Use select_layer to target a specific layer first. Modifies pixels directly — use undo to revert if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesFilter type to apply to the active layer
settingsNoKey-value settings for the filter. For gaussian_blur: { radius: pixels }. For unsharp_mask: { amount: 1-500, radius: 0.1-250, threshold: 0-255 }. For motion_blur: { angle: degrees, distance: pixels }. For noise: { amount: 1-100 }

TDQS

A3.5/5.0
Behavior1/5

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

The description claims the tool is 'destructive' while the annotation destructiveHint is false. This is a direct contradiction, making the behavior unclear. The description does mention undo, but the contradiction overrides that.

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?

Three sentences, each serving a distinct purpose: what it does, prerequisite, and behavior note. Front-loaded with the core action and resource.

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?

The description covers key behavioral aspects (destructive, undo, layer targeting) but is undermined by the contradiction. It does not explain the return value or provide examples, but for a filter tool this is acceptable.

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 description does not need to add much. It adds context about layer targeting but no additional parameter details. 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?

The description clearly states the tool applies a destructive filter effect to the active layer's pixel data, distinguishing it from non-destructive adjustment tools via the 'destructive' qualifier. It also specifies the prerequisite step of using select_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?

The description provides context by advising to use select_layer first, but does not explicitly state when to use this tool over alternatives like apply_adjustment. However, the destructive nature implies a use case difference.

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

photopea_clear_selectionClear SelectionA
Idempotent

Deselect the current selection in the active document, removing the marching ants. Does not modify any pixel data. Use after fill_selection or other selection-based operations are complete.

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?

The description states 'does not modify any pixel data,' which aligns with the destructiveHint=false annotation. While annotations already cover safety, the description adds context about the selection state, though it doesn't disclose additional behavioral traits beyond what's already in 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 two concise sentences, front-loading the core purpose and then adding usage context. Every sentence adds value, 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?

Given the tool's simplicity (no parameters, no output schema), the description fully covers what the tool does and when to use it. It provides sufficient context for an AI agent to invoke 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?

There are no parameters (schema coverage 100%), so the description doesn't need to add parameter meaning. Baseline 4 is appropriate as it correctly implies no arguments are 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?

The description clearly states the tool deselects the current selection and removes the marching ants. It uses a specific verb ('deselect') and resource ('selection'), and clearly distinguishes from sibling tools like make_selection and modify_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?

The description explicitly says to use the tool 'after fill_selection or other selection-based operations are complete,' providing clear when-to-use guidance and indicating it does not modify pixel data.

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

photopea_close_documentClose DocumentA
Destructive

Close the active document. Set save to true to save changes before closing. Unsaved changes are discarded if save is false. The next open document becomes active, if any.

ParametersJSON Schema
NameRequiredDescriptionDefault
saveNoWhether to save changes before closing (true = save first, false = discard unsaved changes)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, so the description does not need to restate. It adds value by explaining unsaved changes are discarded if save is false and that the next document becomes active, providing context 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.

Conciseness5/5

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

The description is two concise sentences, front-loading the primary action and efficiently covering key behaviors with no unnecessary words.

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 close action without an output schema, the description adequately explains the behavior for both save values and the resulting state (next document active). It lacks mention of error handling but is sufficient for typical use.

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 'save' parameter. The description repeats this information and does not add new parameter-level meaning, though it does add behavioral context.

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 clearly states 'Close the active document' with a specific verb and resource, distinguishing it from sibling tools like create_document or delete_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?

The description explains when to set save to true or false, and notes that the next open document becomes active. However, it does not explicitly contrast with alternative actions like exporting before closing.

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

photopea_create_documentCreate DocumentA

Create a new blank document and make it the active document. This is typically the first step in a workflow. The document opens with a Background layer. Use open_file instead to edit an existing image.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthYesDocument width in pixels (e.g. 1920 for full HD)
heightYesDocument height in pixels (e.g. 1080 for full HD)
resolutionNoResolution in DPI (72 for screen, 300 for print)
nameNoDocument name shown in the title barUntitled
modeNoColor mode (use RGB for most workflows)RGB
fillColorNoBackground fill color as hex (e.g. #ffffff for white, #000000 for black). Defaults to white if omitted.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false. Description adds context: makes document active, opens with Background layer. No contradictions; could mention creation side effects but sufficient.

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?

Three concise sentences with key information front-loaded. No unnecessary words.

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?

Given high schema coverage and annotations, description covers when to use, behavior (active, background layer), and alternative. Could mention return value or confirmation, but overall 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%; all parameters have descriptions. Description does not add additional meaning beyond schema, meeting baseline of 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?

Description clearly states 'Create a new blank document' with specific verb and resource. Explicitly distinguishes from sibling 'open_file' by saying 'Use open_file instead to edit an existing 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?

States 'This is typically the first step in a workflow' and provides clear alternative 'Use open_file instead to edit an existing image.'

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

photopea_delete_layerDelete LayerA
Destructive

Permanently remove a layer from the active document by name or index. The next layer in the stack becomes active after deletion. Use get_layers to see available layers before deleting.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesLayer name (string) or index (number)

TDQS

A4.6/5.0
Behavior5/5

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

Adds behavioral context beyond annotations: 'permanently remove' clarifies destructiveness, and 'the next layer in the stack becomes active after deletion' discloses side effect. 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?

Two concise sentences, no superfluous information, front-loaded with action and resource.

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 the core behavior, side effects, and provides a reference to a sibling tool. Does not mention error handling or irreversibility explicitly, but 'permanently' implies it. Adequate for the tool's simplicity.

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 baseline is 3. The description repeats 'by name or index' from the schema but adds no additional semantic detail beyond what the schema 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 clearly states the action (permanently remove a layer) and the resource (layer from active document), specifying identification by name or index. It differentiates from siblings like get_layers by referencing it as a prior step.

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 guidance to use get_layers before deleting to see available layers, aiding correct tool selection and invocation. Implicitly warns against arbitrary deletion.

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

photopea_duplicate_layerDuplicate LayerA

Create a copy of a layer in the active document. The duplicate becomes the active layer and is placed above the original. Use newName to distinguish the copy from the original.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesLayer name (string) or index (number)
newNameNoDisplay name for the duplicated layer (defaults to 'original name copy')

TDQS

A4.2/5.0
Behavior4/5

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

Annotations (readOnlyHint=false, destructiveHint=false) indicate mutation without destruction, which the description reinforces by stating the duplicate becomes active and is placed above the original. The description adds the default naming behavior (original name copy), going beyond what annotations provide.

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 two sentences long with no wasted words. It front-loads the primary action and immediately provides key behavioral details. Every sentence contributes essential 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 simple duplication operation without an output schema, the description covers the main effects (active layer, placement, naming). It could mention limitations (e.g., background layers) but is largely sufficient given low complexity and supportive annotations.

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?

Input schema has 100% description coverage for both parameters. The description adds the default value for newName ('original name copy') and clarifies its purpose, which is not explicitly in the schema. This exceeds the baseline expectation for high schema 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?

The description clearly states 'Create a copy of a layer in the active document,' specifying a precise verb and resource. It further distinguishes the tool by noting that the duplicate becomes active and is placed above the original, setting it apart from other layer-manipulation tools like delete_layer or reorder_layer.

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 description offers a minimal usage hint: 'Use newName to distinguish the copy from the original.' However, it does not provide explicit guidance on when to use this tool versus alternatives like add_layer, nor does it mention scenarios where duplication might be inappropriate or fail.

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

photopea_edit_textEdit TextA

Modify the content or style of an existing text layer. Only specified properties are changed — omit parameters to keep their current values. Use get_layers to find text layer names if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesLayer name (string) or index (number)
contentNoNew text content to replace existing text
fontNoNew font PostScript name (use list_fonts to find available names)
sizeNoNew font size in points
colorNoColor as hex string (e.g. #ff0000)
alignmentNoText alignment
letterSpacingNoLetter tracking/spacing
lineHeightNoLine height (leading)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate non-read-only and non-destructive behavior. The description adds that only specified properties are changed (omit to keep values), which is useful but does not disclose any potential side effects, permissions required, or error conditions. With annotations covering the safety profile, the description provides minimal extra context.

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 sentences front-load the purpose and conditional behavior. Every sentence is necessary and no word is wasted. The structure supports quick scanning.

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?

Given the tool's complexity (8 parameters, mutation) and no output schema, the description covers the core behavior and parameter interaction well. It could mention the return value or success indication, but this is minor given the standard convention of mutation tools.

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 is 3. The description adds value by clarifying that omitted parameters retain current values, which is not obvious from the schema alone. This compensates beyond just repeating 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 clearly states it modifies an existing text layer's content or style, distinguishing it from add_text (which creates a new text layer) and other layer modification tools. The verb 'modify' paired with 'existing text layer' provides precise action and resource.

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 description advises using get_layers to find text layer names, which is helpful context. However, it does not explicitly state that this tool only works on text layers or when not to use it (e.g., for non-text layers).

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

photopea_export_imageExport ImageA

Export the active document to a file and save it to the local filesystem. The entire document is flattened and exported in the chosen format. Use create_document or open_file to set up the document before exporting.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatYesOutput format: 'png' for lossless, 'jpg' for compressed photos, 'webp' for web, 'psd' for Photoshop, 'svg' for vector
qualityNoCompression quality for JPG format only (1 = smallest file, 100 = best quality). Ignored for other formats.
outputPathYesAbsolute local file path where the exported file will be saved (e.g. /Users/me/output.png)

TDQS

A4.3/5.0
Behavior4/5

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

Discloses that the entire document is flattened and exported to local filesystem. Annotations provide no extra safety info (all false), so description adds valuable context beyond them.

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 sentences with no wasted words. The crucial detail (flattening) is front-loaded, and prerequisites are mentioned concisely.

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 export tool with fully described parameters and no output schema needed (return value is implicit), the description covers all necessary context: what it does, what happens to the document, and prerequisites.

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 detailed descriptions for each parameter (format enum, quality range and format, outputPath absolute path). Description repeats 'flattened' and 'save to local filesystem' but adds no new param-specific info beyond 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?

Clearly states it exports the active document to a file and flattens it. Distinguishes from siblings like open_file and create_document by noting they must be used first.

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?

Explicitly states to use create_document or open_file before exporting, providing clear prerequisite context. Does not specify when not to use or alternatives, but the guidance is sufficient.

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

photopea_fill_selectionFill SelectionA

Fill the current selection with a solid color on the active layer. Requires an active selection — use make_selection to create one first. Modifies pixel data on the active layer directly. Use clear_selection afterward to deselect.

ParametersJSON Schema
NameRequiredDescriptionDefault
colorYesColor as hex string (e.g. #ff0000)
opacityNoFill opacity percentage (0 = fully transparent, 100 = fully opaque, default 100)
blendModeNoBlend mode for the fill (e.g. normal, multiply, screen, overlay, darken, lighten). Defaults to normal.

TDQS

A4.4/5.0
Behavior5/5

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

The description clearly states that the tool modifies pixel data directly on the active layer. This aligns with readOnlyHint=false, and though destructiveHint=false, the description does not claim otherwise, so there is 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?

The description is concise with three sentences, front-loading the primary action and providing essential context without unnecessary details.

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 covers prerequisites, actions, and follow-up. However, it lacks details on return values, error handling (e.g., no selection), and undoability. Given no output schema, minor gaps exist.

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 description adds minimal value beyond the schema's parameter descriptions. The description does not provide additional context for opacity or blendMode beyond what is already in 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 description clearly states the tool fills the current selection with a solid color on the active layer. It uses specific verbs and resources, and differentiates from sibling tools like photopea_add_fill_layer by emphasizing the need for an active selection.

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 description provides explicit guidance on prerequisites (active selection, use make_selection) and post-actions (clear_selection). It does not explicitly exclude alternatives but gives clear context for when to use this tool.

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

photopea_get_document_infoGet Document InfoA
Read-onlyIdempotent

Get metadata about the active document including name, width, height, resolution (DPI), layer count, and color mode. Returns JSON. Use this to check document dimensions before positioning layers or making selections.

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?

Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds value by specifying the exact fields returned and the JSON format, which goes beyond structured metadata.

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 sentences with front-loaded purpose and immediate usage advice. No wasted words; every sentence 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?

Without output schema, the description enumerates return fields and explicitly advises when to use. Fully sufficient for a stateless read-only retrieval 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?

The tool has zero parameters, so the description naturally covers all semantics. Schema coverage is 100%, and the description adds no redundant param info, meeting baseline expectations.

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 clearly states the tool retrieves document metadata (name, width, height, DPI, layer count, color mode) and returns JSON. This distinctively separates it from sibling tools like photopea_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?

Explicitly advises using this tool to check document dimensions before positioning layers or making selections, providing clear context for when to invoke it.

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

photopea_get_layersGet LayersA
Read-onlyIdempotent

Get the full layer tree of the active document as JSON. Returns an array of layer objects with name, type, index, visible, opacity, blendMode, and bounds properties. Groups contain nested children arrays. Use this to discover layer names and indices for other layer operations.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds detail about the return structure (array of layer objects with specific properties, nested children for groups), which is consistent and enhances transparency beyond annotations without contradicting them.

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 three sentences, front-loaded with the main action, concise with no extraneous words, and effectively conveys purpose, return details, and usage guidance.

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 parameters, comprehensive annotations, and an explicit description of return value structure, the description is complete. It covers what the tool does, what it returns, and how to use it in the context of sibling operations.

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 has no parameters, so schema coverage is 100%. The description does not need to add parameter information. Baseline for zero parameters is 4, and no additional information is 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?

The description clearly states the tool gets the full layer tree as JSON, listing specific properties (name, type, index, etc.) and distinguishes from sibling tools by noting it's for discovering layer names and indices for other layer operations.

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 description explicitly says 'Use this to discover layer names and indices for other layer operations,' providing clear usage context. It does not mention when not to use or alternatives, but the sibling list implies this is the dedicated read-only inspection tool.

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

photopea_group_layersGroup LayersA

Group multiple layers into a layer group (folder). Layers are specified by name — use get_layers to find layer names. Grouped layers can be ungrouped later with ungroup_layers.

ParametersJSON Schema
NameRequiredDescriptionDefault
layersYesArray of layer names to include in the group (use get_layers to find names)
groupNameNoDisplay name for the group folder in the layers panel

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate non-read-only and non-destructive behavior. The description adds that layers are specified by name and that grouping is reversible. This provides context beyond annotations without contradicting them.

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 that efficiently convey the purpose, method, and related tool. No unnecessary words, front-loaded with the core action.

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 covers the main purpose and required preparation, but could mention error handling or behavior if layers are missing or already grouped. However, for a simple grouping operation, it is mostly complete.

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%, but the description adds context: layers must exist and names come from 'get_layers', and the groupName is a display name. It also mentions undo capability, which is not in 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 description clearly states the action (group multiple layers into a layer group) and the resource (layers), with a specific verb 'Group' and resource 'layers'. It distinguishes itself from the sibling 'ungroup_layers' by mentioning that grouped layers can be ungrouped later.

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 description advises using 'get_layers' to find layer names, and mentions that grouping can be undone with 'ungroup_layers'. However, it does not explicitly state when not to use this tool or provide alternatives, but given the sibling set, it is clear this is the only grouping tool.

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

photopea_list_fontsList FontsA
Read-onlyIdempotent

List available fonts in Photopea. Returns font PostScript names that can be used with add_text and edit_text.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoOptional search string to filter fonts by name

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds that it returns PostScript names, but no additional behavioral traits beyond what annotations provide.

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 sentences, no wasted words, front-loaded with the main purpose and immediate value.

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 mentions return type (PostScript names) and usage context (compatible with add_text/edit_text). Sufficient for a simple list-only 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% with the 'search' parameter described as 'Optional search string to filter fonts by name'. The description adds no extra 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?

The description clearly states 'List available fonts' which is a specific verb+resource. It distinguishes from siblings like photopea_load_font by specifying that it returns PostScript names usable with add_text/edit_text.

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 description implies usage before adding or editing text to obtain correct font names, but does not explicitly state when not to use it or mention alternatives like load_font for importing fonts.

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

photopea_load_fontLoad FontA
Idempotent

Load a custom font from a URL (TTF, OTF, or WOFF2) into Photopea. The font becomes available for add_text and edit_text. Use list_fonts to find the PostScript name after loading.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to a font file (.ttf, .otf, or .woff2)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide idempotentHint, readOnlyHint, destructiveHint, and openWorldHint, which disclose key behavior. The description adds that the font becomes available for specific sibling tools and that list_fonts can be used afterward, which is useful context beyond the structured 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?

Two short sentences, each serving a clear purpose: first sentence defines the action and scope, second sentence provides after-use guidance. No redundant words, and the most critical information is front-loaded.

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?

The tool has a single parameter fully described in the schema, no output schema required, and the description covers the behavioral flow (load, then use in text tools, then find name via list_fonts). This is complete for a simple font-loading 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 coverage is 100%, and the parameter description already specifies the file extensions. The tool description reiterates the supported formats but adds no new semantic meaning beyond the schema. 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?

The description clearly states the action (Load), the resource (custom font), the source (URL), and supported file types (TTF, OTF, WOFF2). It distinguishes from siblings by specifying the font's availability for add_text and edit_text, and mentions list_fonts as a follow-up step, differentiating it from other font-related tools.

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 description explicitly links to two use cases (add_text, edit_text) and directs users to list_fonts for retrieving the PostScript name. It implies when to use the tool (before text operations), but does not explicitly state when not to use it or compare to alternatives beyond list_fonts.

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

photopea_make_selectionMake SelectionA

Create a pixel selection region in the active document. After creating a selection, use fill_selection to fill it with color, or clear_selection to deselect. Use type 'all' to select the entire canvas, or 'rect'/'ellipse' with bounds for a specific region.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesSelection shape: 'all' selects the entire canvas, 'rect' creates a rectangle, 'ellipse' creates an ellipse
boundsNoSelection region bounds in pixels. Required for 'rect' and 'ellipse' types, ignored for 'all'.
featherNoSoft edge radius in pixels for anti-aliased selection edges (0 = hard edge)

TDQS

A4/5.0
Behavior3/5

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

Annotations indicate mutation (readOnlyHint=false) but no destructive behavior. The description adds context on post-selection actions but does not disclose additional behavioral traits like whether the selection replaces or adds to existing selections. 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?

Two sentences, front-loaded with the main purpose. Every sentence provides useful information without 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?

Given the tool's complexity (3 params, nested bounds, enum, no output schema), the description is complete enough to guide use. It explains type options and bounds requirement, though the feather parameter is not mentioned (but schema covers 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%, and the description adds marginal value by explaining the meaning of 'all', 'rect', and 'ellipse' types and when bounds are required. However, the schema already describes these well, so the description does not significantly enhance understanding.

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 clearly states 'Create a pixel selection region in the active document,' using a specific verb and resource. It distinguishes from siblings like clear_selection and fill_selection by mentioning them as subsequent actions.

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?

Provides clear guidance on when to use the tool and what to do after creating a selection (fill or clear). However, it does not explicitly state when not to use it or alternatives for different selection shapes beyond the types listed.

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

photopea_modify_selectionModify SelectionA

Modify the current active selection. Requires an existing selection created by make_selection. For expand, contract, and feather, the amount parameter specifies pixels. Invert swaps selected and unselected areas.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesHow to modify the selection: 'expand' grows it, 'contract' shrinks it, 'feather' softens edges, 'invert' swaps selected/unselected
amountNoModification amount in pixels (required for expand, contract, feather; ignored for invert)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate non-destructive behavior, and the description adds behavioral detail by explaining each action's effect (e.g., feather softens edges, invert swaps). It does not contradict annotations. It could mention reversibility or immediate application, but the provided context is sufficient.

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 three short sentences, each serving a distinct purpose: purpose+prerequisite, parameter usage, and invert explanation. No superfluous text; front-loaded with key 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 simple mutation tool with no output schema, the description covers core functionality, actions, and parameter constraints. It lacks return value details (though likely void) and edge cases (e.g., empty selection), but the prerequisite mention mitigates some gaps.

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 already covers 100% of parameters with descriptions. The description essentially repeats the schema's parameter info (pixels unit, invert ignores amount), adding no new semantic value. It is helpful but redundant.

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 clearly states the tool modifies the current active selection, lists the four specific actions (expand, contract, feather, invert), and explicitly differentiates from sibling tools like make_selection by stating the prerequisite (requires existing selection). The verb-modifier pair is specific and 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?

The description provides a clear prerequisite (must have an existing selection from make_selection) and explains when each action is applicable (e.g., amount required for expand/contract/feather). It implies usage context but does not explicitly mention when to avoid this tool or suggest alternatives like clear_selection for removal. The prerequisite is a strong guideline.

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

photopea_move_layerMove LayerA

Translate a layer by a relative x/y offset in pixels from its current position. Positive x moves right, positive y moves down. Use get_layers to check current layer bounds, or transform_layer for scaling and rotation.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesLayer name (string) or index (number)
xYesHorizontal offset in pixels (positive = right, negative = left)
yYesVertical offset in pixels (positive = down, negative = up)

TDQS

A4.4/5.0
Behavior4/5

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

Describes relative offset and pixel direction. Annotations are neutral; description adds behavior beyond them 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?

Two efficient sentences, front-loaded with purpose. No unnecessary words.

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, alternatives, and parameter direction. Lacks mention of return value or errors, but tool is simple and no output 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 coverage is 100% with clear descriptions. Description repeats direction info and adds context of relative offset, but doesn't significantly extend 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?

Description states 'translate a layer by a relative x/y offset', specifying verb and resource. It distinguishes from siblings like transform_layer and 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?

Explicitly recommends get_layers for checking bounds and transform_layer for scaling/rotation, providing clear alternatives.

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

photopea_open_fileOpen FileA

Open an existing image file in Photopea as a new document. Supports PSD, PNG, JPG, WebP, SVG, and other common formats. The opened file becomes the active document. Use create_document instead to start with a blank canvas.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesURL or absolute local file path of the image to open (e.g. /Users/me/photo.psd or https://example.com/image.png)

TDQS

A4.5/5.0
Behavior4/5

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

Beyond annotations, the description reveals that the opened file becomes the active document, which is a behavioral trait. No contradictions with annotations (readOnlyHint=false seems appropriate for a file open that changes active state).

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?

Three concise sentences, each serving a distinct purpose: stating the action, listing formats, and providing behavioral context plus usage alternative. No wasted words.

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 the simple operation (one parameter, no output schema), the description covers all essential aspects: what it does, formats supported, behavioral effect, and alternative tool. No gaps remain.

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 sole parameter 'source' is fully described in the input schema with example values. The tool description does not add additional meaning beyond the schema, achieving a baseline score.

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 clearly states the action ('open an existing image file'), the tool context ('in Photopea as a new document'), and supported formats. It distinguishes itself from the sibling 'create_document' by noting the alternative for blank canvases.

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 provides guidance on when to use this tool vs. the alternative 'create_document', helping the agent decide based on whether a blank canvas or existing file is needed.

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

photopea_place_imagePlace ImageA

Place an image into the active document from a URL or local file path. Creates a new layer with the placed image as the active layer. Use width/height to resize while preserving aspect ratio, or x/y to position the layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesURL or absolute local file path of the image to place
xNoX position offset in pixels from the left edge
yNoY position offset in pixels from the top edge
widthNoResize to this width in pixels (preserves aspect ratio if only one dimension is set)
heightNoResize to this height in pixels (preserves aspect ratio if only one dimension is set)
nameNoDisplay name for the placed layer in the layers panel

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses that it creates a new layer and sets it as active, which is consistent with annotations (readOnlyHint=false). It adds behavioral context beyond the minimal annotations, though it doesn't mention edge cases like invalid sources.

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 concise sentences front-load the core purpose and key parameter usage. No extraneous 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?

Given the tool's moderate complexity and complete schema coverage, the description covers the main usage (placement, resize, position). It lacks details on error handling or document requirements, but is adequate for an image placement tool with minimal annotations.

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%. The description adds value by explaining that width/height preserve aspect ratio and x/y position the layer, which supplements the schema's parameter 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 clearly states it places an image into the active document, creating a new layer. It differentiates from siblings like photopea_add_layer (empty layer) or photopea_open_file (opens as document).

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 description gives parameter usage hints but does not explicitly state when to use this tool versus alternatives like photopea_add_layer or photopea_open_file. No when/not-when guidance is provided.

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

photopea_redoRedoA
Destructive

Redo one or more previously undone actions in the active document. Only available after using undo — the redo history is cleared when new actions are performed.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsNoNumber of history steps to redo (default 1)

TDQS

A4.7/5.0
Behavior5/5

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

The description adds behavioral context beyond annotations: it explains that redo history is cleared by new actions, which is not in annotations. Annotations already indicate destructiveHint=true, so description complements well.

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 two sentences, concise, front-loaded, with no wasted words.

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 tool with one parameter and no output schema, the description covers purpose, constraints, and behavior fully. No gaps.

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 already fully describes the 'steps' parameter with default and constraints. The description adds no additional meaning beyond the schema. With 100% coverage, 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?

The description clearly states the tool redoes previously undone actions in the active document, distinguishing it from undo and other sibling 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?

The description explicitly states it is only available after undo and that redo history is cleared by new actions, providing clear when-to-use and when-not-to-use guidance.

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

photopea_reorder_layerReorder LayerA

Move a layer to a new position in the layer stack. Use 'top' or 'bottom' to move to the ends of the stack, or 'above'/'below' to shift one position relative to the current index. Use get_layers to see the current layer order.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesLayer name (string) or index (number)
positionYesTarget position: 'top' = front of stack, 'bottom' = back of stack, 'above' = one position up, 'below' = one position down

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations providing behavioral hints, the description bears full responsibility. It explains the positional options but does not disclose error behavior (e.g., invalid target) or side effects on other layers. This is adequate but not fully transparent.

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 concise with two sentences. The first sentence states the core action. The second sentence provides useful guidance on using 'get_layers' and explains the position options. No unnecessary words.

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?

Given the tool's simplicity, the description is sufficiently complete. It covers the main operation and the parameter semantics. However, it could mention if group layers are affected or any prerequisites, but overall it enables 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% with clear descriptions. The description adds value by summarizing the position options and their meanings, which helps clarify usage beyond the raw schema enum.

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 clearly states the tool moves a layer to a new position in the stack. It uses specific verbs and resources. However, it does not distinguish itself from the sibling tool 'move_layer', which could cause confusion.

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 description provides a helpful suggestion to use 'get_layers' to see the current order, but it lacks explicit guidance on when to use this tool versus other layer reordering tools or alternatives. No when-not or exclusion criteria are given.

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

photopea_resize_documentResize DocumentA

Resize the active document canvas to new pixel dimensions, resampling all layer content to fit. This is a destructive operation — all layers are scaled proportionally. Use undo to revert if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthYesNew document width in pixels
heightYesNew document height in pixels

TDQS

A3.6/5.0
Behavior1/5

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

The description claims the operation is destructive ('This is a destructive operation'), but the annotations explicitly set destructiveHint to false. This is a contradiction, making the description misleading about the tool's safety profile.

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 extremely concise: two sentences that convey purpose, behavior, and a usage hint. Every sentence adds value with no 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 two-parameter tool, the description covers the main behavioral aspects: canvas resize, proportional scaling of all layers, and ability to undo. It lacks details on resampling method or cropping behavior, but overall sufficiently complete given the tool's simplicity.

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 already has 100% coverage with descriptions for width and height. The description does not add additional meaning beyond what the schema provides, so 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 clearly states the verb 'resize' and the resource 'active document canvas', with specific details on pixel dimensions and resampling. It effectively distinguishes from sibling tools like transform_layer which operate on individual layers.

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 description provides clear context for usage: it's for resizing the entire document canvas, scaling all layers. It mentions that it's destructive and suggests using undo. However, it does not explicitly state when not to use it or mention alternatives like transform_layer.

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

photopea_run_scriptRun ScriptA
Destructive

Execute arbitrary Photopea/ExtendScript JavaScript in the Photopea environment. Use this for advanced operations not covered by other tools. Has full access to the Photopea DOM (app, activeDocument, layers). Use with caution — scripts can modify or delete any document data.

ParametersJSON Schema
NameRequiredDescriptionDefault
scriptYesPhotopea JavaScript code to execute. Must call app.echoToOE(result) to return data. Has access to the full Photopea scripting API (app, activeDocument, etc.).

TDQS

A5/5.0
Behavior5/5

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

Description adds context beyond annotations by detailing full access to the Photopea DOM and the requirement to call app.echoToOE to return data, aligning with the destructiveHint 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?

The description is four sentences, front-loaded with the core purpose, and every sentence adds necessary information without 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?

Despite no output schema, the description explains the return mechanism and covers all behavioral aspects, making it complete for the tool's complexity.

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

Parameters5/5

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

With 100% schema coverage, the description adds value by explaining the need for app.echoToOE to return data and the full scripting API access, beyond the schema's description.

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 clearly states it executes arbitrary JavaScript in the Photopea environment, and distinguishes itself from sibling tools by noting it is for advanced operations not covered by other 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?

Explicitly instructs when to use (advanced operations not covered by other tools) and warns caution due to full access and destructive potential, providing clear guidance for selection.

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

photopea_select_layerSelect LayerA
Idempotent

Set a layer as the active layer by name or index. Many tools (apply_filter, apply_adjustment, fill_selection) operate on the active layer — use this to target a specific layer first. Use get_layers to find layer names and indices.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesLayer name (string) or index (number)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate non-readOnly and idempotent. The description adds that it sets the active layer state, but doesn't elaborate on side effects or state changes beyond what annotations imply. Adequate but not rich.

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 concise sentences with front-loaded purpose. No unnecessary words. Every sentence adds value.

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?

Given the simplicity (one parameter, no output), the description covers the tool's purpose, usage context, and input sourcing. Could mention that it modifies document state, but annotations cover that.

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 description echoes 'by name or index'. No new semantics beyond the schema's parameter description. Baseline score for high 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?

Clearly states the tool sets a layer as active by name or index, with a specific verb and resource. Distinguishes its role from siblings by noting that many other tools operate on the active 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?

Explicitly tells when to use the tool (before operations that depend on active layer) and mentions get_layers to find valid inputs. Provides clear context for selection.

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

photopea_set_layer_propertiesSet Layer PropertiesA

Update one or more properties on a layer. Only specified properties are changed; others remain at their current values. Use get_layers to inspect current property values before modifying.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesLayer name (string) or index (number)
opacityNoLayer opacity percentage (0 = fully transparent, 100 = fully opaque)
blendModeNoBlend mode (e.g. normal, multiply, screen, overlay, darken, lighten, color-dodge, color-burn)
visibleNoLayer visibility (true = visible, false = hidden)
nameNoNew display name for the layer
lockedNoWhether the layer is locked (true = prevent edits, false = allow edits)

TDQS

A4.4/5.0
Behavior4/5

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

Describes that only specified properties change, others remain. No contradiction with annotations (readOnlyHint false matches mutation). No side effects or limits described, but sufficient for a simple update.

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 well-structured sentences. Front-loaded with purpose and partial update behavior. 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?

Satisfies needs for a 6-param tool with no output schema. Provides clear purpose, partial update, and inspection hint. Could mention active document, but not required.

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% (baseline 3). Description adds 'Only specified properties are changed; others remain' which clarifies partial update semantics beyond 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?

Clearly states 'Update one or more properties on a layer' with specific verb and resource. Distinguishes from siblings by hinting at inspection via 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 Guidelines4/5

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

Explicitly suggests using get_layers before modifying to inspect current values. Provides clear context for when to use this tool versus the inspection tool.

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

photopea_transform_layerTransform LayerA

Scale, rotate, or flip a layer in-place. Modifies the layer's pixel data destructively. Use get_layers to check current layer bounds before transforming, and undo to revert if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesLayer name (string) or index (number)
scaleXNoHorizontal scale factor (1.0 = no change, 0.5 = half size, 2.0 = double size)
scaleYNoVertical scale factor (1.0 = no change, 0.5 = half size, 2.0 = double size)
rotationNoRotation angle in degrees (positive = clockwise, negative = counter-clockwise)
flipHNoFlip the layer horizontally (mirror left-right)
flipVNoFlip the layer vertically (mirror top-bottom)

TDQS

A3.6/5.0
Behavior1/5

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

The description states 'Modifies the layer's pixel data destructively,' but annotations set destructiveHint to false. This contradiction undermines transparency, as per the scoring rule for annotation contradictions.

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 concise with two sentences: the first defines the core action, and the second provides usage tips. No redundant information is present.

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 adequately covers the purpose, destructive nature, pre-use check, and undo capability. However, it lacks details about immediate application and potential effects on layers beyond pixel data.

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 covers all 6 parameters with clear descriptions, achieving 100% coverage. The description adds no further parameter details, so a 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 clearly specifies the tool's purpose: scaling, rotating, or flipping a layer in-place. It explicitly states the operation is destructive, distinguishing it from other layer manipulation tools like move_layer or set_layer_properties.

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 description provides actionable guidance by suggesting using get_layers to check bounds before transforming and using undo to revert. However, it does not explicitly mention when not to use this tool or compare it to alternatives.

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

photopea_undoUndoA
Destructive

Undo one or more recent actions in the active document. Each step reverses one operation from the history. Use after destructive operations (apply_filter, apply_adjustment, fill_selection) to revert changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsNoNumber of history steps to undo (default 1)

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds that each step reverses one history operation, which is expected. No contradiction, but limited additional insight 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.

Conciseness5/5

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

Two sentences, no fluff. Front-loaded with the main action and purpose, followed by usage guidance. Every sentence is valuable.

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 tool with one parameter and clear annotations, the description is complete. It explains what it does, when to use it, and how many steps it affects. No missing information.

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% coverage with a clear description for 'steps'. The description reiterates the concept but adds no new 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?

The description clearly states 'Undo one or more recent actions in the active document' with a specific verb and resource. It distinguishes from sibling tools like 'photopea_redo' and explicitly mentions use after destructive operations.

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 description explicitly states when to use the tool ('Use after destructive operations') and lists examples. It does not provide negative guidance but is sufficient for this simple tool.

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

photopea_ungroup_layersUngroup LayersA

Dissolve a layer group, moving all child layers to the document root. The group folder is removed but its contents are preserved. Use get_layers to find group names.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesName of the layer group to ungroup (use get_layers to find group names)

TDQS

A4.2/5.0
Behavior4/5

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

The description adds detail beyond annotations: it states the group folder is removed but contents are preserved. Annotations show destructiveHint=false, which aligns with 'contents preserved'. No contradictions.

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 concise sentences with no wasted words. The most critical information is front-loaded: the action and its effect.

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 one-parameter operation, the description covers purpose, effect, and prerequisite (use get_layers). No output schema, but results are straightforward. Could mention undo capability, but not essential.

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 fully describes the single required parameter 'target' with a clear description. The tool description adds no new param details beyond referencing 'get_layers', but schema coverage is 100%, 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 uses a specific verb ('Dissolve') and clearly states the resource ('layer group') and its effect ('moving all child layers to the document root'). It distinguishes from sibling tools like 'group_layers' and 'delete_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?

It explicitly states the use case (dissolving a group) and recommends using 'get_layers' to find group names. While it doesn't mention when to avoid this tool or provide alternatives, the context is clear for a simple operation.

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. 27 tool updatesv0.1.1
    • Changedphotopea_add_fill_layer3 fields changed
      • changedInput schema / properties / color / description
        Previous value: -"Fill color as hex"New value: +"Fill color as hex string (e.g. #ff0000)"
      • changedInput schema / properties / name / description
        Previous value: -"Name for the fill layer"New value: +"Display name for the fill layer in the layers panel"
      • changedInput schema / properties / type / description
        Previous value: -"Fill type: solid"New value: +"Fill layer type (currently only 'solid' is supported)"
    • Changedphotopea_add_gradient3 fields changed
      • changedInput schema / properties / angle / description
        Previous value: -"Gradient angle in degrees"New value: +"Gradient angle in degrees (0 = left-to-right, 90 = top-to-bottom, default 0)"
      • changedInput schema / properties / colors / description
        Previous value: -"Array of hex color stops (minimum 2)"New value: +"Array of hex color stops distributed evenly along the gradient (minimum 2, e.g. ['#ff0000', '#0000ff'])"
      • changedInput schema / properties / type / description
        Previous value: -"Gradient type"New value: +"Gradient type (currently only 'linear' is supported)"
    • Changedphotopea_add_layer3 fields changed
      • changedInput schema / properties / blendMode / description
        Previous value: -"Blend mode (e.g. normal, multiply, screen, overlay)"New value: +"Blend mode (e.g. normal, multiply, screen, overlay, darken, lighten). Defaults to normal."
      • changedInput schema / properties / name / description
        Previous value: -"Name for the new layer"New value: +"Display name for the new layer in the layers panel"
      • changedInput schema / properties / opacity / description
        Previous value: -"Layer opacity (0-100)"New value: +"Layer opacity percentage (0 = fully transparent, 100 = fully opaque, default 100)"
    • Changedphotopea_add_shape1 field changed
      • changedInput schema / properties / type / description
        Previous value: -"Shape type"New value: +"Shape type to create"
    • Changedphotopea_add_text5 fields changed
      • changedInput schema / properties / content / description
        Previous value: -"Text content to display"New value: +"Text content to display on the layer"
      • changedInput schema / properties / font / description
        Previous value: -"Font name (e.g. Arial)"New value: +"Font PostScript name (e.g. ArialMT, Helvetica-Bold). Use list_fonts to find available names."
      • changedInput schema / properties / size / description
        Previous value: -"Font size in points"New value: +"Font size in points (default varies by document resolution)"
      • changedInput schema / properties / x / description
        Previous value: -"X position in pixels"New value: +"X position in pixels from the left edge of the document"
      • changedInput schema / properties / y / description
        Previous value: -"Y position in pixels"New value: +"Y position in pixels from the top edge of the document"
    • Changedphotopea_apply_adjustment2 fields changed
      • changedInput schema / properties / settings / description
        Previous value: -"Adjustment settings (e.g. { brightness: 20, contrast: 10 })"New value: +"Key-value settings for the adjustment. For brightness: { brightness: -100..100, contrast: -100..100 }. For hue_sat: { hue: -180..180, saturation: -100..100, lightness: -100..100 }. For levels: { inputBlack: 0..255, inputWhite: 0..255 }"
      • changedInput schema / properties / type / description
        Previous value: -"Adjustment type"New value: +"Adjustment type: 'brightness' for brightness/contrast, 'hue_sat' for hue/saturation/lightness, 'levels' for input levels, 'curves' for tone curves"
    • Changedphotopea_apply_filter2 fields changed
      • changedInput schema / properties / settings / description
        Previous value: -"Filter settings (e.g. { radius: 5 })"New value: +"Key-value settings for the filter. For gaussian_blur: { radius: pixels }. For unsharp_mask: { amount: 1-500, radius: 0.1-250, threshold: 0-255 }. For motion_blur: { angle: degrees, distance: pixels }. For noise: { amount: 1-100 }"
      • changedInput schema / properties / type / description
        Previous value: -"Filter type"New value: +"Filter type to apply to the active layer"
    • Changedphotopea_close_document1 field changed
      • changedInput schema / properties / save / description
        Previous value: -"Whether to save changes before closing"New value: +"Whether to save changes before closing (true = save first, false = discard unsaved changes)"
    • Changedphotopea_create_document6 fields changed
      • changedInput schema / properties / fillColor / description
        Previous value: -"Background fill color as hex (e.g. #ffffff)"New value: +"Background fill color as hex (e.g. #ffffff for white, #000000 for black). Defaults to white if omitted."
      • changedInput schema / properties / height / description
        Previous value: -"Document height in pixels"New value: +"Document height in pixels (e.g. 1080 for full HD)"
      • changedInput schema / properties / mode / description
        Previous value: -"Color mode"New value: +"Color mode (use RGB for most workflows)"
      • changedInput schema / properties / name / description
        Previous value: -"Document name"New value: +"Document name shown in the title bar"
      • changedInput schema / properties / resolution / description
        Previous value: -"Resolution in DPI (default 72)"New value: +"Resolution in DPI (72 for screen, 300 for print)"
      • changedInput schema / properties / width / description
        Previous value: -"Document width in pixels"New value: +"Document width in pixels (e.g. 1920 for full HD)"
    • Changedphotopea_duplicate_layer1 field changed
      • changedInput schema / properties / newName / description
        Previous value: -"Name for the duplicated layer"New value: +"Display name for the duplicated layer (defaults to 'original name copy')"
    • Changedphotopea_edit_text2 fields changed
      • changedInput schema / properties / content / description
        Previous value: -"New text content"New value: +"New text content to replace existing text"
      • changedInput schema / properties / font / description
        Previous value: -"New font name"New value: +"New font PostScript name (use list_fonts to find available names)"
    • Changedphotopea_export_image3 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"Export format"New value: +"Output format: 'png' for lossless, 'jpg' for compressed photos, 'webp' for web, 'psd' for Photoshop, 'svg' for vector"
      • changedInput schema / properties / outputPath / description
        Previous value: -"Local file path where the export should be saved"New value: +"Absolute local file path where the exported file will be saved (e.g. /Users/me/output.png)"
      • changedInput schema / properties / quality / description
        Previous value: -"JPEG quality (1-100, only for jpg)"New value: +"Compression quality for JPG format only (1 = smallest file, 100 = best quality). Ignored for other formats."
    • Changedphotopea_fill_selection2 fields changed
      • changedInput schema / properties / blendMode / description
        Previous value: -"Blend mode for the fill"New value: +"Blend mode for the fill (e.g. normal, multiply, screen, overlay, darken, lighten). Defaults to normal."
      • changedInput schema / properties / opacity / description
        Previous value: -"Fill opacity (0-100)"New value: +"Fill opacity percentage (0 = fully transparent, 100 = fully opaque, default 100)"
    • Changedphotopea_group_layers2 fields changed
      • changedInput schema / properties / groupName / description
        Previous value: -"Name for the group"New value: +"Display name for the group folder in the layers panel"
      • changedInput schema / properties / layers / description
        Previous value: -"Array of layer names to include in the group"New value: +"Array of layer names to include in the group (use get_layers to find names)"
    • Changedphotopea_make_selection7 fields changed
      • changedInput schema / properties / bounds / description
        Previous value: -"Selection bounds (ignored for 'all' type)"New value: +"Selection region bounds in pixels. Required for 'rect' and 'ellipse' types, ignored for 'all'."
      • changedInput schema / properties / bounds / properties / height / description
        Previous value: -"Selection height"New value: +"Selection height in pixels"
      • changedInput schema / properties / bounds / properties / width / description
        Previous value: -"Selection width"New value: +"Selection width in pixels"
      • changedInput schema / properties / bounds / properties / x / description
        Previous value: -"Left edge X"New value: +"Left edge X position in pixels"
      • changedInput schema / properties / bounds / properties / y / description
        Previous value: -"Top edge Y"New value: +"Top edge Y position in pixels"
      • changedInput schema / properties / feather / description
        Previous value: -"Feather radius in pixels"New value: +"Soft edge radius in pixels for anti-aliased selection edges (0 = hard edge)"
      • changedInput schema / properties / type / description
        Previous value: -"Selection type"New value: +"Selection shape: 'all' selects the entire canvas, 'rect' creates a rectangle, 'ellipse' creates an ellipse"
    • Changedphotopea_modify_selection2 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Modification action"New value: +"How to modify the selection: 'expand' grows it, 'contract' shrinks it, 'feather' softens edges, 'invert' swaps selected/unselected"
      • changedInput schema / properties / amount / description
        Previous value: -"Amount in pixels (for expand, contract, feather)"New value: +"Modification amount in pixels (required for expand, contract, feather; ignored for invert)"
    • Changedphotopea_move_layer2 fields changed
      • changedInput schema / properties / x / description
        Previous value: -"Horizontal offset in pixels"New value: +"Horizontal offset in pixels (positive = right, negative = left)"
      • changedInput schema / properties / y / description
        Previous value: -"Vertical offset in pixels"New value: +"Vertical offset in pixels (positive = down, negative = up)"
    • Changedphotopea_open_file1 field changed
      • changedInput schema / properties / source / description
        Previous value: -"URL or local file path to open"New value: +"URL or absolute local file path of the image to open (e.g. /Users/me/photo.psd or https://example.com/image.png)"
    • Changedphotopea_place_image6 fields changed
      • changedInput schema / properties / height / description
        Previous value: -"Resize to this height in pixels"New value: +"Resize to this height in pixels (preserves aspect ratio if only one dimension is set)"
      • changedInput schema / properties / name / description
        Previous value: -"Name for the placed layer"New value: +"Display name for the placed layer in the layers panel"
      • changedInput schema / properties / source / description
        Previous value: -"URL or local file path of image to place"New value: +"URL or absolute local file path of the image to place"
      • changedInput schema / properties / width / description
        Previous value: -"Resize to this width in pixels"New value: +"Resize to this width in pixels (preserves aspect ratio if only one dimension is set)"
      • changedInput schema / properties / x / description
        Previous value: -"X position offset"New value: +"X position offset in pixels from the left edge"
      • changedInput schema / properties / y / description
        Previous value: -"Y position offset"New value: +"Y position offset in pixels from the top edge"
    • Changedphotopea_redo1 field changed
      • changedInput schema / properties / steps / description
        Previous value: -"Number of redo steps (default 1)"New value: +"Number of history steps to redo (default 1)"
    • Changedphotopea_reorder_layer1 field changed
      • changedInput schema / properties / position / description
        Previous value: -"Target position in layer stack"New value: +"Target position: 'top' = front of stack, 'bottom' = back of stack, 'above' = one position up, 'below' = one position down"
    • Changedphotopea_resize_document2 fields changed
      • changedInput schema / properties / height / description
        Previous value: -"New height in pixels"New value: +"New document height in pixels"
      • changedInput schema / properties / width / description
        Previous value: -"New width in pixels"New value: +"New document width in pixels"
    • Changedphotopea_run_script1 field changed
      • changedInput schema / properties / script / description
        Previous value: -"JavaScript code to execute in Photopea"New value: +"Photopea JavaScript code to execute. Must call app.echoToOE(result) to return data. Has access to the full Photopea scripting API (app, activeDocument, etc.)."
    • Changedphotopea_set_layer_properties5 fields changed
      • changedInput schema / properties / blendMode / description
        Previous value: -"Blend mode (e.g. normal, multiply, screen, overlay)"New value: +"Blend mode (e.g. normal, multiply, screen, overlay, darken, lighten, color-dodge, color-burn)"
      • changedInput schema / properties / locked / description
        Previous value: -"Whether the layer is locked"New value: +"Whether the layer is locked (true = prevent edits, false = allow edits)"
      • changedInput schema / properties / name / description
        Previous value: -"New layer name"New value: +"New display name for the layer"
      • changedInput schema / properties / opacity / description
        Previous value: -"Layer opacity (0-100)"New value: +"Layer opacity percentage (0 = fully transparent, 100 = fully opaque)"
      • changedInput schema / properties / visible / description
        Previous value: -"Layer visibility"New value: +"Layer visibility (true = visible, false = hidden)"
    • Changedphotopea_transform_layer5 fields changed
      • changedInput schema / properties / flipH / description
        Previous value: -"Flip horizontally"New value: +"Flip the layer horizontally (mirror left-right)"
      • changedInput schema / properties / flipV / description
        Previous value: -"Flip vertically"New value: +"Flip the layer vertically (mirror top-bottom)"
      • changedInput schema / properties / rotation / description
        Previous value: -"Rotation in degrees (clockwise)"New value: +"Rotation angle in degrees (positive = clockwise, negative = counter-clockwise)"
      • changedInput schema / properties / scaleX / description
        Previous value: -"Horizontal scale factor (1.0 = 100%)"New value: +"Horizontal scale factor (1.0 = no change, 0.5 = half size, 2.0 = double size)"
      • changedInput schema / properties / scaleY / description
        Previous value: -"Vertical scale factor (1.0 = 100%)"New value: +"Vertical scale factor (1.0 = no change, 0.5 = half size, 2.0 = double size)"
    • Changedphotopea_undo1 field changed
      • changedInput schema / properties / steps / description
        Previous value: -"Number of undo steps (default 1)"New value: +"Number of history steps to undo (default 1)"
    • Changedphotopea_ungroup_layers1 field changed
      • changedInput schema / properties / target / description
        Previous value: -"Name of the layer group to ungroup"New value: +"Name of the layer group to ungroup (use get_layers to find group names)"
  2. 34 tool updatesv0.1.0
    • First observedphotopea_add_fill_layer
    • First observedphotopea_add_gradient
    • First observedphotopea_add_layer
    • First observedphotopea_add_shape
    • First observedphotopea_add_text
    • First observedphotopea_apply_adjustment
    • First observedphotopea_apply_filter
    • First observedphotopea_clear_selection
    • First observedphotopea_close_document
    • First observedphotopea_create_document
    • First observedphotopea_delete_layer
    • First observedphotopea_duplicate_layer
    • First observedphotopea_edit_text
    • First observedphotopea_export_image
    • First observedphotopea_fill_selection
    • First observedphotopea_get_document_info
    • First observedphotopea_get_layers
    • First observedphotopea_group_layers
    • First observedphotopea_list_fonts
    • First observedphotopea_load_font
    • First observedphotopea_make_selection
    • First observedphotopea_modify_selection
    • First observedphotopea_move_layer
    • First observedphotopea_open_file
    • First observedphotopea_place_image
    • First observedphotopea_redo
    • First observedphotopea_reorder_layer
    • First observedphotopea_resize_document
    • First observedphotopea_run_script
    • First observedphotopea_select_layer
    • First observedphotopea_set_layer_properties
    • First observedphotopea_transform_layer
    • First observedphotopea_undo
    • First observedphotopea_ungroup_layers

TDQS

A3.9/5.0

Scored across 34 tools

Disambiguation4/5

Most tools have clearly distinct purposes, but apply_adjustment and apply_filter are easily confused (both destructively modify the active layer's pixels), and add_layer vs add_fill_layer could be ambiguous without close reading. Overall, intentional pairs like make/modify/fill/clear_selection are well-differentiated.

Naming Consistency5/5

All 34 tools follow the photopea_verb_noun snake_case pattern. Minor synonym variations (get vs list, create vs add) are consistent in style and do not break the overall predictable naming convention.

Tool Count2/5

34 tools substantially exceeds the 25+ threshold for a heavy tool set. While the image editing domain is broad, many tools (e.g., add_layer/add_fill_layer, apply_adjustment/apply_filter) could be consolidated into parameterized operations without losing capability.

Completeness4/5

The tool surface covers document lifecycle, layer manipulation, text and shapes, selections, adjustments, filters, fonts, export, undo/redo, and scripting. Common operations like crop or rotating the canvas are missing, but core workflows are fully covered and run_script provides an escape hatch.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to perform GIMP-style image operations such as open, resize, crop, flip, rotate, blur, desaturate, text overlay, export, and batch processing via MCP tools, supporting both mock (Pillow) and live GIMP backends.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to generate and compose thumbnails using tools like get_capabilities, measure, render_thumbnail, render_variants, and get_canvas, with a document model that supports layers, effects, and masking.
    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.
    7,307 npm
    MIT