MCP App Store
by KeenEthics

Overview

OpusClip turns long videos into ready-to-post short clips, right inside Claude. Submit a video file or YouTube URL for AI clipping, then read the resulting clips and transcripts, refine edits (reframe, auto-captions, censor sensitive moments), and organize clips into collections. Generate platform-ready social copy and schedule or publish clips to your connected social accounts - all from chat. It works on the footage you provide and supports complete workflows, from raw upload to a published short.

Tools

opusclip_add_clip_to_collection

ChatGPT
Adds a clip (projectId + clipId) to a collection. Calling twice for the same clip+collection returns an error per the underlying service.

opusclip_analyze_reference_media

ChatGPT
Analyze reference video or audio using your prompt. This is a paid call with normal OpusClip account billing: it holds 15 credits while running and charges only the actual cost; no estimate or price confirmation step is required. Returns understanding text, a durable jobId and actual chargedCredits once billing settles. For video ask about both picture and sound; verify approximate timings locally. Supply exactly one completed opusclip_create_upload_link uploadId (MP4 video) or remote-readable HTTPS mediaUrl (small video/audio; upstream HTTP limit 15 MiB). Measure duration locally and trim sources longer than 300 seconds before uploading. Local paths and arbitrary storage URIs cannot be read. Use opusclip_get_reference_analysis to read the original result and billing status; retrieval does not run inference or change billing. Does not edit or export video.

opusclip_analyze_video

ChatGPT
Runs visual analysis over a time range of the source video and returns, per keyframe, what the frame contains: face and people boxes, screen regions, panel and document layout, whether the speaker is active, and any tracked subjects. Positions are center-percentage boxes, not pixels. This does NOT reframe or change the clip and does NOT return a crop -- the crop is chosen downstream from this evidence plus the render preference. Analysis is asynchronous and has two modes. START: pass projectId, clipId, startMs and endMs (all four) to begin one; it returns a task_id. POLL: pass taskId ALONE -- set to that task_id value -- and nothing else, repeatedly, until status is 'completed'. Status is one of 'running', 'completed', 'failed' or 'unknown'. Then read segments. Segments are absent while pending; that is not an empty result.

opusclip_create_censor_job

ChatGPT
Runs OpusClip's profanity censor on a clip's caption track, replacing matched words with asterisks (and optionally a beep). Triggers a re-render so the new captions appear in the rendered clip. Returns render_pending: true -- the re-render is queued asynchronously, so the new render does NOT exist yet at this point. Do NOT read preview_url or call export_clip immediately; poll list_clips (or describe) for the clip and wait for render_pending to become false before watching, downloading, or sharing the artifact, otherwise you will fetch the OLD render.

opusclip_create_collection

ChatGPT
Creates a new empty clip collection in the calling organization. Use add_clip_to_collection to populate it.

opusclip_create_music_job

ChatGPT
Generate a music track as downloadable audio. This is a paid call with a fixed price, and maxCredits is required. Always quote first with maxCredits: 0, which returns status "needs_approval" with estimatedCredits; nothing is created, held or charged. Show the user the cost and wait for their approval, then call again with the same idempotencyKey and maxCredits equal to the approved estimatedCredits. Never choose maxCredits yourself; a total the user approved for several listed generations covers each one's quote. Credits are held before work starts, charged on success and released on a definite failure. Describe genre, instruments, tempo (BPM), structure and mood in prompt; include lyrics with [Verse] and [Chorus] markers, or say "instrumental only". Never name real artists or use copyrighted lyrics. The call waits up to 20 seconds and returns the job; then call opusclip_get_media_generation_job with waitSeconds: 20 until it reaches a final status. Output URLs are signed for 24 hours and re-signed on every read. If a response is lost, repeat the identical call with the same idempotencyKey; it never charges twice.

opusclip_create_post_task

ChatGPT
Publishes a clip to a connected social account now. WARNING: posts publicly to the user's social account; the client should confirm with the user first. Use schedule_publish for a future-dated post.

opusclip_create_social_copy_job

ChatGPT
Kicks off an AI copy-generation job for a clip + social account. Poll opusclip_get_social_copy_job with the returned job_id until status settles, then use the copy in create_post_task or schedule_publish.

opusclip_create_speech_job

