Skip to content
Scalekit Docs

OpusClip MCP

Vendor MCP30 toolsOAuth 2.1/DCRMediaAIMarketing

Connect 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

  1. Terminal window
    npm install @scalekit-sdk/node

    Full SDK reference: Node.js | Python

  2. Add your Scalekit credentials to your .env file. 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>
  3. 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.actions
    const connector = 'opusclipmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { 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 call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'opusclipmcp_opusclip_whoami',
    toolInput: {},
    })
    console.log(result)

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)

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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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_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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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_share_project#Requests making a clip project publicly visible so its clips can be shared via the OpusClip share URL. This tool does NOT commit the action: it returns an approval_url, and the project becomes public only after the user reviews and confirms in the OpusClip app. 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 instead.1 param

Requests making a clip project publicly visible so its clips can be shared via the OpusClip share URL. This tool does NOT commit the action: it returns an approval_url, and the project becomes public only after the user reviews and confirms in the OpusClip app. 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 instead.

NameTypeRequiredDescription
projectIdstringrequiredThe clip project ID to make public.
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.

NameTypeRequiredDescription
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.

NameTypeRequiredDescription
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.