@vibeframe/mcp-server 0.115.4 → 0.115.5
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 +1 -1
- package/dist/index.js +139 -23
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @vibeframe/mcp-server
|
|
2
2
|
|
|
3
|
-
The MCP (Model Context Protocol) **server** for [VibeFrame](https://github.com/vericontext/vibeframe), the frontier-video-generation layer for coding agents: generate video assets on your own provider keys (Seedance, Runway,
|
|
3
|
+
The MCP (Model Context Protocol) **server** for [VibeFrame](https://github.com/vericontext/vibeframe), the frontier-video-generation layer for coding agents: generate video assets on your own provider keys (Seedance, Runway, Kling, Gemini Omni), behind dry runs and a hard `--max-cost` ceiling. This package is _only_ the MCP adapter - it exposes VibeFrame's operations as typed MCP tools so an MCP-capable host can call them by natural language.
|
|
4
4
|
|
|
5
5
|
VibeFrame is CLI-first, not terminal-only. The CLI is the stable runtime; MCP is the app-host surface for clients that prefer typed tools over shell commands.
|
|
6
6
|
|
package/dist/index.js
CHANGED
|
@@ -201,8 +201,8 @@ var init_api_keys = __esm({
|
|
|
201
201
|
envVar: "GOOGLE_API_KEY",
|
|
202
202
|
label: "Google",
|
|
203
203
|
showInSetup: true,
|
|
204
|
-
setupDescription: "Gemini \u2014 image gen (free tier), video analysis ($),
|
|
205
|
-
envExampleComment: "Google API Key (Gemini auto-edit suggestions, image gen,
|
|
204
|
+
setupDescription: "Gemini \u2014 image gen (free tier), video analysis ($), Omni video ($$)",
|
|
205
|
+
envExampleComment: "Google API Key (Gemini auto-edit suggestions, image gen, Omni video)",
|
|
206
206
|
envExampleUrl: "https://aistudio.google.com/apikey",
|
|
207
207
|
keyFormat: { prefix: /^AIza/, example: "AIza..." }
|
|
208
208
|
});
|
|
@@ -456,10 +456,35 @@ function findModel(provider, kind3, aliasOrId) {
|
|
|
456
456
|
const lower = key2.toLowerCase();
|
|
457
457
|
return listModels({ provider, kind: kind3 }).find((m2) => m2.id === key2 || m2.aliases?.includes(lower));
|
|
458
458
|
}
|
|
459
|
+
function modelLifecycle(spec, now = /* @__PURE__ */ new Date()) {
|
|
460
|
+
if (!spec.shutdown)
|
|
461
|
+
return { state: "served" };
|
|
462
|
+
const remainingMs = Date.parse(`${spec.shutdown}T00:00:00Z`) - now.getTime();
|
|
463
|
+
const instead = spec.replacement ? ` Use ${spec.replacement} instead.` : "";
|
|
464
|
+
if (remainingMs <= 0) {
|
|
465
|
+
return {
|
|
466
|
+
state: "retired",
|
|
467
|
+
shutdown: spec.shutdown,
|
|
468
|
+
message: `${spec.label} (${spec.id}) was shut down by the provider on ${spec.shutdown}.${instead}`
|
|
469
|
+
};
|
|
470
|
+
}
|
|
471
|
+
const daysLeft = Math.ceil(remainingMs / 864e5);
|
|
472
|
+
return {
|
|
473
|
+
state: "retiring",
|
|
474
|
+
shutdown: spec.shutdown,
|
|
475
|
+
daysLeft,
|
|
476
|
+
message: `${spec.label} (${spec.id}) shuts down on ${spec.shutdown} (${daysLeft} day${daysLeft === 1 ? "" : "s"} left).${instead}`
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
function assertModelServed(spec, now = /* @__PURE__ */ new Date()) {
|
|
480
|
+
const lifecycle = modelLifecycle(spec, now);
|
|
481
|
+
if (lifecycle.state === "retired")
|
|
482
|
+
throw new ModelRetiredError(lifecycle.message, spec);
|
|
483
|
+
}
|
|
459
484
|
function modelAliases(provider, kind3) {
|
|
460
485
|
return listModels({ provider, kind: kind3 }).flatMap((m2) => m2.aliases ?? []);
|
|
461
486
|
}
|
|
462
|
-
var MODEL_CATALOG;
|
|
487
|
+
var MODEL_CATALOG, ModelRetiredError;
|
|
463
488
|
var init_catalog = __esm({
|
|
464
489
|
"../ai-providers/dist/catalog/catalog.js"() {
|
|
465
490
|
"use strict";
|
|
@@ -495,8 +520,8 @@ var init_catalog = __esm({
|
|
|
495
520
|
{ id: "seedance-2.0-fast", provider: "seedance", kind: "video", label: "Seedance 2.0 Fast", aliases: ["fast"], status: "ga", price: { usd: 0.2419, per: "second", basis: "720p 16:9" }, note: "4-15 s, up to 720p, native audio" },
|
|
496
521
|
{ id: "seedance-2.5", provider: "seedance", kind: "video", label: "Seedance 2.5", aliases: ["2.5"], status: "ga", price: { usd: 0.473, per: "second", basis: "720p 16:9" }, note: "Opt-in; 4-30 s, native audio" },
|
|
497
522
|
{ id: "gemini-omni-1.1-flash", provider: "omni", kind: "video", label: "Gemini Omni 1.1 Flash", default: true, status: "ga", price: { usd: 0.1, per: "second", basis: "720p" }, note: "Google video default; the model picks 3-10 s; native audio" },
|
|
498
|
-
{ id: "veo-3.1-generate-preview", provider: "veo", kind: "video", label: "Veo 3.1", aliases: ["3.1"], status: "deprecated", shutdown: "2026-10-22", price: { usd: 0.4, per: "second", basis: "720p/1080p" }, note: "4-8 s, native audio; explicit `-p veo` only" },
|
|
499
|
-
{ id: "veo-3.1-fast-generate-preview", provider: "veo", kind: "video", label: "Veo 3.1 Fast", aliases: ["3.1-fast"], default: true, status: "deprecated", shutdown: "2026-10-22", price: { usd: 0.1, per: "second", basis: "720p" }, note: "4-8 s, native audio; explicit `-p veo` only" },
|
|
523
|
+
{ id: "veo-3.1-generate-preview", provider: "veo", kind: "video", label: "Veo 3.1", aliases: ["3.1"], status: "deprecated", shutdown: "2026-10-22", replacement: "`-p omni` (Gemini Omni 1.1 Flash)", price: { usd: 0.4, per: "second", basis: "720p/1080p" }, note: "4-8 s, native audio; explicit `-p veo` only" },
|
|
524
|
+
{ id: "veo-3.1-fast-generate-preview", provider: "veo", kind: "video", label: "Veo 3.1 Fast", aliases: ["3.1-fast"], default: true, status: "deprecated", shutdown: "2026-10-22", replacement: "`-p omni` (Gemini Omni 1.1 Flash)", price: { usd: 0.1, per: "second", basis: "720p" }, note: "4-8 s, native audio; explicit `-p veo` only" },
|
|
500
525
|
{ id: "grok-imagine-video-1.5", provider: "grok", kind: "video", label: "Grok Imagine Video 1.5", aliases: ["1.5"], default: true, status: "ga", price: { usd: 0.14, per: "second", basis: "720p" }, note: "1-15 s, native audio; 720p unless `--resolution` says otherwise" },
|
|
501
526
|
{ id: "grok-imagine-video-1.5-lite", provider: "grok", kind: "video", label: "Grok Imagine Video 1.5 Lite", aliases: ["lite", "1.5-lite"], status: "ga", price: { usd: 0.03, per: "second", basis: "720p" }, note: "1-15 s, native audio" },
|
|
502
527
|
{ id: "grok-imagine-video", provider: "grok", kind: "video", label: "Grok Imagine Video", aliases: ["classic"], status: "legacy", price: { usd: 0.05, per: "second", basis: "480p" }, note: "Previous generation" },
|
|
@@ -512,6 +537,13 @@ var init_catalog = __esm({
|
|
|
512
537
|
{ id: "eleven_text_to_sound_v2", provider: "elevenlabs", kind: "sound-effect", label: "ElevenLabs Sound Effects v2", default: true, status: "ga", price: { usd: 0.12, per: "minute" }, note: "0.5-30 s" },
|
|
513
538
|
{ id: "whisper-1", provider: "openai", kind: "transcription", label: "Whisper", default: true, status: "deprecated", shutdown: "2027-02-26", note: "Only OpenAI model with word timestamps" }
|
|
514
539
|
];
|
|
540
|
+
ModelRetiredError = class extends Error {
|
|
541
|
+
constructor(message, model) {
|
|
542
|
+
super(message);
|
|
543
|
+
this.model = model;
|
|
544
|
+
this.name = "ModelRetiredError";
|
|
545
|
+
}
|
|
546
|
+
};
|
|
515
547
|
}
|
|
516
548
|
});
|
|
517
549
|
|
|
@@ -1059,12 +1091,18 @@ var init_http = __esm({
|
|
|
1059
1091
|
// ../ai-providers/dist/gemini/GeminiProvider.js
|
|
1060
1092
|
function resolveVeoModel(alias) {
|
|
1061
1093
|
if (Object.hasOwn(VEO_MODEL_ALIASES, alias)) {
|
|
1062
|
-
return VEO_MODEL_ALIASES[alias];
|
|
1094
|
+
return servedVeoModel(VEO_MODEL_ALIASES[alias]);
|
|
1063
1095
|
}
|
|
1064
1096
|
const valid = Object.keys(VEO_MODEL_ALIASES).join(", ");
|
|
1065
1097
|
const hint = alias === "3.0" ? " Veo 3.0 was shut down by Google on 2025-11-12." : "";
|
|
1066
1098
|
throw new Error(`Unknown Veo model "${alias}". Valid: ${valid}.${hint}`);
|
|
1067
1099
|
}
|
|
1100
|
+
function servedVeoModel(id) {
|
|
1101
|
+
const spec = id ? findModel("veo", "video", id) : defaultModel("veo", "video");
|
|
1102
|
+
if (spec)
|
|
1103
|
+
assertModelServed(spec);
|
|
1104
|
+
return spec?.id ?? id;
|
|
1105
|
+
}
|
|
1068
1106
|
var VEO_MODEL_ALIASES, GeminiProvider, geminiProvider;
|
|
1069
1107
|
var init_GeminiProvider = __esm({
|
|
1070
1108
|
"../ai-providers/dist/gemini/GeminiProvider.js"() {
|
|
@@ -1108,7 +1146,7 @@ var init_GeminiProvider = __esm({
|
|
|
1108
1146
|
}
|
|
1109
1147
|
try {
|
|
1110
1148
|
const veoOpts = options ?? {};
|
|
1111
|
-
const model = veoOpts.model
|
|
1149
|
+
const model = servedVeoModel(veoOpts.model);
|
|
1112
1150
|
const aspectRatioMap = {
|
|
1113
1151
|
"16:9": "16:9",
|
|
1114
1152
|
"9:16": "9:16",
|
|
@@ -1285,7 +1323,7 @@ var init_GeminiProvider = __esm({
|
|
|
1285
1323
|
};
|
|
1286
1324
|
}
|
|
1287
1325
|
try {
|
|
1288
|
-
const model = options?.model
|
|
1326
|
+
const model = servedVeoModel(options?.model ?? findModel("veo", "video", "3.1")?.id);
|
|
1289
1327
|
const instance = {
|
|
1290
1328
|
video: { previousOperationName }
|
|
1291
1329
|
};
|
|
@@ -11727,6 +11765,7 @@ __export(dist_exports, {
|
|
|
11727
11765
|
KlingProvider: () => KlingProvider,
|
|
11728
11766
|
KokoroProvider: () => KokoroProvider,
|
|
11729
11767
|
MODEL_CATALOG: () => MODEL_CATALOG,
|
|
11768
|
+
ModelRetiredError: () => ModelRetiredError,
|
|
11730
11769
|
OPENAI_IMAGE_DEFAULT_MODEL: () => OPENAI_IMAGE_DEFAULT_MODEL,
|
|
11731
11770
|
OPENAI_TTS_VOICES: () => OPENAI_TTS_VOICES,
|
|
11732
11771
|
OllamaProvider: () => OllamaProvider,
|
|
@@ -11738,6 +11777,7 @@ __export(dist_exports, {
|
|
|
11738
11777
|
RunwayProvider: () => RunwayProvider,
|
|
11739
11778
|
VEO_MODEL_ALIASES: () => VEO_MODEL_ALIASES,
|
|
11740
11779
|
WhisperProvider: () => WhisperProvider,
|
|
11780
|
+
assertModelServed: () => assertModelServed,
|
|
11741
11781
|
claudeProvider: () => claudeProvider,
|
|
11742
11782
|
defaultModel: () => defaultModel,
|
|
11743
11783
|
defineApiKey: () => defineApiKey,
|
|
@@ -11766,6 +11806,7 @@ __export(dist_exports, {
|
|
|
11766
11806
|
loadBundledKokoroRuntime: () => loadBundledKokoroRuntime,
|
|
11767
11807
|
loadKokoroFromWorkspace: () => loadKokoroFromWorkspace,
|
|
11768
11808
|
modelAliases: () => modelAliases,
|
|
11809
|
+
modelLifecycle: () => modelLifecycle,
|
|
11769
11810
|
ollamaProvider: () => ollamaProvider,
|
|
11770
11811
|
omniProvider: () => omniProvider,
|
|
11771
11812
|
openaiImageProvider: () => openaiImageProvider,
|
|
@@ -268527,7 +268568,42 @@ function outputSuccess(opts) {
|
|
|
268527
268568
|
const data2 = opts.data;
|
|
268528
268569
|
const primary = data2.outputPath ?? data2.output ?? data2.path ?? data2.url ?? data2.id;
|
|
268529
268570
|
if (primary !== void 0) console.log(String(primary));
|
|
268571
|
+
return;
|
|
268572
|
+
}
|
|
268573
|
+
if (opts.dryRun && !opts.humanRendered) {
|
|
268574
|
+
printDryRunSummary(opts.command, costUsd, opts.data, opts.warnings ?? []);
|
|
268575
|
+
}
|
|
268576
|
+
}
|
|
268577
|
+
function printWarnings(warnings) {
|
|
268578
|
+
if (isJsonMode()) return;
|
|
268579
|
+
for (const warning of warnings) {
|
|
268580
|
+
process.stderr.write(`${source_default.yellow(`Warning: ${warning}`)}
|
|
268581
|
+
`);
|
|
268582
|
+
}
|
|
268583
|
+
}
|
|
268584
|
+
function formatDryRunValue(value) {
|
|
268585
|
+
const text = Array.isArray(value) ? value.map((v4) => formatDryRunValue(v4)).join(", ") : typeof value === "object" ? JSON.stringify(value) : String(value);
|
|
268586
|
+
return text.length > 80 ? `${text.slice(0, 77)}...` : text;
|
|
268587
|
+
}
|
|
268588
|
+
function printDryRunSummary(command3, costUsd, data2, warnings) {
|
|
268589
|
+
const params = data2.params && typeof data2.params === "object" ? data2.params : data2;
|
|
268590
|
+
const rows = [
|
|
268591
|
+
["cost", costUsd > 0 ? `up to $${costUsd.toFixed(2)} (estimate)` : "free"]
|
|
268592
|
+
];
|
|
268593
|
+
for (const [key2, value] of Object.entries(params)) {
|
|
268594
|
+
if (value === void 0 || value === null || value === "") continue;
|
|
268595
|
+
if (Array.isArray(value) && value.length === 0) continue;
|
|
268596
|
+
rows.push([key2, formatDryRunValue(value)]);
|
|
268597
|
+
}
|
|
268598
|
+
const width = Math.max(...rows.map(([key2]) => key2.length));
|
|
268599
|
+
console.log();
|
|
268600
|
+
console.log(`${source_default.bold.cyan(`Dry run: vibe ${command3}`)} ${source_default.dim("(nothing was sent)")}`);
|
|
268601
|
+
for (const [key2, value] of rows) {
|
|
268602
|
+
console.log(` ${source_default.dim(key2.padEnd(width))} ${value}`);
|
|
268530
268603
|
}
|
|
268604
|
+
printWarnings(warnings);
|
|
268605
|
+
console.log(source_default.dim(" Run again without --dry-run to execute."));
|
|
268606
|
+
console.log();
|
|
268531
268607
|
}
|
|
268532
268608
|
function log(...args) {
|
|
268533
268609
|
if (!isJsonMode() && !isQuietMode()) {
|
|
@@ -282130,6 +282206,34 @@ var init_thumbnail = __esm({
|
|
|
282130
282206
|
}
|
|
282131
282207
|
});
|
|
282132
282208
|
|
|
282209
|
+
// ../cli/src/utils/model-lifecycle.ts
|
|
282210
|
+
function videoModelSpec(provider, flags) {
|
|
282211
|
+
const catalogProvider = provider === "fal" ? "seedance" : provider;
|
|
282212
|
+
const flag = VIDEO_MODEL_FLAG[catalogProvider];
|
|
282213
|
+
return findModel(catalogProvider, "video", flag ? flags[flag] : void 0);
|
|
282214
|
+
}
|
|
282215
|
+
function checkModelLifecycle(spec, now = /* @__PURE__ */ new Date()) {
|
|
282216
|
+
if (!spec) return [];
|
|
282217
|
+
const lifecycle = modelLifecycle(spec, now);
|
|
282218
|
+
if (lifecycle.state === "retired") exitWithError(usageError(lifecycle.message));
|
|
282219
|
+
return lifecycle.state === "retiring" ? [lifecycle.message] : [];
|
|
282220
|
+
}
|
|
282221
|
+
var VIDEO_MODEL_FLAG;
|
|
282222
|
+
var init_model_lifecycle = __esm({
|
|
282223
|
+
"../cli/src/utils/model-lifecycle.ts"() {
|
|
282224
|
+
"use strict";
|
|
282225
|
+
init_dist();
|
|
282226
|
+
init_output();
|
|
282227
|
+
VIDEO_MODEL_FLAG = {
|
|
282228
|
+
seedance: "seedanceModel",
|
|
282229
|
+
grok: "grokModel",
|
|
282230
|
+
kling: "klingModel",
|
|
282231
|
+
veo: "veoModel",
|
|
282232
|
+
runway: "runwayModel"
|
|
282233
|
+
};
|
|
282234
|
+
}
|
|
282235
|
+
});
|
|
282236
|
+
|
|
282133
282237
|
// ../cli/src/commands/generate/video-extend.ts
|
|
282134
282238
|
import { resolve as resolve65 } from "node:path";
|
|
282135
282239
|
import { writeFile as writeFile38 } from "node:fs/promises";
|
|
@@ -282141,11 +282245,22 @@ function registerVideoExtendCommand(parent) {
|
|
|
282141
282245
|
if (options.output) {
|
|
282142
282246
|
validateOutputPath(options.output);
|
|
282143
282247
|
}
|
|
282248
|
+
let lifecycleWarnings = [];
|
|
282249
|
+
if (provider === "veo") {
|
|
282250
|
+
try {
|
|
282251
|
+
resolveVeoModel(options.veoModel);
|
|
282252
|
+
} catch (err) {
|
|
282253
|
+
exitWithError(usageError(err instanceof Error ? err.message : String(err)));
|
|
282254
|
+
}
|
|
282255
|
+
lifecycleWarnings = checkModelLifecycle(findModel("veo", "video", options.veoModel));
|
|
282256
|
+
if (!options.dryRun) printWarnings(lifecycleWarnings);
|
|
282257
|
+
}
|
|
282144
282258
|
if (options.dryRun) {
|
|
282145
282259
|
outputSuccess({
|
|
282146
282260
|
command: "generate video-extend",
|
|
282147
282261
|
startedAt,
|
|
282148
282262
|
dryRun: true,
|
|
282263
|
+
warnings: lifecycleWarnings,
|
|
282149
282264
|
data: {
|
|
282150
282265
|
params: {
|
|
282151
282266
|
id,
|
|
@@ -282298,6 +282413,7 @@ function registerVideoExtendCommand(parent) {
|
|
|
282298
282413
|
outputSuccess({
|
|
282299
282414
|
command: "generate video-extend",
|
|
282300
282415
|
startedAt,
|
|
282416
|
+
warnings: lifecycleWarnings,
|
|
282301
282417
|
data: {
|
|
282302
282418
|
provider: "veo",
|
|
282303
282419
|
taskId: result.id,
|
|
@@ -282346,6 +282462,7 @@ var init_video_extend = __esm({
|
|
|
282346
282462
|
init_ora();
|
|
282347
282463
|
init_dist();
|
|
282348
282464
|
init_api_key();
|
|
282465
|
+
init_model_lifecycle();
|
|
282349
282466
|
init_output();
|
|
282350
282467
|
init_validate();
|
|
282351
282468
|
init_ai_helpers();
|
|
@@ -284056,6 +284173,8 @@ Examples:
|
|
|
284056
284173
|
} catch (err) {
|
|
284057
284174
|
exitWithError(usageError(err instanceof Error ? err.message : String(err)));
|
|
284058
284175
|
}
|
|
284176
|
+
const lifecycleWarnings = checkModelLifecycle(videoModelSpec(provider, options));
|
|
284177
|
+
if (!options.dryRun) printWarnings(lifecycleWarnings);
|
|
284059
284178
|
if (options.dryRun) {
|
|
284060
284179
|
const costUsd = provider === "seedance" || provider === "fal" ? realRunCost(provider, options).costUsd : void 0;
|
|
284061
284180
|
outputSuccess({
|
|
@@ -284063,6 +284182,7 @@ Examples:
|
|
|
284063
284182
|
startedAt,
|
|
284064
284183
|
dryRun: true,
|
|
284065
284184
|
costUsd,
|
|
284185
|
+
warnings: lifecycleWarnings,
|
|
284066
284186
|
data: {
|
|
284067
284187
|
params: {
|
|
284068
284188
|
prompt: prompt3,
|
|
@@ -284070,13 +284190,10 @@ Examples:
|
|
|
284070
284190
|
duration: options.duration,
|
|
284071
284191
|
ratio: options.ratio,
|
|
284072
284192
|
image: options.image,
|
|
284073
|
-
mode: options.mode,
|
|
284193
|
+
mode: provider === "kling" ? options.mode : void 0,
|
|
284074
284194
|
negative: options.negative,
|
|
284075
284195
|
resolution: options.resolution,
|
|
284076
|
-
|
|
284077
|
-
seedanceModel: options.seedanceModel,
|
|
284078
|
-
grokModel: options.grokModel,
|
|
284079
|
-
klingModel: options.klingModel,
|
|
284196
|
+
model: videoModelSpec(provider, options)?.id,
|
|
284080
284197
|
refImages: options.refImages,
|
|
284081
284198
|
refVideos: options.refVideos,
|
|
284082
284199
|
refAudio: options.refAudio,
|
|
@@ -284468,7 +284585,7 @@ Examples:
|
|
|
284468
284585
|
command: "generate video",
|
|
284469
284586
|
startedAt,
|
|
284470
284587
|
costUsd: cost.costUsd,
|
|
284471
|
-
warnings:
|
|
284588
|
+
warnings: [...lifecycleWarnings, ...cost.warnings],
|
|
284472
284589
|
data: {
|
|
284473
284590
|
provider,
|
|
284474
284591
|
taskId: result?.id,
|
|
@@ -284480,9 +284597,6 @@ Examples:
|
|
|
284480
284597
|
return;
|
|
284481
284598
|
}
|
|
284482
284599
|
console.log();
|
|
284483
|
-
if (provider === "veo") {
|
|
284484
|
-
console.log(source_default.yellow(VEO_SHUTDOWN_WARNING));
|
|
284485
|
-
}
|
|
284486
284600
|
if (finalResult.videoUrl) {
|
|
284487
284601
|
console.log(`Video URL: ${finalResult.videoUrl}`);
|
|
284488
284602
|
}
|
|
@@ -284607,7 +284721,6 @@ function printVideoStarted(providerLabel, taskId, taskType) {
|
|
|
284607
284721
|
console.log(`Task ID: ${source_default.bold(taskId)}`);
|
|
284608
284722
|
if (taskType) console.log(`Type: ${taskType}`);
|
|
284609
284723
|
}
|
|
284610
|
-
var VEO_SHUTDOWN_WARNING;
|
|
284611
284724
|
var init_video = __esm({
|
|
284612
284725
|
"../cli/src/commands/generate/video.ts"() {
|
|
284613
284726
|
"use strict";
|
|
@@ -284616,6 +284729,7 @@ var init_video = __esm({
|
|
|
284616
284729
|
init_dist5();
|
|
284617
284730
|
init_dist();
|
|
284618
284731
|
init_api_key();
|
|
284732
|
+
init_model_lifecycle();
|
|
284619
284733
|
init_tty();
|
|
284620
284734
|
init_output();
|
|
284621
284735
|
init_validate();
|
|
@@ -284623,7 +284737,6 @@ var init_video = __esm({
|
|
|
284623
284737
|
init_upload_host();
|
|
284624
284738
|
init_ai_helpers();
|
|
284625
284739
|
init_status_jobs();
|
|
284626
|
-
VEO_SHUTDOWN_WARNING = "Veo 3.1 preview models shut down on 2026-10-22. Use `-p omni` (Gemini Omni 1.1 Flash) instead.";
|
|
284627
284740
|
}
|
|
284628
284741
|
});
|
|
284629
284742
|
|
|
@@ -284733,7 +284846,7 @@ Advanced:
|
|
|
284733
284846
|
generate video-cancel Provider lifecycle control; poll with 'vibe status job <job-id> --json'
|
|
284734
284847
|
|
|
284735
284848
|
API Keys (per provider):
|
|
284736
|
-
GOOGLE_API_KEY Image (default),
|
|
284849
|
+
GOOGLE_API_KEY Image (default), Omni video
|
|
284737
284850
|
OPENAI_API_KEY Image (-p openai)
|
|
284738
284851
|
FAL_API_KEY Seedance video (-p seedance, default video)
|
|
284739
284852
|
XAI_API_KEY Grok image/video
|
|
@@ -303918,6 +304031,7 @@ var init_detect = __esm({
|
|
|
303918
304031
|
validateOutputPath(options.output);
|
|
303919
304032
|
}
|
|
303920
304033
|
if (options.dryRun) {
|
|
304034
|
+
spinner2.stop();
|
|
303921
304035
|
outputSuccess({
|
|
303922
304036
|
command: "detect scenes",
|
|
303923
304037
|
startedAt,
|
|
@@ -304037,6 +304151,7 @@ var init_detect = __esm({
|
|
|
304037
304151
|
validateOutputPath(options.output);
|
|
304038
304152
|
}
|
|
304039
304153
|
if (options.dryRun) {
|
|
304154
|
+
spinner2.stop();
|
|
304040
304155
|
outputSuccess({
|
|
304041
304156
|
command: "detect silence",
|
|
304042
304157
|
startedAt,
|
|
@@ -304123,6 +304238,7 @@ var init_detect = __esm({
|
|
|
304123
304238
|
validateOutputPath(options.output);
|
|
304124
304239
|
}
|
|
304125
304240
|
if (options.dryRun) {
|
|
304241
|
+
spinner2.stop();
|
|
304126
304242
|
outputSuccess({
|
|
304127
304243
|
command: "detect beats",
|
|
304128
304244
|
startedAt,
|
|
@@ -309834,7 +309950,7 @@ var generateVideoTool = defineTool({
|
|
|
309834
309950
|
cost: "high",
|
|
309835
309951
|
title: "Generate Video",
|
|
309836
309952
|
annotations: { readOnly: false, openWorld: true },
|
|
309837
|
-
description: "Generate video using AI. Supports Seedance 2.0 via fal.ai, Grok, Kling, Runway, and Veo. Requires FAL_API_KEY, XAI_API_KEY, KLING_API_KEY, RUNWAY_API_SECRET, or GOOGLE_API_KEY.",
|
|
309953
|
+
description: "Generate video using AI. Supports Seedance 2.0 via fal.ai, Grok, Kling, Runway, Gemini Omni, and Veo (shuts down 2026-10-22). Requires FAL_API_KEY, XAI_API_KEY, KLING_API_KEY, RUNWAY_API_SECRET, or GOOGLE_API_KEY.",
|
|
309838
309954
|
schema: z7.object({
|
|
309839
309955
|
prompt: z7.string().describe("Text prompt describing the video"),
|
|
309840
309956
|
provider: z7.enum(["seedance", "grok", "kling", "runway", "veo", "omni"]).optional().describe(
|
|
@@ -315433,7 +315549,7 @@ function handleCliFlags(argv, version2) {
|
|
|
315433
315549
|
}
|
|
315434
315550
|
|
|
315435
315551
|
// src/index.ts
|
|
315436
|
-
if (handleCliFlags(process.argv.slice(2), "0.115.
|
|
315552
|
+
if (handleCliFlags(process.argv.slice(2), "0.115.5")) {
|
|
315437
315553
|
process.exit(0);
|
|
315438
315554
|
}
|
|
315439
315555
|
console.log = (...args) => console.error(...args);
|
|
@@ -315446,7 +315562,7 @@ var server = new Server(
|
|
|
315446
315562
|
{
|
|
315447
315563
|
name: "vibeframe",
|
|
315448
315564
|
// Stamped with the package version by build.js at bundle time.
|
|
315449
|
-
version: "0.115.
|
|
315565
|
+
version: "0.115.5"
|
|
315450
315566
|
},
|
|
315451
315567
|
{
|
|
315452
315568
|
capabilities: {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeframe/mcp-server",
|
|
3
|
-
"version": "0.115.
|
|
4
|
-
"description": "VibeFrame MCP Server - frontier AI video generation for agents (Seedance, Runway,
|
|
3
|
+
"version": "0.115.5",
|
|
4
|
+
"description": "VibeFrame MCP Server - frontier AI video generation for agents (Seedance, Runway, Kling, Gemini Omni) on your own keys, behind a hard cost cap",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"vibeframe-mcp": "./dist/index.js"
|
|
@@ -66,8 +66,8 @@
|
|
|
66
66
|
"tsx": "^4.21.0",
|
|
67
67
|
"typescript": "^5.3.3",
|
|
68
68
|
"vitest": "^1.2.2",
|
|
69
|
-
"@vibeframe/cli": "0.115.
|
|
70
|
-
"@vibeframe/core": "0.115.
|
|
69
|
+
"@vibeframe/cli": "0.115.5",
|
|
70
|
+
"@vibeframe/core": "0.115.5"
|
|
71
71
|
},
|
|
72
72
|
"engines": {
|
|
73
73
|
"node": ">=20"
|