video-context-mcp-server 1.0.3 → 1.1.1

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 +39 -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
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Video Context MCP Server
2
2
 
3
- An MCP server that gives coding assistants (GitHub Copilot, Cursor, Claude Code) the ability to understand and analyze video content.
3
+ An MCP server that gives coding assistants (GitHub Copilot, Cursor, Claude Code) the ability to understand and analyze video content **and generate media** (text-to-speech, images, videos, music) via the MiniMax API.
4
4
 
5
5
  **[Official Documentation](https://www.videocontextmcp.com/)**<br />
6
6
  **[Tutorials Playlist](https://www.youtube.com/playlist?list=PL3Big7arQA0Rc1B6WVLmZqXKwDyp1fyme)**
@@ -17,7 +17,11 @@ An MCP server that gives coding assistants (GitHub Copilot, Cursor, Claude Code)
17
17
  - 🔊 **Audio-Enhanced Analysis** — Auto-transcribes audio and injects transcripts into AI prompts for richer results (GLM/Kimi/Qwen)
18
18
  - 🔄 **Multi-Provider Support** — Choose between GLM-4.6V, Qwen3.6, Kimi K2.6, Gemini, or MiMo-V2 Omni
19
19
  - 🎯 **Smart Video Handling** — Extracts keyframes from long videos to reduce token usage
20
- - **Pro tier** — Extended frame extraction, multi-platform downloads, higher resolution. [Learn more ↓](#pro)
20
+ - 🗣️ **Text-to-Speech** — Convert text to natural speech audio (MiniMax TTS)
21
+ - 🖼️ **Image Generation** — Generate images from text prompts (MiniMax image-01)
22
+ - 🎬 **Video Generation** — Generate videos from text or image prompts (MiniMax Hailuo)
23
+ - 🎵 **Music Generation** — Generate music from prompts and lyrics (MiniMax music-2.6)
24
+ - ⭐ **Pro tier** — Extended frame extraction, multi-platform downloads, higher resolution, media generation. [Learn more ↓](#pro)
21
25
 
22
26
  ---
23
27
 
@@ -96,7 +100,8 @@ Set all keys to enable the full fallback chain. If one provider is unavailable o
96
100
  "MIMO_API_KEY": "your-mimo-key",
97
101
  "DEEPGRAM_API_KEY": "your-deepgram-key",
98
102
  "ASSEMBLYAI_API_KEY": "your-assemblyai-key",
99
- "GROQ_API_KEY": "your-groq-key"
103
+ "GROQ_API_KEY": "your-groq-key",
104
+ "MINIMAX_API_KEY": "your-minimax-key"
100
105
  }
101
106
  }
102
107
  }
@@ -125,7 +130,8 @@ You can configure the MCP server globally (for all projects) or at the project l
125
130
  "MIMO_API_KEY": "your-mimo-key",
126
131
  "DEEPGRAM_API_KEY": "your-deepgram-key",
127
132
  "ASSEMBLYAI_API_KEY": "your-assemblyai-key",
128
- "GROQ_API_KEY": "your-groq-key"
133
+ "GROQ_API_KEY": "your-groq-key",
134
+ "MINIMAX_API_KEY": "your-minimax-key"
129
135
  }
130
136
  }
131
137
  }
@@ -214,7 +220,8 @@ Use `npx -y video-context-mcp-server@latest` as the command instead of `video-co
214
220
  "MIMO_API_KEY": "your-mimo-key",
215
221
  "DEEPGRAM_API_KEY": "your-deepgram-key",
216
222
  "ASSEMBLYAI_API_KEY": "your-assemblyai-key",
217
- "GROQ_API_KEY": "your-groq-key"
223
+ "GROQ_API_KEY": "your-groq-key",
224
+ "MINIMAX_API_KEY": "your-minimax-key"
218
225
  }
219
226
  }
220
227
  }
@@ -233,6 +240,7 @@ claude mcp add \
233
240
  --env DEEPGRAM_API_KEY=your-deepgram-key \
234
241
  --env ASSEMBLYAI_API_KEY=your-assemblyai-key \
235
242
  --env GROQ_API_KEY=your-groq-key \
243
+ --env MINIMAX_API_KEY=your-minimax-key \
236
244
  videoMcp -- npx -y video-context-mcp-server@latest
237
245
  ```
