The Photopea MCP Server enables AI agents to perform professional image editing and graphic design tasks through Photopea (a browser-based Photoshop alternative) directly from your AI agent or terminal.
Document Management
Create new documents with custom dimensions, color mode, resolution, and background
Open images from URLs or local file paths
Get document info (name, dimensions, resolution, color mode)
Resize documents (with content resampling) and close them (with optional save)
Layer Operations
Add, delete, select, duplicate, move, and reorder layers
Set layer properties: opacity, blend mode, visibility, name, lock state
Group/ungroup layers; retrieve the full layer tree as JSON
Text & Shapes
Add and edit text layers with full styling (font, size, color, bold, italic, alignment, letter/line spacing, paragraph bounds)
Add shape layers (rectangle or ellipse) with fill color, stroke color, and stroke width
Image Editing & Effects
Place images from URLs or local paths into documents
Apply adjustments: brightness/contrast, hue/saturation, levels, curves
Apply filters: Gaussian blur, sharpen, unsharp mask, noise, motion blur
Transform layers: scale, rotate, flip
Add linear gradients to layers
Selections
Create rectangular, elliptical, or full-canvas selections
Modify selections: expand, contract, feather, or invert
Fill selections with color (with optional opacity and blend mode) or clear them
Export & Utilities
Export documents to PNG, JPG, WebP, PSD, or SVG with quality control
Load custom fonts from URLs (TTF, OTF, WOFF2) and list available fonts
Execute arbitrary Photopea JavaScript for advanced/custom operations
Undo/redo one or more actions
It integrates with Claude Code, Claude Desktop, Cursor, VS Code (Copilot), and Windsurf via the MCP protocol, enabling automated, AI-driven image workflows without manual browser interaction.
Enables AI agents to perform comprehensive image editing operations in Photopea, including document creation and management, layer manipulation (adding, reordering, grouping), text and shape editing, applying adjustments/filters (brightness, blur, sharpen, etc.), making selections, and exporting images in formats like PNG, JPG, WebP, PSD, and SVG.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Photopea MCP Serverremove the background from my headshot and add a soft shadow"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Demo
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-serverThen 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-serverGlobal install:
npm install -g photopea-mcp-server
claude mcp add -s user photopea -- photopea-mcp-serverClaude 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 |
| Create a new document with specified dimensions and settings |
| Open an image from a URL or local file path |
| Get active document info (name, dimensions, resolution, color mode) |
| Resize the active document (resamples content to fit) |
| Close the active document |
Layer (11 tools)
Tool | Description |
| Add a new empty art layer |
| Add a solid color fill layer |
| Delete a layer by name or index |
| Make a layer active by name or index |
| Set opacity, blend mode, visibility, name, or lock state |
| Translate a layer by x/y offset |
| Duplicate a layer with optional new name |
| Move a layer in the stack (above, below, top, bottom) |
| Group named layers into a layer group |
| Ungroup a layer group |
| Get the full layer tree as JSON |
Text & Shape (3 tools)
Tool | Description |
| Add a text layer at specified coordinates |
| Edit content or style of an existing text layer |
| Add a shape (rectangle or ellipse) |
Image & Effects (9 tools)
Tool | Description |
| Place an image from URL or local path |
| Apply brightness/contrast, hue/saturation, levels, or curves |
| Apply gaussian blur, sharpen, unsharp mask, noise, or motion blur |
| Scale, rotate, or flip a layer |
| Apply a linear gradient fill |
| Create a rectangular, elliptical, or full selection |
| Expand, contract, feather, or invert a selection |
| Fill the current selection with a color |
| Deselect the current selection |
Export & Utility (6 tools)
Tool | Description |
| Export to PNG, JPG, WebP, PSD, or SVG |
| Load a custom font from a URL (TTF, OTF, WOFF2) |
| List available fonts, with optional search filter |
| Execute arbitrary Photopea JavaScript |
| Undo one or more actions |
| 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 buildCommands
Command | Description |
| Compile TypeScript to |
| Watch mode with auto-reload |
| Run unit and integration tests |
| 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 iframeSecurity
The MCP server binds to
127.0.0.1(localhost only) and is not accessible from the network.The
photopea_run_scripttool 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_layertool 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