MCP App Store
by KeenEthics

Overview

CutPro finds the best moments of a long video and turns them into short, captioned vertical clips ready for TikTok, Reels and Shorts. Paste a YouTube, Twitch, Kick or TikTok link and CutPro clips the video, ranks the clips by how engaging they are, applies your saved templates, renders the final MP4s and posts them to the accounts you connected on cut.pro, now or on a schedule. ChatGPT always asks before starting a job or publishing anything. It also follows your favorite channels: CutPro clips a live stream while it airs, every 10 minutes, so the best moments are ready before the broadcast ends. And it transcribes audio and video into timed captions in SRT, VTT or plain text. Everything happens in your own CutPro workspace, the same one you use on cut.pro.

Tools

analyze_video

ChatGPT
Analyze a video Fetches metadata for a public video URL and calculates the exact credit cost before you commit to clipping. No credits are charged. Use this as a pre-flight check before calling POST /clips. When credits_unlimited is true, this workspace is on free usage: credits_cost still tells you what the job is worth, but submitting it will not move your balance. Rate-limited to 10 requests per minute per user.

apply_broadcast_template

ChatGPT
Apply template to broadcast clips Applies one of your templates to every clip of a broadcast, or to the clip_ids given, in the background. Each clip's edit_id shows up in GET /monitors/{id}/broadcasts/{broadcastId}/clips as it is done. To template every future clip instead, set template_id on the monitor. Only one batch runs at a time per account: another one answers 429.

apply_template

ChatGPT
Apply template to clips Asynchronously applies one of your saved templates to all (or a subset of) the generated clips in a submission. The job runs in the background — returns immediately with the number of clips being processed. Once a template is applied, each clip gets its own edit settings that you can then render via POST /clips/{videoId}/submissions/{submissionId}/clips/{clipId}/render. Only one batch job can run at a time per account. Returns 429 if another is already running.

cancel_post

ChatGPT
Cancel a post Cancels every item of the post that is not public yet, so none of them will publish. Already-published items remain live on the destination platforms. Nothing is erased: CutPro keeps the record of the cancellation, and a fully cancelled post no longer appears in listings.

create_bulk_download

ChatGPT
Start a bulk download Packages a set of completed renders into a single zip file. Returns the job id immediately, then poll GET /renders/bulk-download/{jobId} until status is completed, then download the zip from the returned URL. Up to 500 renders per job. Renders that don't belong to your workspace are silently skipped; the job fails with NO_VALID_RENDERS if none survive that filter.

create_generation

ChatGPT
Generate an image or a video Generates one image or video with the chosen model from GET /generations/models, from a prompt alone or from images. Charges the credits at once; poll GET /generations/{id} every 10 seconds until it is ready or failed, which gives them back. credits is the total price the user agreed to: the model's credits for the mode and resolution, times seconds for a video (silent_credits with audio: false). A different current price answers PRICE_CHANGED with the new total and charges nothing. Always tell the user the model and the price and wait for their yes before calling this. image_ids come from POST /generations/images or from the output.image_id of a ready image: none for text, one for image, two (first, last) for frames, and up to the model's max_images for references.

create_monitor

ChatGPT
Monitor a channel Starts watching a YouTube, Twitch or Kick channel from its URL. A live monitor clips each broadcast while it airs, charged per 10-minute batch; a video monitor clips each new upload. It is born on unless enabled is false, which is how a 24/7 stream is set up once and then switched with start and stop. Refusals: 400, 402, 403, 404, 409 ALREADY_MONITORING, and 429 (10 per minute, because it looks the channel up on the platform).

create_persona_from_preset

ChatGPT
Create a persona from a ready-made character Free and instant: the character's photo becomes the first version of a new persona with image_status: ready. With name the persona is saved at once (status: ready) and can be used in videos right away; without it, it is a draft to name with POST /personas/{id}/save.

create_persona_shot

ChatGPT
Create a persona photo Draws a saved persona into a ready template scene or into a scene you write, optionally holding a product from product.photo_ids. A template also decides what the persona does with the product: it is held up to the camera, or used with one hand on street. A written scene replaces the template, and there product.action is show (holds it up to the camera, the default) or use (uses it with one hand); with neither, a template is picked at random. A written scene that needs both hands on the product (spreading, pouring, opening, eating) is refused with SCENE_ACTION_UNSUPPORTED before anything is charged. Costs pricing.scene_photo_credits of GET /personas/catalog, twice that with a style, even on a workspace with unlimited usage, and is refunded automatically if it fails; send that price in credits, or the server answers 409 PRICE_CHANGED with the right one in extra. Responds 202. Poll GET /personas/{id}/shots/{shotId} every 5 seconds until ready or failed.