ChatGPT
Generate a speech voiceover from text as downloadable audio. This is a paid call with a fixed price, and maxCredits is required. Always quote first with maxCredits: 0, which returns status "needs_approval" with estimatedCredits; nothing is created, held or charged. Show the user the cost and wait for their approval, then call again with the same idempotencyKey and maxCredits equal to the approved estimatedCredits. Never choose maxCredits yourself; a total the user approved for several listed generations covers each one's quote. Credits are held before work starts, charged on success and released on a definite failure. Supply text of at most 6000 weighted characters, where each CJK character counts 3; narration is generated in one call so the voice stays consistent, so shorten longer text. Supply voice, one of the prebuilt voices. Optional style (for example "warm, unhurried"). Inline tags such as <laugh>, <sigh> and <short pause> are supported; the language is detected from the text. The call waits up to 20 seconds and returns the job; then call opusclip_get_media_generation_job with waitSeconds: 20 until it reaches a final status. Output URLs are signed for 24 hours and re-signed on every read. If a response is lost, repeat the identical call with the same idempotencyKey; it never charges twice.

opusclip_create_thumbnail_job

ChatGPT
EXPERIMENTAL. Submits a thumbnail-generation job for a source video. Asynchronous: returns a job_id; poll opusclip_get_thumbnail_job with that id until status='CONCLUDED' to get the thumbnail URLs. Costs 7 credits/call, Pro/Enterprise only. 403 = no Pro/Enterprise or thumbnail not apiExposed for the account; 429 = daily cap or rate limit; 503 = endpoint disabled (kill switch).

opusclip_create_video_job

ChatGPT
Generate a new short video clip from a prompt, optionally starting from an image, as an MP4. This is a paid call with a fixed price, and maxCredits is required. Always quote first with maxCredits: 0, which returns status "needs_approval" with estimatedCredits; nothing is created, held or charged. Show the user the cost and wait for their approval, then call again with the same idempotencyKey and maxCredits equal to the approved estimatedCredits. Never choose maxCredits yourself; a total the user approved for several listed generations covers each one's quote. Credits are held before work starts, charged on success and released on a definite failure. Describe the shot in prompt, and choose model and durationSeconds. hailuo-3 makes 5-15 second clips at 768p (default) or 2k and can start from firstFrameUrl and end on lastFrameUrl. seedance-2.5 makes 4-30 second clips at 480p or 720p (default), with a native audio track when generateAudio is true. Set aspectRatio only without firstFrameUrl; a first frame sets the shape. The price is per second and depends on the resolution. A video takes several minutes. The model provider may refuse a prompt or first frame under its content policy; the job then fails with errorCode content_policy and nothing is charged. The call waits up to 20 seconds and returns the job; then call opusclip_get_media_generation_job with waitSeconds: 20 until it reaches a final status. Output URLs are signed for 24 hours and re-signed on every read. If a response is lost, repeat the identical call with the same idempotencyKey; it never charges twice.

opusclip_describe_clip

ChatGPT
Returns a single clip's detail: transcript, keywords, layout/aspect, score, preview URL, and render_pending -- whether a re-render is still in flight. Poll render_pending after any edit or censor job to know when the new render is ready. Preview-only by design; for the HD file use export_clip.

opusclip_duplicate_clip

ChatGPT
Duplicates a clip within its project, creating an independent copy titled "<title> (Copy)" that can be edited or exported without touching the original. Returns the new clip in the same shape as list_clips. NOT idempotent -- each call creates another copy.

opusclip_edit_clip

