Install any skill in seconds. Free to start, no credit card required.
Get Started Free →MCP server for AI agents to create video ads via Streamable HTTP. Primary auth is OAuth 2.1 + Dynamic Client Registration (the modern Claude Desktop / Claude.ai / ChatGPT / Cursor "Connect" flow); long-lived API keys remain supported for headless clients.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 70% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 74% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 90% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 106% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 82% | 0% |
Prizmad exposes a remote Model Context Protocol (MCP) server. Any MCP-compatible host (Claude Desktop, Claude.ai web, ChatGPT, Cursor, Continue, Zed, Claude Code CLI, n8n, custom SDKs) connects and drives the full UGC video studio programmatically.
https://prizmad.com/api/mcpstreamable-httpModern MCP clients click Add custom connector → enter the MCP URL and the OAuth flow runs automatically:
https://prizmad.com/api/mcp → 401 with WWW-Authenticate: Bearer resource_metadata="…"./.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server.POST /oauth/register (RFC 7591 Dynamic Client Registration) — no manual app pre-registration needed.https://prizmad.com/oauth/authorize → user signs in (NextAuth) → consent screen → redirect back with code.code for an RS256 JWT (audience https://prizmad.com/api/mcp).https://prizmad.com/api/mcp with Authorization: Bearer <jwt>. Refresh tokens rotate; PKCE S256 mandatory.Compatible clients: Claude Desktop, Claude.ai, ChatGPT, Cursor, Zed, Claude Code CLI. Same-origin design (authorize/token/register all live on prizmad.com) sidesteps the Claude.ai web bug that ignores cross-origin authorization endpoints.
json{ "mcpServers": { "prizmad": { "transport": "streamable-http", "url": "https://prizmad.com/api/mcp" } } }
The Connect flow handles the Bearer token automatically. To pre-fill an existing API key instead, add "headers": { "Authorization": "Bearer przmad_sk_live_..." }.
json{ "mcpServers": { "prizmad": { "command": "npx", "args": ["-y", "@prizmad/mcp-server"], "env": { "PRIZMAD_API_KEY": "przmad_sk_live_..." } } } }
Or via the generic bridge: ["mcp-remote", "https://prizmad.com/api/mcp"].
| Path | When | Token shape | |---|---|---| | OAuth 2.1 Authorization Code + PKCE + DCR | Interactive clients (Claude Desktop, etc.) | RS256 JWT (1 h), refresh rotated (30 d) | | OAuth 2.0 client_credentials | Headless / server-to-server | HS256 JWT (1 h) | | API key (Bearer) | Quickest for dev, scripts, internal tools | przmad_sk_live_... |
All three resolve to the same per-user identity. Discovery: /.well-known/oauth-authorization-server, /.well-known/oauth-protected-resource, /.well-known/jwks.json.
| Tool | Auth | Purpose | |------|:----:|---------| | list_templates | No | Full template catalog with features and token costs | | list_avatars | No | Built-in avatar presets with recommended voices | | recommend_template | No | Pick top-3 templates from intent + constraints (voice / avatar / duration / budget). Use this before create_video instead of guessing from the catalog. | | list_my_videos | Yes | Recent projects with projectUrl / shareUrl / downloadUrl | | upload_image | Yes | Upload an image (URL or base64) → returns prizmad.com-hosted URL for use as productImages / avatar | | create_video | Yes | Start a render. Returns videoId. | | get_video_status | Yes | Snapshot status by default; with wait: true it blocks server-side and streams notifications/progress until terminal (up to 10 min) — preferred over polling. | | get_download_url | Yes | Authenticated download URL on prizmad.com for a completed video | | create_video_batch | Yes | Launch up to 20 renders in parallel; pre-checks total token cost |
list_templates and list_avatars are deliberately public so an agent can browse before authenticating.
create_video (and per-item in create_video_batch)All optional; omit any field for a randomised pick at render time.
captionStyle — on-video subtitles| Value | Look | |-------|------| | classic | TikTok yellow highlight, white sans-serif (default fallback) | | bold-impact | MrBeast / Hormozi — uppercase Anton with heavy black stroke and green highlight | | karaoke | Active word colour-sweeps left-to-right as it's spoken | | pop | Active word springs up in scale, inactive words dim | | bounce | Active word hops up with a low-damping spring (Fredoka) | | neon | Pink/cyan glowing halo (Audiowide) | | typewriter | Characters reveal one-by-one with a blinking caret (JetBrains Mono) | | glow | Soft white halo, gentle scale on the active word (Montserrat) |
musicStyle — background musicenergetic, friendly, professional, luxury, funny, cinematic, lo-fi, hip-hop, acoustic.
ctaStyle — end-card| Value | Look | |-------|------| | classic | Solid dark backdrop, centered title + price, green "LINK BELOW" pill | | blurred-photo | First creative blurred behind minimal cream title + price + circled down-arrow | | dark-solid | Same minimal layout on a solid warm-dark backdrop |
imageStyle — lighting/palette preset for AI creatives (10 options)warm-golden, bright-neutral, cool-diffused, window-light, earthy-ambient, studio-clean, moody-dramatic, pastel-soft, nordic-minimal, sunset-warm.
imagePromptHint, videoPromptHint, musicPromptHint — each ≤ 400 chars, layered on top of style presets.
get_video_status returns three URLs once rendering is complete — they map cleanly:
| Field | Goes to | |---|---| | projectUrl | https://prizmad.com/projects/<id> — owner-only dashboard with player, remix, edit, asset library. Primary link when handing the result back to the signed-in user. | | shareUrl | https://prizmad.com/share/<token> — public share page, useful only when forwarding the video to someone outside the account. | | downloadUrl | https://prizmad.com/api/v1/videos/<id>/download — authenticated mp4 stream proxied via prizmad.com. |
The raw Vercel Blob URL is never surfaced to the agent.
textrecommend_template ─► create_video ─► get_video_status (wait: true) ─► projectUrl + downloadUrl
recommend_template({ intent, hasVoiceover, hasAvatar, targetDurationSec, maxTokens }) — pick a template.upload_image if the agent wants to attach product photos that aren't yet on the web.create_video with templateId + productUrl (scraped) or explicit productTitle / productDescription / productImages + any customisation. Returns videoId.get_video_status({ videoId, wait: true }) — blocks server-side, streams progress, returns the final payload when ready (3–8 minutes typical, capped at 10 min).projectUrl to the user.For bulk campaigns use create_video_batch (1–20 per request).
/api/v1/videos returns 403 with a clear upgrade message otherwise).create_video debits the caller's Prizmad token balance.Other measured skills in the registry, with their headline benchmark lift.