vugola-mcp 1.2.1 → 1.3.0

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 CHANGED
@@ -18,17 +18,17 @@ Let Claude (or any MCP-capable agent) clip videos, check your credits, and sched
18
18
  ### Claude Desktop (one command, auto-configures)
19
19
 
20
20
  ```bash
21
- npx vugola-mcp@1.2.1 install
21
+ npx vugola-mcp@1.3.0 install
22
22
  ```
23
23
 
24
24
  npx will ask to install the package (type `y`), then the installer prompts for your API key. It edits your Claude Desktop config for you — no JSON to hand-write. **Quit and reopen Claude Desktop** to pick up the change.
25
25
 
26
- To skip the key prompt: `npx vugola-mcp@1.2.1 install --key vug_sk_yourkey`.
26
+ To skip the key prompt: `npx vugola-mcp@1.3.0 install --key vug_sk_yourkey`.
27
27
 
28
28
  ### Claude Code
29
29
 
30
30
  ```bash
31
- claude mcp add vugola -- npx -y vugola-mcp@1.2.1
31
+ claude mcp add vugola -- npx -y vugola-mcp@1.3.0
32
32
  ```
33
33
 
34
34
  Then export your key in your shell or `.env`:
@@ -46,7 +46,7 @@ If your MCP client isn't covered above, drop this block into its config file:
46
46
  "mcpServers": {
47
47
  "vugola": {
48
48
  "command": "npx",
49
- "args": ["-y", "vugola-mcp@1.2.1"],
49
+ "args": ["-y", "vugola-mcp@1.3.0"],
50
50
  "env": { "VUGOLA_API_KEY": "vug_sk_your_key_here" }
51
51
  }
52
52
  }
@@ -99,6 +99,12 @@ Save a completed clip to your local `~/Downloads/` folder and return the file pa
99
99
 
100
100
  Inputs: `job_id`, `clip_index` (1-based). Max 500 MB.
101
101
 
102
+ ### `caption_video`
103
+
104
+ Add captions to a short video (up to 5 minutes). No clipping, no reframing — just captions burned on top of the source video at source quality.
105
+
106
+ Inputs: `video_url`, `aspect_ratio` (`9:16` | `16:9` | `1:1`), `caption_style` (`none` | `highlighted` | `scale` | `minimalist` | `box`). Optional: `caption_color` (hex).
107
+
102
108
  ---
103
109
 
104
110
  ## Security
package/dist/errors.js CHANGED
@@ -7,6 +7,7 @@ const KNOWN_400_CODES = {
7
7
  missing_fields: "Vugola rejected the request. A required field was missing.",
8
8
  invalid_aspect_ratio: "aspect_ratio must be one of: 9:16, 16:9, 1:1.",
9
9
  invalid_caption_style: "caption_style must be one of: none, highlighted, scale, minimalist, box.",
10
+ no_speech_detected: "No speech detected in this video. Captions require spoken audio. Credits have been refunded.",
10
11
  };
