video-maker-mcp 0.1.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 +143 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +74 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/install.d.ts +15 -0
- package/dist/cli/install.js +59 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/load-env.d.ts +1 -0
- package/dist/cli/load-env.js +11 -0
- package/dist/cli/load-env.js.map +1 -0
- package/dist/core/assets.d.ts +28 -0
- package/dist/core/assets.js +50 -0
- package/dist/core/assets.js.map +1 -0
- package/dist/core/env.d.ts +27 -0
- package/dist/core/env.js +89 -0
- package/dist/core/env.js.map +1 -0
- package/dist/core/export.d.ts +11 -0
- package/dist/core/export.js +39 -0
- package/dist/core/export.js.map +1 -0
- package/dist/core/paths.d.ts +12 -0
- package/dist/core/paths.js +57 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/plan-schema.d.ts +90 -0
- package/dist/core/plan-schema.js +91 -0
- package/dist/core/plan-schema.js.map +1 -0
- package/dist/core/project.d.ts +41 -0
- package/dist/core/project.js +72 -0
- package/dist/core/project.js.map +1 -0
- package/dist/core/render.d.ts +12 -0
- package/dist/core/render.js +100 -0
- package/dist/core/render.js.map +1 -0
- package/dist/core/subtitles.d.ts +4 -0
- package/dist/core/subtitles.js +30 -0
- package/dist/core/subtitles.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.js +120 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/providers/tts/volcengine.d.ts +19 -0
- package/dist/providers/tts/volcengine.js +209 -0
- package/dist/providers/tts/volcengine.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import * as z from "zod/v4";
|
|
4
|
+
import { checkEnvironment } from "../core/env.js";
|
|
5
|
+
import { listRequiredAssets, verifyAssets } from "../core/assets.js";
|
|
6
|
+
import { createVideoProject, saveVideoPlan } from "../core/project.js";
|
|
7
|
+
import { videoPlanJsonSchema } from "../core/plan-schema.js";
|
|
8
|
+
import { generateProjectAudio } from "../providers/tts/volcengine.js";
|
|
9
|
+
import { renderProjectVideo } from "../core/render.js";
|
|
10
|
+
import { exportProjectVideo } from "../core/export.js";
|
|
11
|
+
const SERVER_INSTRUCTIONS = [
|
|
12
|
+
"video-maker-mcp turns Codex-authored storyboards into local vertical MP4 videos.",
|
|
13
|
+
"Workflow: call create_video_project, get_video_plan_schema, save_video_plan, list_required_assets, generate every scene image with Codex image generation into the exact assetPath, verify_assets, generate_audio, then render_video.",
|
|
14
|
+
"The server does not generate images. Codex must create image files locally at the requested project asset paths.",
|
|
15
|
+
"Videos are 9:16, 1080x1920, zh-CN subtitles, one image per scene, 30-90 seconds total.",
|
|
16
|
+
"Rendered project files stay in ~/.video-maker. If the user wants an easy-to-find copy, pass outputDir to render_video or call export_video; default export location is ~/Downloads/video-maker/<projectId>.",
|
|
17
|
+
"Run check_environment first when setup is uncertain."
|
|
18
|
+
].join("\n");
|
|
19
|
+
function result(structuredContent) {
|
|
20
|
+
return {
|
|
21
|
+
content: [
|
|
22
|
+
{
|
|
23
|
+
type: "text",
|
|
24
|
+
text: JSON.stringify(structuredContent, null, 2)
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
structuredContent: structuredContent
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export function createMcpServer() {
|
|
31
|
+
const server = new McpServer({ name: "video-maker-mcp", version: "0.1.0" }, { instructions: SERVER_INSTRUCTIONS });
|
|
32
|
+
server.registerTool("check_environment", {
|
|
33
|
+
title: "Check local video-maker environment",
|
|
34
|
+
description: "Checks Node, ffmpeg, Codex CLI, workspace path, and Volcengine/Doubao TTS environment variables."
|
|
35
|
+
}, async () => result(await checkEnvironment()));
|
|
36
|
+
server.registerTool("create_video_project", {
|
|
37
|
+
title: "Create video project",
|
|
38
|
+
description: "Creates a local project directory for a Codex-driven storyboard video.",
|
|
39
|
+
inputSchema: {
|
|
40
|
+
prompt: z.string().min(1).describe("User prompt or source manuscript."),
|
|
41
|
+
options: z.object({
|
|
42
|
+
projectId: z.string().optional(),
|
|
43
|
+
aspectRatio: z.literal("9:16").optional(),
|
|
44
|
+
language: z.literal("zh-CN").optional()
|
|
45
|
+
}).optional()
|
|
46
|
+
}
|
|
47
|
+
}, async ({ prompt, options }) => result(await createVideoProject(prompt, options)));
|
|
48
|
+
server.registerTool("get_video_plan_schema", {
|
|
49
|
+
title: "Get video plan schema",
|
|
50
|
+
description: "Returns the strict JSON schema Codex must follow before saving a video plan."
|
|
51
|
+
}, async () => result({
|
|
52
|
+
schema: videoPlanJsonSchema,
|
|
53
|
+
defaults: {
|
|
54
|
+
aspectRatio: "9:16",
|
|
55
|
+
language: "zh-CN",
|
|
56
|
+
width: 1080,
|
|
57
|
+
height: 1920,
|
|
58
|
+
sceneDurationSec: "4-8 recommended, 4-12 allowed",
|
|
59
|
+
totalDurationSec: "30-90"
|
|
60
|
+
}
|
|
61
|
+
}));
|
|
62
|
+
server.registerTool("save_video_plan", {
|
|
63
|
+
title: "Save video plan",
|
|
64
|
+
description: "Validates and saves the host-authored storyboard plan.",
|
|
65
|
+
inputSchema: {
|
|
66
|
+
projectId: z.string().min(1),
|
|
67
|
+
plan: z.unknown()
|
|
68
|
+
}
|
|
69
|
+
}, async ({ projectId, plan }) => result(await saveVideoPlan(projectId, plan)));
|
|
70
|
+
server.registerTool("list_required_assets", {
|
|
71
|
+
title: "List required scene assets",
|
|
72
|
+
description: "Returns exact local image paths and prompts Codex must use to generate scene images.",
|
|
73
|
+
inputSchema: {
|
|
74
|
+
projectId: z.string().min(1)
|
|
75
|
+
}
|
|
76
|
+
}, async ({ projectId }) => result({
|
|
77
|
+
projectId,
|
|
78
|
+
assets: await listRequiredAssets(projectId),
|
|
79
|
+
instruction: "Generate one image for each prompt and save it exactly to absolutePath before calling verify_assets."
|
|
80
|
+
}));
|
|
81
|
+
server.registerTool("verify_assets", {
|
|
82
|
+
title: "Verify scene assets",
|
|
83
|
+
description: "Checks that all required scene images exist and can be decoded.",
|
|
84
|
+
inputSchema: {
|
|
85
|
+
projectId: z.string().min(1)
|
|
86
|
+
}
|
|
87
|
+
}, async ({ projectId }) => result({
|
|
88
|
+
projectId,
|
|
89
|
+
...(await verifyAssets(projectId))
|
|
90
|
+
}));
|
|
91
|
+
server.registerTool("generate_audio", {
|
|
92
|
+
title: "Generate narration audio",
|
|
93
|
+
description: "Generates narration audio with Volcengine/Doubao TTS from the saved video plan.",
|
|
94
|
+
inputSchema: {
|
|
95
|
+
projectId: z.string().min(1)
|
|
96
|
+
}
|
|
97
|
+
}, async ({ projectId }) => result(await generateProjectAudio(projectId)));
|
|
98
|
+
server.registerTool("render_video", {
|
|
99
|
+
title: "Render final video",
|
|
100
|
+
description: "Uses ffmpeg to render the final 9:16 MP4, SRT subtitles, and manifest from verified assets and generated audio. Pass outputDir to also copy final files to a user-facing directory.",
|
|
101
|
+
inputSchema: {
|
|
102
|
+
projectId: z.string().min(1),
|
|
103
|
+
outputDir: z.string().min(1).optional().describe("Optional user-facing export directory, e.g. ~/Downloads/my-video.")
|
|
104
|
+
}
|
|
105
|
+
}, async ({ projectId, outputDir }) => result(await renderProjectVideo(projectId, { outputDir })));
|
|
106
|
+
server.registerTool("export_video", {
|
|
107
|
+
title: "Export rendered video",
|
|
108
|
+
description: "Copies final.mp4, subtitles.srt, manifest.json, and video_plan.json from the internal project workspace to a user-facing directory.",
|
|
109
|
+
inputSchema: {
|
|
110
|
+
projectId: z.string().min(1),
|
|
111
|
+
outputDir: z.string().min(1).optional().describe("Target directory. Defaults to ~/Downloads/video-maker/<projectId>.")
|
|
112
|
+
}
|
|
113
|
+
}, async ({ projectId, outputDir }) => result(await exportProjectVideo(projectId, outputDir)));
|
|
114
|
+
return server;
|
|
115
|
+
}
|
|
116
|
+
export async function serveMcp() {
|
|
117
|
+
const server = createMcpServer();
|
|
118
|
+
await server.connect(new StdioServerTransport());
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface VolcengineTtsConfig {
|
|
2
|
+
apiKey?: string;
|
|
3
|
+
appId?: string;
|
|
4
|
+
authToken?: string;
|
|
5
|
+
appToken?: string;
|
|
6
|
+
voiceId: string;
|
|
7
|
+
cluster?: string;
|
|
8
|
+
resourceId: string;
|
|
9
|
+
endpoint: string;
|
|
10
|
+
protocol: "v3" | "v1";
|
|
11
|
+
}
|
|
12
|
+
export interface TtsResult {
|
|
13
|
+
audioPath: string;
|
|
14
|
+
absolutePath: string;
|
|
15
|
+
provider: "volcengine";
|
|
16
|
+
}
|
|
17
|
+
export declare function volcengineConfigFromEnv(env?: NodeJS.ProcessEnv): VolcengineTtsConfig;
|
|
18
|
+
export declare function synthesizeVolcengineSpeech(text: string, config?: VolcengineTtsConfig): Promise<Buffer>;
|
|
19
|
+
export declare function generateProjectAudio(projectId: string): Promise<TtsResult>;
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import { markStatus, readVideoPlan } from "../../core/project.js";
|
|
4
|
+
import { toProjectPath } from "../../core/paths.js";
|
|
5
|
+
export function volcengineConfigFromEnv(env = process.env) {
|
|
6
|
+
const apiKey = env.VIDEO_MAKER_TTS_API_KEY;
|
|
7
|
+
const appId = env.VIDEO_MAKER_TTS_APP_ID;
|
|
8
|
+
const authToken = env.VIDEO_MAKER_TTS_TOKEN ?? env.VIDEO_MAKER_TTS_ACCESS_TOKEN ?? env.VOLCENGINE_SECRET_ACCESS_KEY;
|
|
9
|
+
const voiceId = env.VIDEO_MAKER_TTS_VOICE_ID;
|
|
10
|
+
if (apiKey) {
|
|
11
|
+
if (!voiceId) {
|
|
12
|
+
throw new Error("Missing Volcengine TTS configuration: VIDEO_MAKER_TTS_VOICE_ID");
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
apiKey,
|
|
16
|
+
voiceId,
|
|
17
|
+
resourceId: env.VIDEO_MAKER_TTS_RESOURCE_ID ?? "seed-tts-2.0",
|
|
18
|
+
endpoint: env.VIDEO_MAKER_TTS_ENDPOINT ?? "https://openspeech.bytedance.com/api/v3/tts/unidirectional",
|
|
19
|
+
protocol: "v3"
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
if (!appId || !authToken || !voiceId) {
|
|
23
|
+
const missing = [
|
|
24
|
+
!apiKey ? "VIDEO_MAKER_TTS_API_KEY" : undefined,
|
|
25
|
+
!appId ? "VIDEO_MAKER_TTS_APP_ID" : undefined,
|
|
26
|
+
!authToken ? "VIDEO_MAKER_TTS_TOKEN or VIDEO_MAKER_TTS_ACCESS_TOKEN" : undefined,
|
|
27
|
+
!voiceId ? "VIDEO_MAKER_TTS_VOICE_ID" : undefined
|
|
28
|
+
].filter(Boolean);
|
|
29
|
+
throw new Error(`Missing Volcengine TTS configuration: ${missing.join(", ")}`);
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
appId,
|
|
33
|
+
authToken,
|
|
34
|
+
appToken: env.VIDEO_MAKER_TTS_APP_TOKEN ?? "access_token",
|
|
35
|
+
voiceId,
|
|
36
|
+
cluster: env.VIDEO_MAKER_TTS_CLUSTER ?? "volcano_tts",
|
|
37
|
+
resourceId: env.VIDEO_MAKER_TTS_RESOURCE_ID ?? "seed-tts-2.0",
|
|
38
|
+
endpoint: env.VIDEO_MAKER_TTS_ENDPOINT ?? "https://openspeech.bytedance.com/api/v1/tts",
|
|
39
|
+
protocol: "v1"
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export async function synthesizeVolcengineSpeech(text, config = volcengineConfigFromEnv()) {
|
|
43
|
+
if (config.protocol === "v3") {
|
|
44
|
+
return synthesizeVolcengineSpeechV3(text, config);
|
|
45
|
+
}
|
|
46
|
+
return synthesizeVolcengineSpeechV1(text, config);
|
|
47
|
+
}
|
|
48
|
+
async function synthesizeVolcengineSpeechV3(text, config) {
|
|
49
|
+
if (!config.apiKey) {
|
|
50
|
+
throw new Error("VIDEO_MAKER_TTS_API_KEY is required for V3 TTS");
|
|
51
|
+
}
|
|
52
|
+
const reqid = crypto.randomUUID();
|
|
53
|
+
const response = await fetch(config.endpoint, {
|
|
54
|
+
method: "POST",
|
|
55
|
+
headers: {
|
|
56
|
+
"X-Api-Key": config.apiKey,
|
|
57
|
+
"X-Api-Resource-Id": config.resourceId,
|
|
58
|
+
"X-Api-Request-Id": reqid,
|
|
59
|
+
"X-Control-Require-Usage-Tokens-Return": "text_words",
|
|
60
|
+
"Content-Type": "application/json"
|
|
61
|
+
},
|
|
62
|
+
body: JSON.stringify({
|
|
63
|
+
user: {
|
|
64
|
+
uid: "video-maker-mcp"
|
|
65
|
+
},
|
|
66
|
+
req_params: {
|
|
67
|
+
text,
|
|
68
|
+
speaker: config.voiceId,
|
|
69
|
+
audio_params: {
|
|
70
|
+
format: "mp3",
|
|
71
|
+
sample_rate: 24000
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
});
|
|
76
|
+
const raw = await response.text();
|
|
77
|
+
if (!response.ok) {
|
|
78
|
+
throw new Error(`Volcengine TTS V3 HTTP ${response.status}: ${raw}`);
|
|
79
|
+
}
|
|
80
|
+
const objects = config.endpoint.endsWith("/sse") ? parseSseJsonObjects(raw) : parseConcatenatedJsonObjects(raw);
|
|
81
|
+
const chunks = [];
|
|
82
|
+
let finalMessage;
|
|
83
|
+
for (const object of objects) {
|
|
84
|
+
const code = typeof object.code === "number" ? object.code : undefined;
|
|
85
|
+
const message = typeof object.message === "string" ? object.message : undefined;
|
|
86
|
+
if (code !== undefined && code !== 20000000 && message && message !== "ok") {
|
|
87
|
+
throw new Error(`Volcengine TTS V3 API code ${code}: ${message}`);
|
|
88
|
+
}
|
|
89
|
+
if (typeof object.data === "string" && object.data.length > 0) {
|
|
90
|
+
chunks.push(Buffer.from(object.data, "base64"));
|
|
91
|
+
}
|
|
92
|
+
if (code === 20000000)
|
|
93
|
+
finalMessage = message;
|
|
94
|
+
}
|
|
95
|
+
if (chunks.length === 0) {
|
|
96
|
+
throw new Error(`Volcengine TTS V3 returned no audio data${finalMessage ? ` (${finalMessage})` : ""}: ${raw.slice(0, 500)}`);
|
|
97
|
+
}
|
|
98
|
+
return Buffer.concat(chunks);
|
|
99
|
+
}
|
|
100
|
+
async function synthesizeVolcengineSpeechV1(text, config) {
|
|
101
|
+
if (!config.appId || !config.authToken || !config.appToken || !config.cluster) {
|
|
102
|
+
throw new Error("VIDEO_MAKER_TTS_APP_ID, VIDEO_MAKER_TTS_TOKEN, and VIDEO_MAKER_TTS_CLUSTER are required for V1 TTS");
|
|
103
|
+
}
|
|
104
|
+
const reqid = crypto.randomUUID();
|
|
105
|
+
const response = await fetch(config.endpoint, {
|
|
106
|
+
method: "POST",
|
|
107
|
+
headers: {
|
|
108
|
+
"Authorization": `Bearer;${config.authToken}`,
|
|
109
|
+
"Content-Type": "application/json"
|
|
110
|
+
},
|
|
111
|
+
body: JSON.stringify({
|
|
112
|
+
app: {
|
|
113
|
+
appid: config.appId,
|
|
114
|
+
token: config.appToken,
|
|
115
|
+
cluster: config.cluster
|
|
116
|
+
},
|
|
117
|
+
user: {
|
|
118
|
+
uid: "video-maker-mcp"
|
|
119
|
+
},
|
|
120
|
+
audio: {
|
|
121
|
+
voice_type: config.voiceId,
|
|
122
|
+
encoding: "mp3",
|
|
123
|
+
speed_ratio: 1,
|
|
124
|
+
volume_ratio: 1,
|
|
125
|
+
pitch_ratio: 1
|
|
126
|
+
},
|
|
127
|
+
request: {
|
|
128
|
+
reqid,
|
|
129
|
+
text,
|
|
130
|
+
text_type: "plain",
|
|
131
|
+
operation: "query"
|
|
132
|
+
}
|
|
133
|
+
})
|
|
134
|
+
});
|
|
135
|
+
if (!response.ok) {
|
|
136
|
+
throw new Error(`Volcengine TTS HTTP ${response.status}: ${await response.text()}`);
|
|
137
|
+
}
|
|
138
|
+
const payload = await response.json();
|
|
139
|
+
if (payload.code !== undefined && payload.code !== 3000) {
|
|
140
|
+
throw new Error(`Volcengine TTS API code ${payload.code}: ${payload.message ?? "unknown error"}${payload.reqid ? ` (reqid: ${payload.reqid})` : ""}`);
|
|
141
|
+
}
|
|
142
|
+
if (!payload.data) {
|
|
143
|
+
throw new Error(`Volcengine TTS returned no audio data: ${payload.message ?? JSON.stringify(payload)}`);
|
|
144
|
+
}
|
|
145
|
+
return Buffer.from(payload.data, "base64");
|
|
146
|
+
}
|
|
147
|
+
function parseSseJsonObjects(raw) {
|
|
148
|
+
return raw
|
|
149
|
+
.split(/\r?\n/)
|
|
150
|
+
.filter((line) => line.startsWith("data:"))
|
|
151
|
+
.map((line) => line.slice("data:".length).trim())
|
|
152
|
+
.filter(Boolean)
|
|
153
|
+
.map((line) => JSON.parse(line));
|
|
154
|
+
}
|
|
155
|
+
function parseConcatenatedJsonObjects(raw) {
|
|
156
|
+
const objects = [];
|
|
157
|
+
let start = -1;
|
|
158
|
+
let depth = 0;
|
|
159
|
+
let inString = false;
|
|
160
|
+
let escaped = false;
|
|
161
|
+
for (let i = 0; i < raw.length; i += 1) {
|
|
162
|
+
const ch = raw[i];
|
|
163
|
+
if (inString) {
|
|
164
|
+
if (escaped) {
|
|
165
|
+
escaped = false;
|
|
166
|
+
}
|
|
167
|
+
else if (ch === "\\") {
|
|
168
|
+
escaped = true;
|
|
169
|
+
}
|
|
170
|
+
else if (ch === "\"") {
|
|
171
|
+
inString = false;
|
|
172
|
+
}
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
if (ch === "\"") {
|
|
176
|
+
inString = true;
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
if (ch === "{") {
|
|
180
|
+
if (depth === 0)
|
|
181
|
+
start = i;
|
|
182
|
+
depth += 1;
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
if (ch === "}") {
|
|
186
|
+
depth -= 1;
|
|
187
|
+
if (depth === 0 && start >= 0) {
|
|
188
|
+
objects.push(JSON.parse(raw.slice(start, i + 1)));
|
|
189
|
+
start = -1;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return objects;
|
|
194
|
+
}
|
|
195
|
+
export async function generateProjectAudio(projectId) {
|
|
196
|
+
const plan = await readVideoPlan(projectId);
|
|
197
|
+
const text = plan.scenes.map((scene) => scene.narration).join("\n");
|
|
198
|
+
const audio = await synthesizeVolcengineSpeech(text);
|
|
199
|
+
const audioPath = "audio/narration.mp3";
|
|
200
|
+
const absolutePath = toProjectPath(projectId, audioPath);
|
|
201
|
+
await fs.writeFile(absolutePath, audio);
|
|
202
|
+
await markStatus(projectId, "audio_ready", { audioPath });
|
|
203
|
+
return {
|
|
204
|
+
audioPath,
|
|
205
|
+
absolutePath,
|
|
206
|
+
provider: "volcengine"
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=volcengine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volcengine.js","sourceRoot":"","sources":["../../../src/providers/tts/volcengine.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "video-maker-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Local MCP storyboard video renderer for Codex-driven video generation.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"video-maker-mcp": "dist/cli/index.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc -p tsconfig.json",
|
|
15
|
+
"dev": "tsx src/cli/index.ts",
|
|
16
|
+
"prepublishOnly": "npm run build",
|
|
17
|
+
"test": "npm run typecheck && npm run build",
|
|
18
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
19
|
+
},
|
|
20
|
+
"engines": {
|
|
21
|
+
"node": ">=20"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
25
|
+
"commander": "^15.0.0",
|
|
26
|
+
"dotenv": "^17.4.2",
|
|
27
|
+
"execa": "^9.6.1",
|
|
28
|
+
"sharp": "^0.35.1",
|
|
29
|
+
"which": "^7.0.0",
|
|
30
|
+
"zod": "^4.4.3",
|
|
31
|
+
"zod-to-json-schema": "^3.25.2"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/node": "^22.10.2",
|
|
35
|
+
"@types/which": "^3.0.4",
|
|
36
|
+
"tsx": "^4.20.6",
|
|
37
|
+
"typescript": "^5.9.3"
|
|
38
|
+
}
|
|
39
|
+
}
|