AI video clipping MCP server: turn long videos, podcasts and Twitch VODs into scored, captioned 9:16 shorts from Claude, Cursor, ChatGPT and any MCP client.
Katto MCP demonstrates solid tool design with consistent naming (verb_noun pattern), comprehensive parameter schemas, and clear descriptions. All 16 tools are explicitly registered with inputSchema. Descriptions average ~150 chars, meeting the 10-1024 char baseline. However, several tools lack output schema documentation, and some parameter descriptions could be more prescriptive about constraints and error recovery. Tool composition is clean (each tool has one responsibility), and the server properly gates API calls behind authentication. The main gaps are: (1) no documented output schemas for any tool, (2) missing descriptions for some optional parameters (e.g., config.topics in katto_create_clip_job), and (3) no error recovery guidance in descriptions.
Cancel a still-running job (queued/processing) and refund the monthly video slot. Returns an error if the job already finished, failed, or was cancelled.
Submit a long video (YouTube, Twitch, Vimeo, Rumble, Zoom, Dailymotion) to Katto. Returns a job id; the clips finish asynchronously. Poll katto_get_job with the id until status is 'completed'.
Re-render one finished clip dubbed into one or more languages (en, es, fr, it, pt, hi, ja, zh). Does NOT use video quota. Returns a rerender_id; poll katto_get_rerender for the result.
Get the account behind this key: plan, this key's scopes, and monthly quota { videos_used, videos_limit, videos_remaining }.
Get your saved brand kits (colors, caption font and position, default layout, watermark url).
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract fields without knowing response structure. E.g., katto_get_job returns clips but the schema for clip objects (url, duration, etc.) is undocumented.
Optional parameters lack descriptions. config.topics in katto_create_clip_job has no description; config.customPrompt is undescribed. LLMs cannot infer when to use these parameters.
No error recovery guidance in descriptions. E.g., katto_get_job says 'poll until completed' but does not specify retry intervals, timeout behavior, or what to do if a job fails. katto_cancel_job lists error conditions but offers no recovery path.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
Convenience: fetch just the finished clips of a job (9:16 MP4 urls + caption SRT urls). Returns an empty list while the job is still processing.
Get the status and clips of a Katto job by id. When status is 'completed', 'clips' holds the finished 9:16 MP4 urls and caption (SRT) urls.
Poll a re-render started by katto_rerender_clip or katto_dub_clip. Returns { status, clip_url, captions_url }.
Get the compact transcript of a completed job as timestamped segments [{ start, end, text }]. Returns 404 while the job is still processing.
Get your current plan and monthly video quota: { plan, videos_used, videos_limit, videos_remaining }.
Get your webhook signing secret and how to verify Katto's signed completion callbacks (HMAC-SHA256 of {timestamp}.{body}). Pass webhook_url on a job to receive them.
List the valid caption_style preset names for katto_rerender_clip (e.g. 'hormozi' for bold word-by-word highlight). Call this before re-rendering so you pass a real preset, not a guess.
List the valid values for the optional config.clipLength on katto_create_clip_job (target clip duration buckets). Note: clipLength is fixed at job creation and cannot be changed by re-render.
List your recent Katto jobs, newest first. Paginate with 'cursor' (pass the previous next_cursor) and optionally filter by 'status'. Returns { jobs: [{id, status, source, created_at, completed_at}], next_cursor }.
List the video platforms Katto can clip from, with an example URL for each. Use this to confirm a URL is supported before calling katto_create_clip_job.
Re-render one finished clip with a new reframe layout and/or caption style. Does NOT use video quota. Returns a rerender_id; poll katto_get_rerender for the new clip url.
Polling tools (katto_get_job, katto_get_rerender) lack guidance on polling intervals and max retries. Agents may poll too aggressively or give up too early.
Tool descriptions use example values (e.g., 'e.g. podcast, gaming, sports, interview' for genre). LLMs may treat these as the only valid options instead of examples. Use enum constraints or explicit 'not limited to' language.