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.
- package/README.md +39 -16
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/index.js +36 -1
- package/dist/index.js.map +1 -1
- package/dist/services/minimaxClient.d.ts +49 -0
- package/dist/services/minimaxClient.d.ts.map +1 -0
- package/dist/services/minimaxClient.js +314 -0
- package/dist/services/minimaxClient.js.map +1 -0
- package/dist/tools/generateImage.d.ts +10 -0
- package/dist/tools/generateImage.d.ts.map +1 -0
- package/dist/tools/generateImage.js +78 -0
- package/dist/tools/generateImage.js.map +1 -0
- package/dist/tools/generateMusic.d.ts +10 -0
- package/dist/tools/generateMusic.d.ts.map +1 -0
- package/dist/tools/generateMusic.js +75 -0
- package/dist/tools/generateMusic.js.map +1 -0
- package/dist/tools/generateVideo.d.ts +11 -0
- package/dist/tools/generateVideo.d.ts.map +1 -0
- package/dist/tools/generateVideo.js +64 -0
- package/dist/tools/generateVideo.js.map +1 -0
- package/dist/tools/queryGenerationTask.d.ts +11 -0
- package/dist/tools/queryGenerationTask.d.ts.map +1 -0
- package/dist/tools/queryGenerationTask.js +75 -0
- package/dist/tools/queryGenerationTask.js.map +1 -0
- package/dist/tools/schemas.d.ts +94 -0
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +189 -0
- package/dist/tools/schemas.js.map +1 -1
- package/dist/tools/textToSpeech.d.ts +10 -0
- package/dist/tools/textToSpeech.d.ts.map +1 -0
- package/dist/tools/textToSpeech.js +75 -0
- package/dist/tools/textToSpeech.js.map +1 -0
- package/dist/types/media.d.ts +90 -0
- package/dist/types/media.d.ts.map +1 -0
- package/dist/types/media.js +9 -0
- package/dist/types/media.js.map +1 -0
- 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
|
-
-
|
|
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
|
|
248
|
-
|
|
|
249
|
-
| `analyze_video`
|
|
250
|
-
| `summarize_video`
|
|
251
|
-
| `extract_frames`
|
|
252
|
-
| `search_timestamp`
|
|
253
|
-
| `get_video_info`
|
|
254
|
-
| `transcribe_video`
|
|
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
|
|
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.
|
|
1
|
+
export declare const VERSION = "1.1.1";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.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":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAEhF,uBAAuB;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EACL,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAEhD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,
|
|
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"}
|