video-context-mcp-server 0.13.0-beta → 0.14.0-beta
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 +58 -19
- package/dist/services/providerRouter.d.ts +10 -1
- package/dist/services/providerRouter.d.ts.map +1 -1
- package/dist/services/providerRouter.js +20 -2
- package/dist/services/providerRouter.js.map +1 -1
- package/dist/tools/analyzeVideo.d.ts.map +1 -1
- package/dist/tools/analyzeVideo.js +7 -0
- package/dist/tools/analyzeVideo.js.map +1 -1
- package/dist/tools/summarizeVideo.d.ts.map +1 -1
- package/dist/tools/summarizeVideo.js +11 -1
- package/dist/tools/summarizeVideo.js.map +1 -1
- package/dist/utils/audioUtils.d.ts +3 -0
- package/dist/utils/audioUtils.d.ts.map +1 -1
- package/dist/utils/audioUtils.js +6 -0
- package/dist/utils/audioUtils.js.map +1 -1
- package/dist/utils/license.d.ts +55 -0
- package/dist/utils/license.d.ts.map +1 -0
- package/dist/utils/license.js +136 -0
- package/dist/utils/license.js.map +1 -0
- package/dist/utils/videoUtils.d.ts +4 -0
- package/dist/utils/videoUtils.d.ts.map +1 -1
- package/dist/utils/videoUtils.js +23 -0
- package/dist/utils/videoUtils.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -46,7 +46,17 @@ npm install -g video-context-mcp-server
|
|
|
46
46
|
|
|
47
47
|
This installs the executable command: `video-context-mcp`.
|
|
48
48
|
|
|
49
|
-
> **Tip:**
|
|
49
|
+
> **Tip:** To check your installed version and whether an update is available:
|
|
50
|
+
>
|
|
51
|
+
> ```bash
|
|
52
|
+
> # Check installed version
|
|
53
|
+
> npm ls -g --depth=0 video-context-mcp-server
|
|
54
|
+
>
|
|
55
|
+
> # Check if outdated
|
|
56
|
+
> npm outdated -g video-context-mcp-server
|
|
57
|
+
> ```
|
|
58
|
+
>
|
|
59
|
+
> To update to the latest version, re-run:
|
|
50
60
|
>
|
|
51
61
|
> ```bash
|
|
52
62
|
> npm install -g video-context-mcp-server@latest
|
|
@@ -326,22 +336,23 @@ When a provider's API key is missing, the tool automatically falls back to the n
|
|
|
326
336
|
|
|
327
337
|
## Environment Variables
|
|
328
338
|
|
|
329
|
-
| Variable | Description
|
|
330
|
-
| ------------------------------ |
|
|
331
|
-
| `GEMINI_API_KEY` | Google API key for Gemini 3 Flash Preview
|
|
332
|
-
| `MOONSHOT_API_KEY` | Moonshot AI API key for Kimi K2.5
|
|
333
|
-
| `Z_AI_API_KEY` | Z.AI API key for GLM-4.6V
|
|
334
|
-
| `VIDEO_MCP_DEFAULT_PROVIDER` | Default video backend (`gemini`, `glm`, `kimi`)
|
|
335
|
-
| `VIDEO_MCP_MAX_FRAMES` | Max frames for summarization (GLM/Kimi only)
|
|
336
|
-
| `DEEPGRAM_API_KEY` | Deepgram API key for `transcribe_video`
|
|
337
|
-
| `ASSEMBLYAI_API_KEY` | AssemblyAI API key for `transcribe_video`
|
|
338
|
-
| `GROQ_API_KEY` | Groq API key for Whisper transcription via `transcribe_video`
|
|
339
|
-
| `AUDIO_MCP_DEFAULT_PROVIDER` | Default audio provider; defaults to `deepgram`. Falls back in order: **deepgram → assemblyai → groq → gemini** when the selected provider's key is unavailable. A fallback notice is included in the response.
|
|
340
|
-
| `AUDIO_ENHANCE_VIDEO_ANALYSIS` | Controls audio transcript injection into GLM/Kimi `analyze_video`/`summarize_video` prompts. `auto` (default) — transcribes only when the video has a detected audio track; `true` — always attempt transcription; `false` — disabled. A confidence label (`high`/`medium`/`low`) is included in the injected header so the model can weight the transcript appropriately. Gemini is always skipped (handles audio natively). | Optional (default: `auto
|
|
341
|
-
| `VIDEO_MCP_CACHE_TTL_MINUTES` | How long downloaded remote/platform videos are cached (in minutes) across separate tool calls. Cached files live in `os.tmpdir()/video-mcp-cache/` and survive per-call cleanup, avoiding redundant downloads on retries or follow-up questions. Set to `0` to disable caching entirely.
|
|
342
|
-
| `YT_DLP_MAX_RESOLUTION` | Maximum video height in pixels when downloading via yt-dlp (YouTube, Vimeo, TikTok, etc.). Lower values reduce file size and download time.
|
|
343
|
-
| `YT_DLP_PATH` | Path to a custom yt-dlp binary. If unset, uses the binary bundled by `youtube-dl-exec` at install time.
|
|
344
|
-
| `YT_DLP_COOKIES_FILE` | Path to a Netscape-format cookies file for authenticated yt-dlp downloads (e.g. age-restricted or private YouTube videos).
|
|
339
|
+
| Variable | Description | Required |
|
|
340
|
+
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
|
|
341
|
+
| `GEMINI_API_KEY` | Google API key for Gemini 3 Flash Preview | Optional (required if using Gemini) |
|
|
342
|
+
| `MOONSHOT_API_KEY` | Moonshot AI API key for Kimi K2.5 | Optional (required if using Kimi) |
|
|
343
|
+
| `Z_AI_API_KEY` | Z.AI API key for GLM-4.6V | Optional (required if using GLM) |
|
|
344
|
+
| `VIDEO_MCP_DEFAULT_PROVIDER` | Default video backend (`gemini`, `glm`, `kimi`) | Optional (default: `glm`) |
|
|
345
|
+
| `VIDEO_MCP_MAX_FRAMES` | Max frames for summarization (GLM/Kimi only). Free users capped at 40; premium users can set up to 100. | Optional (default: 40; clamped to 5-100) |
|
|
346
|
+
| `DEEPGRAM_API_KEY` | Deepgram API key for `transcribe_video` | Optional (required if using Deepgram) |
|
|
347
|
+
| `ASSEMBLYAI_API_KEY` | AssemblyAI API key for `transcribe_video` | Optional (required if using AssemblyAI) |
|
|
348
|
+
| `GROQ_API_KEY` | Groq API key for Whisper transcription via `transcribe_video` | Optional (required if using Groq) |
|
|
349
|
+
| `AUDIO_MCP_DEFAULT_PROVIDER` | Default audio provider; defaults to `deepgram`. Falls back in order: **deepgram → assemblyai → groq → gemini** when the selected provider's key is unavailable. A fallback notice is included in the response. | Optional (auto-selects from available keys) |
|
|
350
|
+
| `AUDIO_ENHANCE_VIDEO_ANALYSIS` | Controls audio transcript injection into GLM/Kimi `analyze_video`/`summarize_video` prompts. **Requires a premium license.** `auto` (default) — transcribes only when the video has a detected audio track; `true` — always attempt transcription; `false` — disabled. A confidence label (`high`/`medium`/`low`) is included in the injected header so the model can weight the transcript appropriately. Gemini is always skipped (handles audio natively). | Optional (default: `auto`; premium only) |
|
|
351
|
+
| `VIDEO_MCP_CACHE_TTL_MINUTES` | How long downloaded remote/platform videos are cached (in minutes) across separate tool calls. Cached files live in `os.tmpdir()/video-mcp-cache/` and survive per-call cleanup, avoiding redundant downloads on retries or follow-up questions. Set to `0` to disable caching entirely. | Optional (default: `30`) |
|
|
352
|
+
| `YT_DLP_MAX_RESOLUTION` | Maximum video height in pixels when downloading via yt-dlp (YouTube, Vimeo, TikTok, etc.). Lower values reduce file size and download time. | Optional (default: `720`) |
|
|
353
|
+
| `YT_DLP_PATH` | Path to a custom yt-dlp binary. If unset, uses the binary bundled by `youtube-dl-exec` at install time. | Optional |
|
|
354
|
+
| `YT_DLP_COOKIES_FILE` | Path to a Netscape-format cookies file for authenticated yt-dlp downloads (e.g. age-restricted or private YouTube videos). | Optional |
|
|
355
|
+
| `VIDEO_MCP_LICENSE_KEY` | Premium license key. Unlocks audio-enhanced analysis, extended frame extraction (up to 100), and platform downloads beyond YouTube. Valid for 1 year from date of issue. | Optional (free tier without it) |
|
|
345
356
|
|
|
346
357
|
> **Tip: install yt-dlp system-wide for faster startup.** The `youtube-dl-exec` package bundles a yt-dlp binary downloaded at `npm install` time, which adds ~30 MB to the install footprint. If you use platform video URLs regularly, it's lighter to install yt-dlp directly and point to it:
|
|
347
358
|
>
|
|
@@ -381,7 +392,9 @@ When a provider's API key is missing, the tool automatically falls back to the n
|
|
|
381
392
|
"VIDEO_MCP_MAX_FRAMES": "40",
|
|
382
393
|
"AUDIO_ENHANCE_VIDEO_ANALYSIS": "auto",
|
|
383
394
|
"VIDEO_MCP_CACHE_TTL_MINUTES": "30",
|
|
384
|
-
"YT_DLP_MAX_RESOLUTION": "720"
|
|
395
|
+
"YT_DLP_MAX_RESOLUTION": "720",
|
|
396
|
+
"YT_DLP_PATH": "/path/to/yt-dlp",
|
|
397
|
+
"VIDEO_MCP_LICENSE_KEY": "<your-license-key>"
|
|
385
398
|
}
|
|
386
399
|
}
|
|
387
400
|
}
|
|
@@ -392,6 +405,32 @@ When a provider's API key is missing, the tool automatically falls back to the n
|
|
|
392
405
|
>
|
|
393
406
|
> **Note:** `YT_DLP_PATH` and `YT_DLP_COOKIES_FILE` are only needed if you want to use a custom yt-dlp binary or authenticate downloads of private/age-restricted videos. Omit them for standard use.
|
|
394
407
|
|
|
408
|
+
## Free vs Premium
|
|
409
|
+
|
|
410
|
+
The server works out of the box on a free tier. A premium license unlocks additional capabilities:
|
|
411
|
+
|
|
412
|
+
| Feature | Free Tier | Premium |
|
|
413
|
+
| -------------------------------- | ------------ | ---------------------------------------- |
|
|
414
|
+
| **Audio-enhanced analysis** | Disabled | Enabled (`AUDIO_ENHANCE_VIDEO_ANALYSIS`) |
|
|
415
|
+
| **Max frames for summarization** | Capped at 40 | Up to 100 (`VIDEO_MCP_MAX_FRAMES`) |
|
|
416
|
+
| **Platform video downloads** | YouTube only | All yt-dlp-supported platforms |
|
|
417
|
+
|
|
418
|
+
When a free-tier user hits a premium-gated feature, the tool returns a clear notice explaining the limit and continues with the free-tier fallback — it never hard-blocks.
|
|
419
|
+
|
|
420
|
+
### Getting a License
|
|
421
|
+
|
|
422
|
+
License keys are valid for 1 year from date of issue and verified offline (no network call needed at runtime).
|
|
423
|
+
|
|
424
|
+
To obtain a premium license key, contact the author. Once you have your key, set it as an environment variable:
|
|
425
|
+
|
|
426
|
+
```json
|
|
427
|
+
{
|
|
428
|
+
"env": {
|
|
429
|
+
"VIDEO_MCP_LICENSE_KEY": "<your-license-key>"
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
```
|
|
433
|
+
|
|
395
434
|
## Development
|
|
396
435
|
|
|
397
436
|
```bash
|
|
@@ -451,7 +490,7 @@ video-mcp/
|
|
|
451
490
|
|
|
452
491
|
## License
|
|
453
492
|
|
|
454
|
-
|
|
493
|
+
Proprietary — All Rights Reserved. No part of this software may be copied, modified, distributed, or used without explicit written permission from the author.
|
|
455
494
|
|
|
456
495
|
## Credits
|
|
457
496
|
|
|
@@ -47,7 +47,16 @@ export declare function getDefaultProvider(): VideoProvider;
|
|
|
47
47
|
*/
|
|
48
48
|
export declare function getRuntimeFallbackChain(provider: VideoProvider, hasKimiKey: boolean, hasGLMKey: boolean, hasGeminiKey?: boolean): VideoProvider[];
|
|
49
49
|
/**
|
|
50
|
-
* Get the maximum number of frames to extract for summarization
|
|
50
|
+
* Get the maximum number of frames to extract for summarization.
|
|
51
|
+
*
|
|
52
|
+
* Free users are capped at 40. Premium users can set up to 100 via
|
|
53
|
+
* the VIDEO_MCP_MAX_FRAMES env var.
|
|
51
54
|
*/
|
|
52
55
|
export declare function getMaxFrames(): number;
|
|
56
|
+
/**
|
|
57
|
+
* Returns true when the user requested more frames than the free-tier
|
|
58
|
+
* cap and does not have a premium license. Used by tool handlers to
|
|
59
|
+
* append a premium notice to the response.
|
|
60
|
+
*/
|
|
61
|
+
export declare function wasFramesCapped(): boolean;
|
|
53
62
|
//# sourceMappingURL=providerRouter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providerRouter.d.ts","sourceRoot":"","sources":["../../src/services/providerRouter.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"providerRouter.d.ts","sourceRoot":"","sources":["../../src/services/providerRouter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;AAErD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,OAAO,EAClB,YAAY,GAAE,OAAe,GAC5B,aAAa,CAiBf;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,aAAa,CAAA;IACvB,YAAY,CAAC,EAAE,aAAa,CAAA;CAC7B,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,OAAO,EAClB,YAAY,GAAE,OAAe,GAC5B,cAAc,CAgBhB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,CAUlD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,OAAO,EAClB,YAAY,GAAE,OAAe,GAC5B,aAAa,EAAE,CAejB;AAKD;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAIrC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAIzC"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Provider Selection
|
|
3
3
|
* Determines which AI backend to use based on user preference
|
|
4
4
|
*/
|
|
5
|
+
import { isPremium } from '../utils/license.js';
|
|
5
6
|
/**
|
|
6
7
|
* Validate that the selected provider has a configured API key
|
|
7
8
|
* @param provider - User-specified provider ('glm', 'kimi', or 'gemini')
|
|
@@ -79,11 +80,28 @@ export function getRuntimeFallbackChain(provider, hasKimiKey, hasGLMKey, hasGemi
|
|
|
79
80
|
};
|
|
80
81
|
return candidates.filter((p) => keyMap[p]);
|
|
81
82
|
}
|
|
83
|
+
/** Free-tier cap for max frames. Premium users can go up to 100. */
|
|
84
|
+
const FREE_MAX_FRAMES = 40;
|
|
82
85
|
/**
|
|
83
|
-
* Get the maximum number of frames to extract for summarization
|
|
86
|
+
* Get the maximum number of frames to extract for summarization.
|
|
87
|
+
*
|
|
88
|
+
* Free users are capped at 40. Premium users can set up to 100 via
|
|
89
|
+
* the VIDEO_MCP_MAX_FRAMES env var.
|
|
84
90
|
*/
|
|
85
91
|
export function getMaxFrames() {
|
|
92
|
+
const upperBound = isPremium() ? 100 : FREE_MAX_FRAMES;
|
|
93
|
+
const envMaxFrames = parseInt(process.env.VIDEO_MCP_MAX_FRAMES || '40', 10);
|
|
94
|
+
return Math.max(5, Math.min(upperBound, envMaxFrames));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Returns true when the user requested more frames than the free-tier
|
|
98
|
+
* cap and does not have a premium license. Used by tool handlers to
|
|
99
|
+
* append a premium notice to the response.
|
|
100
|
+
*/
|
|
101
|
+
export function wasFramesCapped() {
|
|
102
|
+
if (isPremium())
|
|
103
|
+
return false;
|
|
86
104
|
const envMaxFrames = parseInt(process.env.VIDEO_MCP_MAX_FRAMES || '40', 10);
|
|
87
|
-
return
|
|
105
|
+
return envMaxFrames > FREE_MAX_FRAMES;
|
|
88
106
|
}
|
|
89
107
|
//# sourceMappingURL=providerRouter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providerRouter.js","sourceRoot":"","sources":["../../src/services/providerRouter.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"providerRouter.js","sourceRoot":"","sources":["../../src/services/providerRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzeVideo.d.ts","sourceRoot":"","sources":["../../src/tools/analyzeVideo.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"analyzeVideo.d.ts","sourceRoot":"","sources":["../../src/tools/analyzeVideo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6BH,eAAO,MAAM,gBAAgB,GAAU,QAAQ,GAAG;;;;;;;;;;;;EAyMjD,CAAA"}
|
|
@@ -13,6 +13,7 @@ import { createTempDir, cleanupTempDir } from '../utils/tempFiles.js';
|
|
|
13
13
|
import { isPlatformUrl, isRemoteUrl, normalizeVideoPath, downloadVideoToTemp, downloadWithYtDlp, } from '../utils/videoUtils.js';
|
|
14
14
|
import { logProgress } from '../utils/logger.js';
|
|
15
15
|
import { getAudioEnhancementMode, tryExtractAndTranscribeAudio, buildPromptWithTranscript, } from '../utils/audioUtils.js';
|
|
16
|
+
import { isPremium, premiumNotice } from '../utils/license.js';
|
|
16
17
|
export const analyzeVideoTool = async (params) => {
|
|
17
18
|
let tempDir = null;
|
|
18
19
|
try {
|
|
@@ -148,6 +149,11 @@ export const analyzeVideoTool = async (params) => {
|
|
|
148
149
|
}
|
|
149
150
|
runtimeFallbacks.forEach((p) => parts.push(`${p} (runtime error)`));
|
|
150
151
|
const fallbackNotice = parts.length > 0 ? ` (fell back from: ${parts.join(', ')})` : '';
|
|
152
|
+
// ── Premium notices ───────────────────────────────────────────────────────
|
|
153
|
+
const notices = [];
|
|
154
|
+
if (!isPremium() && process.env.AUDIO_ENHANCE_VIDEO_ANALYSIS !== 'false') {
|
|
155
|
+
notices.push(premiumNotice('Audio-enhanced analysis'));
|
|
156
|
+
}
|
|
151
157
|
return {
|
|
152
158
|
content: [
|
|
153
159
|
{
|
|
@@ -158,6 +164,7 @@ export const analyzeVideoTool = async (params) => {
|
|
|
158
164
|
type: 'text',
|
|
159
165
|
text: `Provider used: ${selectedProvider}${fallbackNotice}`,
|
|
160
166
|
},
|
|
167
|
+
...notices.map((n) => ({ type: 'text', text: n })),
|
|
161
168
|
],
|
|
162
169
|
};
|
|
163
170
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzeVideo.js","sourceRoot":"","sources":["../../src/tools/analyzeVideo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GAExB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACrE,OAAO,EACL,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"analyzeVideo.js","sourceRoot":"","sources":["../../src/tools/analyzeVideo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summarizeVideo.d.ts","sourceRoot":"","sources":["../../src/tools/summarizeVideo.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"summarizeVideo.d.ts","sourceRoot":"","sources":["../../src/tools/summarizeVideo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6CH,eAAO,MAAM,kBAAkB,GAAU,QAAQ,GAAG;;;;;;;;;;;;EAyOnD,CAAA"}
|
|
@@ -8,12 +8,13 @@ import { extractFramesEvenly, getVideoMetadata } from '../services/ffmpeg.js';
|
|
|
8
8
|
import { createGLMClient } from '../services/glmClient.js';
|
|
9
9
|
import { createKimiClient } from '../services/kimiClient.js';
|
|
10
10
|
import { createGeminiClient } from '../services/geminiClient.js';
|
|
11
|
-
import { getDefaultProvider, getMaxFrames, getRuntimeFallbackChain, } from '../services/providerRouter.js';
|
|
11
|
+
import { getDefaultProvider, getMaxFrames, getRuntimeFallbackChain, wasFramesCapped, } from '../services/providerRouter.js';
|
|
12
12
|
import { bufferToBase64String } from '../utils/base64.js';
|
|
13
13
|
import { createTempDir, cleanupTempDir } from '../utils/tempFiles.js';
|
|
14
14
|
import { isPlatformUrl, isRemoteUrl, normalizeVideoPath, downloadVideoToTemp, downloadWithYtDlp, } from '../utils/videoUtils.js';
|
|
15
15
|
import { logProgress } from '../utils/logger.js';
|
|
16
16
|
import { getAudioEnhancementMode, tryExtractAndTranscribeAudio, buildPromptWithTranscript, } from '../utils/audioUtils.js';
|
|
17
|
+
import { isPremium, premiumNotice } from '../utils/license.js';
|
|
17
18
|
const LONG_VIDEO_THRESHOLD_SEC = 5 * 60;
|
|
18
19
|
function buildSummaryPrompt() {
|
|
19
20
|
return [
|
|
@@ -182,6 +183,14 @@ export const summarizeVideoTool = async (params) => {
|
|
|
182
183
|
}
|
|
183
184
|
runtimeFallbacks.forEach((p) => parts.push(`${p} (runtime error)`));
|
|
184
185
|
const fallbackNotice = parts.length > 0 ? ` (fell back from: ${parts.join(', ')})` : '';
|
|
186
|
+
// ── Premium notices ───────────────────────────────────────────────────────
|
|
187
|
+
const notices = [];
|
|
188
|
+
if (!isPremium() && process.env.AUDIO_ENHANCE_VIDEO_ANALYSIS !== 'false') {
|
|
189
|
+
notices.push(premiumNotice('Audio-enhanced analysis'));
|
|
190
|
+
}
|
|
191
|
+
if (wasFramesCapped()) {
|
|
192
|
+
notices.push(premiumNotice('Extended frame extraction (up to 100)'));
|
|
193
|
+
}
|
|
185
194
|
return {
|
|
186
195
|
content: [
|
|
187
196
|
{
|
|
@@ -192,6 +201,7 @@ export const summarizeVideoTool = async (params) => {
|
|
|
192
201
|
type: 'text',
|
|
193
202
|
text: `Provider used: ${selectedProvider}${fallbackNotice}`,
|
|
194
203
|
},
|
|
204
|
+
...notices.map((n) => ({ type: 'text', text: n })),
|
|
195
205
|
],
|
|
196
206
|
};
|
|
197
207
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summarizeVideo.js","sourceRoot":"","sources":["../../src/tools/summarizeVideo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAA;AACrC,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,uBAAuB,
|
|
1
|
+
{"version":3,"file":"summarizeVideo.js","sourceRoot":"","sources":["../../src/tools/summarizeVideo.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,9 @@ export type TranscriptResult = {
|
|
|
17
17
|
/**
|
|
18
18
|
* Reads and validates AUDIO_ENHANCE_VIDEO_ANALYSIS env var.
|
|
19
19
|
* Returns 'auto' if unset or unrecognised (the default behaviour).
|
|
20
|
+
*
|
|
21
|
+
* Audio enhancement is a premium feature. When no valid license is present,
|
|
22
|
+
* this always returns 'false' regardless of the env var value.
|
|
20
23
|
*/
|
|
21
24
|
export declare function getAudioEnhancementMode(): AudioEnhancementMode;
|
|
22
25
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audioUtils.d.ts","sourceRoot":"","sources":["../../src/utils/audioUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"audioUtils.d.ts","sourceRoot":"","sources":["../../src/utils/audioUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAiBH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE5D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;CACtC,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,IAAI,oBAAoB,CAK9D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,QAAQ,GAAG,KAAK,CAM3B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,4BAA4B,CAChD,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAkElC;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAC9B,MAAM,CASR"}
|
package/dist/utils/audioUtils.js
CHANGED
|
@@ -18,11 +18,17 @@ import { createGeminiClient } from '../services/geminiClient.js';
|
|
|
18
18
|
import { resolveAudioProvider, getAudioProviderKeys, } from '../services/audioRouter.js';
|
|
19
19
|
import { generateTempFilename } from './tempFiles.js';
|
|
20
20
|
import { logProgress } from './logger.js';
|
|
21
|
+
import { isPremium } from './license.js';
|
|
21
22
|
/**
|
|
22
23
|
* Reads and validates AUDIO_ENHANCE_VIDEO_ANALYSIS env var.
|
|
23
24
|
* Returns 'auto' if unset or unrecognised (the default behaviour).
|
|
25
|
+
*
|
|
26
|
+
* Audio enhancement is a premium feature. When no valid license is present,
|
|
27
|
+
* this always returns 'false' regardless of the env var value.
|
|
24
28
|
*/
|
|
25
29
|
export function getAudioEnhancementMode() {
|
|
30
|
+
if (!isPremium())
|
|
31
|
+
return 'false';
|
|
26
32
|
const val = process.env.AUDIO_ENHANCE_VIDEO_ANALYSIS;
|
|
27
33
|
if (val === 'true' || val === 'false' || val === 'auto')
|
|
28
34
|
return val;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audioUtils.js","sourceRoot":"","sources":["../../src/utils/audioUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GAErB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"audioUtils.js","sourceRoot":"","sources":["../../src/utils/audioUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Premium license validation module.
|
|
3
|
+
*
|
|
4
|
+
* License tokens are compact `payload.signature` strings where:
|
|
5
|
+
* - payload = base64url-encoded JSON: { email, iat, exp }
|
|
6
|
+
* - signature = base64url-encoded Ed25519 signature of the raw payload bytes
|
|
7
|
+
*
|
|
8
|
+
* Verification uses an embedded Ed25519 public key (no network required).
|
|
9
|
+
* The license key is read from the VIDEO_MCP_LICENSE_KEY environment variable.
|
|
10
|
+
*
|
|
11
|
+
* Tokens are valid for 1 year from issuance (exp = iat + 365 days).
|
|
12
|
+
*/
|
|
13
|
+
export interface LicensePayload {
|
|
14
|
+
email: string;
|
|
15
|
+
/** Issued-at (Unix seconds) */
|
|
16
|
+
iat: number;
|
|
17
|
+
/** Expiry (Unix seconds) */
|
|
18
|
+
exp: number;
|
|
19
|
+
}
|
|
20
|
+
export interface LicenseInfo {
|
|
21
|
+
valid: boolean;
|
|
22
|
+
email?: string;
|
|
23
|
+
expiresAt?: Date;
|
|
24
|
+
reason?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Resets the cached license validation result.
|
|
28
|
+
* Exposed for testing purposes only.
|
|
29
|
+
* @internal
|
|
30
|
+
*/
|
|
31
|
+
export declare function _resetLicenseCache(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Validates a raw license token string and returns detailed info.
|
|
34
|
+
*
|
|
35
|
+
* @param token - The `payload.signature` token string
|
|
36
|
+
* @param nowSec - Current time in Unix seconds (overridable for testing)
|
|
37
|
+
*/
|
|
38
|
+
export declare function validateLicenseToken(token: string, nowSec?: number): LicenseInfo;
|
|
39
|
+
/**
|
|
40
|
+
* Returns detailed license validation info.
|
|
41
|
+
* The result is cached after the first call (per process lifetime).
|
|
42
|
+
*/
|
|
43
|
+
export declare function getLicenseInfo(): LicenseInfo;
|
|
44
|
+
/**
|
|
45
|
+
* Returns true if the current process has a valid (non-expired) premium license.
|
|
46
|
+
* The result is cached after the first call (per process lifetime).
|
|
47
|
+
*/
|
|
48
|
+
export declare function isPremium(): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Returns a standard notice string for free-tier feature limits.
|
|
51
|
+
*
|
|
52
|
+
* @param feature - Human-readable name of the premium feature
|
|
53
|
+
*/
|
|
54
|
+
export declare function premiumNotice(feature: string): string;
|
|
55
|
+
//# sourceMappingURL=license.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../src/utils/license.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAmBD;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAMD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAsC,GAC7C,WAAW,CA4Db;AAMD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAK5C;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOrD"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Premium license validation module.
|
|
3
|
+
*
|
|
4
|
+
* License tokens are compact `payload.signature` strings where:
|
|
5
|
+
* - payload = base64url-encoded JSON: { email, iat, exp }
|
|
6
|
+
* - signature = base64url-encoded Ed25519 signature of the raw payload bytes
|
|
7
|
+
*
|
|
8
|
+
* Verification uses an embedded Ed25519 public key (no network required).
|
|
9
|
+
* The license key is read from the VIDEO_MCP_LICENSE_KEY environment variable.
|
|
10
|
+
*
|
|
11
|
+
* Tokens are valid for 1 year from issuance (exp = iat + 365 days).
|
|
12
|
+
*/
|
|
13
|
+
import * as crypto from 'node:crypto';
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Embedded public key (Ed25519, PEM format)
|
|
16
|
+
// Replace this with the real public key generated by scripts/generate-license.ts
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
const PUBLIC_KEY_PEM = `-----BEGIN PUBLIC KEY-----
|
|
19
|
+
MCowBQYDK2VwAyEA92GHVIXluVRurAJ8C20JIQi8vezWgKcZ8HsFYvtRtmY=
|
|
20
|
+
-----END PUBLIC KEY-----`;
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Base64url helpers (no external deps)
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
function base64urlDecode(str) {
|
|
25
|
+
// Convert base64url → standard base64 and decode
|
|
26
|
+
const base64 = str.replace(/-/g, '+').replace(/_/g, '/');
|
|
27
|
+
const pad = (4 - (base64.length % 4)) % 4;
|
|
28
|
+
return Buffer.from(base64 + '='.repeat(pad), 'base64');
|
|
29
|
+
}
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Cached result — validated once per process lifetime
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
let cachedResult = null;
|
|
34
|
+
/**
|
|
35
|
+
* Resets the cached license validation result.
|
|
36
|
+
* Exposed for testing purposes only.
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
39
|
+
export function _resetLicenseCache() {
|
|
40
|
+
cachedResult = null;
|
|
41
|
+
}
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Core validation
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
/**
|
|
46
|
+
* Validates a raw license token string and returns detailed info.
|
|
47
|
+
*
|
|
48
|
+
* @param token - The `payload.signature` token string
|
|
49
|
+
* @param nowSec - Current time in Unix seconds (overridable for testing)
|
|
50
|
+
*/
|
|
51
|
+
export function validateLicenseToken(token, nowSec = Math.floor(Date.now() / 1000)) {
|
|
52
|
+
if (!token || typeof token !== 'string') {
|
|
53
|
+
return { valid: false, reason: 'missing' };
|
|
54
|
+
}
|
|
55
|
+
const dotIndex = token.indexOf('.');
|
|
56
|
+
if (dotIndex === -1 || dotIndex === 0 || dotIndex === token.length - 1) {
|
|
57
|
+
return { valid: false, reason: 'malformed' };
|
|
58
|
+
}
|
|
59
|
+
const payloadB64 = token.slice(0, dotIndex);
|
|
60
|
+
const signatureB64 = token.slice(dotIndex + 1);
|
|
61
|
+
// Decode payload
|
|
62
|
+
let payload;
|
|
63
|
+
try {
|
|
64
|
+
const json = base64urlDecode(payloadB64).toString('utf8');
|
|
65
|
+
payload = JSON.parse(json);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return { valid: false, reason: 'malformed' };
|
|
69
|
+
}
|
|
70
|
+
// Validate payload fields
|
|
71
|
+
if (typeof payload.email !== 'string' ||
|
|
72
|
+
typeof payload.iat !== 'number' ||
|
|
73
|
+
typeof payload.exp !== 'number') {
|
|
74
|
+
return { valid: false, reason: 'malformed' };
|
|
75
|
+
}
|
|
76
|
+
// Verify Ed25519 signature
|
|
77
|
+
try {
|
|
78
|
+
const publicKey = crypto.createPublicKey(PUBLIC_KEY_PEM);
|
|
79
|
+
const signatureBytes = base64urlDecode(signatureB64);
|
|
80
|
+
const payloadBytes = Buffer.from(payloadB64, 'utf8');
|
|
81
|
+
const isValid = crypto.verify(null, payloadBytes, publicKey, signatureBytes);
|
|
82
|
+
if (!isValid) {
|
|
83
|
+
return { valid: false, reason: 'invalid signature' };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return { valid: false, reason: 'invalid signature' };
|
|
88
|
+
}
|
|
89
|
+
// Check expiry
|
|
90
|
+
if (payload.exp <= nowSec) {
|
|
91
|
+
return {
|
|
92
|
+
valid: false,
|
|
93
|
+
email: payload.email,
|
|
94
|
+
expiresAt: new Date(payload.exp * 1000),
|
|
95
|
+
reason: 'expired',
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
valid: true,
|
|
100
|
+
email: payload.email,
|
|
101
|
+
expiresAt: new Date(payload.exp * 1000),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
// Public API
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
/**
|
|
108
|
+
* Returns detailed license validation info.
|
|
109
|
+
* The result is cached after the first call (per process lifetime).
|
|
110
|
+
*/
|
|
111
|
+
export function getLicenseInfo() {
|
|
112
|
+
if (cachedResult)
|
|
113
|
+
return cachedResult;
|
|
114
|
+
const token = process.env.VIDEO_MCP_LICENSE_KEY ?? '';
|
|
115
|
+
cachedResult = validateLicenseToken(token);
|
|
116
|
+
return cachedResult;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Returns true if the current process has a valid (non-expired) premium license.
|
|
120
|
+
* The result is cached after the first call (per process lifetime).
|
|
121
|
+
*/
|
|
122
|
+
export function isPremium() {
|
|
123
|
+
return getLicenseInfo().valid;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Returns a standard notice string for free-tier feature limits.
|
|
127
|
+
*
|
|
128
|
+
* @param feature - Human-readable name of the premium feature
|
|
129
|
+
*/
|
|
130
|
+
export function premiumNotice(feature) {
|
|
131
|
+
return (`⚡ Premium feature: ${feature}. ` +
|
|
132
|
+
'Using free-tier limit instead. ' +
|
|
133
|
+
'Set VIDEO_MCP_LICENSE_KEY to unlock. ' +
|
|
134
|
+
'Learn more: https://github.com/video-mcp/video-mcp#premium');
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=license.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.js","sourceRoot":"","sources":["../../src/utils/license.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,10 @@ export declare function normalizeVideoPath(videoPath: string): string;
|
|
|
22
22
|
* @param tempDir - Fallback scratch directory used only when caching is disabled
|
|
23
23
|
*/
|
|
24
24
|
export declare function downloadVideoToTemp(url: string, tempDir: string): Promise<string>;
|
|
25
|
+
/**
|
|
26
|
+
* Returns true if the URL is a YouTube URL (free-tier platform support).
|
|
27
|
+
*/
|
|
28
|
+
export declare function isYouTubeUrl(url: string): boolean;
|
|
25
29
|
/**
|
|
26
30
|
* Returns true if the URL is from a known video platform that requires yt-dlp.
|
|
27
31
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"videoUtils.d.ts","sourceRoot":"","sources":["../../src/utils/videoUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"videoUtils.d.ts","sourceRoot":"","sources":["../../src/utils/videoUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAa5D;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAuBjB;AA8BD;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAUjD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAUlD;AAKD;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAgBzD;AAiCD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAmFjB;AAMD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAA;AAEzD,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,MAAM,EAAE,WAAW,CAAA;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC,CAkC7B"}
|
package/dist/utils/videoUtils.js
CHANGED
|
@@ -10,6 +10,7 @@ import { youtubeDl as youtubeDlExec, create as createYtDlp, } from 'youtube-dl-e
|
|
|
10
10
|
import { createTempDir, generateTempFilename } from './tempFiles.js';
|
|
11
11
|
import { logProgress } from './logger.js';
|
|
12
12
|
import { isCachingEnabled, ensureCacheDir, getCachedDownload, registerCachedDownload, } from './downloadCache.js';
|
|
13
|
+
import { isPremium, premiumNotice } from './license.js';
|
|
13
14
|
/**
|
|
14
15
|
* Returns true if the value is an http or https URL
|
|
15
16
|
*/
|
|
@@ -89,6 +90,22 @@ const PLATFORM_DOMAINS = [
|
|
|
89
90
|
'twitch.tv',
|
|
90
91
|
'bilibili.com',
|
|
91
92
|
];
|
|
93
|
+
/** Domains available on the free tier (YouTube only). */
|
|
94
|
+
const FREE_TIER_DOMAINS = ['youtube.com', 'youtu.be'];
|
|
95
|
+
/**
|
|
96
|
+
* Returns true if the URL is a YouTube URL (free-tier platform support).
|
|
97
|
+
*/
|
|
98
|
+
export function isYouTubeUrl(url) {
|
|
99
|
+
if (!/^https?:\/\//i.test(url))
|
|
100
|
+
return false;
|
|
101
|
+
try {
|
|
102
|
+
const { hostname } = new URL(url);
|
|
103
|
+
return FREE_TIER_DOMAINS.some((domain) => hostname === domain || hostname.endsWith(`.${domain}`));
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
92
109
|
/**
|
|
93
110
|
* Returns true if the URL is from a known video platform that requires yt-dlp.
|
|
94
111
|
*/
|
|
@@ -170,6 +187,12 @@ function classifyYtDlpError(stderr) {
|
|
|
170
187
|
* @returns - Absolute path to the downloaded video file
|
|
171
188
|
*/
|
|
172
189
|
export async function downloadWithYtDlp(url, tempDir) {
|
|
190
|
+
// ── Premium gate: free users can only download from YouTube ──────────────
|
|
191
|
+
if (!isPremium() && !isYouTubeUrl(url)) {
|
|
192
|
+
throw new Error(premiumNotice('Platform downloads (non-YouTube)') +
|
|
193
|
+
'\nFree-tier users can only download from YouTube. ' +
|
|
194
|
+
'This URL requires a premium license.');
|
|
195
|
+
}
|
|
173
196
|
// ── Cache hit ──────────────────────────────────────────────────────────────
|
|
174
197
|
const cached = await getCachedDownload(url);
|
|
175
198
|
if (cached) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"videoUtils.js","sourceRoot":"","sources":["../../src/utils/videoUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,EACL,SAAS,IAAI,aAAa,EAC1B,MAAM,IAAI,WAAW,GACtB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"videoUtils.js","sourceRoot":"","sources":["../../src/utils/videoUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "video-context-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0-beta",
|
|
4
4
|
"description": "A Model Context Protocol server that gives GitHub Copilot the ability to understand and analyze video content",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"z.ai"
|
|
33
33
|
],
|
|
34
34
|
"author": "",
|
|
35
|
-
"license": "
|
|
35
|
+
"license": "UNLICENSED",
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@deepgram/sdk": "^4.11.3",
|
|
38
38
|
"@ffmpeg-installer/ffmpeg": "^1.1.0",
|