Developers
Photo Speak MCP
Connect Cursor, Claude Code, or Codex. Sign in once. The agent can create boards, generate photos, precision-edit, apply your brand, install skills, and walk revisions.
How it works
- Add the server URL in your app.
- A browser window opens. Log in to Photo Speak and click Allow.
- Ask: “Create a new Photo Speak board and generate a white-background product shot.”
Generations spend the same credits as the website. Precision edits are free. Check balance with get_account.
Cursor
Click Add to Cursor, or Settings → Tools & MCP → New MCP Server. Or save ~/.cursor/mcp.json:
{
"mcpServers": {
"photospeak": {
"type": "http",
"url": "https://photospeak.net/api/mcp"
}
}
}
Cursor opens a browser. Sign in and Allow. Then: “List my Photo Speak boards.”
Claude Code
claude mcp add --transport http photospeak https://photospeak.net/api/mcp
Or in .mcp.json / ~/.claude.json — type is required (a URL-only entry is treated as stdio and skipped):
{
"mcpServers": {
"photospeak": {
"type": "http",
"url": "https://photospeak.net/api/mcp"
}
}
}
Inside Claude Code run /mcp, pick photospeak, and sign in. Or claude mcp login photospeak.
Codex
codex mcp add photospeak --url https://photospeak.net/api/mcp codex mcp login photospeak
Or in ~/.codex/config.toml:
[mcp_servers.photospeak] url = "https://photospeak.net/api/mcp"
Headless: create a personal access token on My account and set bearer_token_env_var = "PHOTOSPEAK_TOKEN".
Claude Desktop, VS Code, Windsurf
Same URL: https://photospeak.net/api/mcp. Use Streamable HTTP / remote MCP. Complete the browser login when prompted.
VS Code / Claude Desktop:
{
"servers": {
"photospeak": {
"type": "http",
"url": "https://photospeak.net/api/mcp"
}
}
}
Claude Desktop uses mcpServers instead of servers, with the same type + url object.
Examples
- New board + 4-up: create_board → set_board_model → create_image (num_images: 4)
- Upload then edit: upload_image (https URL or base64) → edit_image
- Push a Cursor file into the library: upload_asset (image_base64) → add_asset_to_board
- Precision then cutout: precision_edit → remove_background
- Undo: list_revisions → revert_item
- Brand: list_brand_kits → apply_brand_logo
- Skill: list_skill_gallery → install_skill → apply_skill
- Models: list_models (speed / cost / quality / credits)
Tool catalog
| Tool | Scope | What it does |
|---|---|---|
list_boards | mcp:read | List the user's Photo Speak boards (canvases), most recently edited first. |
create_board | mcp:write | Create a new Photo Speak board (canvas workspace). |
rename_board | mcp:write | Rename a board. |
set_board_model | mcp:write | Set the image model for a board. Call list_models first if the user cares about speed, price, or quality. |
delete_board | mcp:write | Permanently delete a board and its canvas. Requires confirm: true. |
get_board | mcp:read | Board metadata plus a compact canvas snapshot. |
update_item | mcp:write | Move or resize a canvas card, or toggle hidden. |
get_canvas | mcp:read | Read a compact snapshot of everything on a board. |
list_models | mcp:read | List enabled image models with speed, cost, quality ratings, approx credits, capabilities, and membership locks. Use this before picking a model. |
list_revisions | mcp:read | List the version history for a canvas image card. |
revert_item | mcp:write | Revert a card to an earlier image version (same as History rail). |
delete_item | mcp:write | Remove a card from the board. Requires confirm: true. |
upload_image | mcp:write | Upload an image onto a board from a public https URL or base64 bytes. For a local Cursor file, base64 the image and pass image_base64 — file:// paths cannot be |
list_skills | mcp:read | List owned and installed skills, including markdown recipes. |
get_skill | mcp:read | Read one skill's full markdown content, images, and flags. |
create_skill | mcp:write | Create an owned skill (name, description, markdown content). |
update_skill | mcp:write | Edit an owned skill. Installed gallery skills are read-only — duplicate_skill first. |
delete_skill | mcp:write | Delete an owned skill. Requires confirm: true. |
list_skill_gallery | mcp:read | Browse public / official skills you can install. |
install_skill | mcp:write | Install a public gallery skill (read-only until duplicated). |
uninstall_skill | mcp:write | Remove an installed gallery skill from this account. |
duplicate_skill | mcp:write | Fork a viewable skill into an owned, editable copy. |
publish_skill | mcp:write | Publish or unpublish an owned skill to the gallery. |
unpublish_skill | mcp:write | Remove an owned skill from the public gallery. |
add_skill_image | mcp:write | Attach a reference image to an owned skill from an https URL. |
remove_skill_image | mcp:write | Remove a reference image from an owned skill. |
list_brand_kits | mcp:read | List the user's brand kits. |
get_brand_kit_detail | mcp:read | Full brand kit: colors, fonts, assets, voice. |
create_brand_kit | mcp:write | Create an empty brand kit. |
delete_brand_kit | mcp:write | Delete a brand kit. Requires confirm: true. |
duplicate_brand_kit | mcp:write | Duplicate a brand kit. |
update_brand_kit | mcp:write | Rename a brand kit or update its voice. |
get_asset | mcp:read | Read one media-library asset. |
upload_asset | mcp:write | Push an image into the Photo Speak Assets library (not a board). For a local Cursor file, base64 it and pass image_base64. Public https URLs also work. Set add_ |
add_asset_to_board | mcp:write | Place a library asset onto a board as a new image card. |
search_assets | mcp:read | Search the media asset library. |
get_account | mcp:read | Account email, credits, subscription, and default board. |
list_credit_ledger | mcp:read | Recent credit history (last 50 rows). |
claim_pairing | mcp:read | Bind this agent to the in-app Connect Agent session using the pairing code from the Photo Speak website. |
photospeak_help | mcp:read | Catalog of Photo Speak MCP tools, how to pick models, and example prompts. Call this when unsure. |
create_image | mcp:generate | Generate brand-new images from a text prompt ONLY. If the user referenced ANY existing canvas image — a style guide, template, person, product, 'that photo' — d |
edit_image | mcp:generate | Use whenever ANY existing canvas image is involved: modifying it, combining several, or creating something NEW based on one (style guides, templates, references |
revert_edit | mcp:write | Rewind a canvas image to an earlier version ("undo that", "go back", "use the version before"). Every edit is kept in history, so reverting is instant and loses |
organize_canvas | mcp:write | Tidy the canvas: arrange all visible images into a clean, evenly-spaced grid and bring everything into view. Use for "clean up my canvas", "organize this", "tid |
focus_image | mcp:read | Pan/zoom the user's view to an image ("focus on X", "zoom in on that", "show me the bugatti"). Omit image_id to zoom out and show the whole canvas ("show everyt |
save_skill | mcp:write | Save a reusable editing skill from what was just done ("save that as a skill", "remember this look as X"). Write the instructions so ANY future image can get th |
apply_skill | mcp:generate | Fetch a saved skill ("use/apply the X skill") and get its instructions. After calling this, FOLLOW the returned instructions immediately: make the edit_image/cr |
precision_edit | mcp:write | MECHANICAL pixel-exact operations the user EXPLICITLY asked for. Instant, free, never regenerates pixels. Ops: crop_to_selection (needs drawn rect); rotate (deg |
download_images | mcp:read | Save image files to the user's computer. Instant, free, does NOT change canvas pixels. Use for "download this", "export as JPG", "save these as a PDF", "downloa |
remove_background | mcp:generate | Remove the background from an image, leaving the subject on transparency (PNG cutout). Use for "remove the background", "cut it/her/him out", "make the backgrou |
layerize_image | mcp:generate | Split an image into independent transparent-PNG layers (background + each element) using Seedream Layerize. Use for "layerize this", "split into layers", "separ |
text_layer | mcp:write | LIVE type on an image card — the ONLY way to add or change words on a photo. Never bake type with edit_image, create_image, or precision_edit. Free, instant; th |
sticker_layer | mcp:write | Place one canvas image ON another card as a live, movable STICKER — a design layer (like text) the user can drag, resize, rotate, restack, hide, or delete. Use |
shape_layer | mcp:write | Add or edit geometric SHAPE layers on an image card — rectangles, ellipses, triangles, lines, stars, arrows. Free, instant; shapes stay live (move/resize/restyl |
apply_ink | mcp:generate | Run the user's drawing. Ink on an image card EDITS that photo (result replaces the card). Ink on a frame is a sketch → creates a NEW image from the flattened ar |
ink_layer | mcp:write | Clear, hide, show, or undo the last ink stroke on an image card or frame. Voice cannot draw — this only manages existing ink. To run the drawing use apply_ink. |
group_layers | mcp:write | Organize canvas layers into named groups (folders). Use for "group these", "put the selected ones in a group called Hero", "add img_3 to the Refs group", "ungro |
scrape_webpage | mcp:write | Scrape a webpage for design reference. Modes: "screenshot" (full-page capture), "branding" (colors, fonts, logos), "images" (all page images onto canvas in a si |
create_note | mcp:write | Create a sticky note on the canvas. Use for reminders and text the user wants kept visible — e.g. "create a note that I need to ask James about this", "remind m |
create_frame | mcp:write | Create a blank FRAME on the canvas — a resizable container you can drop image cards onto. Use for "add a frame", "make a story frame", "blank canvas to drop pho |
import_social_url | mcp:write | Import images from a social URL onto the canvas: Facebook Ad Library link (image or carousel), Instagram post/reel (image or carousel; video → thumbnail), Faceb |
search_images | mcp:write | Search the web for photos and import them onto the canvas. Default 1 image; pass count for more. Use another=true for 'bring me another' / 'one more' from the l |
upscale_image | mcp:write | Upscale an image to higher resolution with AI (SeedVR). Free — no credits. Use for "upscale", "higher resolution", "make it print-ready", "4K version". Mechanic |
get_brand_kit | mcp:read | Fetch the full contents of one of the user's brand kits (every color with hex + role, every font role, every logo/photo asset, the brand voice). Use when the ro |
apply_brand_logo | mcp:write | Stamp the user's saved brand logo onto an image — "add my logo to this", "put the CarShots logo bottom right", "watermark these with my logo". Composites the ac |
apply_brand_style | mcp:generate | AI-restyle an image with the user's brand kit — "update this using my brand colors", "make it match the CarShots brand", "make this on-brand". Builds the edit f |
apply_brand_text | mcp:write | Restyle existing LIVE text layers to the user's brand fonts/colors — "make the text on-brand", "use my brand font on the title", "brand colors on that caption". |
save_to_brand_kit | mcp:write | Save something into the user's brand kit — "add this color to my brand kit" (pass hex), "save this image as my logo" (pass image_id + asset_kind), "set my brand |
Auth & safety
OAuth 2.1 + PKCE. Scopes: mcp:read, mcp:write, mcp:generate. Revoke apps and tokens on My account. We never see your Cursor or Claude keys.
Human docs live at /mcp. The protocol is /api/mcp — do not mix them up.
Connect Agent from the canvas
Signed in? Click Connect Agent on any board for install commands and a pairing code.