238
246
 
@@ -244,14 +252,19 @@ claude mcp add \
244
252
 
245
253
  ## Available Tools
246
254
 
247
- | Tool | Description | Key Parameters |
248
- | ------------------ | ------------------------------------ | ------------------------------------------------------------------------------------------- |
249
- | `analyze_video` | Ask questions about video content | `videoPath`, `question`, `provider?` |
250
- | `summarize_video` | Generate a structured video summary | `videoPath`, `provider?` |
251
- | `extract_frames` | Extract frames from a video | `videoPath`, `mode`, `count/intervalSec/timestamps/sceneThreshold`, `maxImages?`, `offset?` |
252
- | `search_timestamp` | Find when something specific happens | `videoPath`, `query`, `provider?` |
253
- | `get_video_info` | Get video metadata | `videoPath` |
254
- | `transcribe_video` | Transcribe audio/speech from a video | `videoPath`, `provider?`, `language?`, `diarize?`, `translate?`, `outputFormat?` |
255
+ | Tool | Description | Key Parameters |
256
+ | ----------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
257
+ | `analyze_video` | Ask questions about video content | `videoPath`, `question`, `provider?` |
258
+ | `summarize_video` | Generate a structured video summary | `videoPath`, `provider?` |
259
+ | `extract_frames` | Extract frames from a video | `videoPath`, `mode`, `count/intervalSec/timestamps/sceneThreshold`, `maxImages?`, `offset?` |
260
+ | `search_timestamp` | Find when something specific happens | `videoPath`, `query`, `provider?` |
261
+ | `get_video_info` | Get video metadata | `videoPath` |
262
+ | `transcribe_video` | Transcribe audio/speech from a video | `videoPath`, `provider?`, `language?`, `diarize?`, `translate?`, `outputFormat?` |
263
+ | `text_to_speech` | Convert text to natural speech audio | `text`, `model?`, `voice_id?`, `speed?`, `vol?`, `pitch?`, `emotion?`, `format?` |
264
+ | `generate_image` | Generate images from a text prompt | `prompt`, `model?`, `aspect_ratio?`, `n?`, `prompt_optimizer?` |
265
+ | `generate_video` | Generate video from text/image prompt (returns task_id) | `prompt?`, `model?`, `first_frame_image?`, `duration?`, `resolution?` |
266
+ | `generate_music` | Generate music from prompt + lyrics | `prompt`, `lyrics?`, `model?`, `is_instrumental?`, `lyrics_optimizer?` |
267
+ | `query_generation_task` | Poll async generation task status + download result | `task_id` |
255
268
 
256
269
  All tools accept local file paths, `file://` URIs, and remote `http(s)` URLs. Remote videos are downloaded automatically.
257
270
 
@@ -295,6 +308,8 @@ All tools accept local file paths, `file://` URIs, and remote `http(s)` URLs. Re
295
308
 
296
309
  ## API Keys
297
310
 