ChatGPT
Edits a clip with one or more semantic ops in a single call (executed in order, ONE preview re-render at the end), saves the result onto the clip, and supports undo. Ops: 'set_captions' / 'set_emoji' / 'set_keyword_highlight' (pass enabled true|false), 'remove_filler_words' (hard-cuts um/uh/like), 'remove_pauses' (hard-cuts silences at or above minPauseSec, default 0.5s), 'trim_section' / 'split_section' / 'drop_section' / 'reorder_sections' (structural edits: a section is one cut of the clip, addressed by its 0-based sectionIndex -- every timeline op result echoes the resulting sections as index/start_sec/end_sec, so the next op can be addressed without re-reading anything), 'delete_phrase' (cuts a spoken phrase out of BOTH the video and the captions, not just the on-screen text -- give phrase as the words to remove, matched against this clip's own transcript ignoring case/punctuation/whitespace; if it appears more than once, pass occurrence to pick one (1-based) or "all"), 'replace_phrase' (fixes the caption TEXT -- a typo, a misheard word -- without touching the video or its timing: give phrase as the wording on screen now and replacement as the wording you want, with the same number of words; same matching and occurrence rules as delete_phrase), 'set_style' (caption appearance -- pass any of captionColor (the caption text colour), highlightColor (the keyword-highlight colour, the OpusClip default being the bright green #04f827), captionPosition, uppercase; several in one set_style is one change. NOTE these are style settings, NOT script edits -- they are the only way to change caption colour, which is not present in the editing script at all), 'add_text_overlay' / 'set_text_overlay' / 'remove_text_overlay' (a title card, lower third or outro text laid OVER the video -- the clip keeps its length. It renders as the same card the auto-hook uses: bold black text on a white rounded box. add takes text, atClipSec (where it starts), durationSec (default 5, clamped to the clip end) and position top|middle|bottom (default top); set and remove address an existing one by overlayIndex, 0-based in time order, and every result lists the overlays so the next op can be addressed without re-reading; set takes any of text / position), 'remove_emoji' / 'move_emoji' (one emoji at a time, picked by atClipSec -- the moment it is on screen; move_emoji also takes position top|middle|bottom. Unlike set_emoji, which switches the whole emoji layer on or off, these leave every other emoji alone; if nothing is showing at that moment the call errors and lists when emoji do appear), 'dub' (translates the clip's speech into another language as a NEW clip -- the original clip is untouched and does not re-render. Must be the ONLY op in the array: it starts an async job, not a script edit, and undo does not apply to it (there is a new clip, not a change on this one to revert). Three modes: 1. call with targetLang only to get the credit cost (10 credits per minute of clip) and a one-time quoteToken valid for 10 minutes; 2. call again with targetLang, confirm:true and that quoteToken to start the job, which returns job_id and new_clip_id; 3. poll by calling with jobId:"<job_id>" until status is completed. Do NOT poll describe_clip for dub progress -- the new clip copies the SOURCE clip's render state, so it looks ready while the dubbed audio is still being generated. For dubbing the WHOLE project at submit time, use submit_project's dubbingLanguage instead), and 'undo' (alone in the array: reverts the previous edit_clip call -- available for 72 hours; calling undo twice redoes. Undo is refused if the clip changed after that edit, e.g. a web editor save, so newer work is never discarded). Batch related edits into ONE call ("remove fillers and turn captions off" = two ops, one render). Removal ops shorten the clip; video, captions, and audio stay in sync. The edit is persisted immediately, and every result carries editor_deep_link -- opening it shows the edited clip right away, because the web editor rebuilds its preview from the saved script instead of w…

opusclip_export_clip

ChatGPT
The explicit export step for ONE clip: returns a download URL for the chosen target, starting the render on demand when that target has no artifact yet (clips are preview-only until exported). target: 'hd' (default, the HD .mp4), '4k' (a 4K .mp4 -- needs a paid plan and a 4K source), or 'xml' (an Adobe Premiere project file -- needs an entitled plan). status 'ready' means export_url is the fresh artifact -- download it; 'rendering' means a render is in flight, already running or just started by this call -- wait a few seconds and call again to poll until 'ready' (calling again never starts a second render); 'unavailable' means the artifact cannot be produced (the org is not entitled to this target, or the source cannot make it) -- a final answer, do not poll. For many clips at once, use export_collection.

opusclip_export_collection

ChatGPT
Exports every clip in a collection, starting missing HD renders on demand. Each clip has status ready, rendering, or failed. Download export_url only when ready; wait a few seconds and call export_collection again while any clip is rendering. Failed clips include an actionable message. list_clips/describe_clip expose preview_url only; HD URLs come from this tool or export_clip (single clip).

opusclip_get_media_generation_job

ChatGPT
Read a speech, music or video generation job in this organization, with its status, credits and download URLs (signed for 24 hours, re-signed on every read). Read-only: it never starts work or changes billing. waitSeconds (0-20) waits for the job to finish before returning. chargedCredits is null until billing settles. On errorCode: credit_admission_rejected - the organization does not have enough credits; tell the user, and use a new idempotencyKey for any later retry. content_policy - the model provider refused the request under its content policy and nothing was charged; tell the user, and do not resubmit the same request. invalid_request - fix the inputs and use a new key. provider_unavailable, dispatch_failed or output_storage_failed - nothing was charged; retry later with a new key. submission_unknown, credit_reservation_pending or admission_incomplete - credits may be held for review; do not resubmit, and give the user the jobId.

