katto-mcp 0.4.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -17
- package/index.mjs +18 -1
- package/package.json +11 -3
package/README.md
CHANGED
|
@@ -1,18 +1,31 @@
|
|
|
1
1
|
# katto-mcp
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**The AI video clipping MCP server.** Turn long videos into scored, captioned, vertical 9:16 short clips from any MCP client (Claude, Cursor, Claude Code, ChatGPT, VS Code, and other conformant clients). Drop in a YouTube link, a podcast, or a Twitch VOD and get publish-ready shorts back through natural conversation.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Powered by [Katto](https://katto.tech), an AI video clipper that turns long-form video (podcasts, interviews, streams, webinars) into short-form clips for TikTok, Reels and YouTube Shorts. Katto is a flat-priced, no-credits alternative to tools like OpusClip: one 25-video quota covers videos up to 90 minutes each, with the API and MCP included on every paid plan (not gated behind an enterprise tier).
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## What it does
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Ask your agent something like *"clip the best moments from this podcast and reframe them for TikTok"* and Katto will:
|
|
10
|
+
|
|
11
|
+
- find the strongest 30 to 90 second moments in a long video and score each clip 0 to 100 on Hook, Flow, Value and Trend,
|
|
12
|
+
- reframe to vertical 9:16 with face tracking, split-screen for two speakers, and stacked layouts for gaming,
|
|
13
|
+
- burn word-by-word animated captions (99 languages) and optionally dub into 8 languages,
|
|
14
|
+
- and hand back publish-ready MP4 files plus SRT caption urls.
|
|
15
|
+
|
|
16
|
+
Typical uses: repurpose a YouTube video into shorts, turn a podcast episode into clips, cut highlights from a Twitch VOD, or convert a long interview into vertical social posts.
|
|
17
|
+
|
|
18
|
+
## Two ways to connect
|
|
19
|
+
|
|
20
|
+
### Hosted (zero-install, recommended)
|
|
21
|
+
|
|
22
|
+
Point any OAuth-capable MCP client at the hosted endpoint and sign in with your Katto account. The API key never touches your disk, and you can revoke access anytime:
|
|
10
23
|
|
|
11
24
|
```
|
|
12
|
-
https://mcp.katto.tech/mcp (Streamable HTTP
|
|
25
|
+
https://mcp.katto.tech/mcp (Streamable HTTP, OAuth 2.1)
|
|
13
26
|
```
|
|
14
27
|
|
|
15
|
-
|
|
28
|
+
### Local (npx)
|
|
16
29
|
|
|
17
30
|
For Cursor, CI and scripts. Create an API key at **[katto.tech/dashboard/api-keys](https://katto.tech/dashboard/api-keys)**, then add the server to your MCP client config:
|
|
18
31
|
|
|
@@ -30,24 +43,36 @@ For Cursor, CI and scripts. Create an API key at **[katto.tech/dashboard/api-key
|
|
|
30
43
|
|
|
31
44
|
The hosted endpoint above also accepts `Authorization: Bearer sk_live_...` directly for key-based clients.
|
|
32
45
|
|
|
33
|
-
## Tools
|
|
46
|
+
## Tools (15)
|
|
47
|
+
|
|
48
|
+
Clipping:
|
|
49
|
+
- **`katto_create_clip_job(url, config?)`** clip a long video (YouTube, Twitch, Vimeo, Rumble, Zoom, Dailymotion). Returns a job id.
|
|
50
|
+
- **`katto_get_job(id)`** poll until `status` is `completed`; `clips` holds the finished MP4 + caption (SRT) urls.
|
|
51
|
+
- **`katto_get_clips(id)`** just the finished clips of a job (MP4 + SRT + title + virality score).
|
|
52
|
+
- **`katto_get_transcript(id)`** the job's timestamped transcript segments.
|
|
53
|
+
- **`katto_list_jobs(limit?, cursor?, status?)`** your recent jobs, newest first (keyset pagination).
|
|
54
|
+
- **`katto_cancel_job(id)`** cancel a running job and refund the monthly video slot.
|
|
55
|
+
|
|
56
|
+
Editing (no quota):
|
|
57
|
+
- **`katto_rerender_clip(id, clip_index, layout_mode?, caption_style?)`** re-render one clip with a new reframe layout or caption style.
|
|
58
|
+
- **`katto_dub_clip(id, clip_index, languages)`** re-render a clip dubbed into one or more of 8 languages.
|
|
59
|
+
- **`katto_get_rerender(id, rerender_id)`** poll a re-render for the new versioned clip url.
|
|
34
60
|
|
|
35
|
-
|
|
36
|
-
- **`
|
|
37
|
-
- **`
|
|
38
|
-
- **`
|
|
39
|
-
- **`
|
|
40
|
-
- **`
|
|
41
|
-
- **`
|
|
42
|
-
- **`katto_get_account()`** — the connected account, this key's scopes, and quota.
|
|
61
|
+
Account and reference:
|
|
62
|
+
- **`katto_get_usage()`** your plan and remaining monthly video quota.
|
|
63
|
+
- **`katto_get_account()`** the connected account, this key's scopes, and quota.
|
|
64
|
+
- **`katto_get_brand_kit()`** your saved brand kits (colors, caption font, layout, watermark).
|
|
65
|
+
- **`katto_get_webhook_secret()`** your webhook signing secret and how to verify signed callbacks.
|
|
66
|
+
- **`katto_list_sources()`** the video platforms Katto can clip from, with an example url each.
|
|
67
|
+
- **`katto_list_clip_lengths()`** the valid target clip-length buckets.
|
|
43
68
|
|
|
44
|
-
Jobs draw from your Katto plan's monthly video quota (25 on Creator, 2 on Free)
|
|
69
|
+
Jobs draw from your Katto plan's monthly video quota (25 on Creator, 2 on Free), videos up to 90 minutes. The underlying REST API also supports `Idempotency-Key` safe retries, read-only scoped keys, and signed HMAC webhooks. See the [docs](https://katto.tech/docs/api).
|
|
45
70
|
|
|
46
71
|
## Env
|
|
47
72
|
|
|
48
73
|
| var | required | default |
|
|
49
74
|
| --- | --- | --- |
|
|
50
|
-
| `KATTO_API_KEY` | yes |
|
|
75
|
+
| `KATTO_API_KEY` | yes | (none) |
|
|
51
76
|
| `KATTO_API_URL` | no | `https://katto.tech` |
|
|
52
77
|
|
|
53
78
|
Full docs: **[katto.tech/docs/api](https://katto.tech/docs/api)**
|
package/index.mjs
CHANGED
|
@@ -199,6 +199,19 @@ const TOOLS = [
|
|
|
199
199
|
required: ["id", "rerender_id"],
|
|
200
200
|
},
|
|
201
201
|
},
|
|
202
|
+
{
|
|
203
|
+
name: "katto_get_brand_kit",
|
|
204
|
+
description:
|
|
205
|
+
"Get your saved brand kits (colors, caption font and position, default layout, watermark url).",
|
|
206
|
+
inputSchema: { type: "object", properties: {} },
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
name: "katto_get_webhook_secret",
|
|
210
|
+
description:
|
|
211
|
+
"Get your webhook signing secret and how to verify Katto's signed completion callbacks " +
|
|
212
|
+
"(HMAC-SHA256 of {timestamp}.{body}). Pass webhook_url on a job to receive them.",
|
|
213
|
+
inputSchema: { type: "object", properties: {} },
|
|
214
|
+
},
|
|
202
215
|
];
|
|
203
216
|
|
|
204
217
|
// Static reference data — returned by the list_* tools without an API call.
|
|
@@ -217,7 +230,7 @@ const CLIP_LENGTHS = [
|
|
|
217
230
|
{ value: '90_180', label: '90 to 180 seconds' },
|
|
218
231
|
];
|
|
219
232
|
|
|
220
|
-
const server = new Server({ name: "katto", version: "0.
|
|
233
|
+
const server = new Server({ name: "katto", version: "0.5.0" }, { capabilities: { tools: {} } });
|
|
221
234
|
|
|
222
235
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
223
236
|
|
|
@@ -263,6 +276,10 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
263
276
|
data = await api(`/api/v1/jobs/${encodeURIComponent(args.id)}/clips/${encodeURIComponent(args.clip_index)}/rerender`, { method: "POST", body: JSON.stringify({ dub: args.languages || [] }) });
|
|
264
277
|
} else if (name === "katto_get_rerender") {
|
|
265
278
|
data = await api(`/api/v1/jobs/${encodeURIComponent(args.id)}/rerenders/${encodeURIComponent(args.rerender_id)}`);
|
|
279
|
+
} else if (name === "katto_get_brand_kit") {
|
|
280
|
+
data = await api("/api/v1/brand-kit");
|
|
281
|
+
} else if (name === "katto_get_webhook_secret") {
|
|
282
|
+
data = await api("/api/v1/webhook");
|
|
266
283
|
} else {
|
|
267
284
|
throw new Error(`Unknown tool: ${name}`);
|
|
268
285
|
}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "katto-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"mcpName": "io.github.miracleweasel/katto-mcp",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "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.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
8
|
"katto-mcp": "index.mjs"
|
|
@@ -22,7 +22,15 @@
|
|
|
22
22
|
"video",
|
|
23
23
|
"clips",
|
|
24
24
|
"shorts",
|
|
25
|
-
"ai"
|
|
25
|
+
"ai",
|
|
26
|
+
"ai-video-clipper",
|
|
27
|
+
"video-to-shorts",
|
|
28
|
+
"youtube-to-shorts",
|
|
29
|
+
"podcast-clips",
|
|
30
|
+
"ai-captions",
|
|
31
|
+
"ai-video-editor",
|
|
32
|
+
"repurpose-video",
|
|
33
|
+
"video-dubbing"
|
|
26
34
|
],
|
|
27
35
|
"homepage": "https://katto.tech/docs/api",
|
|
28
36
|
"repository": { "type": "git", "url": "git+https://github.com/miracleweasel/katto-mcp.git" },
|