video-context-mcp-server 1.0.2 → 1.1.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 (42) hide show
  1. package/README.md +43 -22
  2. package/dist/generated/version.d.ts +1 -1
  3. package/dist/generated/version.js +1 -1
  4. package/dist/index.js +36 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/services/kimiClient.d.ts.map +1 -1
  7. package/dist/services/kimiClient.js +12 -4
  8. package/dist/services/kimiClient.js.map +1 -1
  9. package/dist/services/minimaxClient.d.ts +49 -0
  10. package/dist/services/minimaxClient.d.ts.map +1 -0
  11. package/dist/services/minimaxClient.js +314 -0
  12. package/dist/services/minimaxClient.js.map +1 -0
  13. package/dist/services/providerRouter.js +1 -1
  14. package/dist/tools/generateImage.d.ts +10 -0
  15. package/dist/tools/generateImage.d.ts.map +1 -0
  16. package/dist/tools/generateImage.js +78 -0
  17. package/dist/tools/generateImage.js.map +1 -0
  18. package/dist/tools/generateMusic.d.ts +10 -0
  19. package/dist/tools/generateMusic.d.ts.map +1 -0
  20. package/dist/tools/generateMusic.js +75 -0
  21. package/dist/tools/generateMusic.js.map +1 -0
  22. package/dist/tools/generateVideo.d.ts +11 -0
  23. package/dist/tools/generateVideo.d.ts.map +1 -0
  24. package/dist/tools/generateVideo.js +64 -0
  25. package/dist/tools/generateVideo.js.map +1 -0
  26. package/dist/tools/queryGenerationTask.d.ts +11 -0
  27. package/dist/tools/queryGenerationTask.d.ts.map +1 -0
  28. package/dist/tools/queryGenerationTask.js +75 -0
  29. package/dist/tools/queryGenerationTask.js.map +1 -0
  30. package/dist/tools/schemas.d.ts +94 -0
  31. package/dist/tools/schemas.d.ts.map +1 -1
  32. package/dist/tools/schemas.js +192 -3
  33. package/dist/tools/schemas.js.map +1 -1
  34. package/dist/tools/textToSpeech.d.ts +10 -0
  35. package/dist/tools/textToSpeech.d.ts.map +1 -0
  36. package/dist/tools/textToSpeech.js +75 -0
  37. package/dist/tools/textToSpeech.js.map +1 -0
  38. package/dist/types/media.d.ts +90 -0
  39. package/dist/types/media.d.ts.map +1 -0
  40. package/dist/types/media.js +9 -0
  41. package/dist/types/media.js.map +1 -0
  42. package/package.json +1 -1
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Tool: query_generation_task
3
+ * Query the status of an async generation task (e.g., video generation).
4
+ * Downloads the result when the task is complete.
5
+ */
6
+ import { MinimaxClient } from '../services/minimaxClient.js';
7
+ import { isPro, proNotice } from '../utils/license.js';
8
+ import { logProgress } from '../utils/logger.js';
9
+ function proGatedError() {
10
+ return {
11
+ isError: true,
12
+ content: [
13
+ { type: 'text', text: proNotice('Generation task query') },
14
+ ],
15
+ };
16
+ }
17
+ function missingKeyError() {
18
+ return {
19
+ isError: true,
20
+ content: [
21
+ {
22
+ type: 'text',
23
+ text: 'MINIMAX_API_KEY is not configured. Please set it in your MCP server environment variables.',
24
+ },
25
+ ],
26
+ };
27
+ }
28
+ function formatStatus(result) {
29
+ const lines = [`Task ID: ${result.taskId}`, `Status: ${result.status}`];
30
+ if (result.status === 'Success' && result.downloadUrl) {
31
+ lines.push(`Download URL: ${result.downloadUrl}`);
32
+ if (result.videoWidth && result.videoHeight) {
33
+ lines.push(`Resolution: ${result.videoWidth}x${result.videoHeight}`);
34
+ }
35
+ lines.push('');
36
+ lines.push('The video is ready. Download the URL above to access the generated video.');
37
+ }
38
+ else if (result.status === 'Fail') {
39
+ lines.push('');
40
+ lines.push('Video generation failed. Please try again with a different prompt.');
41
+ }
42
+ else {
43
+ lines.push('');
44
+ lines.push('Task is still in progress. Call query_generation_task again with the same task_id to check again.');
45
+ }
46
+ return lines.join('\n');
47
+ }
48
+ export const queryGenerationTaskTool = async (params) => {
49
+ if (!isPro())
50
+ return proGatedError();
51
+ const apiKey = process.env.MINIMAX_API_KEY;
52
+ if (!apiKey)
53
+ return missingKeyError();
54
+ try {
55
+ await logProgress(`Querying task ${params.task_id}...`);
56
+ const client = new MinimaxClient({ apiKey });
57
+ const result = await client.queryVideoTask(params.task_id);
58
+ await logProgress(`Task ${params.task_id} status: ${result.status}`);
59
+ return {
60
+ content: [{ type: 'text', text: formatStatus(result) }],
61
+ };
62
+ }
63
+ catch (error) {
64
+ return {
65
+ isError: true,
66
+ content: [
67
+ {
68
+ type: 'text',
69
+ text: `Error querying task: ${error instanceof Error ? error.message : String(error)}`,
70
+ },
71
+ ],
72
+ };
73
+ }
74
+ };
75
+ //# sourceMappingURL=queryGenerationTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryGenerationTask.js","sourceRoot":"","sources":["../../src/tools/queryGenerationTask.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAQhD,SAAS,aAAa;IACpB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,CAAC,uBAAuB,CAAC,EAAE;SACpE;KACF,CAAA;AACH,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,4FAA4F;aACnG;SACF;KACF,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAAuB;IAC3C,MAAM,KAAK,GAAG,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,EAAE,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IAEvE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;QACjD,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;QACtE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CACR,2EAA2E,CAC5E,CAAA;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CACR,oEAAoE,CACrE,CAAA;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CACR,mGAAmG,CACpG,CAAA;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAC1C,MAAiC,EACR,EAAE;IAC3B,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,aAAa,EAAE,CAAA;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAA;IAC1C,IAAI,CAAC,MAAM;QAAE,OAAO,eAAe,EAAE,CAAA;IAErC,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,iBAAiB,MAAM,CAAC,OAAO,KAAK,CAAC,CAAA;QAEvD,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAE1D,MAAM,WAAW,CAAC,QAAQ,MAAM,CAAC,OAAO,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAEpE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;SACjE,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBACvF;aACF;SACF,CAAA;IACH,CAAC;AACH,CAAC,CAAA"}
@@ -92,4 +92,98 @@ export type SearchTimestampParams = z.infer<typeof searchTimestampSchema>;
92
92
  export type GetVideoInfoParams = z.infer<typeof getVideoInfoSchema>;
