Katto’s official MCP server — 15 tools
Every tool the hosted server serves on tools/list, with its input schema, required parameters, read-only / destructive annotation and quota cost. This is the reference an agent (or you) uses to drive Katto from Claude, Cursor, ChatGPT or any MCP client. Connect it from the MCP hub, or read the REST API docs.
https://mcp.katto.tech/mcp (Streamable HTTP, OAuth 2.1 or Bearer sk_live_…). One monthly video quota is shared across the app, API, CLI and MCP; re-renders and dubs are free.katto_create_clip_job
writeConsumes 1 video from your monthly quotaSubmit a long video (YouTube, Twitch, Vimeo, Rumble, Zoom, Dailymotion) for clipping. Consumes 1 video from your monthly quota — check katto_get_usage first. Clips are produced asynchronously; returns a job id, then poll katto_get_job until status is 'completed'. Fails if the URL is unsupported or the video is over 90 minutes.
| Parameter | Type | Required | Description |
|---|---|---|---|
| url | string | yes | Public video URL to clip. |
| config | object | — | Optional pre-clip settings. |
Example call
{
"name": "katto_create_clip_job",
"arguments": {
"url": "https://youtube.com/watch?v=…"
}
}katto_get_job
read-onlyFree — does not use video quotaRead-only. Get the status, progress and clips of a job by id. When status is 'completed', 'clips' holds the finished 9:16 MP4 urls and caption (SRT) urls; while processing, clips is empty. Returns 404 for an unknown id.
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | yes | Job id from katto_create_clip_job. |
Example call
{
"name": "katto_get_job",
"arguments": {
"id": "job_…"
}
}katto_list_jobs
read-onlyFree — does not use video quotaRead-only. List your recent jobs, newest first. Paginate with 'cursor' (pass the previous next_cursor); optional 'status' filter. Returns { jobs: [{id, status, source, created_at, completed_at}], next_cursor }.
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | number | — | How many jobs to return (1-100, default 20). |
| cursor | string | — | Pass the previous response's next_cursor for the next page. |
| status | string | — | Optional filter, e.g. 'completed', 'queued', 'failed'. |
Example call
{
"name": "katto_list_jobs",
"arguments": {
"limit": 20,
"cursor": "…",
"status": "…"
}
}katto_get_clips
read-onlyFree — does not use video quotaRead-only convenience: just the finished clips of a job (9:16 MP4 urls + caption SRT urls + title + virality score). Returns an empty list while the job is still processing.
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | yes | Job id from katto_create_clip_job. |
Example call
{
"name": "katto_get_clips",
"arguments": {
"id": "job_…"
}
}katto_get_usage
read-onlyFree — does not use video quotaRead-only. Your current plan and monthly video quota: { plan, videos_used, videos_limit, videos_remaining }. Call before katto_create_clip_job to confirm remaining quota.
No parameters.
Example call
{
"name": "katto_get_usage",
"arguments": {}
}katto_get_transcript
read-onlyFree — does not use video quotaRead-only. The transcript of a completed job as timestamped segments [{ start, end, text }]. Returns 404 while the job is still processing.
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | yes | Job id from katto_create_clip_job. |
Example call
{
"name": "katto_get_transcript",
"arguments": {
"id": "job_…"
}
}katto_cancel_job
writedestructiveFree — does not use video quotaCancel a still-running job (queued/processing) and refund the video back to your monthly quota. Safe to retry (idempotent). Returns an error if the job already finished, failed, or was cancelled.
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | yes | Job id from katto_create_clip_job. |
Example call
{
"name": "katto_cancel_job",
"arguments": {
"id": "job_…"
}
}katto_get_account
read-onlyFree — does not use video quotaRead-only. The account behind this key: plan, this key's scopes (read/write), and monthly quota { videos_used, videos_limit, videos_remaining }.
No parameters.
Example call
{
"name": "katto_get_account",
"arguments": {}
}katto_list_sources
read-onlyFree — does not use video quotaRead-only. The video platforms Katto can clip from, each with an example URL. Use it to confirm a URL is supported before calling katto_create_clip_job.
No parameters.
Example call
{
"name": "katto_list_sources",
"arguments": {}
}katto_list_clip_lengths
read-onlyFree — does not use video quotaRead-only. The valid values for the optional config.clipLength on katto_create_clip_job (target clip-duration buckets).
No parameters.
Example call
{
"name": "katto_list_clip_lengths",
"arguments": {}
}katto_rerender_clip
writeFree — does not use video quotaRe-render one already-finished clip with a new reframe layout and/or caption style. Free — does NOT use video quota. Each call starts a new render (not idempotent); the original clip is kept. Returns a rerender_id; poll katto_get_rerender for the new clip url.
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | yes | Job id from katto_create_clip_job. |
| clip_index | number | yes | 0-based index of the clip to re-render. |
| layout_mode | "face_tracking" | "wide" | "split_screen" | "stacked" | "passthrough" | "grid_3" | "grid_4" | — | |
| caption_style | string | — | A caption style preset name. |
Example call
{
"name": "katto_rerender_clip",
"arguments": {
"id": "job_…",
"clip_index": 0
}
}katto_dub_clip
writeFree — does not use video quotaRe-render one finished clip dubbed into one or more of 8 languages (en, es, fr, it, pt, hi, ja, zh). Free — does NOT use video quota. Each call starts a new render (not idempotent). Returns a rerender_id; poll katto_get_rerender for the result.
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | yes | Job id. |
| clip_index | number | yes | 0-based clip index. |
| languages | array<"en" | "es" | "fr" | "it" | "pt" | "hi" | "ja" | "zh"> | yes |
Example call
{
"name": "katto_dub_clip",
"arguments": {
"id": "job_…",
"clip_index": 0,
"languages": [
"en"
]
}
}katto_get_rerender
read-onlyFree — does not use video quotaRead-only. Poll a re-render started by katto_rerender_clip or katto_dub_clip. Returns { status, clip_url, captions_url } — clip_url is null until status is 'completed'.
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | yes | Job id. |
| rerender_id | string | yes | The rerender_id returned by rerender/dub. |
Example call
{
"name": "katto_get_rerender",
"arguments": {
"id": "job_…",
"rerender_id": "…"
}
}katto_get_brand_kit
read-onlyFree — does not use video quotaRead-only. Your saved brand kits (colors, caption font and position, default layout, watermark url).
No parameters.
Example call
{
"name": "katto_get_brand_kit",
"arguments": {}
}katto_get_webhook_secret
read-onlyFree — does not use video quotaRead-only. Returns your webhook signing SECRET — treat it as a credential (do not display or log it) — plus how to verify Katto's signed completion callbacks (HMAC-SHA256 of {timestamp}.{body}). Pass webhook_url on a job to receive them.
No parameters.
Example call
{
"name": "katto_get_webhook_secret",
"arguments": {}
}