@vibeframe/mcp-server 0.92.0 → 0.94.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 +52 -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,7 @@ var init_api_keys = __esm({
|
|
|
14103
14106
|
});
|
|
14104
14107
|
defineApiKey({
|
|
14105
14108
|
configKey: "fal",
|
|
14106
|
-
envVar: "
|
|
14109
|
+
envVar: "FAL_API_KEY",
|
|
14107
14110
|
label: "fal.ai",
|
|
14108
14111
|
showInSetup: true,
|
|
14109
14112
|
setupDescription: "Seedance 2.0 video gen ($$, default since v0.57)",
|
|
@@ -14120,7 +14123,7 @@ var init_api_keys = __esm({
|
|
|
14120
14123
|
label: "xAI",
|
|
14121
14124
|
showInSetup: true,
|
|
14122
14125
|
setupDescription: "Grok \u2014 video gen with audio ($$), image ($), Agent",
|
|
14123
|
-
envExampleComment: "xAI API Key (Grok video generation \u2014 fallback when no
|
|
14126
|
+
envExampleComment: "xAI API Key (Grok video generation \u2014 fallback when no FAL_API_KEY)",
|
|
14124
14127
|
envExampleUrl: "https://console.x.ai/",
|
|
14125
14128
|
keyFormat: { prefix: /^xai-/, example: "xai-..." }
|
|
14126
14129
|
});
|
|
@@ -24177,7 +24180,7 @@ var init_FalProvider = __esm({
|
|
|
24177
24180
|
return {
|
|
24178
24181
|
id: "",
|
|
24179
24182
|
status: "failed",
|
|
24180
|
-
error: "fal.ai API key not configured. Set
|
|
24183
|
+
error: "fal.ai API key not configured. Set FAL_API_KEY in .env."
|
|
24181
24184
|
};
|
|
24182
24185
|
}
|
|
24183
24186
|
const variant = options?.model ?? DEFAULT_VARIANT;
|
|
@@ -24954,6 +24957,7 @@ __export(dist_exports, {
|
|
|
24954
24957
|
getCommandKeyMap: () => getCommandKeyMap,
|
|
24955
24958
|
getDisplayLabelForApiKey: () => getDisplayLabelForApiKey,
|
|
24956
24959
|
getKeyFormat: () => getKeyFormat,
|
|
24960
|
+
getProviderEnvAliases: () => getProviderEnvAliases,
|
|
24957
24961
|
getProviderEnvVars: () => getProviderEnvVars,
|
|
24958
24962
|
getProvidersFor: () => getProvidersFor,
|
|
24959
24963
|
getSetupProviders: () => getSetupProviders,
|
|
@@ -25413,7 +25417,7 @@ function createDefaultConfig() {
|
|
|
25413
25417
|
}
|
|
25414
25418
|
};
|
|
25415
25419
|
}
|
|
25416
|
-
var PROVIDER_NAMES, PROVIDER_ENV_VARS;
|
|
25420
|
+
var PROVIDER_NAMES, PROVIDER_ENV_VARS, PROVIDER_ENV_ALIASES;
|
|
25417
25421
|
var init_schema = __esm({
|
|
25418
25422
|
"../cli/src/config/schema.ts"() {
|
|
25419
25423
|
"use strict";
|
|
@@ -25427,6 +25431,7 @@ var init_schema = __esm({
|
|
|
25427
25431
|
openrouter: "OpenRouter"
|
|
25428
25432
|
};
|
|
25429
25433
|
PROVIDER_ENV_VARS = getProviderEnvVars();
|
|
25434
|
+
PROVIDER_ENV_ALIASES = getProviderEnvAliases();
|
|
25430
25435
|
}
|
|
25431
25436
|
});
|
|
25432
25437
|
|
|
@@ -25435,6 +25440,7 @@ var config_exports = {};
|
|
|
25435
25440
|
__export(config_exports, {
|
|
25436
25441
|
CONFIG_DIR: () => CONFIG_DIR,
|
|
25437
25442
|
CONFIG_PATH: () => CONFIG_PATH,
|
|
25443
|
+
PROVIDER_ENV_ALIASES: () => PROVIDER_ENV_ALIASES,
|
|
25438
25444
|
PROVIDER_ENV_VARS: () => PROVIDER_ENV_VARS,
|
|
25439
25445
|
PROVIDER_NAMES: () => PROVIDER_NAMES,
|
|
25440
25446
|
USER_CONFIG_DIR: () => USER_CONFIG_DIR,
|
|
@@ -25549,7 +25555,7 @@ async function isConfigured() {
|
|
|
25549
25555
|
return true;
|
|
25550
25556
|
}
|
|
25551
25557
|
const envVar = PROVIDER_ENV_VARS[providerKey];
|
|
25552
|
-
if (envVar &&
|
|
25558
|
+
if (envVar && getEnvValue(envVar)) {
|
|
25553
25559
|
return true;
|
|
25554
25560
|
}
|
|
25555
25561
|
return false;
|
|
@@ -25560,9 +25566,12 @@ async function getApiKeyFromConfig(providerKey) {
|
|
|
25560
25566
|
return config4.providers[providerKey];
|
|
25561
25567
|
}
|
|
25562
25568
|
const envVar = PROVIDER_ENV_VARS[providerKey];
|
|
25563
|
-
if (envVar) return
|
|
25569
|
+
if (envVar) return getEnvValue(envVar);
|
|
25564
25570
|
return void 0;
|
|
25565
25571
|
}
|
|
25572
|
+
function getEnvValue(envVar) {
|
|
25573
|
+
return process.env[envVar] || PROVIDER_ENV_ALIASES[envVar]?.map((alias) => process.env[alias]).find(Boolean);
|
|
25574
|
+
}
|
|
25566
25575
|
async function updateProviderKey(providerKey, apiKey, options = {}) {
|
|
25567
25576
|
const scope = options.scope ?? await getActiveScope(options.cwd);
|
|
25568
25577
|
let config4 = await loadConfig({ scope, cwd: options.cwd });
|
|
@@ -25588,6 +25597,12 @@ var init_config = __esm({
|
|
|
25588
25597
|
import { createInterface } from "node:readline";
|
|
25589
25598
|
import { readFile as readFile3, writeFile as writeFile3, access as access3 } from "node:fs/promises";
|
|
25590
25599
|
import { resolve as resolve3 } from "node:path";
|
|
25600
|
+
function providerKeyForEnvVar(envVar) {
|
|
25601
|
+
return PROVIDER_KEY_BY_ENV_VAR[envVar];
|
|
25602
|
+
}
|
|
25603
|
+
function getEnvValue2(envVar) {
|
|
25604
|
+
return process.env[envVar] || PROVIDER_ENV_ALIASES[envVar]?.map((alias) => process.env[alias]).find(Boolean);
|
|
25605
|
+
}
|
|
25591
25606
|
function loadEnv() {
|
|
25592
25607
|
(0, import_dotenv.config)({ path: resolve3(process.cwd(), ".env"), debug: false, quiet: true });
|
|
25593
25608
|
const monorepoRoot = findMonorepoRoot();
|
|
@@ -25650,19 +25665,7 @@ async function getApiKey(envVar, providerName, optionValue) {
|
|
|
25650
25665
|
if (optionValue) {
|
|
25651
25666
|
return optionValue;
|
|
25652
25667
|
}
|
|
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];
|
|
25668
|
+
const providerKey = providerKeyForEnvVar(envVar);
|
|
25666
25669
|
if (providerKey) {
|
|
25667
25670
|
const configKey = await getApiKeyFromConfig(providerKey);
|
|
25668
25671
|
if (configKey) {
|
|
@@ -25670,7 +25673,7 @@ async function getApiKey(envVar, providerName, optionValue) {
|
|
|
25670
25673
|
}
|
|
25671
25674
|
}
|
|
25672
25675
|
loadEnv();
|
|
25673
|
-
const envValue =
|
|
25676
|
+
const envValue = getEnvValue2(envVar);
|
|
25674
25677
|
if (envValue) {
|
|
25675
25678
|
return envValue;
|
|
25676
25679
|
}
|
|
@@ -25696,7 +25699,7 @@ async function getApiKey(envVar, providerName, optionValue) {
|
|
|
25696
25699
|
}
|
|
25697
25700
|
function hasApiKey(envVar) {
|
|
25698
25701
|
loadEnv();
|
|
25699
|
-
return !!
|
|
25702
|
+
return !!getEnvValue2(envVar);
|
|
25700
25703
|
}
|
|
25701
25704
|
async function requireApiKey(envVar, providerName, cliOverride) {
|
|
25702
25705
|
const key2 = await getApiKey(envVar, providerName, cliOverride);
|
|
@@ -25725,19 +25728,33 @@ async function saveApiKeyToEnv(envVar, apiKey) {
|
|
|
25725
25728
|
}
|
|
25726
25729
|
await writeFile3(envPath, content, "utf-8");
|
|
25727
25730
|
}
|
|
25728
|
-
var import_dotenv, API_KEY_URLS, ApiKeyError;
|
|
25731
|
+
var import_dotenv, PROVIDER_KEY_BY_ENV_VAR, API_KEY_URLS, ApiKeyError;
|
|
25729
25732
|
var init_api_key = __esm({
|
|
25730
25733
|
"../cli/src/utils/api-key.ts"() {
|
|
25731
25734
|
"use strict";
|
|
25732
25735
|
import_dotenv = __toESM(require_main(), 1);
|
|
25733
25736
|
init_source();
|
|
25734
25737
|
init_config();
|
|
25738
|
+
PROVIDER_KEY_BY_ENV_VAR = {
|
|
25739
|
+
ANTHROPIC_API_KEY: "anthropic",
|
|
25740
|
+
OPENAI_API_KEY: "openai",
|
|
25741
|
+
GOOGLE_API_KEY: "google",
|
|
25742
|
+
XAI_API_KEY: "xai",
|
|
25743
|
+
ELEVENLABS_API_KEY: "elevenlabs",
|
|
25744
|
+
FAL_API_KEY: "fal",
|
|
25745
|
+
RUNWAY_API_SECRET: "runway",
|
|
25746
|
+
KLING_API_KEY: "kling",
|
|
25747
|
+
OPENROUTER_API_KEY: "openrouter",
|
|
25748
|
+
IMGBB_API_KEY: "imgbb",
|
|
25749
|
+
REPLICATE_API_TOKEN: "replicate"
|
|
25750
|
+
};
|
|
25735
25751
|
API_KEY_URLS = {
|
|
25736
25752
|
GOOGLE_API_KEY: "https://aistudio.google.com/apikey",
|
|
25737
25753
|
OPENAI_API_KEY: "https://platform.openai.com/api-keys",
|
|
25738
25754
|
ANTHROPIC_API_KEY: "https://console.anthropic.com/settings/keys",
|
|
25739
25755
|
XAI_API_KEY: "https://console.x.ai",
|
|
25740
25756
|
ELEVENLABS_API_KEY: "https://elevenlabs.io/app/settings/api-keys",
|
|
25757
|
+
FAL_API_KEY: "https://fal.ai/dashboard/keys",
|
|
25741
25758
|
RUNWAY_API_SECRET: "https://app.runwayml.com/settings/api-keys",
|
|
25742
25759
|
KLING_API_KEY: "https://klingai.com/dev",
|
|
25743
25760
|
REPLICATE_API_TOKEN: "https://replicate.com/account/api-tokens",
|
|
@@ -457798,7 +457815,7 @@ async function loadProviderDefaults() {
|
|
|
457798
457815
|
configProviderKeys = null;
|
|
457799
457816
|
}
|
|
457800
457817
|
}
|
|
457801
|
-
function
|
|
457818
|
+
function providerKeyForEnvVar2(envVar) {
|
|
457802
457819
|
const envVars = getProviderEnvVars();
|
|
457803
457820
|
for (const [providerKey, candidateEnvVar] of Object.entries(envVars)) {
|
|
457804
457821
|
if (candidateEnvVar === envVar) return providerKey;
|
|
@@ -457808,7 +457825,7 @@ function providerKeyForEnvVar(envVar) {
|
|
|
457808
457825
|
function hasCandidateKey(candidate) {
|
|
457809
457826
|
if (candidate.envVar === null) return true;
|
|
457810
457827
|
if (hasApiKey(candidate.envVar)) return true;
|
|
457811
|
-
const providerKey =
|
|
457828
|
+
const providerKey = providerKeyForEnvVar2(candidate.envVar);
|
|
457812
457829
|
return providerKey ? Boolean(configProviderKeys?.has(providerKey)) : false;
|
|
457813
457830
|
}
|
|
457814
457831
|
function resolveProvider(category) {
|
|
@@ -459610,7 +459627,7 @@ function registerVideoCommand(parent) {
|
|
|
459610
459627
|
"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
459628
|
).option(
|
|
459612
459629
|
"-k, --api-key <key>",
|
|
459613
|
-
"API key (or set
|
|
459630
|
+
"API key (or set FAL_API_KEY / XAI_API_KEY / RUNWAY_API_SECRET / KLING_API_KEY / GOOGLE_API_KEY env)"
|
|
459614
459631
|
).option("-o, --output <path>", "Output file path (downloads video)").option("-i, --image <path>", "Reference image for image-to-video").option(
|
|
459615
459632
|
"-d, --duration <sec>",
|
|
459616
459633
|
"Duration in seconds. Seedance accepts 4-15; Kling accepts 5 or 10; Veo maps to 6 or 8.",
|
|
@@ -459633,7 +459650,7 @@ function registerVideoCommand(parent) {
|
|
|
459633
459650
|
"after",
|
|
459634
459651
|
`
|
|
459635
459652
|
Examples:
|
|
459636
|
-
$ vibe generate video "dancing cat" -o cat.mp4 # Seedance when
|
|
459653
|
+
$ vibe generate video "dancing cat" -o cat.mp4 # Seedance when FAL_API_KEY is set
|
|
459637
459654
|
$ vibe gen vid "cinematic city timelapse" -o city.mp4 -p seedance # Seedance via fal.ai
|
|
459638
459655
|
$ vibe gen vid "city timelapse" -o city.mp4 -p kling # Kling
|
|
459639
459656
|
$ vibe gen vid "epic scene" -i frame.png -o out.mp4 -p runway # Image-to-video
|
|
@@ -459676,7 +459693,7 @@ Examples:
|
|
|
459676
459693
|
veo: "GOOGLE_API_KEY",
|
|
459677
459694
|
kling: "KLING_API_KEY",
|
|
459678
459695
|
runway: "RUNWAY_API_SECRET",
|
|
459679
|
-
seedance: "
|
|
459696
|
+
seedance: "FAL_API_KEY"
|
|
459680
459697
|
};
|
|
459681
459698
|
let provider;
|
|
459682
459699
|
if (options.provider) {
|
|
@@ -459779,7 +459796,7 @@ Examples:
|
|
|
459779
459796
|
kling: "KLING_API_KEY",
|
|
459780
459797
|
veo: "GOOGLE_API_KEY",
|
|
459781
459798
|
grok: "XAI_API_KEY",
|
|
459782
|
-
seedance: "
|
|
459799
|
+
seedance: "FAL_API_KEY"
|
|
459783
459800
|
};
|
|
459784
459801
|
const providerNameMap = {
|
|
459785
459802
|
runway: "Runway",
|
|
@@ -460158,7 +460175,7 @@ var init_generate = __esm({
|
|
|
460158
460175
|
Examples:
|
|
460159
460176
|
$ vibe generate image "a sunset over the ocean" -o sunset.png
|
|
460160
460177
|
$ vibe generate image "logo design" -o logo.png -p openai
|
|
460161
|
-
$ vibe generate video "dancing cat" -o cat.mp4 # Seedance when
|
|
460178
|
+
$ vibe generate video "dancing cat" -o cat.mp4 # Seedance when FAL_API_KEY is set
|
|
460162
460179
|
$ vibe generate video "city timelapse" -o city.mp4 -p seedance # Seedance via fal.ai
|
|
460163
460180
|
$ vibe generate video "city timelapse" -o city.mp4 -p kling # Kling
|
|
460164
460181
|
$ vibe generate video "epic scene" -i frame.png -o out.mp4 -p runway # Image-to-video
|
|
@@ -460169,7 +460186,7 @@ Examples:
|
|
|
460169
460186
|
API Keys (per provider):
|
|
460170
460187
|
GOOGLE_API_KEY Image (default), Veo video
|
|
460171
460188
|
OPENAI_API_KEY Image (-p openai)
|
|
460172
|
-
|
|
460189
|
+
FAL_API_KEY Seedance video (-p seedance, default video)
|
|
460173
460190
|
XAI_API_KEY Grok image/video
|
|
460174
460191
|
KLING_API_KEY Kling video (-p kling)
|
|
460175
460192
|
RUNWAY_API_SECRET Runway video (-p runway)
|
|
@@ -460242,10 +460259,11 @@ async function executeVideoGenerate(options) {
|
|
|
460242
460259
|
runway: "RUNWAY_API_SECRET",
|
|
460243
460260
|
kling: "KLING_API_KEY",
|
|
460244
460261
|
veo: "GOOGLE_API_KEY",
|
|
460245
|
-
seedance: "
|
|
460246
|
-
fal: "
|
|
460262
|
+
seedance: "FAL_API_KEY",
|
|
460263
|
+
fal: "FAL_API_KEY"
|
|
460247
460264
|
};
|
|
460248
|
-
const
|
|
460265
|
+
const envKey = envKeyMap[provider] || "";
|
|
460266
|
+
const key2 = apiKey || (hasApiKey(envKey) ? process.env[envKey] : void 0);
|
|
460249
460267
|
if (!key2) return { success: false, error: `${envKeyMap[provider]} required for ${provider}` };
|
|
460250
460268
|
let referenceImage;
|
|
460251
460269
|
let referenceImageBuffer;
|
|
@@ -460642,6 +460660,7 @@ var init_ai_video = __esm({
|
|
|
460642
460660
|
init_dist();
|
|
460643
460661
|
init_upload_host();
|
|
460644
460662
|
init_ai_helpers();
|
|
460663
|
+
init_api_key();
|
|
460645
460664
|
}
|
|
460646
460665
|
});
|
|
460647
460666
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeframe/mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.94.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.94.0",
|
|
61
|
+
"@vibeframe/cli": "0.94.0"
|
|
62
62
|
},
|
|
63
63
|
"engines": {
|
|
64
64
|
"node": ">=20"
|