@vibeframe/mcp-server 0.48.1 → 0.48.3

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.
Files changed (2) hide show
  1. package/dist/index.js +27 -0
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -444011,6 +444011,7 @@ async function executeScriptToVideo(options) {
444011
444011
  if (!existsSync25(absOutputDir)) {
444012
444012
  await mkdir9(absOutputDir, { recursive: true });
444013
444013
  }
444014
+ options.onProgress?.(`Analyzing script with ${storyboardProvider}...`);
444014
444015
  let segments;
444015
444016
  const creativityOpts = { creativity: options.creativity };
444016
444017
  if (storyboardProvider === "openai") {
@@ -444044,6 +444045,7 @@ async function executeScriptToVideo(options) {
444044
444045
  failedNarrations: []
444045
444046
  };
444046
444047
  if (!options.noVoiceover && elevenlabsApiKey) {
444048
+ options.onProgress?.(`Generating ${segments.length} voiceover(s) with ElevenLabs...`);
444047
444049
  const elevenlabs = new ElevenLabsProvider();
444048
444050
  await elevenlabs.initialize({ apiKey: elevenlabsApiKey });
444049
444051
  for (let i = 0; i < segments.length; i++) {
@@ -444093,6 +444095,7 @@ async function executeScriptToVideo(options) {
444093
444095
  }
444094
444096
  await writeFile10(storyboardPath, (0, import_yaml2.stringify)({ scenes: segments }, { indent: 2 }), "utf-8");
444095
444097
  }
444098
+ options.onProgress?.(`Generating ${segments.length} scene image(s) with ${imageProvider}...`);
444096
444099
  const dalleImageSizes = {
444097
444100
  "16:9": "1536x1024",
444098
444101
  "9:16": "1024x1536",
@@ -444175,6 +444178,7 @@ async function executeScriptToVideo(options) {
444175
444178
  const videoPaths = [];
444176
444179
  const maxRetries = options.retries ?? DEFAULT_VIDEO_RETRIES;
444177
444180
  if (!options.imagesOnly && videoApiKey) {
444181
+ options.onProgress?.(`Generating ${segments.length} scene video(s) with ${options.generator || "grok"}...`);
444178
444182
  if (options.generator === "grok") {
444179
444183
  const grok = new GrokProvider();
444180
444184
  await grok.initialize({ apiKey: videoApiKey });
@@ -444375,6 +444379,8 @@ async function executeScriptToVideo(options) {
444375
444379
  }
444376
444380
  }
444377
444381
  if (!options.noTextOverlay) {
444382
+ const overlayCount = segments.filter((s, i) => s.textOverlays?.length && videoPaths[i]).length;
444383
+ if (overlayCount > 0) options.onProgress?.(`Applying text overlays to ${overlayCount} scene(s)...`);
444378
444384
  for (let i = 0; i < segments.length; i++) {
444379
444385
  const segment = segments[i];
444380
444386
  if (segment.textOverlays && segment.textOverlays.length > 0 && videoPaths[i] && videoPaths[i] !== "") {
@@ -444394,6 +444400,7 @@ async function executeScriptToVideo(options) {
444394
444400
  }
444395
444401
  }
444396
444402
  }
444403
+ options.onProgress?.("Assembling project...");
444397
444404
  const project = new Project("Script-to-Video Output");
444398
444405
  project.setAspectRatio(options.aspectRatio || "16:9");
444399
444406
  const defaultTracks = project.getTracks();
@@ -444470,6 +444477,7 @@ async function executeScriptToVideo(options) {
444470
444477
  result.projectPath = projectPath;
444471
444478
  result.totalDuration = currentTime;
444472
444479
  if (options.review) {
444480
+ options.onProgress?.("Reviewing video with Gemini AI...");
444473
444481
  try {
444474
444482
  const storyboardYaml = resolve20(absOutputDir, "storyboard.yaml");
444475
444483
  const storyboardJson = resolve20(absOutputDir, "storyboard.json");
@@ -455858,10 +455866,29 @@ for (const t of detectionTools) handlers2[t.name] = handleDetectionToolCall;
455858
455866
  for (const t of aiVideoTools) handlers2[t.name] = handleAiVideoToolCall;
455859
455867
  for (const t of aiAudioTools) handlers2[t.name] = handleAiAudioToolCall;
455860
455868
  for (const t of aiEditAdvancedTools) handlers2[t.name] = handleAiEditAdvancedToolCall;
455869
+ var requiredByTool = {};
455870
+ for (const t of tools) {
455871
+ const req = t.inputSchema.required;
455872
+ if (req && req.length > 0) requiredByTool[t.name] = req;
455873
+ }
455861
455874
  async function handleToolCall(name, args) {
455862
455875
  try {
455863
455876
  const handler4 = handlers2[name];
455864
455877
  if (!handler4) throw new Error(`Unknown tool: ${name}`);
455878
+ const required = requiredByTool[name];
455879
+ if (required) {
455880
+ const missing = required.filter((k) => args[k] === void 0 || args[k] === null);
455881
+ if (missing.length > 0) {
455882
+ return {
455883
+ content: [
455884
+ {
455885
+ type: "text",
455886
+ text: `${name} failed: missing required argument${missing.length > 1 ? "s" : ""}: ${missing.join(", ")}`
455887
+ }
455888
+ ]
455889
+ };
455890
+ }
455891
+ }
455865
455892
  const result = await handler4(name, args);
455866
455893
  return { content: [{ type: "text", text: result }] };
455867
455894
  } catch (error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibeframe/mcp-server",
3
- "version": "0.48.1",
3
+ "version": "0.48.3",
4
4
  "description": "VibeFrame MCP Server - AI-native video editing via Model Context Protocol",
5
5
  "type": "module",
6
6
  "bin": {
@@ -57,8 +57,8 @@
57
57
  "tsx": "^4.21.0",
58
58
  "typescript": "^5.3.3",
59
59
  "vitest": "^1.2.2",
60
- "@vibeframe/core": "0.48.1",
61
- "@vibeframe/cli": "0.48.1"
60
+ "@vibeframe/cli": "0.48.3",
61
+ "@vibeframe/core": "0.48.3"
62
62
  },
63
63
  "engines": {
64
64
  "node": ">=20"