11
12
  export function translateHttpError(status, body) {
12
13
  const errObj = (body && typeof body === "object" ? body : {});
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG,4CAA4C,CAAC;AAC/D,MAAM,OAAO,GAAG,kCAAkC,CAAC;AAEnD,MAAM,eAAe,GAA2B;IAC9C,eAAe,EAAE,yCAAyC;IAC1D,cAAc,EAAE,oCAAoC;IACpD,WAAW,EAAE,iCAAiC;IAC9C,cAAc,EAAE,4DAA4D;IAC5E,oBAAoB,EAAE,+CAA+C;IACrE,qBAAqB,EACnB,0EAA0E;CAC7E,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,IAAa;IAC9D,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAE3D,CAAC;IACF,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAElE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,wDAAwD,SAAS,EAAE,CAAC;QAC7E,KAAK,GAAG;YACN,OAAO,oFAAoF,OAAO,EAAE,CAAC;QACvG,KAAK,GAAG;YACN,OAAO,sDAAsD,OAAO,aAAa,CAAC;QACpF,KAAK,GAAG;YACN,OAAO,8EAA8E,CAAC;QACxF,KAAK,GAAG;YACN,OAAO,qDAAqD,CAAC;QAC/D,KAAK,GAAG;YACN,OAAO,qDAAqD,CAAC;QAC/D,KAAK,GAAG;YACN,OAAO,sFAAsF,CAAC;QAChG,KAAK,GAAG,CAAC,CAAC,CAAC;YACT,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YAC1B,OAAO,6DAA6D,CAAC;QACvE,CAAC;QACD,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACN,OAAO,mEAAmE,CAAC;QAC7E;YACE,OAAO,kDAAkD,MAAM,uBAAuB,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,IACE,GAAG;QACH,OAAO,GAAG,KAAK,QAAQ;QACvB,MAAM,IAAI,GAAG;QACZ,GAAyB,CAAC,IAAI,KAAK,YAAY,EAChD,CAAC;QACD,OAAO,qDAAqD,CAAC;IAC/D,CAAC;IACD,OAAO,wDAAwD,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG,4CAA4C,CAAC;AAC/D,MAAM,OAAO,GAAG,kCAAkC,CAAC;AAEnD,MAAM,eAAe,GAA2B;IAC9C,eAAe,EAAE,yCAAyC;IAC1D,cAAc,EAAE,oCAAoC;IACpD,WAAW,EAAE,iCAAiC;IAC9C,cAAc,EAAE,4DAA4D;IAC5E,oBAAoB,EAAE,+CAA+C;IACrE,qBAAqB,EACnB,0EAA0E;IAC5E,kBAAkB,EAChB,8FAA8F;CACjG,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,IAAa;IAC9D,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAE3D,CAAC;IACF,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAElE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,wDAAwD,SAAS,EAAE,CAAC;QAC7E,KAAK,GAAG;YACN,OAAO,oFAAoF,OAAO,EAAE,CAAC;QACvG,KAAK,GAAG;YACN,OAAO,sDAAsD,OAAO,aAAa,CAAC;QACpF,KAAK,GAAG;YACN,OAAO,8EAA8E,CAAC;QACxF,KAAK,GAAG;YACN,OAAO,qDAAqD,CAAC;QAC/D,KAAK,GAAG;YACN,OAAO,qDAAqD,CAAC;QAC/D,KAAK,GAAG;YACN,OAAO,sFAAsF,CAAC;QAChG,KAAK,GAAG,CAAC,CAAC,CAAC;YACT,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YAC1B,OAAO,6DAA6D,CAAC;QACvE,CAAC;QACD,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACN,OAAO,mEAAmE,CAAC;QAC7E;YACE,OAAO,kDAAkD,MAAM,uBAAuB,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,IACE,GAAG;QACH,OAAO,GAAG,KAAK,QAAQ;QACvB,MAAM,IAAI,GAAG;QACZ,GAAyB,CAAC,IAAI,KAAK,YAAY,EAChD,CAAC;QACD,OAAO,qDAAqD,CAAC;IAC/D,CAAC;IACD,OAAO,wDAAwD,CAAC;AAClE,CAAC"}
package/dist/index.js CHANGED
@@ -12,6 +12,7 @@ import { createSchedulePostTool } from "./tools/schedule-post.js";
12
12
  import { createListScheduledPostsTool } from "./tools/list-scheduled-posts.js";
13
13
  import { createCancelScheduledPostTool } from "./tools/cancel-scheduled-post.js";
14
14
  import { createDownloadClipTool } from "./tools/download-clip.js";
15
+ import { createCaptionVideoTool } from "./tools/caption-video.js";
15
16
  import { runInstall } from "./install.js";
16
17
  const VUGOLA_BASE_URL = "https://www.vugolaai.com/api/v1";
17
18
  const MISSING_KEY_MSG = "Set VUGOLA_API_KEY in your MCP config. Get one at https://www.vugolaai.com/dashboard/api-key";
@@ -32,6 +33,7 @@ async function main() {
32
33
  });
