io.github.miracleweasel/katto-mcp
Owner verifiedNPM · KATTO-MCP · 2 COMPONENTS
AI video clipping MCP: long videos and podcasts into scored, captioned 9:16 shorts.
Available components
Last scanned (5 hours ago)
Scores higher than 94% of npm servers
Category Design and Media
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 30 of 92 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to miracleweasel/katto-mcp). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 0 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability70
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 5100 tokens (~175/item across 29 items; 29 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management80
- Stability observed for 24 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 30 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 −3
- Stability: pass → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. functional
- Stability: pass → 0.80 functional
- Package version: 0.6.1 → 0.6.2 functional
- 4 Nov 26 0
- Package version: 0.5.1 → 0.6.1 functional
- 28 Oct 26 0
- Stability: 0.97 → pass security
- 27 Oct 26 0
- Stability: pass → 0.97 functional
- 21 Oct 26 0
- Stability: 0.97 → pass security
- 20 Oct 26 0
- Stability: pass → 0.97 functional
- 19 Oct 26 +9
- Tool safety: pass → unverified ▼ security
- Stability: pass → unverified ▼ security
- Provenance: fail → pass ▲ security
- The attested source repository moved: miracleweasel/katto-mcp security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: pass → fail ▼ functional
- Tool coverage: 89% → 100% ▲ functional
- Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. functional
- Destructive annotations: pass → 100 functional
- Package version: 0.5.9 → 0.6.1 functional
- 17 Oct 26 +2
- Stability: 0.83 → pass security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed npm/katto-mcp@0.6.2
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | miracleweasel/katto-mcp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/miracleweasel/katto-mcp/.github/workflows/publish.yml@refs/tags/v0.6.2 |
| Rekor log index | 3692512044 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:3e815de342ed19cc2fb2fdd85c0f821d7239cefc6ce6f27991305156083aeae13b9adba28ab20cf4e3f5bfa575f8c1d07470d5fad65cbd0f95c1f5812 |
Background: How many MCP packages publish verified provenance →
Dependencies 92 packages
| Packages resolved | 92 |
|---|---|
| Stale | 30 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
katto_add_hook ~280
Add a hook, big bold text over the first seconds that stops the scroll, to one finished clip and re-render it. Pass text to use your own (max 80 characters, 3-7 words reads best) or omit it and Katto's AI writes one from the clip in its language. position: top (default) or center; duration: 1-10 s (default 4). Styled like the editor's AI Hook (white, boxed, pop-in). Does NOT use video quota; the original clip is kept. Not idempotent: each call starts a new render, and a re-render starts from the original clip, so calling it again replaces the hook rather than stacking two. Returns { rerender_id, hook_text, generated, status_url }; poll katto_get_rerender for the new clip_url.
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | number | yes | 0-based clip index. |
| duration | number | – | How many seconds the hook stays on screen, 1-10 (default 4). |
| id | string | yes | Job id. |
| position | string | – | Where the hook sits on the frame (default top). |
| text | string | – | The hook to display (max 80 characters; 3-7 words reads best). Omit to let Katto write one from the clip. |
No output schema declared.
No examples provided.
katto_adjust_clip ~270
Trim or extend one finished clip by moving its start and/or end, then re-render it. Offsets are in seconds, relative to the clip's ORIGINAL bounds (two calls do not add up): positive extends (start earlier / end later), negative trims. The result must last 3-180 s and stay inside the source video. Extending re-cuts from the source, which Katto keeps 7 days: after that only trimming works (410). Captions for an extended part come from words Katto already timed or the transcript sentence. Does NOT use video quota; the original clip is kept. Not idempotent: each call starts a new render. Returns { rerender_id, status_url, start_seconds, end_seconds, duration_seconds, extended }; poll katto_get_rerender for the new clip_url.
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | number | yes | 0-based clip index. |
| end_offset_seconds | number | – | Seconds to move the END: positive ends later (extends), negative ends earlier (trims). Relative to the clip's original end. |
| id | string | yes | Job id. |
| start_offset_seconds | number | – | Seconds to move the START: positive starts earlier (extends), negative starts later (trims). Relative to the clip's original start. |
No output schema declared.
No examples provided.
katto_cancel_job ~68
Cancel 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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Job id from katto_create_clip_job. |
No output schema declared.
No examples provided.
katto_cancel_scheduled_post ~145
Cancel a scheduled post before it goes out: it is removed from the calendar and will not be published (same as deleting it in the dashboard calendar). Only pending or failed posts can be cancelled; one already posting or posted returns an error (a published post cannot be taken down from Katto). Confirm with the user which post (platform, clip, time) before cancelling. Safe to retry: a second call returns 'not found'. Returns { id, status: 'cancelled', previous_status }.
| Name | Type | Req | Description |
|---|---|---|---|
| scheduled_post_id | string | yes | The scheduled post id (scheduled_post_id from katto_publish_clip, or id from katto_list_scheduled_posts). |
No output schema declared.
No examples provided.
katto_create_clip ~320
Create a NEW clip from any time range of a completed job's source video, when the user wants a moment Katto did not pick. start_seconds/end_seconds are SOURCE-video seconds (take them from katto_get_transcript segments); the clip must last 3-180 s. Does NOT use video quota. Limits: at most 10 created clips per video, one clip in preparation at a time (409 'Another clip is being prepared' = wait and retry), and only within 7 days of the job (410 after that: the source is no longer kept). Captions come from the words Katto already timed; has_captions=false means that range had none and the clip renders without captions. Not idempotent: each call queues another clip. Returns expected_clip_index; poll katto_get_clips every 15-30 s until a clip with that clip_index appears.
| Name | Type | Req | Description |
|---|---|---|---|
| aspect | string | – | Output aspect ratio. Omit to keep the job's setting (9:16 by default). |
| auto_reframe | boolean | – | false = plain center crop instead of following the speaker. Omit for automatic reframing. |
| end_seconds | number | yes | End of the clip, in seconds of the source video. The clip must last 3 to 180 seconds. |
| id | string | yes | Job id of a completed job (from katto_create_clip_job). |
| start_seconds | number | yes | Start of the clip, in seconds of the SOURCE video (read timestamps from katto_get_transcript). |
No output schema declared.
No examples provided.
katto_create_clip_job ~443
Submit a long video for clipping, either by public link in url (YouTube, Twitch, Kick, Vimeo, Zoom, Google Drive, Dropbox, Loom, LinkedIn, Facebook, Rumble, Dailymotion, Medal.tv, or a direct https link to a video file; Google Drive and Dropbox links must be shared publicly) or, for a local file, by upload_id after katto_upload_video and the PUT of the file. Pass exactly one of url or upload_id. 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 every 30-60 s until status is 'completed', or pass webhook_url to be notified (url jobs only). Pass idempotency_key when you might retry a url job, so a retry never spends a second video (an upload can only be started once anyway). Fails if the URL is unsupported, the uploaded file is missing, or the video is longer than your plan allows. Full reference: https://katto.tech/mcp/tools
| Name | Type | Req | Description |
|---|---|---|---|
| config | object | – | Optional pre-clip settings. |
| idempotency_key | string | – | Optional unique string (max 255 chars). Retrying with the same key returns the original job instead of creating a second one and spending another video. Use one per intended job, e.g. a UUID. |
| upload_id | string | – | Instead of url: the upload_id returned by katto_upload_video, once the file has been PUT to its upload_url. Starts clipping that file. |
| url | string | – | Public video URL to clip (YouTube, Twitch, Kick, Vimeo, Zoom, Google Drive, Dropbox, Loom, LinkedIn, Facebook, Rumble, Dailymotion, Medal.tv, or a direct https link to a video file). Pass url OR uplo… |
| webhook_url | string | – | Optional https URL that receives a signed POST when the job finishes, so you do not have to poll. Verify the signature with the secret from katto_get_webhook_secret. Private and local addresses are r… |
No output schema declared.
No examples provided.
katto_dub_clip ~181
Re-render one finished clip dubbed into one or more of 105 languages (ISO 639-1 codes such as en, es, fr, pt, hi, bn, ta, te, ur, ja, zh, ko, ar, sw; 86 of them in beta). Creator feature (requires an active subscription); does NOT use your monthly video quota. Each call starts a new render (not idempotent). Returns a rerender_id; poll katto_get_rerender for the result.
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | number | yes | 0-based clip index. |
| id | string | yes | Job id. |
| languages | array | yes | Target languages for the dub, as ISO 639-1 codes. 105 are available, 86 of them in beta; the clip keeps its original audio for any language not listed here. |
No output schema declared.
No examples provided.
katto_generate_post_text ~186
Write publish-ready post text for one clip with AI, tailored to each platform's tone and character limits, in the clip's language: { clip_index, posts: { [platform]: { title, description, hashtags } } }. title is only filled for YouTube (for the other platforms the caption is description, hashtags included). Omit platform to get all seven at once. Nothing is posted or saved and no video quota is used: show the text to the user, then pass it to katto_publish_clip (caption, or title/description for YouTube). Each call is a new AI generation (identical requests within an hour return the cached text).
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | number | yes | 0-based clip index. |
| id | string | yes | Job id. |
| platform | string | – | Platform to write for. Omit to get text for all seven. |
No output schema declared.
No examples provided.
katto_get_account ~43
Read-only. The account behind this key: plan, this key's scopes (read/write), and monthly quota { videos_used, videos_limit, videos_remaining }.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
katto_get_brand_kit ~33
Read-only. Your saved brand kits (colors, caption font and position, default layout, watermark url).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
katto_get_clips ~97
Read-only convenience: the clips of a job as { url, captions_url, title, score, clip_index, hd }, ranked by score (highest first). hd=true means the 1080p render is ready; hd=false means the url is the standard render (HD still finishing, or the free plan). Empty until the first clip is ready.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Job id from katto_create_clip_job. |
No output schema declared.
No examples provided.
katto_get_job ~187
Read-only. Get the status, progress and clips of a job by id. Clips come ranked by virality score (0-100, highest first; ties broken by clip_index). Each clip is { url, captions_url, title, score, clip_index, hd }: when status is 'completed' every url is a finished, downloadable clip; hd is true once the 1080p high-quality render is ready. hd=false does NOT mean broken — the url already works, the 1080p is just still rendering in the background (and stays the standard render on the free plan). The job-level hd_ready flag turns true once every clip is hd, i.e. the URLs are final and won't be swapped again (status='completed' fires earlier). Returns 404 for an unknown id.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Job id from katto_create_clip_job. |
No output schema declared.
No examples provided.
katto_get_rerender ~115
Read-only. Poll a re-render started by katto_rerender_clip or katto_dub_clip. Returns { status, clip_url, captions_url, dub_urls } — dub_urls is { lang: url } and is where a DUB lands (clip_url stays the undubbed re-render), null otherwise — clip_url is null until status is 'completed'.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Job id. |
| rerender_id | string | yes | The rerender_id returned by rerender/dub. |
No output schema declared.
No examples provided.
katto_get_transcript ~57
Read-only. The transcript of a completed job as timestamped segments [{ start, end, text }]. Returns 404 while the job is still processing.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Job id from katto_create_clip_job. |
No output schema declared.
No examples provided.
katto_get_usage ~45
Read-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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
katto_get_webhook_secret ~67
Read-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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
katto_list_caption_styles ~64
Read-only. The valid caption_style preset names for katto_rerender_clip (id + label), e.g. 'hormozi' for bold word-by-word highlight. Call this before re-rendering so you pass a real preset instead of guessing.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
katto_list_clip_lengths ~51
Read-only. The valid values for the optional config.clipLength on katto_create_clip_job (target clip-duration buckets). Note: clipLength is fixed at creation and cannot be changed by re-render.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
katto_list_connected_accounts ~121
Read-only. Which of the 7 publishable platforms (youtube, tiktok, linkedin, instagram, bluesky, mastodon, threads) the user has connected in the Katto dashboard: { connections: [{ platform, connected, display_name, reconnect_required, connected_at }], connect_url }. Call it BEFORE katto_publish_clip to pick a platform that will work: if the one the user wants shows connected=false or reconnect_required=true, ask them to (re)connect it at connect_url instead of attempting the publish. Never returns tokens.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
katto_list_jobs ~120
Read-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 }.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | Pass the previous response's next_cursor for the next page. |
| limit | number | – | How many jobs to return (1-100, default 20). |
| status | string | – | Optional filter, e.g. 'completed', 'queued', 'failed'. |
No output schema declared.
No examples provided.
katto_list_scheduled_posts ~169
Read-only. The user's scheduled social posts (from katto_publish_clip with schedule_at, or the dashboard calendar), newest first: { scheduled_posts: [{ id, job_id, clip_index, platform, scheduled_at, status, title, error, posted_at, created_at }], next_cursor }. status: pending = waiting for its time, posting = being published, posted = done, failed = see error. Paginate with cursor = the previous next_cursor; optional status filter.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | Pass the previous response's next_cursor for the next page. |
| limit | number | – | How many posts to return (1-100, default 20). |
| status | string | – | Optional filter: pending (waiting for its time), posting, posted, failed. |
No output schema declared.
No examples provided.
katto_list_sources ~98
Read-only. The link sources Katto can clip from (YouTube, Twitch, Kick, Vimeo, Zoom, Google Drive, Dropbox, Loom, LinkedIn, Facebook, Rumble, Dailymotion, Medal.tv, or a direct https link to a video file), each with an example URL. Use it to confirm a URL is supported before calling katto_create_clip_job; for a local file use katto_upload_video instead.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
katto_more_clips ~170
Render more clips from a job's reserve: moments Katto scored but did not render, best first. Use when the user wants more clips from the same video. Does NOT use video quota. count is 1-10 (default 5), capped by what is left. Returns { status: 'queued'|'pending'|'empty', requested, remaining }: 'pending' means a request is already running (do not call again), 'empty' means the reserve is used up. New clips are appended to the job; poll katto_get_clips.
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | – | How many extra clips to render (1-10, default 5). Capped by what is left in the reserve. |
| id | string | yes | Job id from katto_create_clip_job. |
No output schema declared.
No examples provided.
katto_publish_clip ~575
Publish a finished clip to one of the user's connected social accounts (YouTube, TikTok, LinkedIn, Instagram, Bluesky, Mastodon, Threads), now or at schedule_at (future, at most 7 days ahead). Call katto_list_connected_accounts first to see which platforms are connected (and not in need of a reconnect); katto_generate_post_text can draft the caption. This posts PUBLICLY on the user's behalf and cannot be undone from Katto: before calling, show the user the clip, the platform, the caption (and TikTok privacy level) and get their explicit confirmation; never publish on your own initiative or retry a publish blindly (each call is a new post). Requires a paid plan; scheduling requires Creator. If the platform is not connected you get an error with code platform_not_connected and a connect_url: ask the user to connect it in the Katto dashboard, then retry. TikTok requires privacy_level chosen by the user (no default) and disclosure of commercial content (brand_content / brand_organic); until Katto's TikTok app is audited, TikTok only accepts posts to a private account. Returns { status: 'published', result } or { status: 'scheduled', scheduled_post_id, scheduled_at }.
| Name | Type | Req | Description |
|---|---|---|---|
| brand_content | boolean | – | TikTok only: the post is a paid partnership (labelled 'Paid partnership'; cannot be SELF_ONLY). |
| brand_organic | boolean | – | TikTok only: the post promotes the user's own business (labelled 'Promotional content'). |
| caption | string | – | Post text. On YouTube it is used as the title and description unless title/description are given. |
| clip_index | number | yes | 0-based clip index. |
| description | string | – | YouTube description. Defaults to the caption. |
| disable_comment | boolean | – | TikTok only: turn comments off. |
| disable_duet | boolean | – | TikTok only: turn duets off. |
| disable_stitch | boolean | – | TikTok only: turn stitches off. |
| id | string | yes | Job id. |
| platform | string | yes | Where to post. The account must already be connected in the Katto dashboard. |
| privacy_level | string | – | TikTok only, REQUIRED for TikTok: who can see the post. Must be chosen by the user, never assumed. |
| privacy_status | string | – | YouTube visibility (defaults to public). |
| schedule_at | string | – | Optional ISO 8601 date-time to publish later instead of now (future, at most 7 days ahead). Scheduling is a Creator feature. |
| tags | array | – | YouTube tags. |
| title | string | – | YouTube video title (max 100 characters). Defaults to the caption, then the clip's title. |
No output schema declared.
No examples provided.
katto_rate_clip ~148
Record the user's verdict on a clip: rating good or bad, with an optional reason in their words. Same signal as the thumbs up/down on the Katto results page; it is used to improve which moments Katto picks. Only rate when the user expressed an opinion, never on your own. Rating again records the new verdict (the latest one counts). Returns { ok, clip_index, rating }.
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | number | yes | 0-based clip index. |
| id | string | yes | Job id. |
| rating | string | yes | The user's verdict on the clip. |
| reason | string | – | Optional: why, in the user's words (max 2000 characters). |
No output schema declared.
No examples provided.
katto_rerender_clip ~178
Re-render one already-finished clip with a new reframe layout and/or caption style (get valid caption_style values from katto_list_caption_styles). 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.
| Name | Type | Req | Description |
|---|---|---|---|
| caption_style | string | – | A caption style preset name. See katto_list_caption_styles for the labels. |
| clip_index | number | yes | 0-based index of the clip to re-render. |
| id | string | yes | Job id from katto_create_clip_job. |
| layout_mode | string | – | Force a reframing layout instead of letting detection choose one. Omit for automatic, which is what produces the best result on most clips. |
No output schema declared.
No examples provided.
katto_retitle_clip ~174
Change a clip's title. Without 'title', Katto's AI writes a new scroll-stopping title in the clip's language (optional style: energetic, descriptive, fun, shocking); each AI regeneration uses one unit of the plan's monthly title-regeneration allowance (an error with 'limit' when it is used up). With 'title', that exact text is saved and nothing is spent. Synchronous: returns { title, clip_index, regenerated }. Does NOT use video quota.
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | number | yes | 0-based clip index. |
| id | string | yes | Job id. |
| style | string | – | Tone of the AI-generated title. Ignored when title is given. |
| title | string | – | Save this exact title instead of generating one (max 200 characters). Costs nothing. |
No output schema declared.
No examples provided.
katto_translate_captions ~167
Translate one finished clip's burned-in captions into one of 19 languages and re-render it with them; word timings are kept and the original clip is preserved. Only the captions change: for a translated VOICE use katto_dub_clip. Creator feature (requires an active Creator subscription; otherwise an error with code upgrade_required and a pricing link to give the user). Does NOT use video quota. Not idempotent: each call starts a new render. Returns a rerender_id; poll katto_get_rerender until status is 'completed' for the new clip_url.
| Name | Type | Req | Description |
|---|---|---|---|
| clip_index | number | yes | 0-based clip index. |
| id | string | yes | Job id. |
| language | string | yes | Target caption language, ISO 639-1. |
No output schema declared.
No examples provided.
katto_upload_video ~295
Step 1 of clipping a LOCAL file (when the user has a file, not a public link). Pass the exact filename, MIME type and size in bytes; the size is checked against the plan's upload limit and the monthly quota is checked (not yet spent). Returns { upload_id, upload_url, headers, expires_in, next_steps }. Then: (2) HTTP PUT the raw file bytes to upload_url with exactly the returned Content-Type header (e.g. curl -X PUT -H 'Content-Type: video/mp4' --upload-file ./file.mp4 '<upload_url>'), before expires_in seconds; (3) call katto_create_clip_job with upload_id: that verifies the file arrived, spends 1 video of quota and starts clipping; (4) poll katto_get_job with id = upload_id. You need a tool that can make an HTTP PUT with a file body (shell, code execution); if you have none, give the user the upload_url and the curl command.
| Name | Type | Req | Description |
|---|---|---|---|
| content_type | string | yes | MIME type of the file: mp4, mov (quicktime), webm or mkv (x-matroska). |
| filename | string | yes | The file's name, e.g. episode-12.mp4 (display only). |
| size | number | yes | Exact file size in bytes. Checked against your plan's upload limit before anything is reserved. |
No output schema declared.
No examples provided.
How do I install the io.github.miracleweasel/katto-mcp server?
io.github.miracleweasel/katto-mcp runs locally as an npm package, launched with npx -y katto-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · katto-mcp
claude mcp add miracleweasel-katto-mcp -- npx -y katto-mcp
What is the io.github.miracleweasel/katto-mcp server?
io.github.miracleweasel/katto-mcp is listed in the public MCP registry as io.github.miracleweasel/katto-mcp. AI video clipping MCP: long videos and podcasts into scored, captioned 9:16 shorts. This page covers its npm package (katto-mcp). Its publisher has verified ownership with us.
Is the io.github.miracleweasel/katto-mcp server safe to use?
io.github.miracleweasel/katto-mcp scores 91 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.miracleweasel/katto-mcp server expose?
io.github.miracleweasel/katto-mcp exposes 29 tools: katto_create_clip_job, katto_get_job, katto_list_jobs, katto_get_clips, katto_get_usage, and 24 more. Their descriptions and schemas cost roughly 4,867 tokens of context every time the server is loaded.
Is the io.github.miracleweasel/katto-mcp server still maintained?
io.github.miracleweasel/katto-mcp is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the io.github.miracleweasel/katto-mcp server under?
io.github.miracleweasel/katto-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.