Photo Speak

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.

Add to Cursor Start free

Protocol endpoint: https://photospeak.net/api/mcp · Or click Connect Agent on any board for a pairing code.

How it works

  1. Add the server URL in your app.
  2. A browser window opens. Log in to Photo Speak and click Allow.
  3. 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.jsontype 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

ToolScopeWhat it does
list_boardsmcp:readList the user's Photo Speak boards (canvases), most recently edited first.
create_boardmcp:writeCreate a new Photo Speak board (canvas workspace).
rename_boardmcp:writeRename a board.
set_board_modelmcp:writeSet the image model for a board. Call list_models first if the user cares about speed, price, or quality.
delete_boardmcp:writePermanently delete a board and its canvas. Requires confirm: true.
get_boardmcp:readBoard metadata plus a compact canvas snapshot.
update_itemmcp:writeMove or resize a canvas card, or toggle hidden.
get_canvasmcp:readRead a compact snapshot of everything on a board.
list_modelsmcp:readList enabled image models with speed, cost, quality ratings, approx credits, capabilities, and membership locks. Use this before picking a model.
list_revisionsmcp:readList the version history for a canvas image card.
revert_itemmcp:writeRevert a card to an earlier image version (same as History rail).
delete_itemmcp:writeRemove a card from the board. Requires confirm: true.
upload_imagemcp:writeUpload 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_skillsmcp:readList owned and installed skills, including markdown recipes.
get_skillmcp:readRead one skill's full markdown content, images, and flags.
create_skillmcp:writeCreate an owned skill (name, description, markdown content).
update_skillmcp:writeEdit an owned skill. Installed gallery skills are read-only — duplicate_skill first.
delete_skillmcp:writeDelete an owned skill. Requires confirm: true.
list_skill_gallerymcp:readBrowse public / official skills you can install.
install_skillmcp:writeInstall a public gallery skill (read-only until duplicated).
uninstall_skillmcp:writeRemove an installed gallery skill from this account.
duplicate_skillmcp:writeFork a viewable skill into an owned, editable copy.
publish_skillmcp:writePublish or unpublish an owned skill to the gallery.
unpublish_skillmcp:writeRemove an owned skill from the public gallery.
add_skill_imagemcp:writeAttach a reference image to an owned skill from an https URL.
remove_skill_imagemcp:writeRemove a reference image from an owned skill.
list_brand_kitsmcp:readList the user's brand kits.
get_brand_kit_detailmcp:readFull brand kit: colors, fonts, assets, voice.
create_brand_kitmcp:writeCreate an empty brand kit.
delete_brand_kitmcp:writeDelete a brand kit. Requires confirm: true.
duplicate_brand_kitmcp:writeDuplicate a brand kit.
update_brand_kitmcp:writeRename a brand kit or update its voice.
get_assetmcp:readRead one media-library asset.
upload_assetmcp:writePush 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_boardmcp:writePlace a library asset onto a board as a new image card.
search_assetsmcp:readSearch the media asset library.
get_accountmcp:readAccount email, credits, subscription, and default board.
list_credit_ledgermcp:readRecent credit history (last 50 rows).
claim_pairingmcp:readBind this agent to the in-app Connect Agent session using the pairing code from the Photo Speak website.
photospeak_helpmcp:readCatalog of Photo Speak MCP tools, how to pick models, and example prompts. Call this when unsure.
create_imagemcp:generateGenerate 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_imagemcp:generateUse whenever ANY existing canvas image is involved: modifying it, combining several, or creating something NEW based on one (style guides, templates, references
revert_editmcp:writeRewind 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_canvasmcp:writeTidy 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_imagemcp:readPan/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_skillmcp:writeSave 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_skillmcp:generateFetch 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_editmcp:writeMECHANICAL pixel-exact operations the user EXPLICITLY asked for. Instant, free, never regenerates pixels. Ops: crop_to_selection (needs drawn rect); rotate (deg
download_imagesmcp:readSave 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_backgroundmcp:generateRemove 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_imagemcp:generateSplit an image into independent transparent-PNG layers (background + each element) using Seedream Layerize. Use for "layerize this", "split into layers", "separ
text_layermcp:writeLIVE 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_layermcp:writePlace 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_layermcp:writeAdd or edit geometric SHAPE layers on an image card — rectangles, ellipses, triangles, lines, stars, arrows. Free, instant; shapes stay live (move/resize/restyl
apply_inkmcp:generateRun 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_layermcp:writeClear, 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_layersmcp:writeOrganize 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_webpagemcp:writeScrape a webpage for design reference. Modes: "screenshot" (full-page capture), "branding" (colors, fonts, logos), "images" (all page images onto canvas in a si
create_notemcp:writeCreate 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_framemcp:writeCreate 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_urlmcp:writeImport 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_imagesmcp:writeSearch 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_imagemcp:writeUpscale 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_kitmcp:readFetch 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_logomcp:writeStamp 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_stylemcp:generateAI-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_textmcp:writeRestyle 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_kitmcp:writeSave 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.

Open Photo Speak