@vibeframe/mcp-server 0.92.0 → 0.93.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 +1 -1
- package/dist/index.js +55 -33
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -235,7 +235,7 @@ API keys are read from the host's environment (`~/.zshrc`, MCP config `env` bloc
|
|
|
235
235
|
| `GOOGLE_API_KEY` | Gemini (analyze, review, silence-cut, narrate) |
|
|
236
236
|
| `ELEVENLABS_API_KEY` | TTS, voice-clone, dubbing, SFX |
|
|
237
237
|
| `XAI_API_KEY` | Grok |
|
|
238
|
-
| `
|
|
238
|
+
| `FAL_API_KEY` | Seedance image-to-video |
|
|
239
239
|
| `RUNWAY_API_SECRET` | Runway video |
|
|
240
240
|
| `KLING_API_KEY` | Kling video |
|
|
241
241
|
| `VIBE_PROJECT_PATH` | Default timeline JSON path for resources |
|
package/dist/index.js
CHANGED
|
@@ -13996,6 +13996,9 @@ function getProvidersFor(kind) {
|
|
|
13996
13996
|
function getProviderEnvVars() {
|
|
13997
13997
|
return Object.fromEntries([...apiKeyRegistry.values()].map((k) => [k.configKey, k.envVar]));
|
|
13998
13998
|
}
|
|
13999
|
+
function getProviderEnvAliases() {
|
|
14000
|
+
return Object.fromEntries([...apiKeyRegistry.values()].filter((k) => k.envAliases && k.envAliases.length > 0).map((k) => [k.envVar, k.envAliases ?? []]));
|
|
14001
|
+
}
|
|
13999
14002
|
function getCommandKeyMap() {
|
|
14000
14003
|
const map3 = {};
|
|
14001
14004
|
for (const p of providerRegistry2.values()) {
|
|
@@ -14103,7 +14106,8 @@ var init_api_keys = __esm({
|
|
|
14103
14106
|
});
|
|
14104
14107
|
defineApiKey({
|
|
14105
14108
|
configKey: "fal",
|
|
14106
|
-
envVar: "
|
|
14109
|
+
envVar: "FAL_API_KEY",
|
|
14110
|
+
envAliases: ["FAL_KEY"],
|
|
14107
14111
|
label: "fal.ai",
|
|
14108
14112
|
showInSetup: true,
|
|
14109
14113
|
setupDescription: "Seedance 2.0 video gen ($$, default since v0.57)",
|
|
@@ -14120,7 +14124,7 @@ var init_api_keys = __esm({
|
|
|
14120
14124
|
label: "xAI",
|
|
14121
14125
|
showInSetup: true,
|
|
14122
14126
|
setupDescription: "Grok \u2014 video gen with audio ($$), image ($), Agent",
|
|
14123
|
-
envExampleComment: "xAI API Key (Grok video generation \u2014 fallback when no
|
|
14127
|
+
envExampleComment: "xAI API Key (Grok video generation \u2014 fallback when no FAL_API_KEY)",
|
|
14124
14128
|
envExampleUrl: "https://console.x.ai/",
|
|
14125
14129
|
keyFormat: { prefix: /^xai-/, example: "xai-..." }
|
|
14126
14130
|
});
|
|
@@ -24177,7 +24181,7 @@ var init_FalProvider = __esm({
|
|
|
24177
24181
|
return {
|
|
24178
24182
|
id: "",
|
|
24179
24183
|
status: "failed",
|
|
24180
|
-
error: "fal.ai API key not configured. Set
|
|
24184
|
+
error: "fal.ai API key not configured. Set FAL_API_KEY in .env."
|
|
24181
24185
|
};
|
|
24182
24186
|
}
|
|
24183
24187
|
const variant = options?.model ?? DEFAULT_VARIANT;
|
|
@@ -24954,6 +24958,7 @@ __export(dist_exports, {
|
|
|
24954
24958
|
getCommandKeyMap: () => getCommandKeyMap,
|
|
24955
24959
|
getDisplayLabelForApiKey: () => getDisplayLabelForApiKey,
|
|
24956
24960
|
getKeyFormat: () => getKeyFormat,
|
|
24961
|
+
getProviderEnvAliases: () => getProviderEnvAliases,
|
|
24957
24962
|
getProviderEnvVars: () => getProviderEnvVars,
|
|
24958
24963
|
getProvidersFor: () => getProvidersFor,
|
|
24959
24964
|
getSetupProviders: () => getSetupProviders,
|
|
@@ -25413,7 +25418,7 @@ function createDefaultConfig() {
|
|
|
25413
25418
|
}
|
|
25414
25419
|
};
|
|
25415
25420
|
}
|
|
25416
|
-
var PROVIDER_NAMES, PROVIDER_ENV_VARS;
|
|
25421
|
+
var PROVIDER_NAMES, PROVIDER_ENV_VARS, PROVIDER_ENV_ALIASES;
|
|
25417
25422
|
var init_schema = __esm({
|
|
25418
25423
|
"../cli/src/config/schema.ts"() {
|
|
25419
25424
|
"use strict";
|
|
@@ -25427,6 +25432,7 @@ var init_schema = __esm({
|
|
|
25427
25432
|
openrouter: "OpenRouter"
|
|
25428
25433
|
};
|
|
25429
25434
|
PROVIDER_ENV_VARS = getProviderEnvVars();
|
|
25435
|
+
PROVIDER_ENV_ALIASES = getProviderEnvAliases();
|
|
25430
25436
|
}
|
|
25431
25437
|
});
|
|
25432
25438
|
|
|
@@ -25435,6 +25441,7 @@ var config_exports = {};
|
|
|
25435
25441
|
__export(config_exports, {
|
|
25436
25442
|
CONFIG_DIR: () => CONFIG_DIR,
|
|
25437
25443
|
CONFIG_PATH: () => CONFIG_PATH,
|
|
25444
|
+
PROVIDER_ENV_ALIASES: () => PROVIDER_ENV_ALIASES,
|
|
25438
25445
|
PROVIDER_ENV_VARS: () => PROVIDER_ENV_VARS,
|
|
25439
25446
|
PROVIDER_NAMES: () => PROVIDER_NAMES,
|
|
25440
25447
|
USER_CONFIG_DIR: () => USER_CONFIG_DIR,
|
|
@@ -25549,7 +25556,7 @@ async function isConfigured() {
|
|
|
25549
25556
|
return true;
|
|
25550
25557
|
}
|
|
25551
25558
|
const envVar = PROVIDER_ENV_VARS[providerKey];
|
|
25552
|
-
if (envVar &&
|
|
25559
|
+
if (envVar && getEnvValue(envVar)) {
|
|
25553
25560
|
return true;
|
|
25554
25561
|
}
|
|
25555
25562
|
return false;
|
|
@@ -25560,9 +25567,12 @@ async function getApiKeyFromConfig(providerKey) {
|
|
|
25560
25567
|
return config4.providers[providerKey];
|
|
25561
25568
|
}
|
|
25562
25569
|
const envVar = PROVIDER_ENV_VARS[providerKey];
|
|
25563
|
-
if (envVar) return
|
|
25570
|
+
if (envVar) return getEnvValue(envVar);
|
|
25564
25571
|
return void 0;
|
|
25565
25572
|
}
|
|
25573
|
+
function getEnvValue(envVar) {
|
|
25574
|
+
return process.env[envVar] || PROVIDER_ENV_ALIASES[envVar]?.map((alias) => process.env[alias]).find(Boolean);
|
|
25575
|
+
}
|
|
25566
25576
|
async function updateProviderKey(providerKey, apiKey, options = {}) {
|
|
25567
25577
|
const scope = options.scope ?? await getActiveScope(options.cwd);
|
|
25568
25578
|
let config4 = await loadConfig({ scope, cwd: options.cwd });
|
|
@@ -25588,6 +25598,12 @@ var init_config = __esm({
|
|
|
25588
25598
|
import { createInterface } from "node:readline";
|
|
25589
25599
|
import { readFile as readFile3, writeFile as writeFile3, access as access3 } from "node:fs/promises";
|
|
25590
25600
|
import { resolve as resolve3 } from "node:path";
|
|
25601
|
+
function providerKeyForEnvVar(envVar) {
|
|
25602
|
+
return PROVIDER_KEY_BY_ENV_VAR[envVar];
|
|
25603
|
+
}
|
|
25604
|
+
function getEnvValue2(envVar) {
|
|
25605
|
+
return process.env[envVar] || PROVIDER_ENV_ALIASES[envVar]?.map((alias) => process.env[alias]).find(Boolean);
|
|
25606
|
+
}
|
|
25591
25607
|
function loadEnv() {
|
|
25592
25608
|
(0, import_dotenv.config)({ path: resolve3(process.cwd(), ".env"), debug: false, quiet: true });
|
|
25593
25609
|
const monorepoRoot = findMonorepoRoot();
|
|
@@ -25650,19 +25666,7 @@ async function getApiKey(envVar, providerName, optionValue) {
|
|
|
25650
25666
|
if (optionValue) {
|
|
25651
25667
|
return optionValue;
|
|
25652
25668
|
}
|
|
25653
|
-
const
|
|
25654
|
-
ANTHROPIC_API_KEY: "anthropic",
|
|
25655
|
-
OPENAI_API_KEY: "openai",
|
|
25656
|
-
GOOGLE_API_KEY: "google",
|
|
25657
|
-
XAI_API_KEY: "xai",
|
|
25658
|
-
ELEVENLABS_API_KEY: "elevenlabs",
|
|
25659
|
-
RUNWAY_API_SECRET: "runway",
|
|
25660
|
-
KLING_API_KEY: "kling",
|
|
25661
|
-
OPENROUTER_API_KEY: "openrouter",
|
|
25662
|
-
IMGBB_API_KEY: "imgbb",
|
|
25663
|
-
REPLICATE_API_TOKEN: "replicate"
|
|
25664
|
-
};
|
|
25665
|
-
const providerKey = providerKeyMap[envVar];
|
|
25669
|
+
const providerKey = providerKeyForEnvVar(envVar);
|
|
25666
25670
|
if (providerKey) {
|
|
25667
25671
|
const configKey = await getApiKeyFromConfig(providerKey);
|
|
25668
25672
|
if (configKey) {
|
|
@@ -25670,7 +25674,7 @@ async function getApiKey(envVar, providerName, optionValue) {
|
|
|
25670
25674
|
}
|
|
25671
25675
|
}
|
|
25672
25676
|
loadEnv();
|
|
25673
|
-
const envValue =
|
|
25677
|
+
const envValue = getEnvValue2(envVar);
|
|
25674
25678
|
if (envValue) {
|
|
25675
25679
|
return envValue;
|
|
25676
25680
|
}
|
|
@@ -25696,7 +25700,7 @@ async function getApiKey(envVar, providerName, optionValue) {
|
|
|
25696
25700
|
}
|
|
25697
25701
|
function hasApiKey(envVar) {
|
|
25698
25702
|
loadEnv();
|
|
25699
|
-
return !!
|
|
25703
|
+
return !!getEnvValue2(envVar);
|
|
25700
25704
|
}
|
|
25701
25705
|
async function requireApiKey(envVar, providerName, cliOverride) {
|
|
25702
25706
|
const key2 = await getApiKey(envVar, providerName, cliOverride);
|
|
@@ -25725,19 +25729,35 @@ async function saveApiKeyToEnv(envVar, apiKey) {
|
|
|
25725
25729
|
}
|
|
25726
25730
|
await writeFile3(envPath, content, "utf-8");
|
|
25727
25731
|
}
|
|
25728
|
-
var import_dotenv, API_KEY_URLS, ApiKeyError;
|
|
25732
|
+
var import_dotenv, PROVIDER_KEY_BY_ENV_VAR, API_KEY_URLS, ApiKeyError;
|
|
25729
25733
|
var init_api_key = __esm({
|
|
25730
25734
|
"../cli/src/utils/api-key.ts"() {
|
|
25731
25735
|
"use strict";
|
|
25732
25736
|
import_dotenv = __toESM(require_main(), 1);
|
|
25733
25737
|
init_source();
|
|
25734
25738
|
init_config();
|
|
25739
|
+
PROVIDER_KEY_BY_ENV_VAR = {
|
|
25740
|
+
ANTHROPIC_API_KEY: "anthropic",
|
|
25741
|
+
OPENAI_API_KEY: "openai",
|
|
25742
|
+
GOOGLE_API_KEY: "google",
|
|
25743
|
+
XAI_API_KEY: "xai",
|
|
25744
|
+
ELEVENLABS_API_KEY: "elevenlabs",
|
|
25745
|
+
FAL_API_KEY: "fal",
|
|
25746
|
+
FAL_KEY: "fal",
|
|
25747
|
+
RUNWAY_API_SECRET: "runway",
|
|
25748
|
+
KLING_API_KEY: "kling",
|
|
25749
|
+
OPENROUTER_API_KEY: "openrouter",
|
|
25750
|
+
IMGBB_API_KEY: "imgbb",
|
|
25751
|
+
REPLICATE_API_TOKEN: "replicate"
|
|
25752
|
+
};
|
|
25735
25753
|
API_KEY_URLS = {
|
|
25736
25754
|
GOOGLE_API_KEY: "https://aistudio.google.com/apikey",
|
|
25737
25755
|
OPENAI_API_KEY: "https://platform.openai.com/api-keys",
|
|
25738
25756
|
ANTHROPIC_API_KEY: "https://console.anthropic.com/settings/keys",
|
|
25739
25757
|
XAI_API_KEY: "https://console.x.ai",
|
|
25740
25758
|
ELEVENLABS_API_KEY: "https://elevenlabs.io/app/settings/api-keys",
|
|
25759
|
+
FAL_API_KEY: "https://fal.ai/dashboard/keys",
|
|
25760
|
+
FAL_KEY: "https://fal.ai/dashboard/keys",
|
|
25741
25761
|
RUNWAY_API_SECRET: "https://app.runwayml.com/settings/api-keys",
|
|
25742
25762
|
KLING_API_KEY: "https://klingai.com/dev",
|
|
25743
25763
|
REPLICATE_API_TOKEN: "https://replicate.com/account/api-tokens",
|
|
@@ -457798,7 +457818,7 @@ async function loadProviderDefaults() {
|
|
|
457798
457818
|
configProviderKeys = null;
|
|
457799
457819
|
}
|
|
457800
457820
|
}
|
|
457801
|
-
function
|
|
457821
|
+
function providerKeyForEnvVar2(envVar) {
|
|
457802
457822
|
const envVars = getProviderEnvVars();
|
|
457803
457823
|
for (const [providerKey, candidateEnvVar] of Object.entries(envVars)) {
|
|
457804
457824
|
if (candidateEnvVar === envVar) return providerKey;
|
|
@@ -457808,7 +457828,7 @@ function providerKeyForEnvVar(envVar) {
|
|
|
457808
457828
|
function hasCandidateKey(candidate) {
|
|
457809
457829
|
if (candidate.envVar === null) return true;
|
|
457810
457830
|
if (hasApiKey(candidate.envVar)) return true;
|
|
457811
|
-
const providerKey =
|
|
457831
|
+
const providerKey = providerKeyForEnvVar2(candidate.envVar);
|
|
457812
457832
|
return providerKey ? Boolean(configProviderKeys?.has(providerKey)) : false;
|
|
457813
457833
|
}
|
|
457814
457834
|
function resolveProvider(category) {
|
|
@@ -459610,7 +459630,7 @@ function registerVideoCommand(parent) {
|
|
|
459610
459630
|
"Provider: seedance (ByteDance Seedance 2.0 via fal.ai), grok, kling, runway, veo. `fal` is a deprecated v0.x alias for seedance and will be removed in 1.0."
|
|
459611
459631
|
).option(
|
|
459612
459632
|
"-k, --api-key <key>",
|
|
459613
|
-
"API key (or set
|
|
459633
|
+
"API key (or set FAL_API_KEY / XAI_API_KEY / RUNWAY_API_SECRET / KLING_API_KEY / GOOGLE_API_KEY env)"
|
|
459614
459634
|
).option("-o, --output <path>", "Output file path (downloads video)").option("-i, --image <path>", "Reference image for image-to-video").option(
|
|
459615
459635
|
"-d, --duration <sec>",
|
|
459616
459636
|
"Duration in seconds. Seedance accepts 4-15; Kling accepts 5 or 10; Veo maps to 6 or 8.",
|
|
@@ -459633,7 +459653,7 @@ function registerVideoCommand(parent) {
|
|
|
459633
459653
|
"after",
|
|
459634
459654
|
`
|
|
459635
459655
|
Examples:
|
|
459636
|
-
$ vibe generate video "dancing cat" -o cat.mp4 # Seedance when
|
|
459656
|
+
$ vibe generate video "dancing cat" -o cat.mp4 # Seedance when FAL_API_KEY is set
|
|
459637
459657
|
$ vibe gen vid "cinematic city timelapse" -o city.mp4 -p seedance # Seedance via fal.ai
|
|
459638
459658
|
$ vibe gen vid "city timelapse" -o city.mp4 -p kling # Kling
|
|
459639
459659
|
$ vibe gen vid "epic scene" -i frame.png -o out.mp4 -p runway # Image-to-video
|
|
@@ -459676,7 +459696,7 @@ Examples:
|
|
|
459676
459696
|
veo: "GOOGLE_API_KEY",
|
|
459677
459697
|
kling: "KLING_API_KEY",
|
|
459678
459698
|
runway: "RUNWAY_API_SECRET",
|
|
459679
|
-
seedance: "
|
|
459699
|
+
seedance: "FAL_API_KEY"
|
|
459680
459700
|
};
|
|
459681
459701
|
let provider;
|
|
459682
459702
|
if (options.provider) {
|
|
@@ -459779,7 +459799,7 @@ Examples:
|
|
|
459779
459799
|
kling: "KLING_API_KEY",
|
|
459780
459800
|
veo: "GOOGLE_API_KEY",
|
|
459781
459801
|
grok: "XAI_API_KEY",
|
|
459782
|
-
seedance: "
|
|
459802
|
+
seedance: "FAL_API_KEY"
|
|
459783
459803
|
};
|
|
459784
459804
|
const providerNameMap = {
|
|
459785
459805
|
runway: "Runway",
|
|
@@ -460158,7 +460178,7 @@ var init_generate = __esm({
|
|
|
460158
460178
|
Examples:
|
|
460159
460179
|
$ vibe generate image "a sunset over the ocean" -o sunset.png
|
|
460160
460180
|
$ vibe generate image "logo design" -o logo.png -p openai
|
|
460161
|
-
$ vibe generate video "dancing cat" -o cat.mp4 # Seedance when
|
|
460181
|
+
$ vibe generate video "dancing cat" -o cat.mp4 # Seedance when FAL_API_KEY is set
|
|
460162
460182
|
$ vibe generate video "city timelapse" -o city.mp4 -p seedance # Seedance via fal.ai
|
|
460163
460183
|
$ vibe generate video "city timelapse" -o city.mp4 -p kling # Kling
|
|
460164
460184
|
$ vibe generate video "epic scene" -i frame.png -o out.mp4 -p runway # Image-to-video
|
|
@@ -460169,7 +460189,7 @@ Examples:
|
|
|
460169
460189
|
API Keys (per provider):
|
|
460170
460190
|
GOOGLE_API_KEY Image (default), Veo video
|
|
460171
460191
|
OPENAI_API_KEY Image (-p openai)
|
|
460172
|
-
|
|
460192
|
+
FAL_API_KEY Seedance video (-p seedance, default video)
|
|
460173
460193
|
XAI_API_KEY Grok image/video
|
|
460174
460194
|
KLING_API_KEY Kling video (-p kling)
|
|
460175
460195
|
RUNWAY_API_SECRET Runway video (-p runway)
|
|
@@ -460242,10 +460262,11 @@ async function executeVideoGenerate(options) {
|
|
|
460242
460262
|
runway: "RUNWAY_API_SECRET",
|
|
460243
460263
|
kling: "KLING_API_KEY",
|
|
460244
460264
|
veo: "GOOGLE_API_KEY",
|
|
460245
|
-
seedance: "
|
|
460246
|
-
fal: "
|
|
460265
|
+
seedance: "FAL_API_KEY",
|
|
460266
|
+
fal: "FAL_API_KEY"
|
|
460247
460267
|
};
|
|
460248
|
-
const
|
|
460268
|
+
const envKey = envKeyMap[provider] || "";
|
|
460269
|
+
const key2 = apiKey || (hasApiKey(envKey) ? process.env[envKey] || (envKey === "FAL_API_KEY" ? process.env.FAL_KEY : void 0) : void 0);
|
|
460249
460270
|
if (!key2) return { success: false, error: `${envKeyMap[provider]} required for ${provider}` };
|
|
460250
460271
|
let referenceImage;
|
|
460251
460272
|
let referenceImageBuffer;
|
|
@@ -460642,6 +460663,7 @@ var init_ai_video = __esm({
|
|
|
460642
460663
|
init_dist();
|
|
460643
460664
|
init_upload_host();
|
|
460644
460665
|
init_ai_helpers();
|
|
460666
|
+
init_api_key();
|
|
460645
460667
|
}
|
|
460646
460668
|
});
|
|
460647
460669
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeframe/mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.93.0",
|
|
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.
|
|
61
|
-
"@vibeframe/cli": "0.
|
|
60
|
+
"@vibeframe/core": "0.93.0",
|
|
61
|
+
"@vibeframe/cli": "0.93.0"
|
|
62
62
|
},
|
|
63
63
|
"engines": {
|
|
64
64
|
"node": ">=20"
|