93
93
  export type TranscribeVideoParams = z.infer<typeof transcribeVideoSchema>;
94
94
  export type TranscriptOutputFormat = 'text' | 'srt' | 'vtt' | 'json';
95
+ export declare const textToSpeechSchema: z.ZodObject<{
96
+ text: z.ZodString;
97
+ model: z.ZodOptional<z.ZodEnum<{
98
+ "speech-2.8-hd": "speech-2.8-hd";
99
+ "speech-2.8-turbo": "speech-2.8-turbo";
100
+ "speech-02-hd": "speech-02-hd";
101
+ "speech-02-turbo": "speech-02-turbo";
102
+ }>>;
103
+ voice_id: z.ZodOptional<z.ZodString>;
104
+ speed: z.ZodOptional<z.ZodNumber>;
105
+ vol: z.ZodOptional<z.ZodNumber>;
106
+ pitch: z.ZodOptional<z.ZodNumber>;
107
+ emotion: z.ZodOptional<z.ZodEnum<{
108
+ happy: "happy";
109
+ sad: "sad";
110
+ angry: "angry";
111
+ fearful: "fearful";
112
+ disgusted: "disgusted";
113
+ surprised: "surprised";
114
+ calm: "calm";
115
+ fluent: "fluent";
116
+ whisper: "whisper";
117
+ }>>;
118
+ format: z.ZodOptional<z.ZodEnum<{
119
+ mp3: "mp3";
120
+ wav: "wav";
121
+ flac: "flac";
122
+ pcm: "pcm";
123
+ }>>;
124
+ sample_rate: z.ZodOptional<z.ZodNumber>;
125
+ bitrate: z.ZodOptional<z.ZodNumber>;
126
+ channel: z.ZodOptional<z.ZodNumber>;
127
+ language_boost: z.ZodOptional<z.ZodString>;
128
+ }, z.core.$strip>;
129
+ export declare const generateImageSchema: z.ZodObject<{
130
+ prompt: z.ZodString;
131
+ model: z.ZodOptional<z.ZodEnum<{
132
+ "image-01": "image-01";
133
+ }>>;
134
+ aspect_ratio: z.ZodOptional<z.ZodEnum<{
135
+ "1:1": "1:1";
136
+ "16:9": "16:9";
137
+ "4:3": "4:3";
138
+ "3:2": "3:2";
139
+ "2:3": "2:3";
140
+ "3:4": "3:4";
141
+ "9:16": "9:16";
142
+ "21:9": "21:9";
143
+ }>>;
144
+ n: z.ZodOptional<z.ZodNumber>;
145
+ prompt_optimizer: z.ZodOptional<z.ZodBoolean>;
146
+ }, z.core.$strip>;
147
+ export declare const generateVideoSchema: z.ZodObject<{
148
+ prompt: z.ZodOptional<z.ZodString>;
149
+ model: z.ZodOptional<z.ZodEnum<{
150
+ "MiniMax-Hailuo-2.3": "MiniMax-Hailuo-2.3";
151
+ "MiniMax-Hailuo-02": "MiniMax-Hailuo-02";
152
+ "T2V-01-Director": "T2V-01-Director";
153
+ "T2V-01": "T2V-01";
154
+ }>>;
155
+ first_frame_image: z.ZodOptional<z.ZodString>;
156
+ duration: z.ZodOptional<z.ZodNumber & z.ZodType<10 | 6, number, z.core.$ZodTypeInternals<10 | 6, number>>>;
157
+ resolution: z.ZodOptional<z.ZodEnum<{
158
+ "720P": "720P";
159
+ "768P": "768P";
160
+ "1080P": "1080P";
161
+ }>>;
162
+ prompt_optimizer: z.ZodOptional<z.ZodBoolean>;
163
+ }, z.core.$strip>;
164
+ export declare const generateMusicSchema: z.ZodObject<{
165
+ prompt: z.ZodString;
166
+ lyrics: z.ZodOptional<z.ZodString>;
167
+ model: z.ZodOptional<z.ZodEnum<{
168
+ "music-2.6": "music-2.6";
169
+ "music-2.6-free": "music-2.6-free";
170
+ }>>;
171
+ is_instrumental: z.ZodOptional<z.ZodBoolean>;
172
+ lyrics_optimizer: z.ZodOptional<z.ZodBoolean>;
173
+ format: z.ZodOptional<z.ZodEnum<{
174
+ mp3: "mp3";
175
+ wav: "wav";
176
+ pcm: "pcm";
177
+ }>>;
178
+ sample_rate: z.ZodOptional<z.ZodNumber>;
179
+ bitrate: z.ZodOptional<z.ZodNumber>;
180
+ }, z.core.$strip>;
181
+ export declare const queryGenerationTaskSchema: z.ZodObject<{
182
+ task_id: z.ZodString;
183
+ }, z.core.$strip>;
184
+ export type TextToSpeechParams = z.infer<typeof textToSpeechSchema>;
185
+ export type GenerateImageParams = z.infer<typeof generateImageSchema>;
186
+ export type GenerateVideoParams = z.infer<typeof generateVideoSchema>;
187
+ export type GenerateMusicParams = z.infer<typeof generateMusicSchema>;
188
+ export type QueryGenerationTaskParams = z.infer<typeof queryGenerationTaskSchema>;
95
189
  //# sourceMappingURL=schemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,iBAAiB;;;;;;EAM5B,CAAA;AACF,eAAO,MAAM,iBAAiB;;;;;EAK5B,CAAA;AAIF,eAAO,MAAM,kBAAkB;;;;;;;;;;iBAQ7B,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;iBAO/B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;iBAwD9B,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;iBAgBhC,CAAA;AAEF,eAAO,MAAM,kBAAkB;;iBAM7B,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;iBAmChC,CAAA;AAIF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AACnE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACvE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACzE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AACnE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACzE,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAA"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,iBAAiB;;;;;;EAM5B,CAAA;AACF,eAAO,MAAM,iBAAiB;;;;;EAK5B,CAAA;AAIF,eAAO,MAAM,kBAAkB;;;;;;;;;;iBAQ7B,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;iBAO/B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;iBAwD9B,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;iBAgBhC,CAAA;AAEF,eAAO,MAAM,kBAAkB;;iBAM7B,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;iBAmChC,CAAA;AAIF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AACnE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACvE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACzE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AACnE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACzE,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAA;AAIpE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmF7B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;iBAyB9B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;iBA2C5B,CAAA;AAEJ,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;iBAiD9B,CAAA;AAEF,eAAO,MAAM,yBAAyB;;iBAOpC,CAAA;AAIF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AACnE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,yBAAyB,CACjC,CAAA"}