33
34
  const rateLimiter = createRateLimiter({
34
35
  clip_video: { max: 5, windowMs: 60_000 },
36
+ caption_video: { max: 5, windowMs: 60_000 },
35
37
  schedule_post: { max: 10, windowMs: 60_000 },
36
38
  get_clip_status: { max: 30, windowMs: 60_000 },
37
39
  get_usage: { max: 30, windowMs: 60_000 },
@@ -51,11 +53,12 @@ async function main() {
51
53
  rateLimiter,
52
54
  baseUrl: VUGOLA_BASE_URL,
53
55
  }),
56
+ createCaptionVideoTool({ client, rateLimiter }),
54
57
  ];
55
58
  const byName = new Map(tools.map((t) => [t.name, t]));
56
59
  const server = new Server({
57
60
  name: "vugola-mcp",
58
- version: "1.2.1",
61
+ version: "1.3.0",
59
62
  title: "Vugola",
60
63
  icons: [
61
64
  {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/install.js CHANGED
@@ -2,7 +2,7 @@ import { readFileSync, writeFileSync, mkdirSync, existsSync, } from "node:fs";
2
2
  import { dirname, join } from "node:path";
3
3
  import { homedir } from "node:os";
4
4
  import { createInterface } from "node:readline/promises";
5
- const VERSION = "1.2.1";
5
+ const VERSION = "1.3.0";
6
6
  function configPathFor(client) {
7
7
  if (client !== "claude-desktop") {
8
8
  throw new Error(`Unsupported client: ${client}`);
@@ -0,0 +1,50 @@
1
+ import { z } from "zod";
2
+ import type { Client } from "../client.js";
3
+ import type { RateLimiter } from "../rate-limit.js";
4
+ export interface ToolDeps {
5
+ client: Client;
6
+ rateLimiter: RateLimiter;
7
+ }
8
+ declare const InputSchema: z.ZodObject<{
9
+ video_url: z.ZodString;
10
+ aspect_ratio: z.ZodEnum<["9:16", "16:9", "1:1"]>;
11
+ caption_style: z.ZodEnum<["none", "highlighted", "scale", "minimalist", "box"]>;
12
+ caption_color: z.ZodOptional<z.ZodString>;
13
+ }, "strict", z.ZodTypeAny, {
14
+ video_url: string;
15
+ aspect_ratio: "9:16" | "16:9" | "1:1";
16
+ caption_style: "none" | "highlighted" | "scale" | "minimalist" | "box";
17
+ caption_color?: string | undefined;
18
+ }, {
19
+ video_url: string;
20
+ aspect_ratio: "9:16" | "16:9" | "1:1";
21
+ caption_style: "none" | "highlighted" | "scale" | "minimalist" | "box";
22
+ caption_color?: string | undefined;
23
+ }>;
24
+ export declare function createCaptionVideoTool(deps: ToolDeps): {
25
+ name: string;
26
+ description: string;
27
+ inputSchema: z.ZodObject<{
28
+ video_url: z.ZodString;
29
+ aspect_ratio: z.ZodEnum<["9:16", "16:9", "1:1"]>;
30
+ caption_style: z.ZodEnum<["none", "highlighted", "scale", "minimalist", "box"]>;
31
+ caption_color: z.ZodOptional<z.ZodString>;
32
+ }, "strict", z.ZodTypeAny, {
33
+ video_url: string;
34
+ aspect_ratio: "9:16" | "16:9" | "1:1";
35
+ caption_style: "none" | "highlighted" | "scale" | "minimalist" | "box";
36
+ caption_color?: string | undefined;
37
+ }, {
38
+ video_url: string;
39
+ aspect_ratio: "9:16" | "16:9" | "1:1";
40
+ caption_style: "none" | "highlighted" | "scale" | "minimalist" | "box";
41
+ caption_color?: string | undefined;
42
+ }>;
43
+ handler(input: z.infer<typeof InputSchema>): Promise<{
44
+ content: {
45
+ type: "text";
46
+ text: string;
47
+ }[];
48
+ }>;
49
+ };
50
+ export {};
@@ -0,0 +1,81 @@
1
+ import { z } from "zod";
2
+ import { sanitize } from "../sanitize.js";
3
+ import { translateHttpError, translateNetworkError } from "../errors.js";
4
+ const InputSchema = z
5
+ .object({
6
+ video_url: z.string().min(1).max(2048),
7
+ aspect_ratio: z.enum(["9:16", "16:9", "1:1"]),
8
+ caption_style: z.enum([
9
+ "none",
10
+ "highlighted",
11
+ "scale",
12
+ "minimalist",
13
+ "box",
14
+ ]),
15
+ caption_color: z.string().regex(/^#[0-9A-Fa-f]{6}$/).optional(),
16
+ })
17
+ .strict();
18
+ const RATE_LIMIT_MSG = "You're calling Vugola too quickly. Wait a moment and try again.";
19
+ export function createCaptionVideoTool(deps) {
20
+ return {
21
+ name: "caption_video",
22
+ description: "Add captions to a short video (up to 5 minutes). Ask the user for aspect_ratio and caption_style if they're not given. If the user says 'just pick,' default to aspect_ratio '9:16' and caption_style 'minimalist'. Jobs take 3-8 minutes; Vugola will email the user when done, and the agent can check status via get_clip_status.",
23
+ inputSchema: InputSchema,
24
+ async handler(input) {
25
+ InputSchema.parse(input);
26
+ const rl = deps.rateLimiter.check("caption_video");
27
+ if (!rl.allowed) {
28
+ return { content: [{ type: "text", text: RATE_LIMIT_MSG }] };
29
+ }
30
+ try {
31
+ const body = {
32
+ video_url: input.video_url,
33
+ aspect_ratio: input.aspect_ratio,
34
+ caption_style: input.caption_style,
35
+ };
36
+ if (input.caption_color) {
37
+ body.caption_color = input.caption_color;
38
+ }
39
+ const res = await deps.client.request("/caption", {
40
+ method: "POST",
41
+ body,
42
+ timeoutMs: 15_000,
43
+ retryIdempotent: false,
44
+ });
45
+ if (!res.ok) {
46
+ return {
47
+ content: [
48
+ {
49
+ type: "text",
50
+ text: translateHttpError(res.httpStatus, res.body),
51
+ },
52
+ ],
53
+ };
54
+ }
55
+ const resBody = res.body;
56
+ const jobId = sanitize(resBody.job_id, { maxLength: 64 });
57
+ const payload = {
58
+ job_id: jobId,
59
+ status: "processing",
60
+ mode: "captions",
61
+ estimated_minutes: 5,
62
+ notification: {
63
+ channel: "email",
64
+ expected_within_minutes: 8,
65
+ },
66
+ message: "Captioning started. Vugola will email you when it's ready (usually 3-8 minutes). You can also ask me to check the status.",
67
+ next_action_hint: `To check progress, call get_clip_status with job_id "${jobId}".`,
68
+ };
69
+ return {
70
+ content: [{ type: "text", text: JSON.stringify(payload) }],
71
+ };
72
+ }
73
+ catch (err) {
74
+ return {
75
+ content: [{ type: "text", text: translateNetworkError(err) }],
76
+ };
77
+ }
78
+ },
79
+ };
80
+ }
81
+ //# sourceMappingURL=caption-video.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caption-video.js","sourceRoot":"","sources":["../../src/tools/caption-video.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vugola-mcp",
3
- "version": "1.2.1",
3
+ "version": "1.3.0",
4
4
  "mcpName": "io.github.VCoder25/vugola-mcp",
5
5
  "description": "Official MCP server for Vugola — AI video clipping for agents.",
6
6
  "type": "module",