@studiomeyer/mcp-video 1.0.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/.github/ISSUE_TEMPLATE/bug_report.md +31 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
- package/.github/workflows/ci.yml +34 -0
- package/CHANGELOG.md +24 -0
- package/CONTRIBUTING.md +75 -0
- package/LICENSE +21 -0
- package/README.md +198 -0
- package/USAGE.md +144 -0
- package/dist/handlers/capcut.d.ts +6 -0
- package/dist/handlers/capcut.js +229 -0
- package/dist/handlers/capcut.js.map +1 -0
- package/dist/handlers/editing.d.ts +6 -0
- package/dist/handlers/editing.js +242 -0
- package/dist/handlers/editing.js.map +1 -0
- package/dist/handlers/index.d.ts +2 -0
- package/dist/handlers/index.js +33 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/post-production.d.ts +5 -0
- package/dist/handlers/post-production.js +109 -0
- package/dist/handlers/post-production.js.map +1 -0
- package/dist/handlers/smart-screenshot.d.ts +5 -0
- package/dist/handlers/smart-screenshot.js +83 -0
- package/dist/handlers/smart-screenshot.js.map +1 -0
- package/dist/handlers/tts.d.ts +5 -0
- package/dist/handlers/tts.js +83 -0
- package/dist/handlers/tts.js.map +1 -0
- package/dist/handlers/video.d.ts +5 -0
- package/dist/handlers/video.js +127 -0
- package/dist/handlers/video.js.map +1 -0
- package/dist/lib/dual-transport.d.ts +42 -0
- package/dist/lib/dual-transport.js +208 -0
- package/dist/lib/dual-transport.js.map +1 -0
- package/dist/lib/logger.d.ts +12 -0
- package/dist/lib/logger.js +42 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/types.d.ts +16 -0
- package/dist/lib/types.js +15 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/schemas/capcut.d.ts +608 -0
- package/dist/schemas/capcut.js +411 -0
- package/dist/schemas/capcut.js.map +1 -0
- package/dist/schemas/editing.d.ts +822 -0
- package/dist/schemas/editing.js +466 -0
- package/dist/schemas/editing.js.map +1 -0
- package/dist/schemas/index.d.ts +2366 -0
- package/dist/schemas/index.js +15 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/post-production.d.ts +379 -0
- package/dist/schemas/post-production.js +268 -0
- package/dist/schemas/post-production.js.map +1 -0
- package/dist/schemas/smart-screenshot.d.ts +127 -0
- package/dist/schemas/smart-screenshot.js +122 -0
- package/dist/schemas/smart-screenshot.js.map +1 -0
- package/dist/schemas/tts.d.ts +220 -0
- package/dist/schemas/tts.js +194 -0
- package/dist/schemas/tts.js.map +1 -0
- package/dist/schemas/video.d.ts +236 -0
- package/dist/schemas/video.js +210 -0
- package/dist/schemas/video.js.map +1 -0
- package/dist/server.d.ts +11 -0
- package/dist/server.js +239 -0
- package/dist/server.js.map +1 -0
- package/dist/server.test.d.ts +1 -0
- package/dist/server.test.js +87 -0
- package/dist/server.test.js.map +1 -0
- package/dist/tools/engine/audio-mixer.d.ts +40 -0
- package/dist/tools/engine/audio-mixer.js +169 -0
- package/dist/tools/engine/audio-mixer.js.map +1 -0
- package/dist/tools/engine/audio.d.ts +22 -0
- package/dist/tools/engine/audio.js +73 -0
- package/dist/tools/engine/audio.js.map +1 -0
- package/dist/tools/engine/beat-sync.d.ts +31 -0
- package/dist/tools/engine/beat-sync.js +270 -0
- package/dist/tools/engine/beat-sync.js.map +1 -0
- package/dist/tools/engine/capture.d.ts +12 -0
- package/dist/tools/engine/capture.js +290 -0
- package/dist/tools/engine/capture.js.map +1 -0
- package/dist/tools/engine/chroma-key.d.ts +27 -0
- package/dist/tools/engine/chroma-key.js +154 -0
- package/dist/tools/engine/chroma-key.js.map +1 -0
- package/dist/tools/engine/concat.d.ts +49 -0
- package/dist/tools/engine/concat.js +149 -0
- package/dist/tools/engine/concat.js.map +1 -0
- package/dist/tools/engine/cursor.d.ts +26 -0
- package/dist/tools/engine/cursor.js +185 -0
- package/dist/tools/engine/cursor.js.map +1 -0
- package/dist/tools/engine/easing.d.ts +15 -0
- package/dist/tools/engine/easing.js +100 -0
- package/dist/tools/engine/easing.js.map +1 -0
- package/dist/tools/engine/editing.d.ts +158 -0
- package/dist/tools/engine/editing.js +541 -0
- package/dist/tools/engine/editing.js.map +1 -0
- package/dist/tools/engine/encoder.d.ts +31 -0
- package/dist/tools/engine/encoder.js +154 -0
- package/dist/tools/engine/encoder.js.map +1 -0
- package/dist/tools/engine/index.d.ts +30 -0
- package/dist/tools/engine/index.js +23 -0
- package/dist/tools/engine/index.js.map +1 -0
- package/dist/tools/engine/lut-presets.d.ts +25 -0
- package/dist/tools/engine/lut-presets.js +141 -0
- package/dist/tools/engine/lut-presets.js.map +1 -0
- package/dist/tools/engine/narrated-video.d.ts +63 -0
- package/dist/tools/engine/narrated-video.js +163 -0
- package/dist/tools/engine/narrated-video.js.map +1 -0
- package/dist/tools/engine/scenes.d.ts +17 -0
- package/dist/tools/engine/scenes.js +223 -0
- package/dist/tools/engine/scenes.js.map +1 -0
- package/dist/tools/engine/smart-screenshot.d.ts +80 -0
- package/dist/tools/engine/smart-screenshot.js +744 -0
- package/dist/tools/engine/smart-screenshot.js.map +1 -0
- package/dist/tools/engine/social-format.d.ts +66 -0
- package/dist/tools/engine/social-format.js +107 -0
- package/dist/tools/engine/social-format.js.map +1 -0
- package/dist/tools/engine/template-renderer.d.ts +45 -0
- package/dist/tools/engine/template-renderer.js +233 -0
- package/dist/tools/engine/template-renderer.js.map +1 -0
- package/dist/tools/engine/templates.d.ts +87 -0
- package/dist/tools/engine/templates.js +272 -0
- package/dist/tools/engine/templates.js.map +1 -0
- package/dist/tools/engine/text-animations.d.ts +33 -0
- package/dist/tools/engine/text-animations.js +192 -0
- package/dist/tools/engine/text-animations.js.map +1 -0
- package/dist/tools/engine/text-overlay.d.ts +27 -0
- package/dist/tools/engine/text-overlay.js +84 -0
- package/dist/tools/engine/text-overlay.js.map +1 -0
- package/dist/tools/engine/tts.d.ts +54 -0
- package/dist/tools/engine/tts.js +186 -0
- package/dist/tools/engine/tts.js.map +1 -0
- package/dist/tools/engine/types.d.ts +166 -0
- package/dist/tools/engine/types.js +13 -0
- package/dist/tools/engine/types.js.map +1 -0
- package/dist/tools/engine/voice-effects.d.ts +18 -0
- package/dist/tools/engine/voice-effects.js +215 -0
- package/dist/tools/engine/voice-effects.js.map +1 -0
- package/dist/tools/index.d.ts +32 -0
- package/dist/tools/index.js +23 -0
- package/dist/tools/index.js.map +1 -0
- package/package.json +56 -0
- package/scripts/check-deps.js +39 -0
- package/src/handlers/capcut.ts +245 -0
- package/src/handlers/editing.ts +260 -0
- package/src/handlers/index.ts +34 -0
- package/src/handlers/post-production.ts +136 -0
- package/src/handlers/smart-screenshot.ts +86 -0
- package/src/handlers/tts.ts +103 -0
- package/src/handlers/video.ts +137 -0
- package/src/lib/dual-transport.ts +272 -0
- package/src/lib/logger.ts +59 -0
- package/src/lib/types.ts +25 -0
- package/src/schemas/capcut.ts +418 -0
- package/src/schemas/editing.ts +476 -0
- package/src/schemas/index.ts +15 -0
- package/src/schemas/post-production.ts +273 -0
- package/src/schemas/smart-screenshot.ts +122 -0
- package/src/schemas/tts.ts +197 -0
- package/src/schemas/video.ts +211 -0
- package/src/server.test.ts +99 -0
- package/src/server.ts +289 -0
- package/src/tools/engine/audio-mixer.ts +244 -0
- package/src/tools/engine/audio.ts +115 -0
- package/src/tools/engine/beat-sync.ts +356 -0
- package/src/tools/engine/capture.ts +360 -0
- package/src/tools/engine/chroma-key.ts +202 -0
- package/src/tools/engine/concat.ts +242 -0
- package/src/tools/engine/cursor.ts +222 -0
- package/src/tools/engine/easing.ts +120 -0
- package/src/tools/engine/editing.ts +809 -0
- package/src/tools/engine/encoder.ts +208 -0
- package/src/tools/engine/index.ts +33 -0
- package/src/tools/engine/lut-presets.ts +235 -0
- package/src/tools/engine/narrated-video.ts +267 -0
- package/src/tools/engine/scenes.ts +309 -0
- package/src/tools/engine/smart-screenshot.ts +923 -0
- package/src/tools/engine/social-format.ts +146 -0
- package/src/tools/engine/template-renderer.ts +294 -0
- package/src/tools/engine/templates.ts +370 -0
- package/src/tools/engine/text-animations.ts +282 -0
- package/src/tools/engine/text-overlay.ts +143 -0
- package/src/tools/engine/tts.ts +284 -0
- package/src/tools/engine/types.ts +191 -0
- package/src/tools/engine/voice-effects.ts +258 -0
- package/src/tools/index.ts +67 -0
- package/tsconfig.json +19 -0
- package/vitest.config.ts +7 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Schema for Smart Screenshot Engine
|
|
3
|
+
*/
|
|
4
|
+
export declare const smartScreenshotSchemas: ({
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
annotations: {
|
|
8
|
+
title: string;
|
|
9
|
+
readOnlyHint: boolean;
|
|
10
|
+
destructiveHint: boolean;
|
|
11
|
+
openWorldHint: boolean;
|
|
12
|
+
idempotentHint: boolean;
|
|
13
|
+
};
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: "object";
|
|
16
|
+
properties: {
|
|
17
|
+
url: {
|
|
18
|
+
type: string;
|
|
19
|
+
description: string;
|
|
20
|
+
};
|
|
21
|
+
targets: {
|
|
22
|
+
type: string;
|
|
23
|
+
items: {
|
|
24
|
+
oneOf: ({
|
|
25
|
+
type: string;
|
|
26
|
+
description: string;
|
|
27
|
+
properties?: undefined;
|
|
28
|
+
required?: undefined;
|
|
29
|
+
} | {
|
|
30
|
+
type: string;
|
|
31
|
+
properties: {
|
|
32
|
+
feature: {
|
|
33
|
+
type: string;
|
|
34
|
+
description: string;
|
|
35
|
+
};
|
|
36
|
+
selector: {
|
|
37
|
+
type: string;
|
|
38
|
+
description: string;
|
|
39
|
+
};
|
|
40
|
+
padding: {
|
|
41
|
+
type: string;
|
|
42
|
+
description: string;
|
|
43
|
+
};
|
|
44
|
+
revealFirst: {
|
|
45
|
+
type: string;
|
|
46
|
+
description: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
required: string[];
|
|
50
|
+
description?: undefined;
|
|
51
|
+
})[];
|
|
52
|
+
};
|
|
53
|
+
description: string;
|
|
54
|
+
};
|
|
55
|
+
outputDir: {
|
|
56
|
+
type: string;
|
|
57
|
+
description: string;
|
|
58
|
+
};
|
|
59
|
+
viewport: {
|
|
60
|
+
type: string;
|
|
61
|
+
properties: {
|
|
62
|
+
width: {
|
|
63
|
+
type: string;
|
|
64
|
+
description: string;
|
|
65
|
+
};
|
|
66
|
+
height: {
|
|
67
|
+
type: string;
|
|
68
|
+
description: string;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
description: string;
|
|
72
|
+
};
|
|
73
|
+
darkMode: {
|
|
74
|
+
type: string;
|
|
75
|
+
description: string;
|
|
76
|
+
};
|
|
77
|
+
deviceScaleFactor: {
|
|
78
|
+
type: string;
|
|
79
|
+
description: string;
|
|
80
|
+
};
|
|
81
|
+
includeFullPage: {
|
|
82
|
+
type: string;
|
|
83
|
+
description: string;
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
required: string[];
|
|
87
|
+
};
|
|
88
|
+
} | {
|
|
89
|
+
name: string;
|
|
90
|
+
description: string;
|
|
91
|
+
annotations: {
|
|
92
|
+
title: string;
|
|
93
|
+
readOnlyHint: boolean;
|
|
94
|
+
destructiveHint: boolean;
|
|
95
|
+
openWorldHint: boolean;
|
|
96
|
+
idempotentHint: boolean;
|
|
97
|
+
};
|
|
98
|
+
inputSchema: {
|
|
99
|
+
type: "object";
|
|
100
|
+
properties: {
|
|
101
|
+
url: {
|
|
102
|
+
type: string;
|
|
103
|
+
description: string;
|
|
104
|
+
};
|
|
105
|
+
viewport: {
|
|
106
|
+
type: string;
|
|
107
|
+
properties: {
|
|
108
|
+
width: {
|
|
109
|
+
type: string;
|
|
110
|
+
description?: undefined;
|
|
111
|
+
};
|
|
112
|
+
height: {
|
|
113
|
+
type: string;
|
|
114
|
+
description?: undefined;
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
description: string;
|
|
118
|
+
};
|
|
119
|
+
targets?: undefined;
|
|
120
|
+
outputDir?: undefined;
|
|
121
|
+
darkMode?: undefined;
|
|
122
|
+
deviceScaleFactor?: undefined;
|
|
123
|
+
includeFullPage?: undefined;
|
|
124
|
+
};
|
|
125
|
+
required: string[];
|
|
126
|
+
};
|
|
127
|
+
})[];
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Schema for Smart Screenshot Engine
|
|
3
|
+
*/
|
|
4
|
+
export const smartScreenshotSchemas = [
|
|
5
|
+
{
|
|
6
|
+
name: 'screenshot_element',
|
|
7
|
+
description: `Smart element-aware screenshot tool. Automatically detects and photographs specific features on a webpage.
|
|
8
|
+
|
|
9
|
+
Instead of full-page screenshots, this finds and captures specific UI elements like:
|
|
10
|
+
- Chat widgets, booking forms, pricing sections
|
|
11
|
+
- Wizards/steppers, navigation, galleries
|
|
12
|
+
- Contact forms, testimonials, CTAs, maps, video sections
|
|
13
|
+
- Or ANY element via CSS selector
|
|
14
|
+
|
|
15
|
+
Usage examples:
|
|
16
|
+
targets: ["chat"] → finds and screenshots the chat widget
|
|
17
|
+
targets: ["pricing", "booking"] → screenshots pricing section AND booking form
|
|
18
|
+
targets: ["all"] → auto-detects ALL features on the page
|
|
19
|
+
targets: [{ "feature": "hero", "selector": ".custom-hero" }] → custom selector
|
|
20
|
+
targets: [".my-section"] → direct CSS selector
|
|
21
|
+
|
|
22
|
+
Supports 15+ feature types with intelligent DOM analysis.`,
|
|
23
|
+
annotations: {
|
|
24
|
+
title: 'Screenshot Page Element',
|
|
25
|
+
readOnlyHint: true,
|
|
26
|
+
destructiveHint: false,
|
|
27
|
+
openWorldHint: true,
|
|
28
|
+
idempotentHint: true,
|
|
29
|
+
},
|
|
30
|
+
inputSchema: {
|
|
31
|
+
type: 'object',
|
|
32
|
+
properties: {
|
|
33
|
+
url: {
|
|
34
|
+
type: 'string',
|
|
35
|
+
description: 'URL of the website to screenshot',
|
|
36
|
+
},
|
|
37
|
+
targets: {
|
|
38
|
+
type: 'array',
|
|
39
|
+
items: {
|
|
40
|
+
oneOf: [
|
|
41
|
+
{
|
|
42
|
+
type: 'string',
|
|
43
|
+
description: 'Feature keyword (chat, pricing, booking, hero, nav, footer, gallery, wizard, testimonial, services, cta, map, video, newsletter, contact) or "all" for auto-detect, or CSS selector (.class, #id)',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
type: 'object',
|
|
47
|
+
properties: {
|
|
48
|
+
feature: { type: 'string', description: 'Feature name or keyword' },
|
|
49
|
+
selector: { type: 'string', description: 'Custom CSS selector override' },
|
|
50
|
+
padding: { type: 'number', description: 'Padding around element in px' },
|
|
51
|
+
revealFirst: { type: 'boolean', description: 'Click to reveal element first (e.g. chat popup)' },
|
|
52
|
+
},
|
|
53
|
+
required: ['feature'],
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
description: 'What to capture. Array of feature keywords, CSS selectors, or target objects. Use "all" to auto-detect everything.',
|
|
58
|
+
},
|
|
59
|
+
outputDir: {
|
|
60
|
+
type: 'string',
|
|
61
|
+
description: 'Output directory (default: ./output/smart-screenshots)',
|
|
62
|
+
},
|
|
63
|
+
viewport: {
|
|
64
|
+
type: 'object',
|
|
65
|
+
properties: {
|
|
66
|
+
width: { type: 'number', description: 'Viewport width (default: 1920)' },
|
|
67
|
+
height: { type: 'number', description: 'Viewport height (default: 1080)' },
|
|
68
|
+
},
|
|
69
|
+
description: 'Custom viewport dimensions',
|
|
70
|
+
},
|
|
71
|
+
darkMode: {
|
|
72
|
+
type: 'boolean',
|
|
73
|
+
description: 'Enable dark mode rendering (default: false)',
|
|
74
|
+
},
|
|
75
|
+
deviceScaleFactor: {
|
|
76
|
+
type: 'number',
|
|
77
|
+
description: 'Device scale factor for retina (default: 1, use 2 for retina)',
|
|
78
|
+
},
|
|
79
|
+
includeFullPage: {
|
|
80
|
+
type: 'boolean',
|
|
81
|
+
description: 'Also capture a full-page screenshot (default: false)',
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
required: ['url', 'targets'],
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'detect_page_features',
|
|
89
|
+
description: `Analyze a webpage and detect all available UI features/sections without taking screenshots.
|
|
90
|
+
|
|
91
|
+
Returns a list of detected features with their names, locations, and sizes.
|
|
92
|
+
Useful for planning which elements to screenshot or for understanding page structure.
|
|
93
|
+
|
|
94
|
+
Detects: Hero, Chat, Booking, Pricing, Contact Form, Navigation, Footer, Gallery, Wizard/Stepper, Testimonials, Services, CTA, Map, Video, Newsletter sections.`,
|
|
95
|
+
annotations: {
|
|
96
|
+
title: 'Detect Page Features',
|
|
97
|
+
readOnlyHint: true,
|
|
98
|
+
destructiveHint: false,
|
|
99
|
+
openWorldHint: true,
|
|
100
|
+
idempotentHint: true,
|
|
101
|
+
},
|
|
102
|
+
inputSchema: {
|
|
103
|
+
type: 'object',
|
|
104
|
+
properties: {
|
|
105
|
+
url: {
|
|
106
|
+
type: 'string',
|
|
107
|
+
description: 'URL of the website to analyze',
|
|
108
|
+
},
|
|
109
|
+
viewport: {
|
|
110
|
+
type: 'object',
|
|
111
|
+
properties: {
|
|
112
|
+
width: { type: 'number' },
|
|
113
|
+
height: { type: 'number' },
|
|
114
|
+
},
|
|
115
|
+
description: 'Viewport dimensions (default: 1920x1080)',
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
required: ['url'],
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
];
|
|
122
|
+
//# sourceMappingURL=smart-screenshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-screenshot.js","sourceRoot":"","sources":["../../src/schemas/smart-screenshot.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE;;;;;;;;;;;;;;;0DAeyC;QACtD,WAAW,EAAE;YACX,KAAK,EAAE,yBAAyB;YAChC,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,IAAI;SACrB;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;iBAChD;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,KAAK,EAAE;4BACL;gCACE,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,mMAAmM;6BACjN;4BACD;gCACE,IAAI,EAAE,QAAQ;gCACd,UAAU,EAAE;oCACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;oCACnE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;oCACzE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;oCACxE,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,iDAAiD,EAAE;iCACjG;gCACD,QAAQ,EAAE,CAAC,SAAS,CAAC;6BACtB;yBACF;qBACF;oBACD,WAAW,EAAE,oHAAoH;iBAClI;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wDAAwD;iBACtE;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;wBACxE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iCAAiC,EAAE;qBAC3E;oBACD,WAAW,EAAE,4BAA4B;iBAC1C;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,6CAA6C;iBAC3D;gBACD,iBAAiB,EAAE;oBACjB,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+DAA+D;iBAC7E;gBACD,eAAe,EAAE;oBACf,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,sDAAsD;iBACpE;aACF;YACD,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;SAC7B;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE;;;;;gKAK+I;QAC5J,WAAW,EAAE;YACX,KAAK,EAAE,sBAAsB;YAC7B,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,IAAI;SACrB;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+BAA+B;iBAC7C;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACzB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;qBAC3B;oBACD,WAAW,EAAE,0CAA0C;iBACxD;aACF;YACD,QAAQ,EAAE,CAAC,KAAK,CAAC;SAClB;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Schemas for TTS & Narrated Video
|
|
3
|
+
*/
|
|
4
|
+
export declare const ttsSchemas: ({
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
annotations: {
|
|
8
|
+
title: string;
|
|
9
|
+
readOnlyHint: boolean;
|
|
10
|
+
destructiveHint: boolean;
|
|
11
|
+
openWorldHint: boolean;
|
|
12
|
+
idempotentHint: boolean;
|
|
13
|
+
};
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: "object";
|
|
16
|
+
properties: {
|
|
17
|
+
text: {
|
|
18
|
+
type: string;
|
|
19
|
+
description: string;
|
|
20
|
+
};
|
|
21
|
+
outputPath: {
|
|
22
|
+
type: string;
|
|
23
|
+
description: string;
|
|
24
|
+
};
|
|
25
|
+
provider: {
|
|
26
|
+
type: string;
|
|
27
|
+
enum: string[];
|
|
28
|
+
description: string;
|
|
29
|
+
};
|
|
30
|
+
language: {
|
|
31
|
+
type: string;
|
|
32
|
+
description: string;
|
|
33
|
+
};
|
|
34
|
+
speed: {
|
|
35
|
+
type: string;
|
|
36
|
+
description: string;
|
|
37
|
+
};
|
|
38
|
+
elevenLabsVoice: {
|
|
39
|
+
type: string;
|
|
40
|
+
enum: string[];
|
|
41
|
+
description: string;
|
|
42
|
+
};
|
|
43
|
+
elevenLabsModel: {
|
|
44
|
+
type: string;
|
|
45
|
+
enum: string[];
|
|
46
|
+
description: string;
|
|
47
|
+
};
|
|
48
|
+
openaiVoice: {
|
|
49
|
+
type: string;
|
|
50
|
+
enum: string[];
|
|
51
|
+
description: string;
|
|
52
|
+
};
|
|
53
|
+
openaiModel: {
|
|
54
|
+
type: string;
|
|
55
|
+
enum: string[];
|
|
56
|
+
description: string;
|
|
57
|
+
};
|
|
58
|
+
stability: {
|
|
59
|
+
type: string;
|
|
60
|
+
description: string;
|
|
61
|
+
};
|
|
62
|
+
similarityBoost: {
|
|
63
|
+
type: string;
|
|
64
|
+
description: string;
|
|
65
|
+
};
|
|
66
|
+
url?: undefined;
|
|
67
|
+
segments?: undefined;
|
|
68
|
+
viewport?: undefined;
|
|
69
|
+
backgroundMusicPath?: undefined;
|
|
70
|
+
backgroundMusicVolume?: undefined;
|
|
71
|
+
};
|
|
72
|
+
required: string[];
|
|
73
|
+
};
|
|
74
|
+
} | {
|
|
75
|
+
name: string;
|
|
76
|
+
description: string;
|
|
77
|
+
annotations: {
|
|
78
|
+
title: string;
|
|
79
|
+
readOnlyHint: boolean;
|
|
80
|
+
destructiveHint: boolean;
|
|
81
|
+
openWorldHint: boolean;
|
|
82
|
+
idempotentHint: boolean;
|
|
83
|
+
};
|
|
84
|
+
inputSchema: {
|
|
85
|
+
type: "object";
|
|
86
|
+
properties: {
|
|
87
|
+
text?: undefined;
|
|
88
|
+
outputPath?: undefined;
|
|
89
|
+
provider?: undefined;
|
|
90
|
+
language?: undefined;
|
|
91
|
+
speed?: undefined;
|
|
92
|
+
elevenLabsVoice?: undefined;
|
|
93
|
+
elevenLabsModel?: undefined;
|
|
94
|
+
openaiVoice?: undefined;
|
|
95
|
+
openaiModel?: undefined;
|
|
96
|
+
stability?: undefined;
|
|
97
|
+
similarityBoost?: undefined;
|
|
98
|
+
url?: undefined;
|
|
99
|
+
segments?: undefined;
|
|
100
|
+
viewport?: undefined;
|
|
101
|
+
backgroundMusicPath?: undefined;
|
|
102
|
+
backgroundMusicVolume?: undefined;
|
|
103
|
+
};
|
|
104
|
+
required: never[];
|
|
105
|
+
};
|
|
106
|
+
} | {
|
|
107
|
+
name: string;
|
|
108
|
+
description: string;
|
|
109
|
+
annotations: {
|
|
110
|
+
title: string;
|
|
111
|
+
readOnlyHint: boolean;
|
|
112
|
+
destructiveHint: boolean;
|
|
113
|
+
openWorldHint: boolean;
|
|
114
|
+
idempotentHint: boolean;
|
|
115
|
+
};
|
|
116
|
+
inputSchema: {
|
|
117
|
+
type: "object";
|
|
118
|
+
properties: {
|
|
119
|
+
url: {
|
|
120
|
+
type: string;
|
|
121
|
+
description: string;
|
|
122
|
+
};
|
|
123
|
+
segments: {
|
|
124
|
+
type: string;
|
|
125
|
+
items: {
|
|
126
|
+
type: string;
|
|
127
|
+
properties: {
|
|
128
|
+
text: {
|
|
129
|
+
type: string;
|
|
130
|
+
description: string;
|
|
131
|
+
};
|
|
132
|
+
scene: {
|
|
133
|
+
type: "object";
|
|
134
|
+
properties: {
|
|
135
|
+
type: {
|
|
136
|
+
type: string;
|
|
137
|
+
enum: string[];
|
|
138
|
+
};
|
|
139
|
+
to: {
|
|
140
|
+
type: string[];
|
|
141
|
+
};
|
|
142
|
+
duration: {
|
|
143
|
+
type: string;
|
|
144
|
+
};
|
|
145
|
+
easing: {
|
|
146
|
+
type: string;
|
|
147
|
+
};
|
|
148
|
+
selector: {
|
|
149
|
+
type: string;
|
|
150
|
+
};
|
|
151
|
+
text: {
|
|
152
|
+
type: string;
|
|
153
|
+
};
|
|
154
|
+
waitFor: {
|
|
155
|
+
type: string[];
|
|
156
|
+
};
|
|
157
|
+
pauseAfter: {
|
|
158
|
+
type: string;
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
required: string[];
|
|
162
|
+
};
|
|
163
|
+
paddingAfter: {
|
|
164
|
+
type: string;
|
|
165
|
+
description: string;
|
|
166
|
+
};
|
|
167
|
+
};
|
|
168
|
+
required: string[];
|
|
169
|
+
};
|
|
170
|
+
description: string;
|
|
171
|
+
};
|
|
172
|
+
outputPath: {
|
|
173
|
+
type: string;
|
|
174
|
+
description: string;
|
|
175
|
+
};
|
|
176
|
+
provider: {
|
|
177
|
+
type: string;
|
|
178
|
+
enum: string[];
|
|
179
|
+
description: string;
|
|
180
|
+
};
|
|
181
|
+
language: {
|
|
182
|
+
type: string;
|
|
183
|
+
description: string;
|
|
184
|
+
};
|
|
185
|
+
viewport: {
|
|
186
|
+
type: string;
|
|
187
|
+
enum: string[];
|
|
188
|
+
description: string;
|
|
189
|
+
};
|
|
190
|
+
elevenLabsVoice: {
|
|
191
|
+
type: string;
|
|
192
|
+
enum: string[];
|
|
193
|
+
description: string;
|
|
194
|
+
};
|
|
195
|
+
openaiVoice: {
|
|
196
|
+
type: string;
|
|
197
|
+
enum: string[];
|
|
198
|
+
description: string;
|
|
199
|
+
};
|
|
200
|
+
speed: {
|
|
201
|
+
type: string;
|
|
202
|
+
description: string;
|
|
203
|
+
};
|
|
204
|
+
backgroundMusicPath: {
|
|
205
|
+
type: string;
|
|
206
|
+
description: string;
|
|
207
|
+
};
|
|
208
|
+
backgroundMusicVolume: {
|
|
209
|
+
type: string;
|
|
210
|
+
description: string;
|
|
211
|
+
};
|
|
212
|
+
text?: undefined;
|
|
213
|
+
elevenLabsModel?: undefined;
|
|
214
|
+
openaiModel?: undefined;
|
|
215
|
+
stability?: undefined;
|
|
216
|
+
similarityBoost?: undefined;
|
|
217
|
+
};
|
|
218
|
+
required: string[];
|
|
219
|
+
};
|
|
220
|
+
})[];
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Schemas for TTS & Narrated Video
|
|
3
|
+
*/
|
|
4
|
+
const sceneSchema = {
|
|
5
|
+
type: 'object',
|
|
6
|
+
properties: {
|
|
7
|
+
type: {
|
|
8
|
+
type: 'string',
|
|
9
|
+
enum: ['scroll', 'pause', 'hover', 'click', 'type', 'wait'],
|
|
10
|
+
},
|
|
11
|
+
to: { type: ['string', 'number'] },
|
|
12
|
+
duration: { type: 'number' },
|
|
13
|
+
easing: { type: 'string' },
|
|
14
|
+
selector: { type: 'string' },
|
|
15
|
+
text: { type: 'string' },
|
|
16
|
+
waitFor: { type: ['string', 'number'] },
|
|
17
|
+
pauseAfter: { type: 'number' },
|
|
18
|
+
},
|
|
19
|
+
required: ['type'],
|
|
20
|
+
};
|
|
21
|
+
export const ttsSchemas = [
|
|
22
|
+
// --- Text-to-Speech ---
|
|
23
|
+
{
|
|
24
|
+
name: 'generate_speech',
|
|
25
|
+
description: 'Generate speech audio from text using ElevenLabs (primary) or OpenAI TTS (fallback). Supports German, English, Spanish and 29+ languages. Returns an MP3 file. IMPORTANT: Uses paid APIs — ElevenLabs or OpenAI.',
|
|
26
|
+
annotations: {
|
|
27
|
+
title: 'Generate Speech (TTS)',
|
|
28
|
+
readOnlyHint: false,
|
|
29
|
+
destructiveHint: false,
|
|
30
|
+
openWorldHint: true,
|
|
31
|
+
idempotentHint: true,
|
|
32
|
+
},
|
|
33
|
+
inputSchema: {
|
|
34
|
+
type: 'object',
|
|
35
|
+
properties: {
|
|
36
|
+
text: {
|
|
37
|
+
type: 'string',
|
|
38
|
+
description: 'Text to convert to speech',
|
|
39
|
+
},
|
|
40
|
+
outputPath: {
|
|
41
|
+
type: 'string',
|
|
42
|
+
description: 'Output path for MP3 file (default: ./output/speech-{timestamp}.mp3)',
|
|
43
|
+
},
|
|
44
|
+
provider: {
|
|
45
|
+
type: 'string',
|
|
46
|
+
enum: ['elevenlabs', 'openai'],
|
|
47
|
+
description: 'TTS provider (default: elevenlabs if API key available, otherwise openai)',
|
|
48
|
+
},
|
|
49
|
+
language: {
|
|
50
|
+
type: 'string',
|
|
51
|
+
description: 'Language code: en, de, es, fr, it, etc. (default: en)',
|
|
52
|
+
},
|
|
53
|
+
speed: {
|
|
54
|
+
type: 'number',
|
|
55
|
+
description: 'Speaking speed 0.7-1.2 for ElevenLabs, 0.25-4.0 for OpenAI (default: 1.0)',
|
|
56
|
+
},
|
|
57
|
+
elevenLabsVoice: {
|
|
58
|
+
type: 'string',
|
|
59
|
+
enum: ['rachel', 'sarah', 'emily', 'charlotte', 'alice', 'matilda', 'lily', 'brian', 'adam', 'daniel', 'josh', 'james', 'liam', 'chris', 'george'],
|
|
60
|
+
description: 'ElevenLabs voice (default: adam). Male: adam, brian, daniel, josh, james, liam. Female: rachel, sarah, emily, charlotte.',
|
|
61
|
+
},
|
|
62
|
+
elevenLabsModel: {
|
|
63
|
+
type: 'string',
|
|
64
|
+
enum: ['eleven_multilingual_v2', 'eleven_turbo_v2_5', 'eleven_flash_v2_5'],
|
|
65
|
+
description: 'ElevenLabs model (default: eleven_multilingual_v2 for best quality)',
|
|
66
|
+
},
|
|
67
|
+
openaiVoice: {
|
|
68
|
+
type: 'string',
|
|
69
|
+
enum: ['alloy', 'ash', 'coral', 'echo', 'fable', 'nova', 'onyx', 'sage', 'shimmer'],
|
|
70
|
+
description: 'OpenAI voice (default: onyx). Deep: onyx, echo. Bright: nova, shimmer. Neutral: alloy.',
|
|
71
|
+
},
|
|
72
|
+
openaiModel: {
|
|
73
|
+
type: 'string',
|
|
74
|
+
enum: ['tts-1', 'tts-1-hd'],
|
|
75
|
+
description: 'OpenAI model (default: tts-1-hd for best quality)',
|
|
76
|
+
},
|
|
77
|
+
stability: {
|
|
78
|
+
type: 'number',
|
|
79
|
+
description: 'ElevenLabs voice stability 0-1 (default: 0.5). Lower = more dynamic.',
|
|
80
|
+
},
|
|
81
|
+
similarityBoost: {
|
|
82
|
+
type: 'number',
|
|
83
|
+
description: 'ElevenLabs similarity 0-1 (default: 0.75).',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
required: ['text'],
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
// --- List Voices ---
|
|
90
|
+
{
|
|
91
|
+
name: 'list_voices',
|
|
92
|
+
description: 'List all available ElevenLabs voices including custom/cloned voices. Requires ELEVENLABS_API_KEY.',
|
|
93
|
+
annotations: {
|
|
94
|
+
title: 'List ElevenLabs Voices',
|
|
95
|
+
readOnlyHint: true,
|
|
96
|
+
destructiveHint: false,
|
|
97
|
+
openWorldHint: true,
|
|
98
|
+
idempotentHint: true,
|
|
99
|
+
},
|
|
100
|
+
inputSchema: {
|
|
101
|
+
type: 'object',
|
|
102
|
+
properties: {},
|
|
103
|
+
required: [],
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
// --- Narrated Video (the killer feature) ---
|
|
107
|
+
{
|
|
108
|
+
name: 'create_narrated_video',
|
|
109
|
+
description: `Create a fully narrated explainer video of a website or app. This is the ultimate tool: provide a URL and a script, and get a professional video with AI voiceover synchronized to the on-screen actions.
|
|
110
|
+
|
|
111
|
+
Flow: Script → TTS → Website Recording (synced to speech durations) → Merge video + audio → Final MP4
|
|
112
|
+
|
|
113
|
+
Each segment has text (what to say) and a scene (what to show). The scene duration is automatically matched to the speech duration.
|
|
114
|
+
|
|
115
|
+
IMPORTANT: Uses paid TTS APIs (ElevenLabs or OpenAI). Always confirm with user before calling.`,
|
|
116
|
+
annotations: {
|
|
117
|
+
title: 'Create Narrated Video',
|
|
118
|
+
readOnlyHint: false,
|
|
119
|
+
destructiveHint: false,
|
|
120
|
+
openWorldHint: true,
|
|
121
|
+
idempotentHint: false,
|
|
122
|
+
},
|
|
123
|
+
inputSchema: {
|
|
124
|
+
type: 'object',
|
|
125
|
+
properties: {
|
|
126
|
+
url: {
|
|
127
|
+
type: 'string',
|
|
128
|
+
description: 'URL of the website/app to record',
|
|
129
|
+
},
|
|
130
|
+
segments: {
|
|
131
|
+
type: 'array',
|
|
132
|
+
items: {
|
|
133
|
+
type: 'object',
|
|
134
|
+
properties: {
|
|
135
|
+
text: {
|
|
136
|
+
type: 'string',
|
|
137
|
+
description: 'Narration text for this segment',
|
|
138
|
+
},
|
|
139
|
+
scene: sceneSchema,
|
|
140
|
+
paddingAfter: {
|
|
141
|
+
type: 'number',
|
|
142
|
+
description: 'Extra pause after speech in seconds (default: 0.5)',
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
required: ['text', 'scene'],
|
|
146
|
+
},
|
|
147
|
+
description: 'Array of narration segments, each with text + scene action',
|
|
148
|
+
},
|
|
149
|
+
outputPath: {
|
|
150
|
+
type: 'string',
|
|
151
|
+
description: 'Output path without extension (default: ./output/narrated-{domain})',
|
|
152
|
+
},
|
|
153
|
+
provider: {
|
|
154
|
+
type: 'string',
|
|
155
|
+
enum: ['elevenlabs', 'openai'],
|
|
156
|
+
description: 'TTS provider (default: elevenlabs)',
|
|
157
|
+
},
|
|
158
|
+
language: {
|
|
159
|
+
type: 'string',
|
|
160
|
+
description: 'Language code (default: en)',
|
|
161
|
+
},
|
|
162
|
+
viewport: {
|
|
163
|
+
type: 'string',
|
|
164
|
+
enum: ['desktop', 'desktop-4k', 'tablet', 'mobile'],
|
|
165
|
+
description: 'Viewport (default: desktop)',
|
|
166
|
+
},
|
|
167
|
+
elevenLabsVoice: {
|
|
168
|
+
type: 'string',
|
|
169
|
+
enum: ['rachel', 'sarah', 'emily', 'charlotte', 'alice', 'matilda', 'lily', 'brian', 'adam', 'daniel', 'josh', 'james', 'liam', 'chris', 'george'],
|
|
170
|
+
description: 'ElevenLabs voice (default: adam)',
|
|
171
|
+
},
|
|
172
|
+
openaiVoice: {
|
|
173
|
+
type: 'string',
|
|
174
|
+
enum: ['alloy', 'ash', 'coral', 'echo', 'fable', 'nova', 'onyx', 'sage', 'shimmer'],
|
|
175
|
+
description: 'OpenAI voice (default: onyx)',
|
|
176
|
+
},
|
|
177
|
+
speed: {
|
|
178
|
+
type: 'number',
|
|
179
|
+
description: 'Speaking speed (default: 1.0)',
|
|
180
|
+
},
|
|
181
|
+
backgroundMusicPath: {
|
|
182
|
+
type: 'string',
|
|
183
|
+
description: 'Optional: path to background music file',
|
|
184
|
+
},
|
|
185
|
+
backgroundMusicVolume: {
|
|
186
|
+
type: 'number',
|
|
187
|
+
description: 'Background music volume 0-1 (default: 0.1)',
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
required: ['url', 'segments'],
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
];
|
|
194
|
+
//# sourceMappingURL=tts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tts.js","sourceRoot":"","sources":["../../src/schemas/tts.ts"],"names":[],"mappings":"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"}
|