311
+ If you need a MiniMax API key, get it from the [MiniMax interface key page](https://platform.minimax.io/user-center/basic-information/interface-key). It is used for the media generation tools: text-to-speech, image generation, video generation, music generation, and generation task polling.
312
+
298
313
  ### Video Providers
299
314
 
300
315
  Set all keys to get the full fallback chain. The server will try Gemini first, then GLM, then Qwen, then Kimi, then MiMo, so having all keys ensures it never gets stuck without a working provider:
@@ -603,6 +618,14 @@ Set `AUDIO_MCP_DEFAULT_PROVIDER` to change the default.
603
618
  | `AUDIO_MCP_DEFAULT_PROVIDER` | Default audio provider: `deepgram`, `assemblyai`, `groq`, or `gemini`. Falls back in that order when the selected key is missing. | `deepgram` |
604
619
  | `AUDIO_ENHANCE_VIDEO_ANALYSIS` | Inject audio transcripts into `analyze_video`/`summarize_video` prompts (GLM/Kimi/Qwen/MiMo). `auto` = transcribe when audio track detected; `true` = always; `false` = disabled. | `auto` |
605
620
 
621
+ ### Media Generation (MiniMax)
622
+
623
+ | Variable | Description | Default |
624
+ | ---------------------------- | -------------------------------------------- | --------------------------- |
625
+ | `MINIMAX_API_KEY` | MiniMax API key for all generation tools | — (required for generation) |
626
+ | `MINIMAX_BASE_URL` | Override MiniMax API base URL | `https://api.minimax.io` |
627
+ | `MINIMAX_REQUEST_TIMEOUT_MS` | Client-side timeout for MiniMax API requests | `240000` (4 min) |
628
+
606
629
  ### Caching
607
630
 
608
631
  Downloaded videos, extracted frames, audio tracks, and transcripts are cached together in a persistent per-video directory. Subsequent tool calls that reference the same video reuse cached artifacts instead of re-running ffmpeg, re-downloading, or re-calling audio provider APIs.
@@ -814,13 +837,14 @@ Restart the MCP server. **Keep your cookies file private** — never commit it t
814
837
 
815
838
  ## Pro
816
839
 
817
- The free tier covers all core functionality. A **pro license** unlocks three power features:
840
+ The free tier covers all core functionality. A **pro license** unlocks four power features:
818
841
 
819
842
  | Feature | Free | Pro |
820
843
  | ------------------------------------------------ | ------------------- | --------------------------------- |
821
844
  | 🖼️ Extended frame extraction (`summarize_video`) | Capped at 50 frames | Default 100; set `0` for uncapped |
822
845
  | 🌐 Platform video downloads | YouTube only | Almost all video platforms |
823
846
  | 📺 Download resolution | Capped at 720p | Uncapped |
847
+ | 🗣️ Media generation (TTS, image, video, music) | Not available | Full access |
824
848
 
825
849
  > Local files and direct `http(s)://` video URLs work for all users — the platform gate only applies to yt-dlp URLs (YouTube, Vimeo, TikTok, Bilibili, etc.).
826
850
 
@@ -846,8 +870,6 @@ Add `VIDEO_MCP_LICENSE_KEY` to your MCP config `env` block and restart the serve
846
870
  }
