@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.
Files changed (184) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +31 -0
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
  3. package/.github/workflows/ci.yml +34 -0
  4. package/CHANGELOG.md +24 -0
  5. package/CONTRIBUTING.md +75 -0
  6. package/LICENSE +21 -0
  7. package/README.md +198 -0
  8. package/USAGE.md +144 -0
  9. package/dist/handlers/capcut.d.ts +6 -0
  10. package/dist/handlers/capcut.js +229 -0
  11. package/dist/handlers/capcut.js.map +1 -0
  12. package/dist/handlers/editing.d.ts +6 -0
  13. package/dist/handlers/editing.js +242 -0
  14. package/dist/handlers/editing.js.map +1 -0
  15. package/dist/handlers/index.d.ts +2 -0
  16. package/dist/handlers/index.js +33 -0
  17. package/dist/handlers/index.js.map +1 -0
  18. package/dist/handlers/post-production.d.ts +5 -0
  19. package/dist/handlers/post-production.js +109 -0
  20. package/dist/handlers/post-production.js.map +1 -0
  21. package/dist/handlers/smart-screenshot.d.ts +5 -0
  22. package/dist/handlers/smart-screenshot.js +83 -0
  23. package/dist/handlers/smart-screenshot.js.map +1 -0
  24. package/dist/handlers/tts.d.ts +5 -0
  25. package/dist/handlers/tts.js +83 -0
  26. package/dist/handlers/tts.js.map +1 -0
  27. package/dist/handlers/video.d.ts +5 -0
  28. package/dist/handlers/video.js +127 -0
  29. package/dist/handlers/video.js.map +1 -0
  30. package/dist/lib/dual-transport.d.ts +42 -0
  31. package/dist/lib/dual-transport.js +208 -0
  32. package/dist/lib/dual-transport.js.map +1 -0
  33. package/dist/lib/logger.d.ts +12 -0
  34. package/dist/lib/logger.js +42 -0
  35. package/dist/lib/logger.js.map +1 -0
  36. package/dist/lib/types.d.ts +16 -0
  37. package/dist/lib/types.js +15 -0
  38. package/dist/lib/types.js.map +1 -0
  39. package/dist/schemas/capcut.d.ts +608 -0
  40. package/dist/schemas/capcut.js +411 -0
  41. package/dist/schemas/capcut.js.map +1 -0
  42. package/dist/schemas/editing.d.ts +822 -0
  43. package/dist/schemas/editing.js +466 -0
  44. package/dist/schemas/editing.js.map +1 -0
  45. package/dist/schemas/index.d.ts +2366 -0
  46. package/dist/schemas/index.js +15 -0
  47. package/dist/schemas/index.js.map +1 -0
  48. package/dist/schemas/post-production.d.ts +379 -0
  49. package/dist/schemas/post-production.js +268 -0
  50. package/dist/schemas/post-production.js.map +1 -0
  51. package/dist/schemas/smart-screenshot.d.ts +127 -0
  52. package/dist/schemas/smart-screenshot.js +122 -0
  53. package/dist/schemas/smart-screenshot.js.map +1 -0
  54. package/dist/schemas/tts.d.ts +220 -0
  55. package/dist/schemas/tts.js +194 -0
  56. package/dist/schemas/tts.js.map +1 -0
  57. package/dist/schemas/video.d.ts +236 -0
  58. package/dist/schemas/video.js +210 -0
  59. package/dist/schemas/video.js.map +1 -0
  60. package/dist/server.d.ts +11 -0
  61. package/dist/server.js +239 -0
  62. package/dist/server.js.map +1 -0
  63. package/dist/server.test.d.ts +1 -0
  64. package/dist/server.test.js +87 -0
  65. package/dist/server.test.js.map +1 -0
  66. package/dist/tools/engine/audio-mixer.d.ts +40 -0
  67. package/dist/tools/engine/audio-mixer.js +169 -0
  68. package/dist/tools/engine/audio-mixer.js.map +1 -0
  69. package/dist/tools/engine/audio.d.ts +22 -0
  70. package/dist/tools/engine/audio.js +73 -0
  71. package/dist/tools/engine/audio.js.map +1 -0
  72. package/dist/tools/engine/beat-sync.d.ts +31 -0
  73. package/dist/tools/engine/beat-sync.js +270 -0
  74. package/dist/tools/engine/beat-sync.js.map +1 -0
  75. package/dist/tools/engine/capture.d.ts +12 -0
  76. package/dist/tools/engine/capture.js +290 -0
  77. package/dist/tools/engine/capture.js.map +1 -0
  78. package/dist/tools/engine/chroma-key.d.ts +27 -0
  79. package/dist/tools/engine/chroma-key.js +154 -0
  80. package/dist/tools/engine/chroma-key.js.map +1 -0
  81. package/dist/tools/engine/concat.d.ts +49 -0
  82. package/dist/tools/engine/concat.js +149 -0
  83. package/dist/tools/engine/concat.js.map +1 -0
  84. package/dist/tools/engine/cursor.d.ts +26 -0
  85. package/dist/tools/engine/cursor.js +185 -0
  86. package/dist/tools/engine/cursor.js.map +1 -0
  87. package/dist/tools/engine/easing.d.ts +15 -0
  88. package/dist/tools/engine/easing.js +100 -0
  89. package/dist/tools/engine/easing.js.map +1 -0
  90. package/dist/tools/engine/editing.d.ts +158 -0
  91. package/dist/tools/engine/editing.js +541 -0
  92. package/dist/tools/engine/editing.js.map +1 -0
  93. package/dist/tools/engine/encoder.d.ts +31 -0
  94. package/dist/tools/engine/encoder.js +154 -0
  95. package/dist/tools/engine/encoder.js.map +1 -0
  96. package/dist/tools/engine/index.d.ts +30 -0
  97. package/dist/tools/engine/index.js +23 -0
  98. package/dist/tools/engine/index.js.map +1 -0
  99. package/dist/tools/engine/lut-presets.d.ts +25 -0
  100. package/dist/tools/engine/lut-presets.js +141 -0
  101. package/dist/tools/engine/lut-presets.js.map +1 -0
  102. package/dist/tools/engine/narrated-video.d.ts +63 -0
  103. package/dist/tools/engine/narrated-video.js +163 -0
  104. package/dist/tools/engine/narrated-video.js.map +1 -0
  105. package/dist/tools/engine/scenes.d.ts +17 -0
  106. package/dist/tools/engine/scenes.js +223 -0
  107. package/dist/tools/engine/scenes.js.map +1 -0
  108. package/dist/tools/engine/smart-screenshot.d.ts +80 -0
  109. package/dist/tools/engine/smart-screenshot.js +744 -0
  110. package/dist/tools/engine/smart-screenshot.js.map +1 -0
  111. package/dist/tools/engine/social-format.d.ts +66 -0
  112. package/dist/tools/engine/social-format.js +107 -0
  113. package/dist/tools/engine/social-format.js.map +1 -0
  114. package/dist/tools/engine/template-renderer.d.ts +45 -0
  115. package/dist/tools/engine/template-renderer.js +233 -0
  116. package/dist/tools/engine/template-renderer.js.map +1 -0
  117. package/dist/tools/engine/templates.d.ts +87 -0
  118. package/dist/tools/engine/templates.js +272 -0
  119. package/dist/tools/engine/templates.js.map +1 -0
  120. package/dist/tools/engine/text-animations.d.ts +33 -0
  121. package/dist/tools/engine/text-animations.js +192 -0
  122. package/dist/tools/engine/text-animations.js.map +1 -0
  123. package/dist/tools/engine/text-overlay.d.ts +27 -0
  124. package/dist/tools/engine/text-overlay.js +84 -0
  125. package/dist/tools/engine/text-overlay.js.map +1 -0
  126. package/dist/tools/engine/tts.d.ts +54 -0
  127. package/dist/tools/engine/tts.js +186 -0
  128. package/dist/tools/engine/tts.js.map +1 -0
  129. package/dist/tools/engine/types.d.ts +166 -0
  130. package/dist/tools/engine/types.js +13 -0
  131. package/dist/tools/engine/types.js.map +1 -0
  132. package/dist/tools/engine/voice-effects.d.ts +18 -0
  133. package/dist/tools/engine/voice-effects.js +215 -0
  134. package/dist/tools/engine/voice-effects.js.map +1 -0
  135. package/dist/tools/index.d.ts +32 -0
  136. package/dist/tools/index.js +23 -0
  137. package/dist/tools/index.js.map +1 -0
  138. package/package.json +56 -0
  139. package/scripts/check-deps.js +39 -0
  140. package/src/handlers/capcut.ts +245 -0
  141. package/src/handlers/editing.ts +260 -0
  142. package/src/handlers/index.ts +34 -0
  143. package/src/handlers/post-production.ts +136 -0
  144. package/src/handlers/smart-screenshot.ts +86 -0
  145. package/src/handlers/tts.ts +103 -0
  146. package/src/handlers/video.ts +137 -0
  147. package/src/lib/dual-transport.ts +272 -0
  148. package/src/lib/logger.ts +59 -0
  149. package/src/lib/types.ts +25 -0
  150. package/src/schemas/capcut.ts +418 -0
  151. package/src/schemas/editing.ts +476 -0
  152. package/src/schemas/index.ts +15 -0
  153. package/src/schemas/post-production.ts +273 -0
  154. package/src/schemas/smart-screenshot.ts +122 -0
  155. package/src/schemas/tts.ts +197 -0
  156. package/src/schemas/video.ts +211 -0
  157. package/src/server.test.ts +99 -0
  158. package/src/server.ts +289 -0
  159. package/src/tools/engine/audio-mixer.ts +244 -0
  160. package/src/tools/engine/audio.ts +115 -0
  161. package/src/tools/engine/beat-sync.ts +356 -0
  162. package/src/tools/engine/capture.ts +360 -0
  163. package/src/tools/engine/chroma-key.ts +202 -0
  164. package/src/tools/engine/concat.ts +242 -0
  165. package/src/tools/engine/cursor.ts +222 -0
  166. package/src/tools/engine/easing.ts +120 -0
  167. package/src/tools/engine/editing.ts +809 -0
  168. package/src/tools/engine/encoder.ts +208 -0
  169. package/src/tools/engine/index.ts +33 -0
  170. package/src/tools/engine/lut-presets.ts +235 -0
  171. package/src/tools/engine/narrated-video.ts +267 -0
  172. package/src/tools/engine/scenes.ts +309 -0
  173. package/src/tools/engine/smart-screenshot.ts +923 -0
  174. package/src/tools/engine/social-format.ts +146 -0
  175. package/src/tools/engine/template-renderer.ts +294 -0
  176. package/src/tools/engine/templates.ts +370 -0
  177. package/src/tools/engine/text-animations.ts +282 -0
  178. package/src/tools/engine/text-overlay.ts +143 -0
  179. package/src/tools/engine/tts.ts +284 -0
  180. package/src/tools/engine/types.ts +191 -0
  181. package/src/tools/engine/voice-effects.ts +258 -0
  182. package/src/tools/index.ts +67 -0
  183. package/tsconfig.json +19 -0
  184. 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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"}