OpusClip MCP
Vendor MCP30 toolsOAuth 2.1/DCRMediaAIMarketingConnect to OpusClip's MCP server to turn long-form video into short, ready-to-post social clips directly from your AI workflows.
OpusClip MCP connector
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/nodeTerminal window pip install scalekit -
Set your credentials
Section titled “Set your credentials”Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret> -
Authorize and make your first call
Section titled “Authorize and make your first call”quickstart.ts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENV_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'opusclipmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize OpusClip MCP:', link)process.stdout.write('Press Enter after authorizing...')await new Promise(r => process.stdin.once('data', r))// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'opusclipmcp_opusclip_whoami',toolInput: {},})console.log(result)quickstart.py import osfrom scalekit.client import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENV_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "opusclipmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize OpusClip MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="opusclipmcp_opusclip_whoami",connection_name=connection_name,identifier=identifier,)print(result)
What you can do
Section titled “What you can do”Connect this agent connector to let your agent:
- Whoami opusclip — 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
- Publish opusclip unschedule, opusclip schedule — Requests cancelling a previously-scheduled social post by schedule ID
- Project opusclip submit, opusclip share — Submits a long-form video URL to OpusClip
- Clips opusclip preview — 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
- List opusclip — Lists the social accounts (TikTok, YouTube, Instagram, etc.) the calling org has connected for posting
- Get opusclip — Returns the calling organization’s current API cap usage so the agent can check headroom BEFORE submitting work: monthly { used, limit, remaining, reset_at } (credits; ~1 credit per minute of source video) and concurrent { used, limit } (in-flight API projects)
Tool list
Section titled “Tool list”Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.
opusclipmcp_opusclip_add_clip_to_collection#Adds a clip (projectId + clipId) to a collection. Calling twice for the same clip+collection returns an error per the underlying service.3 params
Adds a clip (projectId + clipId) to a collection. Calling twice for the same clip+collection returns an error per the underlying service.
clipIdstringrequiredThe clip ID within the project.collectionIdstringrequiredTarget collection ID.projectIdstringrequiredThe clip project ID.opusclipmcp_opusclip_analyze_video#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.5 params
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.
clipIdstringoptionalSTART mode: the clip supplying context (genre, render preference). The range below is measured against the source video, not this clip.endMsnumberoptionalSTART mode: end of the range to analyze, in ms from the start of the SOURCE VIDEO (not from the start of the clip).projectIdstringoptionalSTART mode: the clip project ID. Not needed to poll.startMsnumberoptionalSTART mode: start of the range to analyze, in ms from the start of the SOURCE VIDEO (not from the start of the clip).taskIdstringoptionalPOLL mode: the task_id from a previous call. Send it ALONE -- polling needs no projectId and starts no new analysis; every other field is ignored.opusclipmcp_opusclip_apply_editing_script#Deprecated -- this tool no longer applies an editing script and does not re-render the clip; it is kept only to point you at its replacement. Clip edits now run through `opusclip_edit_clip`: pass the same projectId and clipId plus the ops you want -- that tool's own description carries the vocabulary. It applies the edit server-side and re-renders, so there is no editing script to fetch, mutate, or post back.0 params
Deprecated -- this tool no longer applies an editing script and does not re-render the clip; it is kept only to point you at its replacement. Clip edits now run through `opusclip_edit_clip`: pass the same projectId and clipId plus the ops you want -- that tool's own description carries the vocabulary. It applies the edit server-side and re-renders, so there is no editing script to fetch, mutate, or post back.
opusclipmcp_opusclip_create_censor_job#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.3 params
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.
clipIdstringrequiredThe clip ID within the project.projectIdstringrequiredThe clip project ID.beepSoundbooleanoptionalUse a beep sound on censored words. Defaults to false (silent).opusclipmcp_opusclip_create_collection#Creates a new empty clip collection in the calling organization. Use add_clip_to_collection to populate it.1 param
Creates a new empty clip collection in the calling organization. Use add_clip_to_collection to populate it.
namestringrequiredDisplay name for the collection.opusclipmcp_opusclip_create_post_task#Requests publishing a clip to a connected social account now. This tool does NOT post directly: it returns an approval_url, and the post goes out only after the user reviews and confirms it in the OpusClip app. Use schedule_publish for a future-dated post.8 params
Requests publishing a clip to a connected social account now. This tool does NOT post directly: it returns an approval_url, and the post goes out only after the user reviews and confirms it in the OpusClip app. Use schedule_publish for a future-dated post.
clipIdstringrequiredThe clip ID within the project.postAccountIdstringrequiredTarget social account ID.projectIdstringrequiredThe clip project ID.titlestringrequiredPrimary caption text. Populates the visible post body on every platform (Facebook, X, Instagram, TikTok, LinkedIn); on YouTube/Dailymotion it is the video title. Required.descriptionstringoptionalOptional override for the post body/caption. Defaults to `title` when omitted.mediaTypestringoptionalPlatform-specific media type override (e.g. 'reel', 'short').privacystringoptionalPlatform-specific privacy value (e.g. 'public', 'unlisted').subAccountIdstringoptionalOptional sub-account ID.opusclipmcp_opusclip_create_social_copy_job#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.6 params
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.
clipIdstringrequiredThe clip ID within the project.postAccountIdstringrequiredTarget social account ID (from list_social_accounts).projectIdstringrequiredThe clip project ID.forceRegeneratebooleanoptionalRe-run even if a copy already exists for this clip+account.promptstringoptionalOptional tone/style prompt for the copy generator.subAccountIdstringoptionalOptional sub-account ID.opusclipmcp_opusclip_create_upload_link#Returns a Google Cloud Storage signed URL the caller's client can use to upload a local video. After upload, pass the returned upload_id as videoUrl to opusclip_submit_project. Includes resumable-upload instructions and storage quota.3 params
Returns a Google Cloud Storage signed URL the caller's client can use to upload a local video. After upload, pass the returned upload_id as videoUrl to opusclip_submit_project. Includes resumable-upload instructions and storage quota.
extensionstringoptionalVideo file extension. Defaults to mp4.fileNamestringoptionalOptional original filename for logging/dedup. Server generates the storage path.sizeMbintegeroptionalApproximate file size in MB (storage quota check). Defaults to 1000.opusclipmcp_opusclip_describe_clip#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.2 params
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.
clipIdstringrequiredThe clip ID within the project.projectIdstringrequiredThe clip project ID.opusclipmcp_opusclip_duplicate_clip#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.2 params
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.
clipIdstringrequiredThe clip ID within the project.projectIdstringrequiredThe clip project ID.opusclipmcp_opusclip_edit_clip#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), 'delete_phrase' / 'replace_phrase', 'set_style', 'add_text_overlay' / 'set_text_overlay' / 'remove_text_overlay', 'remove_emoji' / 'move_emoji', and 'undo'. Batch related edits into ONE call. Pass dryRun: true to preview without saving/rendering.4 params
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), 'delete_phrase' / 'replace_phrase', 'set_style', 'add_text_overlay' / 'set_text_overlay' / 'remove_text_overlay', 'remove_emoji' / 'move_emoji', and 'undo'. Batch related edits into ONE call. Pass dryRun: true to preview without saving/rendering.
clipIdstringrequiredClip to edit.opsarrayrequiredEdits to apply, in order.projectIdstringrequiredProject owning the clip.dryRunbooleanoptionalPreview only: run the ops and report what would change, saving and rendering nothing.opusclipmcp_opusclip_export_clip#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.3 params
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.
clipIdstringrequiredThe clip ID within the project.projectIdstringrequiredThe clip project ID.targetstringoptionalWhich export product to hand out (default 'hd'): 'hd' = HD video, '4k' = 4K video (paid plan + 4K source), 'xml' = Adobe Premiere project file (entitled plan). Entitlement is enforced server-side regardless of this value.opusclipmcp_opusclip_export_collection#Returns the HD download (export) URL for every clip in a collection. list_clips/describe_clip expose preview_url only, mirroring the web app where HD appears behind an explicit export -- HD URLs come only from this tool or export_clip (single clip). Read-only; nothing is written.1 param
Returns the HD download (export) URL for every clip in a collection. list_clips/describe_clip expose preview_url only, mirroring the web app where HD appears behind an explicit export -- HD URLs come only from this tool or export_clip (single clip). Read-only; nothing is written.
collectionIdstringrequiredCollection ID to export.opusclipmcp_opusclip_get_editing_script#Deprecated -- this tool no longer returns an editing script; it is kept only to point you at its replacement. Clip edits now run through `opusclip_edit_clip`: pass the same projectId and clipId plus the ops you want -- that tool's own description carries the vocabulary. It applies the edit server-side and re-renders, so there is no editing script to fetch, mutate, or post back.0 params
Deprecated -- this tool no longer returns an editing script; it is kept only to point you at its replacement. Clip edits now run through `opusclip_edit_clip`: pass the same projectId and clipId plus the ops you want -- that tool's own description carries the vocabulary. It applies the edit server-side and re-renders, so there is no editing script to fetch, mutate, or post back.
opusclipmcp_opusclip_get_social_copy_job#Returns the current status (and generated copy, if any) for a previously created social-copy job. Use to poll until the job concludes.1 param
Returns the current status (and generated copy, if any) for a previously created social-copy job. Use to poll until the job concludes.
jobIdstringrequiredThe copy job ID.opusclipmcp_opusclip_get_transcript#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.1 param
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.
projectIdstringrequiredThe clip project ID.opusclipmcp_opusclip_get_usage#Returns the calling organization's current API cap usage so the agent can check headroom BEFORE submitting work: monthly { used, limit, remaining, reset_at } (credits; ~1 credit per minute of source video) and concurrent { used, limit } (in-flight API projects). When the workspace is exempt from caps (Enterprise OpenApi pack or caps disabled) it returns { uncapped: true } with no numbers. Same numbers the X-RateLimit-* response headers carry. Use this to decide whether a batch fits under the cap instead of waiting for the 403.0 params
Returns the calling organization's current API cap usage so the agent can check headroom BEFORE submitting work: monthly { used, limit, remaining, reset_at } (credits; ~1 credit per minute of source video) and concurrent { used, limit } (in-flight API projects). When the workspace is exempt from caps (Enterprise OpenApi pack or caps disabled) it returns { uncapped: true } with no numbers. Same numbers the X-RateLimit-* response headers carry. Use this to decide whether a batch fits under the cap instead of waiting for the 403.
opusclipmcp_opusclip_list_brand_templates#Lists the brand templates owned by the calling OpusClip organization. Used to populate template pickers before creating new clip projects.0 params
Lists the brand templates owned by the calling OpusClip organization. Used to populate template pickers before creating new clip projects.
opusclipmcp_opusclip_list_clips#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. 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.1 param
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. 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.
projectIdstringrequiredList clips for this clip project.opusclipmcp_opusclip_list_clips_in_collection#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.1 param
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.
collectionIdstringrequiredThe collection ID (from list_collections).opusclipmcp_opusclip_list_collections#Lists the calling organization's clip collections (curated groupings of clips across projects).0 params
Lists the calling organization's clip collections (curated groupings of clips across projects).
opusclipmcp_opusclip_list_projects#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.2 params
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.
pageintegeroptionalZero-based page index.pageSizeintegeroptionalResults per page (1-100). Defaults to 20.opusclipmcp_opusclip_list_scheduled_posts#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.3 params
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.
endAtstringoptionalEnd of the date window, ISO 8601 UTC (e.g. 2026-04-01T00:00:00Z). Use together with startAt as an alternative to projectId -- provide one query mode or the other, not both.projectIdstringoptionalList every post for this clip project. Filter by clipId client-side. Use this alone, or omit it and provide startAt and endAt instead -- the call is rejected if neither mode is provided.startAtstringoptionalStart of the date window, ISO 8601 UTC (e.g. 2026-03-25T00:00:00Z). Use together with endAt as an alternative to projectId -- provide one query mode or the other, not both.opusclipmcp_opusclip_list_social_accounts#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.0 params
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.
opusclipmcp_opusclip_preview_clips#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.3 params
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.
projectIdstringrequiredPreview clips for this clip project.clipIdstringoptionalOptional: preview only this one clip (single card) instead of the whole project.limitintegeroptionalOptional: max clips to show, highest-ranked first (default 6). Raise it (or pass the project total) to show more; ignored when clipId is set.opusclipmcp_opusclip_schedule_publish#Requests scheduling a clip to publish at a specific time. publishAt is ISO 8601 UTC, e.g. '2026-03-25T14:00:00Z'. This tool does NOT create the schedule directly: it returns an approval_url, and the schedule is created only after the user reviews and confirms it in the OpusClip app. Cancel an existing schedule with opusclip_unschedule_publish.9 params
Requests scheduling a clip to publish at a specific time. publishAt is ISO 8601 UTC, e.g. '2026-03-25T14:00:00Z'. This tool does NOT create the schedule directly: it returns an approval_url, and the schedule is created only after the user reviews and confirms it in the OpusClip app. Cancel an existing schedule with opusclip_unschedule_publish.
clipIdstringrequiredThe clip ID within the project.postAccountIdstringrequiredTarget social account ID.projectIdstringrequiredThe clip project ID.publishAtstringrequiredISO 8601 UTC timestamp (e.g. 2026-03-25T14:00:00Z).titlestringrequiredPrimary caption text. Populates the visible post body on every platform (Facebook, X, Instagram, TikTok, LinkedIn); on YouTube/Dailymotion it is the video title. Required.descriptionstringoptionalOptional override for the post body/caption. Defaults to `title` when omitted.mediaTypestringoptionalPlatform-specific media type override (e.g. 'reel', 'short').privacystringoptionalPlatform-specific privacy value (e.g. 'public', 'unlisted').subAccountIdstringoptionalOptional sub-account ID.opusclipmcp_opusclip_submit_project#Submits a long-form video URL to OpusClip. Three 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). 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.19 params
Submits a long-form video URL to OpusClip. Three 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). 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.
videoUrlstringrequiredPublic URL of the long-form video. Supported sources: YouTube, Google Drive, Vimeo, Zoom, Rumble, Twitch, Facebook, LinkedIn, X, Dropbox, Riverside, Loom, Frame.io, StreamYard, or any public S3 mp4 (up to 10GB).aspectRatiostringoptionalOptional output aspect ratio: 'portrait' (9:16), 'square' (1:1), 'landscape' (16:9), or 'four_five' (4:5). Defaults to portrait.brandTemplateIdstringoptionalOptional brand template ID (from list_brand_templates).clipDurationsSecarrayoptionalOptional clip duration buckets in seconds, e.g. [[0,30],[30,60]]. Each inner pair is [minSec, maxSec]. Omit to let OpusClip choose.customPromptstringoptionalOptional free-text prompt steering curation, mirroring the CLI submit --prompt.enableAutoHookbooleanoptionalOptional flag to add an AI-generated hook to the start of each clip. Applies only to a clipping run -- not compatible with skipSlicing or skipCurate. Omit to inherit the brand template / org default.enableCaptionbooleanoptionalOptional flag to turn captions on or off. Omit to inherit the brand template default.genrestringoptionalOptional curation genre/topic hint, mirroring the CLI submit --genre. Omit to let OpusClip choose.modelstringoptionalOptional AI clipping model, mirroring the CLI submit --model. Omit to let OpusClip choose.rangeEndnumberoptionalOptional end of the source-video range to use, in seconds. Must be >= rangeStart. Pair with rangeStart to limit processing to a slice of the video instead of the whole thing. Applies to the default clipping mode, where it bounds which part of the source clips are drawn from. NOT honored in no-clip mode: combined with skipSlicing the render currently ignores the range and outputs the full source, so do not use the pair to ask for one segment of a no-clip render. Omit to use the whole video.rangeStartnumberoptionalOptional start of the source-video range to use, in seconds. Pair with rangeEnd to limit processing to a slice of the video instead of the whole thing. Applies to the default clipping mode, where it bounds which part of the source clips are drawn from. NOT honored in no-clip mode: combined with skipSlicing the render currently ignores the range and outputs the full source, so do not use the pair to ask for one segment of a no-clip render. Omit to use the whole video.removeFillerbooleanoptionalOptional flag to remove filler words from the rendered clips, mirroring the CLI submit --remove-filler.skipCuratebooleanoptionalOptional flag to skip all curation steps, mirroring the CLI submit --skip-curate. Bypasses curation entirely, which also means the submission returns ONE full-length output (the whole video, or the selected range) rather than multiple clips, with no ranking or scores -- do not choose it when the user wants several clips. Clip-only options (clipDurationsSec, enableAutoHook) do not apply and are rejected when set together. Distinct from skipSlicing, which also returns one full-length output but still runs curation over it.skipSlicingbooleanoptionalTHIS IS THE NO-CLIP MODE: set true to keep the FULL video as a single output instead of cutting it into clips -- import / reframe / caption the whole video, with nothing trimmed away. Use for asks like "don't cut it into clips", "reframe the whole video", or "convert horizontal to vertical without clipping". Still available together with this: enableCaption (captions on/off) and aspectRatio (output orientation). Do NOT pair with rangeStart/rangeEnd expecting only that segment -- the range is currently ignored in this mode and the full source is rendered. Conflicts with clip-only options enableAutoHook and clipDurationsSec -- rejected when set together with this. Distinct from skipCurate: this suppresses only the CUTTING and still runs the curation pipeline over the whole video (so the single output can carry curation scores), whereas skipCurate bypasses curation entirely. To skip curation itself, use skipCurate.sourceLangstringoptionalOptional source language code (e.g. 'en', 'es'). Omit for auto-detect.targetLangstringoptionalOptional target language code (e.g. 'es', 'fr') to translate the rendered clips into -- translated text and captions, not synthesized voice. Omit to keep the source language.titlestringoptionalOptional title for the uploaded video, mirroring the CLI submit --title.topicKeywordsarrayoptionalOptional topic keywords - only relevant when model='ClipAnything'.webhookUrlstringoptionalOptional webhook URL called when the project concludes, mirroring the CLI submit --webhook.opusclipmcp_opusclip_unschedule_publish#Requests cancelling a previously-scheduled social post by schedule ID. This tool does NOT cancel directly: it returns an approval_url, and the schedule is cancelled only after the user reviews and confirms in the OpusClip app.1 param
Requests cancelling a previously-scheduled social post by schedule ID. This tool does NOT cancel directly: it returns an approval_url, and the schedule is cancelled only after the user reviews and confirms in the OpusClip app.
scheduleIdstringrequiredThe schedule ID of the previously-scheduled social post to cancel.opusclipmcp_opusclip_whoami#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.0 params
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.