@@ -24,13 +24,13 @@ export const analyzeVideoSchema = z.object({
24
24
  question: z.string().describe('Question to ask about the video content'),
25
25
  provider: videoProviderEnum
26
26
  .optional()
27
- .describe("AI backend to use: 'gemini' (Gemini 3 Flash Preview, default), 'glm' (GLM-4.6V), 'qwen' (Qwen3.6), 'kimi' (Kimi K2.5), or 'mimo' (MiMo-V2 Omni)"),
27
+ .describe("AI backend to use: 'gemini' (Gemini 3 Flash Preview, default), 'glm' (GLM-4.6V), 'qwen' (Qwen3.6), 'kimi' (Kimi K2.6), or 'mimo' (MiMo-V2 Omni)"),
28
28
  });
29
29
  export const summarizeVideoSchema = z.object({
30
30
  videoPath: z.string().describe('Path to the video file (local path or URL)'),
31
31
  provider: videoProviderEnum
32
32
  .optional()
33
- .describe("AI backend to use: 'gemini' (Gemini 3 Flash Preview, default), 'glm' (GLM-4.6V), 'qwen' (Qwen3.6), 'kimi' (Kimi K2.5), or 'mimo' (MiMo-V2 Omni)"),
33
+ .describe("AI backend to use: 'gemini' (Gemini 3 Flash Preview, default), 'glm' (GLM-4.6V), 'qwen' (Qwen3.6), 'kimi' (Kimi K2.6), or 'mimo' (MiMo-V2 Omni)"),
34
34
  });
35
35
  export const extractFramesSchema = z.object({
36
36
  videoPath: z
@@ -84,7 +84,7 @@ export const searchTimestampSchema = z.object({
84
84
  .describe("What to search for, e.g., 'person waves', 'dog runs', 'car crash'"),
85
85
  provider: videoProviderEnum
86
86
  .optional()
87
- .describe("AI backend to use: 'gemini' (Gemini 3 Flash Preview, default), 'glm' (GLM-4.6V), 'qwen' (Qwen3.6), 'kimi' (Kimi K2.5), or 'mimo' (MiMo-V2 Omni)"),
87
+ .describe("AI backend to use: 'gemini' (Gemini 3 Flash Preview, default), 'glm' (GLM-4.6V), 'qwen' (Qwen3.6), 'kimi' (Kimi K2.6), or 'mimo' (MiMo-V2 Omni)"),
88
88
  });
89
89
  export const getVideoInfoSchema = z.object({
90
90
  videoPath: z
@@ -115,4 +115,193 @@ export const transcribeVideoSchema = z.object({
115
115
  .optional()
116
116
  .describe("Output format for the transcript: 'text' (default, timestamped plain text), 'srt' (SubRip subtitle file), 'vtt' (WebVTT subtitle file), or 'json' (raw TranscriptData object)."),
117
117
  });
118
+ // ── Media generation schemas (MiniMax) ────────────────────────────────────
119
+ export const textToSpeechSchema = z.object({
120
+ text: z
121
+ .string()
122
+ .min(1)
123
+ .max(10000)
124
+ .describe('Text to synthesize into speech (max 10,000 characters)'),
125
+ model: z
126
+ .enum([
127
+ 'speech-2.8-hd',
128
+ 'speech-2.8-turbo',
129
+ 'speech-02-hd',
130
+ 'speech-02-turbo',
131
+ ])
132
+ .optional()
133
+ .describe("TTS model to use (default: 'speech-02-hd')"),
134
+ voice_id: z
135
+ .string()
136
+ .optional()
137
+ .describe("Voice ID to use (default: 'female-shaonv')"),
138
+ speed: z
139
+ .number()
140
+ .min(0.5)
141
+ .max(2.0)
142
+ .optional()
143
+ .describe('Speech speed, range [0.5, 2.0] (default: 1.0)'),
144
+ vol: z
145
+ .number()
146
+ .min(0.01)
147
+ .max(10)
148
+ .optional()
149
+ .describe('Playback volume, range (0, 10] (default: 1.0)'),
150
+ pitch: z
151
+ .number()
152
+ .int()
153
+ .min(-12)
154
+ .max(12)
155
+ .optional()
156
+ .describe('Pitch adjustment, range [-12, 12] (default: 0)'),
157
+ emotion: z
158
+ .enum([
159
+ 'happy',
160
+ 'sad',
161
+ 'angry',
162
+ 'fearful',
163
+ 'disgusted',
164
+ 'surprised',
165
+ 'calm',
166
+ 'fluent',
167
+ 'whisper',
168
+ ])
169
+ .optional()
170
+ .describe('Emotional tone for the speech'),
171
+ format: z
172
+ .enum(['mp3', 'wav', 'flac', 'pcm'])
173
+ .optional()
174
+ .describe("Output audio format (default: 'mp3')"),
175
+ sample_rate: z
176
+ .number()
177
+ .int()
178
+ .optional()
179
+ .describe('Audio sample rate. Allowed: 8000, 16000, 22050, 24000, 32000, 44100 (default: 32000)'),
180
+ bitrate: z
181
+ .number()
182
+ .int()
183
+ .optional()
184
+ .describe('Audio bitrate. Allowed: 32000, 64000, 128000, 256000 (default: 128000)'),
185
+ channel: z
186
+ .number()
187
+ .int()
188
+ .min(1)
189
+ .max(2)
190
+ .optional()
191
+ .describe('Number of channels: 1 = mono, 2 = stereo (default: 1)'),
192
+ language_boost: z
193
+ .string()
194
+ .optional()
195
+ .describe("Language-specific enhancement, e.g. 'English', 'Chinese', 'auto'"),
196
+ });
197
+ export const generateImageSchema = z.object({
198
+ prompt: z
199
+ .string()
200
+ .min(1)
201
+ .max(1500)
202
+ .describe('Text description of the image to generate (max 1500 chars)'),
203
+ model: z
204
+ .enum(['image-01'])
205
+ .optional()
206
+ .describe("Image generation model (default: 'image-01')"),
207
+ aspect_ratio: z
208
+ .enum(['1:1', '16:9', '4:3', '3:2', '2:3', '3:4', '9:16', '21:9'])
209
+ .optional()
210
+ .describe("Output aspect ratio (default: '1:1')"),
211
+ n: z
212
+ .number()
213
+ .int()
214
+ .min(1)
215
+ .max(9)
216
+ .optional()
217
+ .describe('Number of images to generate per request [1, 9] (default: 1)'),
218
+ prompt_optimizer: z
219
+ .boolean()
220
+ .optional()
221
+ .describe('Auto-optimize the prompt for better results (default: true)'),
222
+ });
223
+ export const generateVideoSchema = z
224
+ .object({
225
+ prompt: z
226
+ .string()
227
+ .max(2000)
228
+ .optional()
229
+ .describe('Text description of the video (max 2000 chars). Supports camera commands like [Pan left], [Zoom in], etc.'),
230
+ model: z
231
+ .enum([
232
+ 'MiniMax-Hailuo-2.3',
233
+ 'MiniMax-Hailuo-02',
234
+ 'T2V-01-Director',
235
+ 'T2V-01',
236
+ ])
237
+ .optional()
238
+ .describe("Video generation model (default: 'T2V-01')"),
239
+ first_frame_image: z
240
+ .string()
241
+ .optional()
242
+ .describe('First frame image as a base64 data URI (data:image/jpeg;base64,...) or a public URL'),
243
+ duration: z
244
+ .number()
245
+ .int()
246
+ .refine((v) => v === 6 || v === 10, {
247
+ message: 'Duration must be 6 or 10 seconds',
248
+ })
249
+ .optional()
250
+ .describe('Video duration in seconds: 6 or 10 (default: 6)'),
251
+ resolution: z
252
+ .enum(['720P', '768P', '1080P'])
253
+ .optional()
254
+ .describe('Output resolution (depends on model and duration)'),
255
+ prompt_optimizer: z
256
+ .boolean()
257
+ .optional()
258
+ .describe('Auto-optimize the prompt for better results (default: true)'),
259
+ })
260
+ .refine((data) => data.prompt || data.first_frame_image, {
261
+ message: 'At least one of prompt or first_frame_image is required',
262
+ });
263
+ export const generateMusicSchema = z.object({
264
+ prompt: z
265
+ .string()
266
+ .min(10)
267
+ .max(300)
268
+ .describe("Music style, mood, and scenario description (10–300 chars), e.g. 'Pop, melancholic, perfect for a rainy night'"),
269
+ lyrics: z
270
+ .string()
271
+ .max(3500)
272
+ .optional()
273
+ .describe('Song lyrics with structure tags: [Intro], [Verse], [Chorus], [Bridge], [Outro], etc. Lines separated by \\n'),
274
+ model: z
275
+ .enum(['music-2.6', 'music-2.6-free'])
276
+ .optional()
277
+ .describe("Music generation model (default: 'music-2.6')"),
278
+ is_instrumental: z
279
+ .boolean()
280
+ .optional()
281
+ .describe('Generate instrumental music with no vocals (default: false). When true, lyrics are not required.'),
282
+ lyrics_optimizer: z
283
+ .boolean()
284
+ .optional()
285
+ .describe('Auto-generate lyrics from the prompt description (default: false). Only supported by music-2.6.'),
286
+ format: z
287
+ .enum(['mp3', 'wav', 'pcm'])
288
+ .optional()
289
+ .describe("Output audio format (default: 'mp3')"),
290
+ sample_rate: z
291
+ .number()
292
+ .int()
293
+ .optional()
294
+ .describe('Music sample rate. Allowed: 16000, 24000, 32000, 44100 (default: 32000)'),
295
+ bitrate: z
296
+ .number()
297
+ .int()
298
+ .optional()
299
+ .describe('Music bitrate. Allowed: 32000, 64000, 128000, 256000 (default: 128000)'),
300
+ });
301
+ export const queryGenerationTaskSchema = z.object({
302
+ task_id: z
303
+ .string()
304
+ .min(1)
305
+ .describe('Task ID returned by generate_video. Polls the task status and downloads the result when complete.'),
306
+ });
118
307
  //# sourceMappingURL=schemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Tool: text_to_speech
3
+ * Convert text to natural speech audio using MiniMax TTS
4
+ */
5
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
6
+ import { textToSpeechSchema } from './schemas.js';
7
+ type TextToSpeechParams = import('zod').infer<typeof textToSpeechSchema>;
8
+ export declare const textToSpeechTool: (params: TextToSpeechParams) => Promise<CallToolResult>;
9
+ export {};
10
+ //# sourceMappingURL=textToSpeech.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textToSpeech.d.ts","sourceRoot":"","sources":["../../src/tools/textToSpeech.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAKxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,KAAK,kBAAkB,GAAG,OAAO,KAAK,EAAE,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAqBxE,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,kBAAkB,KACzB,OAAO,CAAC,cAAc,CAiDxB,CAAA"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Tool: text_to_speech
3
+ * Convert text to natural speech audio using MiniMax TTS
4
+ */
5
+ import { writeFile } from 'fs/promises';
6
+ import * as path from 'path';
7
+ import { MinimaxClient } from '../services/minimaxClient.js';
8
+ import { isPro, proNotice } from '../utils/license.js';
9
+ import { createTempDir } from '../utils/tempFiles.js';
10
+ import { logProgress } from '../utils/logger.js';
11
+ function proGatedError() {
12
+ return {
13
+ isError: true,
14
+ content: [{ type: 'text', text: proNotice('Text-to-speech') }],
15
+ };
16
+ }
17
+ function missingKeyError() {
18
+ return {
19
+ isError: true,
20
+ content: [
21
+ {
22
+ type: 'text',
23
+ text: 'MINIMAX_API_KEY is not configured. Please set it in your MCP server environment variables.',
24
+ },
25
+ ],
26
+ };
27
+ }
28
+ export const textToSpeechTool = async (params) => {
29
+ if (!isPro())
30
+ return proGatedError();
31
+ const apiKey = process.env.MINIMAX_API_KEY;
32
+ if (!apiKey)
33
+ return missingKeyError();
34
+ try {
35
+ await logProgress('Generating speech with MiniMax TTS...');
36
+ const client = new MinimaxClient({ apiKey });
37
+ const result = await client.textToSpeech(params);
38
+ const tempDir = await createTempDir();
39
+ const ext = params.format ?? 'mp3';
40
+ const filePath = path.join(tempDir, `tts_${Date.now()}.${ext}`);
41
+ await writeFile(filePath, result.audioBuffer);
42
+ await logProgress(`Speech generated. Saved to ${filePath}`);
43
+ const mimeType = `audio/${ext === 'pcm' ? 'pcm' : ext}`;
44
+ return {
45
+ content: [
46
+ {
47
+ type: 'audio',
48
+ data: result.audioBuffer.toString('base64'),
49
+ mimeType,
50
+ },
51
+ {
52
+ type: 'text',
53
+ text: [
54
+ `Audio saved to: ${filePath}`,
55
+ `Duration: ${result.duration}ms`,
56
+ `Format: ${result.format}`,
57
+ `Sample rate: ${result.sampleRate}Hz`,
58
+ ].join(' | '),
59
+ },
60
+ ],
61
+ };
62
+ }
63
+ catch (error) {
64
+ return {
65
+ isError: true,
66
+ content: [
67
+ {
68
+ type: 'text',
69
+ text: `Error generating speech: ${error instanceof Error ? error.message : String(error)}`,
70
+ },
71
+ ],
72
+ };
73
+ }
74
+ };
75
+ //# sourceMappingURL=textToSpeech.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textToSpeech.js","sourceRoot":"","sources":["../../src/tools/textToSpeech.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAKhD,SAAS,aAAa;IACpB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;KACxE,CAAA;AACH,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,4FAA4F;aACnG;SACF;KACF,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,MAA0B,EACD,EAAE;IAC3B,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,aAAa,EAAE,CAAA;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAA;IAC1C,IAAI,CAAC,MAAM;QAAE,OAAO,eAAe,EAAE,CAAA;IAErC,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,uCAAuC,CAAC,CAAA;QAE1D,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QAEhD,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAA;QACrC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,KAAK,CAAA;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QAC/D,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QAE7C,MAAM,WAAW,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAA;QAE3D,MAAM,QAAQ,GAAG,SAAS,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;QACvD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,OAAgB;oBACtB,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAC3C,QAAQ;iBACT;gBACD;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,mBAAmB,QAAQ,EAAE;wBAC7B,aAAa,MAAM,CAAC,QAAQ,IAAI;wBAChC,WAAW,MAAM,CAAC,MAAM,EAAE;wBAC1B,gBAAgB,MAAM,CAAC,UAAU,IAAI;qBACtC,CAAC,IAAI,CAAC,KAAK,CAAC;iBACd;aACF;SACF,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAC3F;aACF;SACF,CAAA;IACH,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Shared types for MiniMax media generation.
3
+ *
4
+ * These types describe the public-facing parameters and results used by
5
+ * the MCP tool handlers. The MiniMax API wire-format types are kept
6
+ * private inside `minimaxClient.ts`.
7
+ */
8
+ export type TtsModel = 'speech-2.8-hd' | 'speech-2.8-turbo' | 'speech-02-hd' | 'speech-02-turbo';
9
+ export type TtsFormat = 'mp3' | 'wav' | 'flac' | 'pcm';
10
+ export type TtsEmotion = 'happy' | 'sad' | 'angry' | 'fearful' | 'disgusted' | 'surprised' | 'calm' | 'fluent' | 'whisper';
11
+ export interface TtsParams {
12
+ text: string;
13
+ model?: TtsModel;
14
+ voice_id?: string;
15
+ speed?: number;
16
+ vol?: number;
17
+ pitch?: number;
18
+ emotion?: TtsEmotion;
19
+ format?: TtsFormat;
20
+ sample_rate?: number;
21
+ bitrate?: number;
22
+ channel?: number;
23
+ language_boost?: string;
24
+ }
25
+ export interface TtsResult {
26
+ audioBuffer: Buffer;
27
+ duration: number;
28
+ sampleRate: number;
29
+ format: string;
30
+ }
31
+ export type ImageModel = 'image-01';
32
+ export type ImageAspectRatio = '1:1' | '16:9' | '4:3' | '3:2' | '2:3' | '3:4' | '9:16' | '21:9';
33
+ export interface ImageParams {
34
+ prompt: string;
35
+ model?: ImageModel;
36
+ aspect_ratio?: ImageAspectRatio;
37
+ n?: number;
38
+ prompt_optimizer?: boolean;
39
+ }
40
+ export interface ImageResult {
41
+ images: Array<{
42
+ base64: string;
43
+ mimeType: string;
44
+ }>;
45
+ }
46
+ export type VideoModel = 'MiniMax-Hailuo-2.3' | 'MiniMax-Hailuo-02' | 'T2V-01-Director' | 'T2V-01';
47
+ export type VideoResolution = '720P' | '768P' | '1080P';
48
+ export interface VideoParams {
49
+ prompt?: string;
50
+ model?: VideoModel;
51
+ first_frame_image?: string;
52
+ duration?: number;
53
+ resolution?: VideoResolution;
54
+ prompt_optimizer?: boolean;
55
+ }
56
+ export type VideoTaskStatus = 'Preparing' | 'Queueing' | 'Processing' | 'Success' | 'Fail';
57
+ export interface VideoTaskResult {
58
+ taskId: string;
59
+ status: VideoTaskStatus;
60
+ fileId?: string;
61
+ videoWidth?: number;
62
+ videoHeight?: number;
63
+ downloadUrl?: string;
64
+ }
65
+ export type MusicModel = 'music-2.6' | 'music-2.6-free';
66
+ export type MusicFormat = 'mp3' | 'wav' | 'pcm';
67
+ export interface MusicParams {
68
+ prompt: string;
69
+ lyrics?: string;
70
+ model?: MusicModel;
71
+ is_instrumental?: boolean;
72
+ lyrics_optimizer?: boolean;
73
+ format?: MusicFormat;
74
+ sample_rate?: number;
75
+ bitrate?: number;
76
+ }
77
+ export interface MusicResult {
78
+ audioBuffer: Buffer;
79
+ duration: number;
80
+ sampleRate: number;
81
+ format: string;
82
+ }
83
+ export interface FileDownloadResult {
84
+ fileId: string;
85
+ filename: string;
86
+ downloadUrl: string;
87
+ bytes: number;
88
+ createdAt: number;
89
+ }
90
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/types/media.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Shared types for MiniMax media generation.
3
+ *
4
+ * These types describe the public-facing parameters and results used by
5
+ * the MCP tool handlers. The MiniMax API wire-format types are kept
6
+ * private inside `minimaxClient.ts`.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/types/media.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "video-context-mcp-server",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
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",