An agent such as Claude drives this editor directly.
Signed in, this works on photovim.com too. Get a connection code below and run one line on your own computer. The code lives for a few minutes and attaches to your tab only.
What the agent makes stays an editable document, not a single flattened picture.
Keep an editor tab open, get a code, then paste the line below into a terminal on your own computer. The code expires in a few minutes.
Like Canva and Figma, one URL is enough. No Node needed. For Claude Code the line below is all it takes; once you get a code, the slot is filled in.
claude mcp add --transport http photovim https://photovim.com/mcp --header "Authorization: Bearer connection code"
Other clients use the URL https://photovim.com/mcp with an Authorization: Bearer code header, or https://photovim.com/mcp/code if they cannot send headers. Remotely there is no open_file (it takes a path on your computer), and export returns png/jpg/webp as images only.
Add the following to your client's MCP config. Node 22 or newer is all you need — nothing to install. Once you get a code above, the code slot is filled in.
{
"mcpServers": {
"photovim": {
"command": "npx",
"args": ["-y", "@photovim/mcp", "--url", "wss://photovim.com/cable", "--code", "connection code"]
}
}
}
.mcp.json in your working folder, or add it with claude mcp add photovim -- npx -y @photovim/mcp --url … --code ….mcpServers in claude_desktop_config.json as is, then restart Claude Desktop.[mcp_servers.photovim] in ~/.codex/config.toml.Look at MCP, to the right of Help in the editor menu bar. The dot in the button is the current state.
Opening and saving documents, selections, creating and arranging and transforming and adjusting layers, adding and editing text, painting brush strokes, removing backgrounds, selecting subjects, AI generation, undo — 34 tools in all.
| Tool | What it does | Kind |
|---|---|---|
| Connect | ||
list_tabs | Editor tabs that are open right now | Read |
attach | Attach to an editor tab — later tools run there (same document, same undo) | Select |
get_capabilities | What this editor can do right now — formats, adjustment names, models | Read |
| Document | ||
open_file | Open an image, PSD, .photovim or TIFF as a new tab | Change (goes into Undo) |
new_document | Create an empty document | Change (goes into Undo) |
list_documents | Open documents (tabs) | Read |
select_document | Pick a document (tab) | Select |
export | Save the document to a file (.png .jpg .webp .psd .photovim) | Read |
| Look | ||
get_state | Document state — size, revision, layer tree, selection, undo depth | Read |
list_layers | Layer list and state (same as get_state) | Read |
screenshot | The current composite as PNG | Read |
| Selection | ||
rect_select | Rectangular selection (document coordinates) | Select |
select_subject | Find the subject with the in-browser model and select it (the photo never leaves) | Select |
deselect | Clear the selection | Select |
selection_to_mask | Turn the selection into the active layer's mask | Change (goes into Undo) |
| Layers | ||
select_layer | Make one layer active (by id or index) | Select |
add_layer | Add an empty layer on top | Change (goes into Undo) |
set_layer_props | Layer name, visibility, opacity, blend mode | Change (goes into Undo) |
move_layer | Move a layer (relative dx/dy or absolute x/y) | Change (goes into Undo) |
reorder_layer | Change layer order | Change (goes into Undo) |
transform_layer | Scale or rotate a layer (text and Smart Object layers keep their values) | Change (goes into Undo) |
| Pixels & adjustments | ||
fill_selection | Fill the selection (or the whole layer) with a color — type, shape and Smart Object layers are refused unless rasterize: true | Change (goes into Undo) |
paint_strokes | Paint brush strokes one by one (points, color, size, opacity, hardness) — you can watch them appear in the editor | Change (goes into Undo) |
apply_adjustment | Apply an adjustment to the active layer (brightness, levels, curves, hue…) — type and shape layers are refused unless rasterize: true; Smart Objects get it as a Smart Filter | Change (goes into Undo) |
remove_background | Remove the background with the in-browser model | Change (goes into Undo) |
resize_image | Resize the image (all layers together) | Change (goes into Undo) |
crop | Crop the document to a rectangle | Change (goes into Undo) |
| Text | ||
add_text | Create a text layer | Change (goes into Undo) |
edit_text | Change a text layer's content, position or formatting | Change (goes into Undo) |
| AI generation | ||
list_ai_models | Models available for AI generation, the credits each run costs, and your remaining credits | Read |
generate_image | Edit with AI (selection or whole image), make a new image from text, or remove — the result lands on a new layer. Credit models spend your credits | Change (goes into Undo) |
ai_job_status | Keep waiting for a long generation and get the result (new layers, credits spent) | Read |
| Batch & undo | ||
batch | Run several commands as one bundle — one undo step. With onError=rollback a failure reverts the whole bundle | Change (goes into Undo) |
undo | Undo the last action | Change (goes into Undo) |
Limits are per person. One command counts as one call; a batch counts each of its steps. Reads and writes count the same. Over the limit, the command gets an immediate "rate limited" reply.
| Now (everyone) | |
|---|---|
| Per minute | 300 calls |
| Per day | 20,000 calls |
| Agents attached at once | 10 |
Not yet: one-shot results such as "make me a banner" are planned. Today you drive the 34 tools one at a time.