opusclip_get_reference_analysis

ChatGPT
Retrieve an organization-scoped understanding result and actual chargedCredits. Read-only retrieval never runs inference or changes billing. If the original call is queued or running, wait retryAfterSeconds before reading again. chargedCredits is null until settlement confirms the native charge, not zero. Terminal pending or uncertain billing requires operator review of this original jobId. Do not submit a new paid request to recover it.

opusclip_get_social_copy_job

ChatGPT
Returns the current status (and generated copy, if any) for a previously created social-copy job. Use to poll until the job concludes.

opusclip_get_thumbnail_job

ChatGPT
Polls a thumbnail-generation job created by opusclip_create_thumbnail_job. Returns the status (QUEUED / PROCESSING / CONCLUDED) and, once CONCLUDED, the generated thumbnail URLs.

opusclip_get_transcript

ChatGPT
Returns the source-video transcript for a clip project: paragraph-level text with per-word timing (ms). Use for transcript review, search, or as input to other tools. NOT the same as per-clip captions: this is the source video, not any one clip, and editing it here is not possible. The paragraphs field is omitted when the project has no transcript yet (still processing or transcription failed). For range-limited API callers, paragraphs are filtered to the billed range.

opusclip_get_usage

ChatGPT
Returns the calling organization's credit balance and API cap usage, so the agent can check BEFORE submitting work. credits.remaining_minutes is the processing balance -- what submit_project is checked against and the number to report as the user's remaining credits. Separately, the API cap: monthly { used, limit, remaining, reset_at } (credits; ~1 credit per minute of source video) and concurrent { used, limit } (in-flight API projects), the same numbers the X-RateLimit-* response headers carry -- an allowance, NOT the balance. When the workspace is exempt from caps (Enterprise OpenApi pack or caps disabled) it returns uncapped: true with no monthly/concurrent numbers; credits is still returned.

opusclip_list_brand_templates

ChatGPT
Lists the brand templates owned by the calling OpusClip organization. Used to populate template pickers before creating new clip projects.

opusclip_list_clips

ChatGPT
Lists a project's clips with rank, score, title, description, hashtags, duration, and preview/thumbnail URLs. Judge sub-scores (hook/coherence/connection/trend) are included when the clip has been scored. When feedback is available, each clip also carries favorited: true when the user hearted (favorited) it in the OpusClip web app -- the clips the user picked by hand. If the feedback read fails, favorited is omitted; requesting a favorited filter then returns an error. preview_url is the watchable artifact; HD download URLs are not listed here -- use export_clip (one clip) or export_collection (many). The response also carries the project's stage: an empty list with a stage still in progress means the clips are not ready yet, so poll this tool again rather than concluding the project produced nothing. For a collection's clips, use list_clips_in_collection.

opusclip_list_clips_in_collection

ChatGPT
Lists the clips in a collection with rank, score, title, description, hashtags, duration, and preview/thumbnail URLs -- same shape as list_clips (preview_url to watch; HD downloads via export_clip or export_collection). Use list_collections to find a collection ID.

opusclip_list_collections

ChatGPT
Lists the calling organization's clip collections (curated groupings of clips across projects).

opusclip_list_pinterest_boards

ChatGPT
Lists the boards a connected Pinterest account can pin to. Pass the account's postAccountId (a platform PINTEREST row from opusclip_list_social_accounts); any other platform is rejected. Pinterest requires a board on every pin, so pass the chosen board_id as boardId to create_post_task or schedule_publish.

opusclip_list_projects

ChatGPT
Lists the calling organization's clip projects in reverse-chronological order. Use this to find a project ID for follow-up tools like list_clips.

opusclip_list_scheduled_posts

ChatGPT
Lists social posts for the calling organization and returns the schedule_id that opusclip_unschedule_publish requires. Two query modes -- pass projectId to list every post for one project, or pass startAt/endAt (ISO 8601 UTC) to list posts in a date window without needing a projectId first. Pass one mode or the other; with neither, the call is rejected. Note that schedule_id is null for immediate posts that were never scheduled -- those cannot be unscheduled -- and that it is NOT the same identifier as the post_task_id returned by create_post_task, which will not work against unschedule_publish. Each post also carries post_url (the platform permalink) once the platform confirms the post, and failure_reason when status is failed. Both keys are simply absent, not null, until then: post_url is always absent while status is scheduled, and for a status of posted with post_url still absent the only known cause is TikTok Business lagging its publish webhook -- treat that as "posted, link pending", not a failure.

