OpenClip: captions on clips
render_clip burns animated captions into a viral moment produced by the OpenClip clipping
pipeline. This is part of the PAID pipeline, it needs an active subscription and credits.
Captions here are rendered into the video, not a sidecar subtitle file. If the user wants an
SRT or VTT file instead, that is the free transcribe tool, see openclip-transcription.
Setup (once)
OpenClip is a remote MCP server at https://openclip.app/mcp. Sign in with your OpenClip
account when the OAuth prompt appears, there is no API key to copy.
- Claude Code:
claude mcp add --transport http openclip https://openclip.app/mcp, then/mcpto authorize. - Claude Desktop / web: Settings, Connectors, "Add custom connector", paste the URL, sign in.
- Cursor (
.cursor/mcp.json):{ "mcpServers": { "openclip": { "url": "https://openclip.app/mcp" } } } - Header-only clients: mint an MCP token at
openclip.app/settings/connectand connect tohttps://openclip.app/mcp/keywithAuthorization: Bearer <token>.
Sanity check: call get_account and confirm credits_remaining > 0.
The loop
- Have a moment. You need a
moment_idfromlist_clips(job_id). If the user has not run a video through the pipeline yet, start withsubmit_video, see theopenclip-clippingskill. - Pick a preset. Call
list_caption_presetsto get the current keys. Known keys:default,dan,dan-reveal,pop,mozi,kendrick,sara,lucy,tayo,beast. Always confirm with the call, keys can change. That same call also returns the full caption-style property schema and the caption position options, which is what you need for custom styling rather than a named preset. - Render.
render_clip(moment_id, caption_preset). - Poll. Rendering is async. Poll
list_clips(job_id)and watch that moment'srendered_clipfield. When it appears it holds{url, size_bytes}, the finished captioned video.get_render_statusreports on the render directly.
Choosing a preset
Presets are visual styles, not just fonts. When the user names a creator or a vibe, map it:
- Big, punchy, word-by-word pop with heavy outline -
beast. - Clean and readable, safe default for a brand account -
default. - Bouncy and playful -
pop. - Reveal-style where words appear progressively -
dan-reveal.
When the user does not care, use default and show them the other keys so they can swap.
When they want something no preset covers, pull the caption-style property schema from
list_caption_presets and build a custom style instead of forcing a near-miss preset.
Rules
- Always confirm preset keys with
list_caption_presetsbefore rendering. An unknowncaption_presetcomes back as a validation message on the tool result. - Always poll.
render_clipreturns immediately, the video is not ready yet. - A moment can be re-rendered with a different preset.
rendered_clipreflects the latest successful render. clipis the unrendered cut,clip_watermarkedis the watermarked version,rendered_clipis the captioned output. Hand the user the right one.- Times are milliseconds.
Errors
Tool failures come back as a tool result with isError: true and a plain-text message, not an
HTTP status.
"Viral moment not found."- themoment_idis wrong or belongs to another account. Re-fetch withlist_clipsand use an id from that response."Not authenticated. Reconnect your OpenClip token."- reconnect or re-mint the token.- An unknown preset key returns the validation message text. Call
list_caption_presetsand retry with a real key.
Example prompts to actions
- "Add captions to that clip" -
list_caption_presets,render_clip(moment_id, caption_preset="default"), poll. - "Make it look like MrBeast" -
render_clip(moment_id, caption_preset="beast"), poll. - "What caption styles are there?" -
list_caption_presets, show the keys. - "Caption all the top 3" -
list_clips, take the top 3 byvirality_score,render_clipeach, poll until everyrendered_clipis present. - "I want the captions at the top in my brand font" -
list_caption_presetsfor the style schema and position options, then render with a custom style.
Related
Producing the clips to caption is openclip-clipping. Standalone SRT and VTT subtitle files are
openclip-transcription. Locking a caption preset into a reusable processing agent is covered
in openclip-clipping.