SudoMock

Product mockup rendering API. Upload PSD templates, render photorealistic mockups with 9 MCP tools including AI render.

Documentation

SudoMock MCP Server

Generate photorealistic product mockups from Claude, Cursor, Windsurf, and VS Code.

Model Context Protocol server for the SudoMock mockup generation API. Upload PSD templates, place artwork onto smart objects, edit supported text layers, and get rendered image URLs -- all through natural language.

Quick Start

This is a local stdio server: your MCP client launches it as a child process via npx and authenticates with your SUDOMOCK_API_KEY.

claude mcp add sudomock \
  -e SUDOMOCK_API_KEY=sm_your_key_here \
  -- npx -y @sudomock/mcp

Get your API key at sudomock.com/dashboard/api-keys.

JSON config for other clients (Cursor, Windsurf, VS Code)
{
  "mcpServers": {
    "sudomock": {
      "command": "npx",
      "args": ["-y", "@sudomock/mcp"],
      "env": {
        "SUDOMOCK_API_KEY": "sm_your_key_here"
      }
    }
  }
}

Note: A hosted remote (HTTP/OAuth) transport is not available yet. This package only ships the local stdio server shown above.

Tools

ToolDescriptionCredits
list_mockupsList your uploaded mockup templates0
get_mockup_detailsGet smart object UUIDs, dimensions, blend modes0
render_mockupRender a mockup with artwork and/or editable text1
remove_backgroundGet a transparent-PNG cutout through a 7-day signed URL25
create_2d_mockupCreate a 2D mockup and detect printable surfaces automatically25
render_2d_mockupRender artwork into a saved print area or full product surface5
render_videoAnimate a mockup into an AI video clip (always async)cost-based (free: 1/lifetime)
upload_psdUpload a Photoshop PSD/PSB template (sync or async)0
list_2d_mockupsList saved 2D templates; use customizable_only for shopper-ready items0
get_2d_mockupGet one 2D mockup's saved areas and full product surfaces0
update_2d_print_areasReplace a 2D mockup's print-area geometry0
delete_2d_mockupDelete a 2D mockup template0
get_jobCheck the status of an async job by job_id0
wait_for_jobPoll an async job until it succeeds or fails0
list_jobsList async render, video, upload, and 2D jobs0
get_accountCheck plan, credits, and usage0
update_mockupRename a mockup template0
delete_mockupDelete a mockup template0
create_webhook_endpointRegister a webhook for async job completion0
list_webhook_endpointsList your webhook endpoints0
update_webhook_endpointEdit or enable/disable a webhook endpoint0
delete_webhook_endpointDelete a webhook endpoint0
rotate_webhook_secretRotate a webhook signing secret0
test_webhook_endpointSend a signed webhook.test event0
list_webhook_deliveriesList delivery attempts for an endpoint0
replay_webhook_deliveryReplay a single failed delivery0

Async jobs

render_mockup, upload_psd, create_2d_mockup, and render_2d_mockup accept is_async: true, and render_video is always async. These return a job_id immediately (HTTP 202) instead of a final result. (create_2d_mockup and render_2d_mockup are synchronous by default and return the mockup / render directly.) Poll it with get_job, or let wait_for_job block until the job reaches a terminal status and hands back result_url, mockup_uuid, credits_charged, and payg ({credits, unit_price, cost} for pay-as-you-go jobs, otherwise null).

For a 2D render, pass exactly one target from get_2d_mockup: print_area_uuid for a saved print area or surface_uuid for a full-coverage product surface.

Background removal

remove_background returns a transparent-PNG URL valid for 7 days. You can pass that URL straight back as artwork_url during that window. To clean artwork inline during a single render instead, pass remove_background: true to render_mockup or render_2d_mockup. Either way it costs 25 credits per artwork, refunded automatically if processing fails.

Webhooks

Register an endpoint with create_webhook_endpoint to be notified when async jobs finish. Deliveries are signed with TWO headers: X-SudoMock-Signature (a hex HMAC-SHA256 over ${timestamp}.${rawBody} using the secret returned at creation/rotation) and X-SudoMock-Timestamp (unix seconds). Verify in constant time and reject if |now - timestamp| > 300s.

Render, upload, and video job deliveries use {event, job_id, kind, status, result_url, error, created_at}. The typed 2D creation events add version, mockup_id, name, and either print_areas (ready) or reason (rejected). The typed 2D render events carry mockup_id, result_url, a public {error_code, message} failure when applicable, and optional export_format / duration_ms. Event types: render.succeeded, render.failed, upload.succeeded, video.succeeded, video.failed, 2d_mockup.ready, 2d_mockup.rejected, 2d_mockup.failed, 2d_render.succeeded, 2d_render.failed, webhook.test.

Example requests

  • "List my mockup templates"
  • "Render the t-shirt mockup with this design: https://example.com/logo.png"
  • "Replace the editable headline text, then render the mockup"
  • "Cut out the background from this product photo, then render it on the tote bag"
  • "List my 2D mockups, then render the first one with this artwork: https://example.com/logo.png"
  • "Render this design asynchronously and wait for it to finish"
  • "Queue that 2D mockup render async and give me the job id to track"
  • "Animate the hoodie mockup into a 5-second video clip"
  • "Upload this PSD as a new template: https://example.com/mockup.psd"
  • "Set up a webhook at https://example.com/hooks so I get notified when renders finish"
  • "How many credits do I have left?"

Links

License

MIT