opusclip_list_social_accounts

ChatGPT
Lists the social accounts (TikTok, YouTube, Instagram, etc.) the calling org has connected for posting. Use to find a postAccountId before generate-copy / post / schedule.

opusclip_preview_clips

ChatGPT
Renders a visual, in-chat preview of a project's clips (playable videos with rank, score, duration, and hashtags) on hosts that support MCP Apps, and returns the same clip data as JSON. Shows the top-ranked clips (6 by default) as a card grid so a large project does not flood the chat; pass limit to show more or fewer (e.g. limit 3 for the top three, or the project total to show all), or clipId to spotlight a single clip as one card. Use after clip generation finishes, or to spotlight one clip, so the user can review results without leaving the conversation.

opusclip_schedule_publish

ChatGPT
Schedules a clip to publish at a specific time. publishAt is ISO 8601 UTC, e.g. '2026-03-25T14:00:00Z'. Returns the schedule ID; cancel with opusclip_unschedule_publish.

opusclip_share_project

ChatGPT
Marks a clip project as publicly visible so its clips can be shared via the OpusClip share URL. Idempotent. WARNING: Exposes the ENTIRE project — every clip in it — to anyone with the link; the client should confirm with the user before invoking. SCOPE: project-level only. If the user asked to share a collection or a subset of clips, do NOT call this — there is no collection-scoped share today. Use opusclip_export_collection (per-clip download URLs) for collection-scoped intent, or stop and ask the user to confirm they want to publicly expose the entire source project.

opusclip_submit_project

ChatGPT
Submits a long-form video URL to OpusClip. Four submit modes, chosen by which params are set: (1) AI clipping (default, no skip flags) -- cuts the source into short, curated, ranked clips. (2) no-clip / full-video reframe -- set skipSlicing:true to keep the FULL video as ONE output (reframe + captions, no cutting into clips); use this for asks like "don't cut it into clips", "reframe the whole video", or "convert horizontal to vertical without clipping" (see skipSlicing). (3) no-curation passthrough -- set skipCurate:true to skip curation entirely; this also returns ONE full-length output rather than multiple clips, and it is NOT ranked or scored, so do not choose it when the user wants several clips (see skipCurate). (4) dubbing quick start -- set dubbingLanguage to dub the full video's voice into another language; also a full-video, no-clip submission (see dubbingLanguage). Returns a project ID the agent can poll via list_clips until processing finishes. Mirrors the CLI's submit command. Charges against the org's API/MCP quota.

opusclip_unschedule_publish

ChatGPT
Cancels a previously-scheduled social post by schedule ID.

opusclip_whoami

ChatGPT
Returns the session's current OpusClip org (the one the user picked on the consent screen at connect time, or the default), the user's org count, and API-access status. The org context is fixed for the life of the connection: to act on a different organization, the user must disconnect and reconnect the OpusClip connector, then pick that organization on the consent screen. MCP-only: the CLI authenticates with a single-org API key.

opusclip_add_clip_to_collection

Claude

opusclip_apply_editing_script

Claude

opusclip_create_censor_job

Claude

opusclip_create_collection

Claude

opusclip_create_post_task

Claude

opusclip_create_social_copy_job

Claude

opusclip_describe_clip

Claude

opusclip_duplicate_clip

Claude

opusclip_edit_clip

Claude

opusclip_export_clip

Claude

opusclip_export_collection

Claude

opusclip_get_editing_script

Claude

opusclip_get_social_copy_job

Claude

opusclip_get_transcript

Claude

opusclip_get_usage

Claude

opusclip_list_brand_templates

Claude

opusclip_list_clips

Claude

opusclip_list_clips_in_collection

Claude

opusclip_list_collections

Claude

opusclip_list_projects

Claude

opusclip_list_scheduled_posts

Claude

opusclip_list_social_accounts

Claude

opusclip_schedule_publish

Claude

opusclip_share_project

Claude

opusclip_submit_project

Claude

opusclip_unschedule_publish

Claude

opusclip_whoami

Claude

Similar Apps