create_post

ChatGPT
Create a post Creates a multi-platform post for one or more edited clips. Each entry under videos references an edit_id (the rendered or apply_template'd clip) plus a list of target connections with platform-specific metadata. metadata is the only part of this API that keeps each network's own field names (privacyLevel, categoryId, privacyStatus): they are forwarded to the network as-is, so renaming them here would only hide what actually goes out. Pass scheduled_at (ISO 8601, must be in the future) to schedule the post; omit it to publish immediately. Immediate posts kick off rendering + publishing in the background — poll GET /posts/{id} until every item is completed or failed. Failed items can be retried with POST /posts/{id}/items/{itemId}/retry. Networks still rolling out reject the whole request with PLATFORM_UNAVAILABLE before anything is created.

create_render

ChatGPT
Render an edit Renders an edit you already own and returns the render id to poll with GET /renders/{renderId}. This is how you get a fresh MP4 of a clip you published months ago: the edit never expires, so re-rendering it always works, even after the rendered file itself was purged. If an identical render is already sitting in storage, returns 200 with from_cache: true and a ready download_url. Returns 409 if the same edit is already rendering.

create_submission

ChatGPT
Submit a video for clipping Queues a video for AI clipping. Credits are deducted immediately upon submission. Returns the submission id to track progress. Poll GET /clips/{videoId}/submissions/{submissionId} until status is completed or failed, then retrieve the generated clips from GET /clips/{videoId}/submissions/{submissionId}/clips.

create_transcription

ChatGPT
Transcribe a media file Starts a transcription for a media file you uploaded via POST /transcriptions/upload. Credits are charged per minute of audio, plus a surcharge when speaker_labels is requested. Check the balance at GET /balance first. Responds 202 with status: processing when the ASR worker was dispatched: poll GET /transcriptions/{transcriptionId} until status is ready (or failed / no_speech), then fetch the text. Responds 200 when nothing had to run. That happens when the same audio was already transcribed (the transcript is shared per media, so a re-run is a cache hit and credits_charged is 0), or when the audio is silent, which comes back as no_speech and is not billed. Passing a media_id that is already in your library re-runs it. That is how a transcript created without diarization is upgraded: ask again with speaker_labels: true and the audio is reprocessed, because the speaker column cannot be added after the fact.

delete_clip

ChatGPT
Delete a clip Permanently deletes a single generated clip. This action cannot be undone.

delete_generation

ChatGPT
Delete a generation Removes it from the list and its file from the library. One still processing cannot be deleted.

delete_monitor

ChatGPT
Stop watching a channel Removes the monitor and turns it off. Clips it already produced stay in the workspace, and creating a monitor for the same channel and type again brings this one back with its history and automations, under the same id.

delete_persona

ChatGPT
Delete a persona Removes the persona and its videos from every listing. A generation still running finishes or is refunded as usual, and edits already created from its videos stay in the workspace.

delete_post_item

ChatGPT
Delete a post item Cancels a single pending, rendering or failed item so it never publishes. A rendering item also aborts its render job when no other item still needs it. An item already completed is deleted from the destination network first, and only on networks that allow it. The network's refusal comes back as a 400 and nothing changes here. An item in publishing cannot be cancelled: the media is already on its way. Cancelled items stop appearing in listings, and CutPro keeps the record. When nothing of the parent post is left, post_deleted: true is returned.

delete_render

ChatGPT
Cancel or delete a render Cancels a queued or active render, or permanently deletes a completed/failed/expired render record. Deleting a completed render also removes the rendered video file from storage.

delete_submission

ChatGPT
Delete submission Permanently deletes a submission and all its generated clips. This action cannot be undone. A submission still processing is cancelled and its credits refunded.

delete_transcription

ChatGPT
Delete a transcription Removes the job from the list and from every read endpoint. The uploaded media stays in your library, so the same media_id can be transcribed again, and that re-run is a cache hit, not a second charge.

delete_video

ChatGPT
Delete a video Permanently deletes a video from your library along with all its submissions and generated clips. This action cannot be undone. Submissions still processing are cancelled and their credits refunded.

download_clip_subtitles

ChatGPT
Download a clip's captions Returns the clip's captions as an SRT file or plain text. When the clip has an edit, its own captions are used (with any fix or translation made there); otherwise the source transcript cut to the clip. Timestamps start at 00:00, lined up with the clip's own video, so the file can go straight next to the rendered MP4.

download_render

ChatGPT
Get render download URL Returns a time-limited signed URL to download the completed rendered video as an MP4. The URL expires after 1 hour — fetch it fresh each time rather than caching it. Returns 410 if the file has been purged from storage (renders expire according to your plan's retention period).

download_transcription

ChatGPT
Download the transcript as a subtitle file Returns the transcript as a ready-to-use subtitle file (srt by default, vtt or txt) with the matching Content-Type and a Content-Disposition filename. The body is the file itself, not JSON. Speaker names are written into the file only when the job was billed with speaker_labels; pass speakers=false to leave them out of a diarized transcript. Returns 409 TRANSCRIPTION_NOT_READY while the worker is still running. Keep polling GET /transcriptions/{transcriptionId}.

favorite_persona_preset

ChatGPT
Star a ready-made character favorite: true stars the character for the key's user, false removes the star.

get_balance

ChatGPT
Get balance Returns your current credit balance. Credits are consumed each time you submit a video for clipping. When unlimited is true this workspace is on a courtesy plan: usage still shows up in the history with what it would have cost, but the balance does not move and jobs are never blocked for lack of credits.

get_balance_history

ChatGPT
Get credit history Returns the credit transaction ledger for this workspace, newest first. Each row shows the delta (amount, negative for debits), the resulting balance, and what caused it (reference_type + reference_id) so you can reconcile against submissions, renewals, refunds, and bonuses.

get_bulk_download

ChatGPT
Get bulk download status Returns the current state of a bulk download job. Poll every 5–10 seconds until status is completed. Once complete, download_url is a signed URL valid for one hour; the underlying file is purged once expires_at passes.

get_connection

ChatGPT
Get a connection Returns a single connection by ID, with the latest captured audience metrics.

get_generation

ChatGPT
Get a generation Returns one generation. Poll it every 10 seconds while status is processing; output.url is set once ready.

get_monitor

ChatGPT
Get a monitored channel Returns one monitored channel and whether it is on. Monitoring can also turn itself off when the balance runs out.

get_persona

ChatGPT
Get a persona Returns the persona with its photo. Poll it every 5 seconds while image_status is generating.

get_persona_catalog

ChatGPT
Get traits, prices and limits Everything a client needs to build the persona form without hardcoding it: every trait option, the defaults, which traits still apply when reference photos are used, the prices in credits and the limits of a source video. Prices follow what the models cost and can change at any time, so read them from here.

get_persona_shot

ChatGPT
Get a persona photo Returns one persona photo. Poll it every 5 seconds while status is processing; image_url is set once ready.

get_post

ChatGPT
Get a post Returns full status of a post including every item. Poll this endpoint to track immediate posts through pending → rendering → publishing → completed.

get_render

ChatGPT
Get render status Returns the current status of a render job. Poll this endpoint until status is completed or failed. We recommend polling every 5–10 seconds. Use progress (0–100) to display a progress bar to your users.

get_render_limits

ChatGPT
Get render quota Returns the workspace's current render usage and plan-level render limits. Use this before kicking off a render to avoid being throttled — if usage.total_pending >= usage.max_concurrent, a new render will be rejected with 429.

get_submission

ChatGPT
Get submission Returns the current status of a clipping submission. Poll this endpoint until status is completed or failed. We recommend polling every 5–10 seconds. When status is queued, use queue_position and estimated_time to give feedback to your users. A submission can sit at downloading because the SOURCE is not fully published yet — a scheduled premiere, a livestream still on air, or a recording the platform is still processing. In that case waiting_reason is set (and waiting_until carries the announced start time, when the platform provides one). This is not an error and the submission is not stuck: it resumes on its own once the source becomes available. Surface it to your users instead of a generic "downloading", and offer them the option to cancel — DELETE /v1/clips/{videoId}/submissions/{submissionId} refunds the credits while waiting_reason is set.

get_transcription

ChatGPT
Get transcription status Returns the current state of a transcription job. Poll every 5–10 seconds while status is processing. Once status is ready, fetch the text with GET /transcriptions/{transcriptionId}/transcript (JSON cues) or GET /transcriptions/{transcriptionId}/download (SRT, VTT or plain text).

get_transcription_cues

ChatGPT
Get the transcript as JSON Returns the transcript as timed cues, ready to render or index without parsing a subtitle file. Timings are in seconds from the start of the audio. speaker is only ever filled when the job was billed with speaker_labels; on every other job it is null. Returns 409 TRANSCRIPTION_NOT_READY while the worker is still running. Keep polling GET /transcriptions/{transcriptionId}.

get_workspace

ChatGPT
Get current workspace Returns information about the workspace this request resolved to: name, plan, credit balance, member count and the role of the user who created the key. A key bound to one workspace always resolves to it. A key bound to several resolves to the one in the X-Workspace-Id header, so call this whenever you need to confirm which workspace a request is actually hitting.

list_broadcast_clips

ChatGPT
List clips of a broadcast Returns the clips this workspace got from one broadcast, best rated first by default. While the broadcast is on air, new clips land every 10 minutes, so poll this list rather than waiting for the broadcast to end. A clip with an edit_id is ready to render or post; one without it renders with the default layout through POST /monitors/{id}/broadcasts/{broadcastId}/clips/{clipId}/render. Returns 410 once the recording was purged.

list_broadcasts

ChatGPT
List broadcasts of a live monitor Returns the channel's broadcasts, newest first, each with how many clips this workspace got from it. A broadcast with ended_at: null is on air and keeps producing clips every 10 minutes while the monitor is on. Only live monitors have broadcasts: a video monitor answers 400 INVALID_OBSERVING_TYPE, and its clips arrive as regular submissions in GET /clips.

list_clips

ChatGPT
List generated clips Returns the AI-generated highlight clips produced by a completed submission. Each clip includes its timestamp range within the source video, an AI relevance score, and signed URLs for streaming and downloading. Sort by rating (default) to surface the most impactful clips first. Download and play URLs are time-limited signed URLs — fetch them fresh when needed rather than caching them long-term. Returns 410 if the submission has expired. Re-submit the video to generate new clips.

list_connections

ChatGPT
List connections Returns the active social connections in this workspace — the IDs you pass as connection_id when creating a post. Each entry includes the platform, public profile info (username, avatar, bio) and the latest captured audience metrics (followers, posts, likes). Revoked or disconnected accounts are excluded.

list_generation_models

ChatGPT
List image and video models and their prices Every image and video model CutPro generates with right now (Veo, Kling, Seedance, Wan, Nano Banana, GPT Image and more), with the modes, resolutions, durations and aspect ratios each one accepts and its price in credits. Prices follow what the models cost and can change at any time, so read them from here before POST /generations. When the user names no model, use presets: the recommended model for each quality level.

list_generations

ChatGPT
List generations The workspace's images and videos generated with POST /generations, newest first.

list_monitors

ChatGPT
List monitored channels Returns the channels this workspace monitors, with whether each one is on right now and the settings its clips use.

list_persona_presets

ChatGPT
List ready-made characters Characters whose photo already exists. POST /personas/presets/{presetId} turns one into a persona for free, ready to name, save and use in videos. favorite is the key's user's star, set with PUT /personas/presets/{presetId}/favorite.

list_persona_shots

ChatGPT
List a persona's photos Returns the photos made with this persona, newest first, with signed image URLs for the finished ones.

list_personas

ChatGPT
List personas Returns the workspace's personas, newest first, drafts included. image_status and video_generating say what is still being generated, so one call shows every persona in progress.

list_posts

ChatGPT
List posts Returns a paginated list of posts in this workspace, newest first. Each post includes its items with current status and error codes.

list_renders

ChatGPT
List renders Returns a paginated list of all your render jobs, newest first. Filter by status to focus on processing, completed, or failed renders.

list_submissions

ChatGPT
List submissions Returns a paginated list of all clipping submissions for a video, newest first. Use this to audit past runs, find a specific submission ID, or check whether a job is still in progress.

list_templates

ChatGPT
List templates Returns a paginated list of video editing templates. Use filter=mine (default) to list your own templates, or filter=public for CutPro's built-in public templates. Pass a template's id to POST /clips/{videoId}/submissions/{submissionId}/apply_template to apply it in bulk to your generated clips.

list_transcriptions

ChatGPT
List transcriptions Returns a paginated list of the workspace's transcription jobs, newest first.

list_videos

ChatGPT
List videos Returns a paginated list of all source videos in your library, ordered by most recent submission. Each item includes lifecycle counters (clips generated, edits, exports, posts) and the status of the latest submission.

publish_post

ChatGPT
Trigger publish Forces the publishing pipeline to run for a post that is currently pending, failed, or stuck. Useful for scheduled posts you want to publish early, or to nudge a post whose worker missed its window.

quote_persona_swap

ChatGPT
Price a swap video Measures a library video and returns what swapping its person for a persona costs at the given quality. Nothing is charged. Pass the returned credits to POST /personas/{id}/videos with type: swap and the same quality, which refuses with PRICE_CHANGED if the price is different. replace does not change the price, except none (needs a style), which pays no scene for the person. Besides the rate per second, the price can include a small amount for each scene of the video where the person appears, so the person stays the same across cuts, and a style adds that same amount again per scene. VIDEO_DURATION_OUT_OF_RANGE and VIDEO_UNSUPPORTED (format, size or resolution) follow video_limits of GET /personas/catalog for that quality; a video refused at standard may still fit high.

rate_persona_version

ChatGPT
Rate a persona photo Records whether a photo from versions was liked. Send down with a reason, or null to clear the rating. Free; it only teaches us what to improve.

regenerate_persona

ChatGPT
Regenerate or edit the persona photo Generates the photo again, for drafts and saved personas alike. Send new chips to change traits, nothing to try again with the same ones, or a one-line note (for example make the jacket red) to edit the current photo keeping the same person. When it finishes, the new photo becomes a new version and the current one; the traits change only then, so a failed generation leaves the persona as it was. Earlier versions stay in versions and videos already made keep their photo. Charged like a new photo; a note is priced as photo_with_references_credits. CARD_LOCKED means a photo is already generating, or a note was sent before the first photo exists.

render_broadcast_clip

ChatGPT
Render a broadcast clip Queues a live clip for rendering and returns the render id to poll with GET /renders/{renderId}. The clip renders with its template when one was applied, otherwise with the default layout. If an identical render is already in storage, returns 200 with from_cache: true and a ready download_url; 409 if the same clip is already rendering.

render_clip

ChatGPT
Render a clip Queues a clip for video rendering. Returns the render id you can use to poll status via GET /renders/{renderId}. If a template has been applied to the clip (see apply_template), the rendered video will include all template customisations (captions, effects, cropping, etc.). Otherwise the clip is rendered with default settings. If an identical render has already been completed, returns 200 with from_cache: true and a ready download_url. Returns 409 if the same clip is already being rendered.

restore_persona_version

ChatGPT
Restore a persona version Makes an earlier photo from versions the current one again, with the traits it was made from. Free and instant; new videos use the restored photo and videos already made are not touched. CARD_LOCKED means a photo is generating: wait for it to finish.

retry_post_item

ChatGPT
Retry a failed item Re-queues a failed item for publishing. Its error_code and previous render_id are cleared. Only items currently in failed state can be retried.

retry_submission

ChatGPT
Retry a failed submission Runs a failed submission again with the exact settings it was created with (strategy, timeframe, template, translation) and returns the NEW submission, charged like POST /clips. The failed one stays in the history. Retrying a submission that did not fail answers 409 SUBMISSION_NOT_FAILED.

save_persona

ChatGPT
Save or rename a persona Approves the current photo and names the persona, which can then be used in videos. On a persona already saved it only renames it. The photo can still be regenerated or edited later, as new versions. CARD_NOT_READY means a draft whose photo is not ready yet.

start_monitor

ChatGPT
Start monitoring Turns monitoring on. For a live monitor, a channel that is already live starts being recorded within about a minute, and clips come from what airs from then on; nothing before the start is clipped. Calling it on a monitor that is already on changes nothing and answers 200. Refusals: 402, 403, 404.

stop_monitor

ChatGPT
Stop monitoring Turns monitoring off. No new batch is clipped or charged after this, and a recording in progress stops within about a minute. Monitoring must stay on for at least 10 minutes before it can be stopped: earlier you get 409 with extra.remaining_seconds. Calling it on a monitor that is already off changes nothing and answers 200. Refusals: 404, 409.

update_monitor

ChatGPT
Update a monitor Changes only the fields sent; null clears template_id and the duration limits. enabled follows the same rules as start and stop. Refusals: 400 INVALID_DURATION_RANGE, 402, 403, 404, 409 MINIMUM_MONITORING_TIME.

update_post

ChatGPT
Update a post Updates a post that is still pending. Two things can change: • scheduled_at — reschedule (must be at least 1 minute in the future) or set to null to publish immediately. Only allowed while every item is still in pending state. • items — replace the set of pending items. Items with item_id are updated in place, items without are inserted, and pending items not present in the body are deleted. Items that already finished publishing are never touched. At least one of scheduled_at or items must be provided.

Capabilities

WritesInteractive

Example Prompts

Click any prompt to copy it.

App Stats

73

Tools

3

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily