video-context-mcp-server 1.0.3 → 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 (38) hide show
  1. package/README.md +37 -16
  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/minimaxClient.d.ts +49 -0
  7. package/dist/services/minimaxClient.d.ts.map +1 -0
  8. package/dist/services/minimaxClient.js +314 -0
  9. package/dist/services/minimaxClient.js.map +1 -0
  10. package/dist/tools/generateImage.d.ts +10 -0
  11. package/dist/tools/generateImage.d.ts.map +1 -0
  12. package/dist/tools/generateImage.js +78 -0
  13. package/dist/tools/generateImage.js.map +1 -0
  14. package/dist/tools/generateMusic.d.ts +10 -0
  15. package/dist/tools/generateMusic.d.ts.map +1 -0
  16. package/dist/tools/generateMusic.js +75 -0
  17. package/dist/tools/generateMusic.js.map +1 -0
  18. package/dist/tools/generateVideo.d.ts +11 -0
  19. package/dist/tools/generateVideo.d.ts.map +1 -0
  20. package/dist/tools/generateVideo.js +64 -0
  21. package/dist/tools/generateVideo.js.map +1 -0
  22. package/dist/tools/queryGenerationTask.d.ts +11 -0
  23. package/dist/tools/queryGenerationTask.d.ts.map +1 -0
  24. package/dist/tools/queryGenerationTask.js +75 -0
  25. package/dist/tools/queryGenerationTask.js.map +1 -0
  26. package/dist/tools/schemas.d.ts +94 -0
  27. package/dist/tools/schemas.d.ts.map +1 -1
  28. package/dist/tools/schemas.js +189 -0
  29. package/dist/tools/schemas.js.map +1 -1
  30. package/dist/tools/textToSpeech.d.ts +10 -0
  31. package/dist/tools/textToSpeech.d.ts.map +1 -0
  32. package/dist/tools/textToSpeech.js +75 -0
  33. package/dist/tools/textToSpeech.js.map +1 -0
  34. package/dist/types/media.d.ts +90 -0
  35. package/dist/types/media.d.ts.map +1 -0
  36. package/dist/types/media.js +9 -0
  37. package/dist/types/media.js.map +1 -0
  38. package/package.json +1 -1
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Tool: generate_image
3
+ * Generate images from a text prompt using MiniMax image-01
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('Image generation') }],
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 generateImageTool = 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 images with MiniMax...');
36
+ const client = new MinimaxClient({ apiKey });
37
+ const result = await client.generateImage(params);
38
+ const tempDir = await createTempDir();
39
+ const content = [];
40
+ // Save each image to disk and add to response
41
+ const savePromises = result.images.map(async (img, i) => {
42
+ const filePath = path.join(tempDir, `image_${Date.now()}_${i}.jpg`);
43
+ await writeFile(filePath, Buffer.from(img.base64, 'base64'));
44
+ return filePath;
45
+ });
46
+ const filePaths = await Promise.all(savePromises);
47
+ // Add inline images
48
+ for (const img of result.images) {
49
+ content.push({
50
+ type: 'image',
51
+ data: img.base64,
52
+ mimeType: img.mimeType,
53
+ });
54
+ }
55
+ // Add metadata text
56
+ content.push({
57
+ type: 'text',
58
+ text: [
59
+ `Generated ${result.images.length} image(s)`,
60
+ `Saved to: ${filePaths.join(', ')}`,
61
+ ].join('\n'),
62
+ });
63
+ await logProgress(`Generated ${result.images.length} image(s)`);
64
+ return { content };
65
+ }
66
+ catch (error) {
67
+ return {
68
+ isError: true,
69
+ content: [
70
+ {
71
+ type: 'text',
72
+ text: `Error generating image: ${error instanceof Error ? error.message : String(error)}`,
73
+ },
74
+ ],
75
+ };
76
+ }
77
+ };
78
+ //# sourceMappingURL=generateImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateImage.js","sourceRoot":"","sources":["../../src/tools/generateImage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Tool: generate_music
3
+ * Generate music from a prompt and optional lyrics using MiniMax music-2.6
4
+ */
5
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
6
+ import { generateMusicSchema } from './schemas.js';
7
+ type GenerateMusicParams = import('zod').infer<typeof generateMusicSchema>;
8
+ export declare const generateMusicTool: (params: GenerateMusicParams) => Promise<CallToolResult>;
9
+ export {};
10
+ //# sourceMappingURL=generateMusic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateMusic.d.ts","sourceRoot":"","sources":["../../src/tools/generateMusic.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAKxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,KAAK,mBAAmB,GAAG,OAAO,KAAK,EAAE,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAqB1E,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,mBAAmB,KAC1B,OAAO,CAAC,cAAc,CAiDxB,CAAA"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Tool: generate_music
3
+ * Generate music from a prompt and optional lyrics using MiniMax music-2.6
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('Music generation') }],
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 generateMusicTool = 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 music with MiniMax...');
36
+ const client = new MinimaxClient({ apiKey });
37
+ const result = await client.generateMusic(params);
38
+ const tempDir = await createTempDir();
39
+ const ext = params.format ?? 'mp3';
40
+ const filePath = path.join(tempDir, `music_${Date.now()}.${ext}`);
41
+ await writeFile(filePath, result.audioBuffer);
42
+ await logProgress(`Music 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
+ `Music 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 music: ${error instanceof Error ? error.message : String(error)}`,
70
+ },
71
+ ],
72
+ };
73
+ }
74
+ };
75
+ //# sourceMappingURL=generateMusic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateMusic.js","sourceRoot":"","sources":["../../src/tools/generateMusic.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,kBAAkB,CAAC,EAAE,CAAC;KAC1E,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,iBAAiB,GAAG,KAAK,EACpC,MAA2B,EACF,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,kCAAkC,CAAC,CAAA;QAErD,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAEjD,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,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QACjE,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QAE7C,MAAM,WAAW,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAA;QAE1D,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,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAC1F;aACF;SACF,CAAA;IACH,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Tool: generate_video
3
+ * Generate a video from a text prompt and/or first-frame image.
4
+ * Returns a task_id immediately; use query_generation_task to poll.
5
+ */
6
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
7
+ import { generateVideoSchema } from './schemas.js';
8
+ type GenerateVideoParams = import('zod').infer<typeof generateVideoSchema>;
9
+ export declare const generateVideoTool: (params: GenerateVideoParams) => Promise<CallToolResult>;
10
+ export {};
11
+ //# sourceMappingURL=generateVideo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateVideo.d.ts","sourceRoot":"","sources":["../../src/tools/generateVideo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAIxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,KAAK,mBAAmB,GAAG,OAAO,KAAK,EAAE,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAqB1E,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,mBAAmB,KAC1B,OAAO,CAAC,cAAc,CAuCxB,CAAA"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Tool: generate_video
3
+ * Generate a video from a text prompt and/or first-frame image.
4
+ * Returns a task_id immediately; use query_generation_task to poll.
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: [{ type: 'text', text: proNotice('Video generation') }],
13
+ };
14
+ }
15
+ function missingKeyError() {
16
+ return {
17
+ isError: true,
18
+ content: [
19
+ {
20
+ type: 'text',
21
+ text: 'MINIMAX_API_KEY is not configured. Please set it in your MCP server environment variables.',
22
+ },
23
+ ],
24
+ };
25
+ }
26
+ export const generateVideoTool = async (params) => {
27
+ if (!isPro())
28
+ return proGatedError();
29
+ const apiKey = process.env.MINIMAX_API_KEY;
30
+ if (!apiKey)
31
+ return missingKeyError();
32
+ try {
33
+ await logProgress('Submitting video generation task to MiniMax...');
34
+ const client = new MinimaxClient({ apiKey });
35
+ const { taskId } = await client.createVideoTask(params);
36
+ await logProgress(`Video generation task created: ${taskId}`);
37
+ return {
38
+ content: [
39
+ {
40
+ type: 'text',
41
+ text: [
42
+ `Video generation started successfully.`,
43
+ `Task ID: ${taskId}`,
44
+ `Model: ${params.model ?? 'T2V-01'}`,
45
+ '',
46
+ 'Use the query_generation_task tool with this task_id to check status and download the result when complete.',
47
+ ].join('\n'),
48
+ },
49
+ ],
50
+ };
51
+ }
52
+ catch (error) {
53
+ return {
54
+ isError: true,
55
+ content: [
56
+ {
57
+ type: 'text',
58
+ text: `Error starting video generation: ${error instanceof Error ? error.message : String(error)}`,
59
+ },
60
+ ],
61
+ };
62
+ }
63
+ };
64
+ //# sourceMappingURL=generateVideo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateVideo.js","sourceRoot":"","sources":["../../src/tools/generateVideo.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;AAKhD,SAAS,aAAa;IACpB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC;KAC1E,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,iBAAiB,GAAG,KAAK,EACpC,MAA2B,EACF,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,gDAAgD,CAAC,CAAA;QAEnE,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;QAEvD,MAAM,WAAW,CAAC,kCAAkC,MAAM,EAAE,CAAC,CAAA;QAE7D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,wCAAwC;wBACxC,YAAY,MAAM,EAAE;wBACpB,UAAU,MAAM,CAAC,KAAK,IAAI,QAAQ,EAAE;wBACpC,EAAE;wBACF,6GAA6G;qBAC9G,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb;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,oCAAoC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBACnG;aACF;SACF,CAAA;IACH,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,11 @@
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 type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
7
+ import { queryGenerationTaskSchema } from './schemas.js';
8
+ type QueryGenerationTaskParams = import('zod').infer<typeof queryGenerationTaskSchema>;
9
+ export declare const queryGenerationTaskTool: (params: QueryGenerationTaskParams) => Promise<CallToolResult>;
10
+ export {};
11
+ //# sourceMappingURL=queryGenerationTask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryGenerationTask.d.ts","sourceRoot":"","sources":["../../src/tools/queryGenerationTask.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAIxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAGxD,KAAK,yBAAyB,GAAG,OAAO,KAAK,EAAE,KAAK,CAClD,OAAO,yBAAyB,CACjC,CAAA;AAkDD,eAAO,MAAM,uBAAuB,GAClC,QAAQ,yBAAyB,KAChC,OAAO,CAAC,cAAc,CA4BxB,CAAA"}
@@ -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":"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"}
@@ -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"}
@@ -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