847
871
  ```
848
872
 
849
- ---
850
-
851
873
  ## Troubleshooting
852
874
 
853
875
  - **`video-context-mcp: command not found`** (or `vmcp: command not found`) — Make sure Node.js is installed (`node -v`). Re-run `npm install -g video-context-mcp-server`, or use `npx -y video-context-mcp-server@latest` if global binaries aren't on PATH.
@@ -889,6 +911,7 @@ Use this `.vscode/mcp.json` to run the local build (never commit this file):
889
911
  "DEEPGRAM_API_KEY": "your-deepgram-key",
890
912
  "ASSEMBLYAI_API_KEY": "your-assemblyai-key",
891
913
  "GROQ_API_KEY": "your-groq-key",
914
+ "MINIMAX_API_KEY": "your-minimax-key",
892
915
  "AUDIO_MCP_DEFAULT_PROVIDER": "deepgram",
893
916
  "AUDIO_ENHANCE_VIDEO_ANALYSIS": "auto",
894
917
  "VIDEO_MCP_CACHE_TTL_MINUTES": "43200",
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.0.3";
1
+ export declare const VERSION = "1.1.1";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by scripts/sync-version.ts — do not edit
2
- export const VERSION = '1.0.3';
2
+ export const VERSION = '1.1.1';
3
3
  //# sourceMappingURL=version.js.map
package/dist/index.js CHANGED
@@ -8,6 +8,11 @@ import { extractFramesTool } from './tools/extractFrames.js';
8
8
  import { searchTimestampTool } from './tools/searchTimestamp.js';
9
9
  import { getVideoInfoTool } from './tools/getVideoInfo.js';
10
10
  import { transcribeVideoTool } from './tools/transcribeVideo.js';
11
+ import { textToSpeechTool } from './tools/textToSpeech.js';
12
+ import { generateImageTool } from './tools/generateImage.js';
13
+ import { generateVideoTool } from './tools/generateVideo.js';
14
+ import { generateMusicTool } from './tools/generateMusic.js';
15
+ import { queryGenerationTaskTool } from './tools/queryGenerationTask.js';
11
16
  import { setLoggerServer, logProgress } from './utils/logger.js';
12
17
  import { initLicenseValidation } from './utils/license.js';
13
18
  import { sweepStaleTempDirs } from './utils/tempFiles.js';
@@ -16,7 +21,7 @@ import { resolveYtDlpPath } from './utils/ytDlpPath.js';
16
21
  import { registerSessionCleanup, sweepStaleRelayKeys, } from './services/s3Relay.js';
17
22
  import { triggerUpdateCheck, waitForUpdateCheck, wrapWithUpdateNotice, } from './utils/updateCheck.js';
18
23
  import { VERSION } from './generated/version.js';
19
- import { analyzeVideoSchema, summarizeVideoSchema, extractFramesSchema, searchTimestampSchema, getVideoInfoSchema, transcribeVideoSchema, } from './tools/schemas.js';
24
+ import { analyzeVideoSchema, summarizeVideoSchema, extractFramesSchema, searchTimestampSchema, getVideoInfoSchema, transcribeVideoSchema, textToSpeechSchema, generateImageSchema, generateVideoSchema, generateMusicSchema, queryGenerationTaskSchema, } from './tools/schemas.js';
20
25
  /**
21
26
  * Main entry point for the Video Context MCP Server
22
27
  * Creates an MCP server, registers all video analysis tools, and connects via stdio
@@ -109,6 +114,36 @@ async function main() {
109
114
  description: 'Extract audio from a video and transcribe it using a dedicated speech-to-text provider (Deepgram, AssemblyAI, Groq/Whisper, or Gemini). Supports speaker diarization and translation to English.',
110
115
  inputSchema: transcribeVideoSchema,
111
116
  }, withUpdateCheck(transcribeVideoTool));
117
+ // Tool 7: text_to_speech - Convert text to speech using MiniMax TTS
118
+ server.registerTool('text_to_speech', {
119
+ title: 'Text to Speech',
120
+ description: 'Convert text to natural speech audio using MiniMax TTS. Supports 40+ languages, multiple voices, and adjustable speed/pitch/volume.',
121
+ inputSchema: textToSpeechSchema,
122
+ }, withUpdateCheck(textToSpeechTool));
123
+ // Tool 8: generate_image - Generate images from text prompt
124
+ server.registerTool('generate_image', {
125
+ title: 'Generate Image',
126
+ description: 'Generate images from a text prompt using MiniMax image-01 model. Supports custom aspect ratios and batch generation.',
127
+ inputSchema: generateImageSchema,
128
+ }, withUpdateCheck(generateImageTool));
129
+ // Tool 9: generate_video - Generate video from text/image prompt
130
+ server.registerTool('generate_video', {
131
+ title: 'Generate Video',
132
+ description: 'Generate a video from a text prompt and/or first-frame image using MiniMax Hailuo models. Returns a task_id; use query_generation_task to poll for completion.',
133
+ inputSchema: generateVideoSchema,
134
+ }, withUpdateCheck(generateVideoTool));
135
+ // Tool 10: generate_music - Generate music from prompt + lyrics
136
+ server.registerTool('generate_music', {
137
+ title: 'Generate Music',
138
+ description: 'Generate music from a prompt and optional lyrics using MiniMax music-2.6. Supports instrumental mode and auto-lyrics generation.',
139
+ inputSchema: generateMusicSchema,
140
+ }, withUpdateCheck(generateMusicTool));
141
+ // Tool 11: query_generation_task - Poll async generation task status
142
+ server.registerTool('query_generation_task', {
143
+ title: 'Query Generation Task',
144
+ description: 'Query the status of an asynchronous generation task (e.g., video generation). Returns task status and downloads the result when complete.',
145
+ inputSchema: queryGenerationTaskSchema,
146
+ }, withUpdateCheck(queryGenerationTaskTool));
112
147
  // Connect to VS Code via stdio transport
113
148
  const transport = new StdioServerTransport();
114
149
  await server.connect(transport);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * MiniMax API Client
3
+ * Handles media generation: TTS, image, video, and music.
4
+ *
5
+ * API Specification:
6
+ * - Base URL: https://api.minimax.io
7
+ * - Auth: Authorization: Bearer <api_key>
8
+ * - TTS: POST /v1/t2a_v2 (sync, hex or url output)
9
+ * - Image: POST /v1/image_generation (sync, url or base64 output)
10
+ * - Video: POST /v1/video_generation (async → task_id)
11
+ * - Music: POST /v1/music_generation (sync, hex or url output)
12
+ * - Query: GET /v1/query/video_generation?task_id=X
13
+ * - Download: GET /v1/files/retrieve?file_id=X
14
+ */
15
+ import type { TtsParams, TtsResult, ImageParams, ImageResult, VideoParams, VideoTaskResult, MusicParams, MusicResult, FileDownloadResult } from '../types/media.js';
16
+ export interface MinimaxClientOptions {
17
+ apiKey: string;
18
+ baseURL?: string;
19
+ }
20
+ export declare class MinimaxClient {
21
+ private apiKey;
22
+ private baseURL;
23
+ constructor(options: MinimaxClientOptions);
24
+ textToSpeech(params: TtsParams): Promise<TtsResult>;
25
+ generateImage(params: ImageParams): Promise<ImageResult>;
26
+ createVideoTask(params: VideoParams): Promise<{
27
+ taskId: string;
28
+ }>;
29
+ queryVideoTask(taskId: string): Promise<VideoTaskResult>;
30
+ downloadFile(fileId: string): Promise<FileDownloadResult>;
31
+ generateMusic(params: MusicParams): Promise<MusicResult>;
32
+ private buildTtsBody;
33
+ private buildTtsVoiceSetting;
34
+ private parseTtsResult;
35
+ private buildMusicBody;
36
+ private parseMusicResult;
37
+ private post;
38
+ private get;
39
+ private downloadAsBuffer;
40
+ private assertSuccess;
41
+ }
42
+ /**
43
+ * Create a MinimaxClient if the API key is available.
44
+ * @param apiKey - MiniMax API key (MINIMAX_API_KEY env var)
45
+ * @param baseURL - Optional custom base URL
46
+ * @returns MinimaxClient instance or null if no API key
47
+ */
48
+ export declare function createMinimaxClient(apiKey?: string, baseURL?: string): MinimaxClient | null;
49
+ //# sourceMappingURL=minimaxClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimaxClient.d.ts","sourceRoot":"","sources":["../../src/services/minimaxClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,WAAW,EACX,WAAW,EACX,WAAW,EACX,eAAe,EACf,WAAW,EACX,WAAW,EACX,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AA6E1B,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;gBAEX,OAAO,EAAE,oBAAoB;IAOnC,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAcnD,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAqCxD,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA6BjE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA0BxD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAqBzD,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAc9D,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,gBAAgB;YAgBV,IAAI;YA4CJ,GAAG;YA0CH,gBAAgB;IA4B9B,OAAO,CAAC,aAAa;CAOtB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,aAAa,GAAG,IAAI,CAItB"}
@@ -0,0 +1,314 @@
1
+ /**
2
+ * MiniMax API Client
3
+ * Handles media generation: TTS, image, video, and music.
4
+ *
5
+ * API Specification:
6
+ * - Base URL: https://api.minimax.io
7
+ * - Auth: Authorization: Bearer <api_key>
8
+ * - TTS: POST /v1/t2a_v2 (sync, hex or url output)
9
+ * - Image: POST /v1/image_generation (sync, url or base64 output)
10
+ * - Video: POST /v1/video_generation (async → task_id)
11
+ * - Music: POST /v1/music_generation (sync, hex or url output)
12
+ * - Query: GET /v1/query/video_generation?task_id=X
13
+ * - Download: GET /v1/files/retrieve?file_id=X
14
+ */
15
+ // ── Constants ─────────────────────────────────────────────────────────────
16
+ const MINIMAX_BASE_URL = 'https://api.minimax.io';
17
+ /** Client-side request timeout in ms. Default: 4 minutes.
18
+ * Override via MINIMAX_REQUEST_TIMEOUT_MS env var (milliseconds). */
19
+ const MINIMAX_REQUEST_TIMEOUT_MS = process.env.MINIMAX_REQUEST_TIMEOUT_MS
20
+ ? Number(process.env.MINIMAX_REQUEST_TIMEOUT_MS)
21
+ : 4 * 60 * 1000;
22
+ const MINIMAX_TIMEOUT_LABEL = `${Math.round(MINIMAX_REQUEST_TIMEOUT_MS / 60000)} minutes`;
23
+ export class MinimaxClient {
24
+ apiKey;
25
+ baseURL;
26
+ constructor(options) {
27
+ this.apiKey = options.apiKey;
28
+ this.baseURL = options.baseURL || MINIMAX_BASE_URL;
29
+ }
30
+ // ── Text-to-Speech ────────────────────────────────────────────────────
31
+ async textToSpeech(params) {
32
+ const body = this.buildTtsBody(params);
33
+ const data = await this.post('/v1/t2a_v2', body);
34
+ this.assertSuccess(data.base_resp);
35
+ if (!data.data?.audio) {
36
+ throw new Error('MiniMax TTS returned no audio data');
37
+ }
38
+ return this.parseTtsResult(data, params);
39
+ }
40
+ // ── Image Generation ──────────────────────────────────────────────────
41
+ async generateImage(params) {
42
+ const body = {
43
+ model: params.model ?? 'image-01',
44
+ prompt: params.prompt,
45
+ response_format: 'url',
46
+ n: params.n ?? 1,
47
+ prompt_optimizer: params.prompt_optimizer ?? true,
48
+ };
49
+ if (params.aspect_ratio) {
50
+ body.aspect_ratio = params.aspect_ratio;
51
+ }
52
+ const data = await this.post('/v1/image_generation', body);
53
+ this.assertSuccess(data.base_resp);
54
+ const urls = data.data?.image_urls;
55
+ if (!urls || urls.length === 0) {
56
+ throw new Error('MiniMax image generation returned no images');
57
+ }
58
+ // Download each image and convert to base64
59
+ const images = await Promise.all(urls.map(async (url) => {
60
+ const buffer = await this.downloadAsBuffer(url);
61
+ return {
62
+ base64: buffer.toString('base64'),
63
+ mimeType: 'image/jpeg',
64
+ };
65
+ }));
66
+ return { images };
67
+ }
68
+ // ── Video Generation (async) ──────────────────────────────────────────
69
+ async createVideoTask(params) {
70
+ if (!params.prompt && !params.first_frame_image) {
71
+ throw new Error('At least one of prompt or first_frame_image is required');
72
+ }
73
+ const body = {
74
+ model: params.model ?? 'T2V-01',
75
+ prompt_optimizer: params.prompt_optimizer ?? true,
76
+ };
77
+ if (params.prompt)
78
+ body.prompt = params.prompt;
79
+ if (params.first_frame_image)
80
+ body.first_frame_image = params.first_frame_image;
81
+ if (params.duration)
82
+ body.duration = params.duration;
83
+ if (params.resolution)
84
+ body.resolution = params.resolution;
85
+ const data = await this.post('/v1/video_generation', body);
86
+ this.assertSuccess(data.base_resp);
87
+ if (!data.task_id) {
88
+ throw new Error('MiniMax video generation returned no task_id');
89
+ }
90
+ return { taskId: data.task_id };
91
+ }
92
+ async queryVideoTask(taskId) {
93
+ const data = await this.get(`/v1/query/video_generation?task_id=${encodeURIComponent(taskId)}`);
94
+ this.assertSuccess(data.base_resp);
95
+ const result = {
96
+ taskId: data.task_id ?? taskId,
97
+ status: data.status ?? 'Processing',
98
+ };
99
+ if (data.file_id)
100
+ result.fileId = data.file_id;
101
+ if (data.video_width)
102
+ result.videoWidth = data.video_width;
103
+ if (data.video_height)
104
+ result.videoHeight = data.video_height;
105
+ // If successful, fetch the download URL
106
+ if (result.status === 'Success' && result.fileId) {
107
+ const fileResult = await this.downloadFile(result.fileId);
108
+ result.downloadUrl = fileResult.downloadUrl;
109
+ }
110
+ return result;
111
+ }
112
+ // ── File Download ─────────────────────────────────────────────────────
113
+ async downloadFile(fileId) {
114
+ const data = await this.get(`/v1/files/retrieve?file_id=${encodeURIComponent(fileId)}`);
115
+ this.assertSuccess(data.base_resp);
116
+ if (!data.file?.download_url) {
117
+ throw new Error('MiniMax file retrieval returned no download URL');
118
+ }
119
+ return {
120
+ fileId: data.file.file_id ?? fileId,
121
+ filename: data.file.filename ?? 'output',
122
+ downloadUrl: data.file.download_url,
123
+ bytes: data.file.bytes ?? 0,
124
+ createdAt: data.file.created_at ?? 0,
125
+ };
126
+ }
127
+ // ── Music Generation ──────────────────────────────────────────────────
128
+ async generateMusic(params) {
129
+ const body = this.buildMusicBody(params);
130
+ const data = await this.post('/v1/music_generation', body);
131
+ this.assertSuccess(data.base_resp);
132
+ if (!data.data?.audio) {
133
+ throw new Error('MiniMax music generation returned no audio data');
134
+ }
135
+ return this.parseMusicResult(data, params);
136
+ }
137
+ // ── Body builders (reduce cyclomatic complexity) ──────────────────────
138
+ buildTtsBody(params) {
139
+ const body = {
140
+ model: params.model ?? 'speech-02-hd',
141
+ text: params.text,
142
+ stream: false,
143
+ voice_setting: this.buildTtsVoiceSetting(params),
144
+ audio_setting: {
145
+ sample_rate: params.sample_rate ?? 32000,
146
+ bitrate: params.bitrate ?? 128000,
147
+ format: params.format ?? 'mp3',
148
+ channel: params.channel ?? 1,
149
+ },
150
+ output_format: 'hex',
151
+ };
152
+ if (params.language_boost) {
153
+ body.language_boost = params.language_boost;
154
+ }
155
+ return body;
156
+ }
157
+ buildTtsVoiceSetting(params) {
158
+ const setting = {
159
+ voice_id: params.voice_id ?? 'female-shaonv',
160
+ speed: params.speed ?? 1.0,
161
+ vol: params.vol ?? 1.0,
162
+ pitch: params.pitch ?? 0,
163
+ };
164
+ if (params.emotion)
165
+ setting.emotion = params.emotion;
166
+ return setting;
167
+ }
168
+ parseTtsResult(data, params) {
169
+ const audioBuffer = Buffer.from(data.data.audio, 'hex');
170
+ return {
171
+ audioBuffer,
172
+ duration: data.extra_info?.audio_length ?? 0,
173
+ sampleRate: data.extra_info?.audio_sample_rate ?? params.sample_rate ?? 32000,
174
+ format: data.extra_info?.audio_format ?? params.format ?? 'mp3',
175
+ };
176
+ }
177
+ buildMusicBody(params) {
178
+ const body = {
179
+ model: params.model ?? 'music-2.6',
180
+ prompt: params.prompt,
181
+ stream: false,
182
+ output_format: 'hex',
183
+ audio_setting: {
184
+ sample_rate: params.sample_rate ?? 32000,
185
+ bitrate: params.bitrate ?? 128000,
186
+ format: params.format ?? 'mp3',
187
+ },
188
+ };
189
+ if (params.lyrics)
190
+ body.lyrics = params.lyrics;
191
+ if (params.is_instrumental !== undefined)
192
+ body.is_instrumental = params.is_instrumental;
193
+ if (params.lyrics_optimizer !== undefined)
194
+ body.lyrics_optimizer = params.lyrics_optimizer;
195
+ return body;
196
+ }
197
+ parseMusicResult(data, params) {
198
+ const audioBuffer = Buffer.from(data.data.audio, 'hex');
199
+ return {
200
+ audioBuffer,
201
+ duration: data.extra_info?.music_duration ?? 0,
202
+ sampleRate: data.extra_info?.music_sample_rate ?? params.sample_rate ?? 32000,
203
+ format: params.format ?? 'mp3',
204
+ };
205
+ }
206
+ // ── HTTP helpers ──────────────────────────────────────────────────────
207
+ async post(path, body) {
208
+ const url = `${this.baseURL}${path}`;
209
+ const controller = new AbortController();
210
+ const timeoutId = setTimeout(() => controller.abort(), MINIMAX_REQUEST_TIMEOUT_MS);
211
+ try {
212
+ const response = await fetch(url, {
213
+ method: 'POST',
214
+ headers: {
215
+ 'Content-Type': 'application/json',
216
+ Authorization: `Bearer ${this.apiKey}`,
217
+ },
218
+ body: JSON.stringify(body),
219
+ signal: controller.signal,
220
+ });
221
+ const text = await response.text();
222
+ let data;
223
+ try {
224
+ data = JSON.parse(text);
225
+ }
226
+ catch (parseError) {
227
+ throw new Error(`MiniMax API returned non-JSON response (HTTP ${response.status}): ${text.substring(0, 200)}`, { cause: parseError });
228
+ }
229
+ return data;
230
+ }
231
+ catch (error) {
232
+ if (error instanceof Error && error.name === 'AbortError') {
233
+ throw new Error(`MiniMax API request timed out after ${MINIMAX_TIMEOUT_LABEL}`, { cause: error });
234
+ }
235
+ throw error;
236
+ }
237
+ finally {
238
+ clearTimeout(timeoutId);
239
+ }
240
+ }
241
+ async get(path) {
242
+ const url = `${this.baseURL}${path}`;
243
+ const controller = new AbortController();
244
+ const timeoutId = setTimeout(() => controller.abort(), MINIMAX_REQUEST_TIMEOUT_MS);
245
+ try {
246
+ const response = await fetch(url, {
247
+ method: 'GET',
248
+ headers: {
249
+ Authorization: `Bearer ${this.apiKey}`,
250
+ },
251
+ signal: controller.signal,
252
+ });
253
+ const text = await response.text();
254
+ let data;
255
+ try {
256
+ data = JSON.parse(text);
257
+ }
258
+ catch (parseError) {
259
+ throw new Error(`MiniMax API returned non-JSON response (HTTP ${response.status}): ${text.substring(0, 200)}`, { cause: parseError });
260
+ }
261
+ return data;
262
+ }
263
+ catch (error) {
264
+ if (error instanceof Error && error.name === 'AbortError') {
265
+ throw new Error(`MiniMax API request timed out after ${MINIMAX_TIMEOUT_LABEL}`, { cause: error });
266
+ }
267
+ throw error;
268
+ }
269
+ finally {
270
+ clearTimeout(timeoutId);
271
+ }
272
+ }
273
+ async downloadAsBuffer(url) {
274
+ const controller = new AbortController();
275
+ const timeoutId = setTimeout(() => controller.abort(), MINIMAX_REQUEST_TIMEOUT_MS);
276
+ try {
277
+ const response = await fetch(url, { signal: controller.signal });
278
+ if (!response.ok) {
279
+ throw new Error(`Failed to download from ${url}: HTTP ${response.status}`);
280
+ }
281
+ const arrayBuffer = await response.arrayBuffer();
282
+ return Buffer.from(arrayBuffer);
283
+ }
284
+ catch (error) {
285
+ if (error instanceof Error && error.name === 'AbortError') {
286
+ throw new Error(`Download timed out after ${MINIMAX_TIMEOUT_LABEL}`, {
287
+ cause: error,
288
+ });
289
+ }
290
+ throw error;
291
+ }
292
+ finally {
293
+ clearTimeout(timeoutId);
294
+ }
295
+ }
296
+ assertSuccess(baseResp) {
297
+ if (baseResp.status_code !== 0) {
298
+ throw new Error(`MiniMax API error ${baseResp.status_code}: ${baseResp.status_msg}`);
299
+ }
300
+ }
301
+ }
302
+ /**
303
+ * Create a MinimaxClient if the API key is available.
304
+ * @param apiKey - MiniMax API key (MINIMAX_API_KEY env var)
305
+ * @param baseURL - Optional custom base URL
306
+ * @returns MinimaxClient instance or null if no API key
307
+ */
308
+ export function createMinimaxClient(apiKey, baseURL) {
309
+ const key = apiKey || process.env.MINIMAX_API_KEY;
310
+ if (!key)
311
+ return null;
312
+ return new MinimaxClient({ apiKey: key, baseURL });
313
+ }
314
+ //# sourceMappingURL=minimaxClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimaxClient.js","sourceRoot":"","sources":["../../src/services/minimaxClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Tool: generate_image
3
+ * Generate images from a text prompt using MiniMax image-01
4
+ */
5
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
6
+ import { generateImageSchema } from './schemas.js';
7
+ type GenerateImageParams = import('zod').infer<typeof generateImageSchema>;
8
+ export declare const generateImageTool: (params: GenerateImageParams) => Promise<CallToolResult>;
9
+ export {};
10
+ //# sourceMappingURL=generateImage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateImage.d.ts","sourceRoot":"","sources":["../../src/tools/generateImage.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,CAsDxB,CAAA"}