@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.
Files changed (3) hide show
  1. package/README.md +1 -1
  2. package/dist/index.js +139 -23
  3. 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, Veo, Kling), 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.
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 ($), Veo ($$)",
205
- envExampleComment: "Google API Key (Gemini auto-edit suggestions, image gen, Veo video)",
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 || "veo-3.1-fast-generate-preview";
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 || "veo-3.1-generate-preview";
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
- veoModel: options.veoModel,
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: provider === "veo" ? [VEO_SHUTDOWN_WARNING, ...cost.warnings] : cost.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), Veo video
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.4")) {
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.4"
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",
4
- "description": "VibeFrame MCP Server - frontier AI video generation for agents (Seedance, Runway, Veo, Kling) on your own keys, behind a hard cost cap",
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.4",
70
- "@vibeframe/core": "0.115.4"
69
+ "@vibeframe/cli": "0.115.5",
70
+ "@vibeframe/core": "0.115.5"
71
71
  },
72
72
  "engines": {
73
73
  "node": ">=20"