Openclip
Agent skill for OpenClip: turn long videos into captioned viral clips, transcribe, convert, and edit media from Claude, Cursor, OpenClaw, and any SKILL.md-compatible agent over MCP.
npx -y skills add Oak-Ridge-Ventures/openclip-skill --skill openclipAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Turn long videos into short, captioned viral clips from your agent via the OpenClip MCP server. Also FREE with just an account (no subscription): transcribe a video, convert/compress/trim/crop/resize/mute a video, extract thumbnails, edit an image, remove an image background. Plus generate a short UGC-style ad clip from a brief. Triggers include "clip this video", "make shorts", "repurpose this", "find viral moments", "transcribe this", "convert to mp4/gif/mp3", "compress this video", "remove the background", "make a UGC ad", "openclip".
SKILL.md
10.1 KB, as published. Nobody here has run it
OpenClip: video editing from your agent
OpenClip is a video editing MCP server. Its headline pipeline turns a long video into short, captioned, ranked clips, and around that it exposes 28 tools in five groups, identical in every client:
- Clipping pipeline:
submit_video,get_video_status,list_clips,render_clip,get_render_status,list_caption_presets,get_transcript,list_supported_providers,list_videos. - Uploads:
create_upload,complete_upload(see the gotcha below: complete_upload starts the PAID pipeline; free tools skip it). - Free media utilities (account only, NO subscription):
transcribe,edit_video,convert_media,extract_thumbnails,edit_image,remove_background,get_tool_job_status. - UGC generation:
generate_ugc,get_ugc_job_status. - Account & presets:
get_account,get_usage,list_agents,create_agent,update_agent,describe_agent_settings,create_agent_logo_upload,set_agent_logo.
Setup (once)
The remote server supports OAuth one-click as the primary path: paste the server URL
(https://openclip.app/mcp) into your client and sign in with your OpenClip account, no
token to copy.
- Add the remote server to your agent (server URL:
https://openclip.app/mcp):- Claude Desktop: Settings → Connectors → Add custom connector → paste
https://openclip.app/mcp→ Connect → sign in. - Claude Code:
claude mcp add --transport http openclip https://openclip.app/mcp, then run/mcpand authorize in the browser. - Cursor (
.cursor/mcp.json):{ "mcpServers": { "openclip": { "url": "https://openclip.app/mcp" } } }, Cursor runs OAuth.
- Claude Desktop: Settings → Connectors → Add custom connector → paste
- Manual Bearer token (alternative, for header-only / programmatic clients): generate an
MCP token at openclip.app/settings/connect ("Generate MCP token", shown once) and
connect to the
/mcp/keyendpoint with it as a Bearer header:- Claude Code:
claude mcp add --transport http openclip https://openclip.app/mcp/key --header "Authorization: Bearer <token>" - Cursor (
.cursor/mcp.json):{ "mcpServers": { "openclip": { "url": "https://openclip.app/mcp/key", "headers": { "Authorization": "Bearer <token>" } } } } - Any MCP client: POST to
https://openclip.app/mcp/keywith headerAuthorization: Bearer <token>.
- Claude Code:
- Sanity check: call
get_account. Confirmcredits_remaining > 0.
(Self-hosting/dev only: run the local stdio server with php artisan mcp:start openclip.)
The loop (processing is ASYNC, always poll)
- Submit:
submit_video(url)→ returns ajob_idwithstatus:"queued". This ALWAYS succeeds (queues the job) when authenticated, it does NOT pre-check subscription or credits. - Poll status:
get_video_status(job_id)untilstatusiscompleted(orfailed). Do NOT call list_clips before completion. Readstatusfor the real state:failed(often almost immediately after submit) usually means no active subscription - advise the user to subscribe at openclip.app.pending_creditsmeans the team is out of credits, advise the user to top up.download_failedmeans the source URL couldn't be fetched, ask the user to check the link.
- List clips:
list_clips(job_id)→ viral moments withvirality_score(0-10), title/hook, start/end (ms), andclip/rendered_clipURLs. - (Optional) Render captioned:
render_clip(moment_id, caption_preset). Async too, polllist_clipsand watch the moment'srendered_clipfor the finished URL. Preset keys:list_caption_presets.
Free media utilities (no subscription needed)
transcribe, edit_video, convert_media, extract_thumbnails, edit_image, and
remove_background are FREE: they only need an account, not a subscription or credits.
All follow the same async pattern:
- Get a file in: for a local file call
create_upload(filename, content_type), PUT the bytes to the returnedupload_url, and use the returnedidasfile/video. Do NOT callcomplete_uploadfor free tools - that starts the paid clipping pipeline; free tools read the uploaded file directly. (Videos already inlist_videoswork as inputs too.) - Call the tool. It returns a
tool_jobhashid withstatus: "queued". - Poll
get_tool_job_status(tool_job)every 5-10s:queued/processingare in-flight,completed/failedterminal. Oncompletedit returns permanent CDNoutputsURLs (e.g. json/srt/vtt for transcribe, a zip of frames for extract_thumbnails). Onfailedit returnserror.
Operation cheat sheet (full params in reference.md): edit_video does one operation
of crop, trim, rotate, resize, compress, or mute; convert_media targets mp4/webm/mov/mkv,
gif, or mp3/aac/wav/flac; edit_image does compress, resize, or crop; remove_background
returns a transparent PNG. Free usage is rate-limited per day with per-file size caps; the
error text explains how to lift a limit.
Note the transcript split: transcribe is the free tool for uploaded files;
get_transcript reads the time-coded transcript of a video that went through the paid
clipping pipeline (supports start_ms/end_ms windows at sentence or word level).
UGC generation
generate_ugc renders a short (~7-12s) vertical UGC-style clip from a creative brief
(NOT a prose prompt: structured fields like character, or a server-side brief_name
preset). Free accounts get ONE generation per day; paid accounts are metered in credits by
the seconds rendered. It returns a ugc_job hashid; poll get_ugc_job_status every
10-15s (queued/rendering in-flight, completed returns video_url + result_meta,
failed returns error). Renders are heavy: expect a couple of minutes.
Reusable presets (agents)
To make repeat workflows identical (same tracker model, caption preset, composition,
logo watermark), save a processing agent once with create_agent and pass it to
submit_video. describe_agent_settings documents every nested field and allowed value;
update_agent patches only the fields you send; create_agent_logo_upload +
set_agent_logo attach a watermark (max 2 MB). get_usage reports the credit balance
(credits are MINUTES of processing) and recent activity.
Rules & gotchas
- Always poll; never assume a submit is instantly done. Poll
get_video_statusin a loop. - Pick clips by
virality_score(higher = better) unless the user says otherwise. - Times are milliseconds.
clip.urlis a permanent CDN URL (not signed/expiring). submit_videoqueues regardless of subscription/credit state; the gate surfaces LATER inget_video_status(failed= no subscription,pending_credits= out of credits). Read the status and advise the user accordingly, do NOT expect a synchronous "subscribe" error.- Projects/folders are not supported by this API, don't promise them.
Error handling
These are MCP tools, not a REST/HTTP API. A failed tool call returns a normal tool result
with isError: true and a short plain-text message (no HTTP 401/402/403/422 status, no JSON
error envelope). Read the message text and act on it:
"Not authenticated. Reconnect your OpenClip token.", the connection isn't carrying a valid identity → reconnect. For the OAuth path, re-run the connector sign-in (e.g./mcpin Claude Code); for the manual/mcp/keypath, re-generate the MCP token on the connect page and re-add the server with the new Bearer token. (A token missing themcp:usescope/ability is rejected at the transport before any tool runs, same fix: reconnect / re-mint.)"Job not found."(get_video_status,list_clips), thejob_idis wrong, from a different account, or expired → re-check the id you passed; if it was from an earlier session, re-submit the video."Viral moment not found."(render_clip), themoment_idis wrong or belongs to another account → re-fetch moments withlist_clipsand use an id from that response."Video not yet available. Check get_video_status for progress."(list_clips), the job hasn't produced a video record yet (still queued/downloading) → keep pollingget_video_statusand only calllist_clipsoncestatusiscompleted.- Validation messages (e.g. a bad/missing
url, an unknowncaption_preset), the validation error text is returned as the tool message → fix the offending argument and retry. - Subscription / credits are NOT errors here, they appear as
get_video_statusstatusvalues (failed= no subscription → subscribe;pending_credits= out of credits → top up), not as a tool error. See "The loop" above.
Example prompts → actions
- "Clip this: <url>" →
submit_video(url), pollget_video_status, thenlist_clips. - "Give me the top 3 moments from job_…" →
list_clips, sort byvirality_score, take 3. - "Render moment m_… with the Beast captions" →
render_clip(m_…, caption_preset="beast"), poll. - "Transcribe this recording" →
create_upload, PUT bytes,transcribe(video), pollget_tool_job_status(NOcomplete_upload). - "Convert this to a gif" / "compress this video" →
create_upload, PUT bytes,convert_media(file, to="gif")/edit_video(file, operation="compress"), poll. - "Remove the background from this image" →
create_upload, PUT bytes,remove_background(file), poll, return the transparent PNG. - "Make a UGC ad for my app" →
generate_ugc(brief={...}), pollget_ugc_job_status.
See reference.md for status values, preset keys, operation params, and field shapes.