Dynamic Mockups MCP server for AI agents

Live

API KEY

PRODUCT MOCKUPS

Design

Dynamic Mockups gives your agent product mockup rendering: place artwork on mockup templates one at a time or in bulk, export print files, generate AI mockups from a prompt, animate stills into video, and organize templates into catalogs and collections.

  • Per-user credentials: each call uses the actual user's API key, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Dynamic Mockups
agent · Acme Q3
Run
Render our new logo on every mockup in the Hoodies collection.
S
dynamicmockups_create_bulk_render
187ms
Mockup agent
I rendered the logo on all 12 hoodie mockups in the collection. Each image link is ready to download for the product page.
Sources: Hoodies collection, 12 renders
dynamicmockups
12 renders
18:29
Message Claude...

Tools your mockup agent reaches for on Dynamic Mockups, scoped per user.

CALL ANY TOOL
21 tools for product mockups in Dynamic Mockups: render single, batch, and bulk mockups, export print files, create AI mockups and embroidery effects, animate images into video, upload PSD templates, and manage catalogs and collections.
dynamicmockups_create_batch_render
Render create batch
Render several mockups in a single request, each with its own artwork. Returns data with total_renders, successful_renders, failed_renders and a renders list holding each render's status, export_path, export_label and mockup_uuid. Use create_batch_render for multiple different mockups. Use create_render for one image and create_bulk_render to render a whole collection with shared artwork.
Parameters
Name
Type
Required
Description
renders
array
Required
Renders to produce, one entry per mockup. Each entry needs a mockup_uuid and a smart_objects list in the same shape as create_render, and may add text_layers and an export_label. Each smart object names its uuid and an asset with a public image url (jpg, jpeg, png, webp or gif). Example: [{"mockup_uuid": "0663101b-f01c-4e85-89af-f90b4e9f983b", "export_label": "front", "smart_objects": [{"uuid": "7d1b2c9e-4f0a-4c3e-9a55-1e2f3a4b5c6d", "asset": {"url": "https://example.com/logo.png", "fit": "contain"}}]}].
image_format
string
Optional
Format of the exported image: jpg, png or webp. The API returns png when you leave it out. One of: `jpg`, `png`, `webp`.
image_size
integer
Optional
Width in pixels of the exported image, for example 720. Height scales automatically. Leave it out for the full high-resolution image.
mode
string
Optional
Whether the exported image URL opens in the browser (view) or downloads as a file (download). The API serves a download when you leave it out. One of: `view`, `download`.
dynamicmockups_create_bulk_render
Render create bulk
dynamicmockups_create_catalog
Create catalog
dynamicmockups_create_collection
Create collection
dynamicmockups_create_embroidery_effect
Create embroidery effect
dynamicmockups_create_render
Render create
dynamicmockups_delete_psd
Delete psd
dynamicmockups_export_print_files
Export print files
dynamicmockups_get_mockup
Get mockup
dynamicmockups_list_catalogs
List catalogs
dynamicmockups_list_collections
List collections
dynamicmockups_list_mockups
List mockups
dynamicmockups_mockanything_create
Create mockanything
dynamicmockups_mockanything_get_product
Mockanything get product
dynamicmockups_mockanything_get_status
Mockanything get status
dynamicmockups_mockanything_list_styles
Mockanything list styles
dynamicmockups_mockanything_search_products
Mockanything search products
dynamicmockups_motionmockups_get_status
Motionmockups get status
dynamicmockups_motionmockups_list_models
Motionmockups list models
dynamicmockups_motionmockups_submit
Submit motionmockups
dynamicmockups_upload_psd
Upload psd
Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Dynamic Mockups tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["dynamicmockups"], toolNames: [
    "dynamicmockups_list_mockups",
    "dynamicmockups_create_render",
    "dynamicmockups_export_print_files"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Render our new logo on the White Tee Front mockup and export print files" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["dynamicmockups"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Render our new logo on the White Tee Front mockup and export print files" }],
  tools,
});

// Execute the tool call with the user's vaulted Dynamic Mockups API key
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["dynamicmockups"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Render our new logo on the White Tee Front mockup and export print files" }],
  tools,
});

// Tool call runs with the user's vaulted Dynamic Mockups API key
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["dynamicmockups"] }, pageSize: 100,
});

const agent = new Agent({
  name: "mockup_agent",
  model: "gemini-2.5-pro",
  instruction: "Dynamic Mockups tools scoped to this user",
  tools,
});

await agent.run("Render our new logo on the White Tee Front mockup and export print files");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Dynamic Mockups tool. Click to copy, paste into your agent, done.
Renders
Copy the prompt
Copied
Render this artwork URL on the White Tee Front mockup.
Copy the prompt
Copied
Render our logo on every mockup in the Hoodies collection.
Copy the prompt
Copied
Export print files for the Mug 11oz mockup with this artwork.
AI mockups and video
Copy the prompt
Copied
Create an AI mockup of a canvas tote bag in a minimalist studio style.
Copy the prompt
Copied
Animate this product mockup into a short video.
Copy the prompt
Copied
Turn our logo into an embroidery-style image.
Templates
Copy the prompt
Copied
List the mockup templates in My Templates.
Copy the prompt
Copied
Create a collection called Holiday 2026.
Copy the prompt
Copied
Upload this PSD from a public URL as a new mockup template.
SEE HOW AUTH WORKS
Each user connects their own Dynamic Mockups API key once, and Scalekit sends it with every call. API keys stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Dynamic Mockups
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Dynamic Mockups
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Dynamic Mockups
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Dynamic Mockups
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other design and media connectors.
GTM and RevOps Teams
Competitive intelligence briefing agent
Scans Gong calls for competitor mentions, matches each one to its Notion battlecard, and DMs every affected rep a single Slack digest per cycle. Every call runs as the PMM who owns the briefing, never a shared bot.
Test other agents
See the same per-user auth pattern across other design and media connectors.
GTM
Competitive intelligence briefing agent
Scan Gong calls for competitor mentions, match each one to its Notion battlecard, and DM every affected rep a single Slack digest.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Dynamic Mockups API key looks fine in a demo. In production every render and template change looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared key
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Dynamic Mockups today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Dynamic Mockups as the user or through a shared API key?
As the user. Each user connects their own Dynamic Mockups API key once, and Scalekit sends it with every call. Audit logs attribute every render and template change to that user, not a shared service account.
Where is the Dynamic Mockups API key stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. To rotate it, the user reconnects with a new API key. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Dynamic Mockups?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the render and list tools without dynamicmockups_delete_psd, which can also delete every mockup created from the PSD. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Dynamic Mockups access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Can the agent render many mockups in one call?
Yes. dynamicmockups_create_batch_render renders several mockups in one request, each with its own artwork, and dynamicmockups_create_bulk_render renders every mockup in a collection with shared artwork.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""dynamicmockups"": {
""url"": ""https://mcp.scalekit.com/dynamicmockups"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.dynamicmockups]
url = ""https://mcp.scalekit.com/dynamicmockups""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""dynamicmockups"": {
""url"": ""https://mcp.scalekit.com/dynamicmockups"",
""type"": ""http""
}
}
}