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.
- package/README.md +37 -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
|
|
|
@@ -603,6 +616,14 @@ Set `AUDIO_MCP_DEFAULT_PROVIDER` to change the default.
|
|
|
603
616
|
| `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
617
|
| `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
618
|
|
|
619
|
+
### Media Generation (MiniMax)
|
|
620
|
+
|
|
621
|
+
| Variable | Description | Default |
|
|
622
|
+
| ---------------------------- | -------------------------------------------- | --------------------------- |
|
|
623
|
+
| `MINIMAX_API_KEY` | MiniMax API key for all generation tools | — (required for generation) |
|
|
624
|
+
| `MINIMAX_BASE_URL` | Override MiniMax API base URL | `https://api.minimax.io` |
|
|
625
|
+
| `MINIMAX_REQUEST_TIMEOUT_MS` | Client-side timeout for MiniMax API requests | `240000` (4 min) |
|
|
626
|
+
|
|
606
627
|
### Caching
|
|
607
628
|
|
|
608
629
|
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 +835,14 @@ Restart the MCP server. **Keep your cookies file private** — never commit it t
|
|
|
814
835
|
|
|
815
836
|
## Pro
|
|
816
837
|
|
|
817
|
-
The free tier covers all core functionality. A **pro license** unlocks
|
|
838
|
+
The free tier covers all core functionality. A **pro license** unlocks four power features:
|
|
818
839
|
|
|
819
840
|
| Feature | Free | Pro |
|
|
820
841
|
| ------------------------------------------------ | ------------------- | --------------------------------- |
|
|
821
842
|
| 🖼️ Extended frame extraction (`summarize_video`) | Capped at 50 frames | Default 100; set `0` for uncapped |
|
|
822
843
|
| 🌐 Platform video downloads | YouTube only | Almost all video platforms |
|
|
823
844
|
| 📺 Download resolution | Capped at 720p | Uncapped |
|
|
845
|
+
| 🗣️ Media generation (TTS, image, video, music) | Not available | Full access |
|
|
824
846
|
|
|
825
847
|
> 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
848
|
|
|
@@ -846,8 +868,6 @@ Add `VIDEO_MCP_LICENSE_KEY` to your MCP config `env` block and restart the serve
|
|
|
846
868
|
}
|
|
847
869
|
```
|
|
848
870
|
|
|
849
|
-
---
|
|
850
|
-
|
|
851
871
|
## Troubleshooting
|
|
852
872
|
|
|
853
873
|
- **`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 +909,7 @@ Use this `.vscode/mcp.json` to run the local build (never commit this file):
|
|
|
889
909
|
"DEEPGRAM_API_KEY": "your-deepgram-key",
|
|
890
910
|
"ASSEMBLYAI_API_KEY": "your-assemblyai-key",
|
|
891
911
|
"GROQ_API_KEY": "your-groq-key",
|
|
912
|
+
"MINIMAX_API_KEY": "your-minimax-key",
|
|
892
913
|
"AUDIO_MCP_DEFAULT_PROVIDER": "deepgram",
|
|
893
914
|
"AUDIO_ENHANCE_VIDEO_ANALYSIS": "auto",
|
|
894
915
|
"VIDEO_MCP_CACHE_TTL_MINUTES": "43200",
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "1.0
|
|
1
|
+
export declare const VERSION = "1.1.0";
|
|
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"}
|