ultramock-mcp
ultramock-mcp
An MCP server that lets an AI agent (Claude Code, Claude Desktop, etc.) create and configure ultramock.io product mockups using your own logged-in subscription.
Ultramock currently renders the final image/video in the browser with WebGL, canvas and video encoder APIs. The public app does not expose a server-side "render and download" endpoint. This MCP covers the operations that can be done headlessly through Ultramock's HTTP APIs: projects, templates, full project payload/config editing, source asset uploads, and authenticated source asset downloads.
Use get_capabilities from an agent to see the current boundary in machine-readable
form. A final rendered image/video export still requires either Ultramock to add a
server render API or a headless browser automation layer.
Tools
Tool | What it does |
| Report which operations work without a browser and why final rendered export does not. |
| Fetch the authenticated editor status/account payload exposed by Ultramock. |
| List your projects (id, name, version, editor URL). |
| Full config of one project: dial values, full payload, asset keys/URLs, editor URL. |
| New project, optionally seeded from a template. |
| Copy a project including its config and screen image. |
| Rename a project. |
| Delete a project (permanent). |
| System + your templates (use with create/apply). |
| Apply a template's device/angle/lighting to a project. |
| Merge dial values (camera, scene, effects, device, border) into a project. |
| Deep-merge arbitrary JSON into the full project payload, including viewport/timeline/editor settings. |
| Upload a local PNG/JPG/WebP as the on-device screen content. |
| Upload a local PNG/JPG/WebP and assign it to a specific timeline scene. |
| Upload a local PNG/JPG/WebP as the project background image. |
| Download source assets (screen image, background, scene screenshot) to a local file. |
| The URL to open only when you need visual preview or final rendered export. |
Dial keys used by update_config
Pass a dials object of key -> value. Only the keys you pass change.
camera:
Viewport.camera.tiltX,.tiltY,.roll,.fov,.zoom,.panX,.panY,.flap,.flapXscene:
Viewport.scene.bgMode,.darkMode,.bgColor(hex),.bgImage,.bgBlur,.transparentBg,.envId,.lightHeight,.lightPos,.lift,Viewport.devices.mockupModeldevice:
Viewport.devices.mockupBgMode,.mockupBg,.mockupBgImage,.mockupPadding,.iphoneFinish,.statusBar,.hdrYaw,.contactShadow,.iblIntensity,.keyLight,.keyLightHeight,.keyLightRotationborder:
Viewport.border.borderRadius,.borderStyle,.glassWidtheffects:
Viewport.effects.depth,.sharpen,.vignette,.grain,.pixelGrid,.caStrength,.bloom,.bloomStrength,.bloomThreshold,.bloomRadius,.lighting,.lightingAngle,.lightingIntensity,.lightingSoftness,.reflection,.strengthblur:
Viewport.blur.mode,.strength,.falloff,.bokeh,.focusX,.focusY,.focusSize,.angle,.position
Use update_payload for settings stored outside payload.dialValues, such as
editorSettings, viewport, timeline.scenes, text/logo scene data and export
metadata. Object patches are merged recursively; arrays and scalar values are
replaced.
Setup
npm install
npm run buildGet your session token
Auth uses your ultramock login cookie (no separate API key exists).
Open https://www.ultramock.io and sign in.
DevTools → Application → Cookies →
https://www.ultramock.io.Copy the value of
__Secure-authjs.session-token(a UUID).
That value is ULTRAMOCK_SESSION_TOKEN. It rotates when you sign out / the session
expires (~30 days); refresh it if calls start returning auth errors.
Register with Claude Code
claude mcp add ultramock \
--env ULTRAMOCK_SESSION_TOKEN=<your-token> \
-- node /path/to/ultramock-mcp/dist/index.jsOr add it to your MCP config (~/.claude.json / Claude Desktop
claude_desktop_config.json):
{
"mcpServers": {
"ultramock": {
"command": "node",
"args": ["/path/to/ultramock-mcp/dist/index.js"],
"env": { "ULTRAMOCK_SESSION_TOKEN": "your-token-here" }
}
}
}Optional env: ULTRAMOCK_BASE_URL (defaults to https://www.ultramock.io).
Typical agent flow
get_capabilities-> confirm what can be done without a browser.list_templates-> pick a look (e.g. "Realistic iPhone").create_projectwithfromTemplateId-> get a project id.set_screenshot,set_scene_screenshotorset_background_image-> upload source assets.update_configorupdate_payload-> tweak camera, background, effects, viewport or timeline data.download_asset-> retrieve source assets again if needed.get_editor_url-> only for visual preview or final rendered image/video export.
Notes
Writes use Ultramock's lease + optimistic-version model; this server acquires and releases the edit lease for you on each write. If another session holds the lease (e.g. the project is open in a browser tab), the server takes it over and that tab drops to read-only.
download_assetdownloads the source images stored on the project. It does not render the composed mockup.Image upload tools accept PNG, JPG/JPEG and WebP files up to Ultramock's 1 MB upload limit.
I verified the current app behavior against Ultramock's public client bundle:
/api/captureand/api/video-authorizeauthorize exports, while the final image/video bytes are generated in the browser and downloaded from a local blob URL.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sebastiankehle/ultramock-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server