video-context-mcp-server 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -22
- 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/kimiClient.d.ts.map +1 -1
- package/dist/services/kimiClient.js +12 -4
- package/dist/services/kimiClient.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/services/providerRouter.js +1 -1
- 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 +192 -3
- 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
|
@@ -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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: generate_image
|
|
3
|
+
* Generate images from a text prompt using MiniMax image-01
|
|
4
|
+
*/
|
|
5
|
+
import { writeFile } from 'fs/promises';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { MinimaxClient } from '../services/minimaxClient.js';
|
|
8
|
+
import { isPro, proNotice } from '../utils/license.js';
|
|
9
|
+
import { createTempDir } from '../utils/tempFiles.js';
|
|
10
|
+
import { logProgress } from '../utils/logger.js';
|
|
11
|
+
function proGatedError() {
|
|
12
|
+
return {
|
|
13
|
+
isError: true,
|
|
14
|
+
content: [{ type: 'text', text: proNotice('Image generation') }],
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function missingKeyError() {
|
|
18
|
+
return {
|
|
19
|
+
isError: true,
|
|
20
|
+
content: [
|
|
21
|
+
{
|
|
22
|
+
type: 'text',
|
|
23
|
+
text: 'MINIMAX_API_KEY is not configured. Please set it in your MCP server environment variables.',
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export const generateImageTool = async (params) => {
|
|
29
|
+
if (!isPro())
|
|
30
|
+
return proGatedError();
|
|
31
|
+
const apiKey = process.env.MINIMAX_API_KEY;
|
|
32
|
+
if (!apiKey)
|
|
33
|
+
return missingKeyError();
|
|
34
|
+
try {
|
|
35
|
+
await logProgress('Generating images with MiniMax...');
|
|
36
|
+
const client = new MinimaxClient({ apiKey });
|
|
37
|
+
const result = await client.generateImage(params);
|
|
38
|
+
const tempDir = await createTempDir();
|
|
39
|
+
const content = [];
|
|
40
|
+
// Save each image to disk and add to response
|
|
41
|
+
const savePromises = result.images.map(async (img, i) => {
|
|
42
|
+
const filePath = path.join(tempDir, `image_${Date.now()}_${i}.jpg`);
|
|
43
|
+
await writeFile(filePath, Buffer.from(img.base64, 'base64'));
|
|
44
|
+
return filePath;
|
|
45
|
+
});
|
|
46
|
+
const filePaths = await Promise.all(savePromises);
|
|
47
|
+
// Add inline images
|
|
48
|
+
for (const img of result.images) {
|
|
49
|
+
content.push({
|
|
50
|
+
type: 'image',
|
|
51
|
+
data: img.base64,
|
|
52
|
+
mimeType: img.mimeType,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
// Add metadata text
|
|
56
|
+
content.push({
|
|
57
|
+
type: 'text',
|
|
58
|
+
text: [
|
|
59
|
+
`Generated ${result.images.length} image(s)`,
|
|
60
|
+
`Saved to: ${filePaths.join(', ')}`,
|
|
61
|
+
].join('\n'),
|
|
62
|
+
});
|
|
63
|
+
await logProgress(`Generated ${result.images.length} image(s)`);
|
|
64
|
+
return { content };
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
return {
|
|
68
|
+
isError: true,
|
|
69
|
+
content: [
|
|
70
|
+
{
|
|
71
|
+
type: 'text',
|
|
72
|
+
text: `Error generating image: ${error instanceof Error ? error.message : String(error)}`,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=generateImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateImage.js","sourceRoot":"","sources":["../../src/tools/generateImage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: generate_music
|
|
3
|
+
* Generate music from a prompt and optional lyrics using MiniMax music-2.6
|
|
4
|
+
*/
|
|
5
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
6
|
+
import { generateMusicSchema } from './schemas.js';
|
|
7
|
+
type GenerateMusicParams = import('zod').infer<typeof generateMusicSchema>;
|
|
8
|
+
export declare const generateMusicTool: (params: GenerateMusicParams) => Promise<CallToolResult>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=generateMusic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateMusic.d.ts","sourceRoot":"","sources":["../../src/tools/generateMusic.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAKxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,KAAK,mBAAmB,GAAG,OAAO,KAAK,EAAE,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAqB1E,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,mBAAmB,KAC1B,OAAO,CAAC,cAAc,CAiDxB,CAAA"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: generate_music
|
|
3
|
+
* Generate music from a prompt and optional lyrics using MiniMax music-2.6
|
|
4
|
+
*/
|
|
5
|
+
import { writeFile } from 'fs/promises';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { MinimaxClient } from '../services/minimaxClient.js';
|
|
8
|
+
import { isPro, proNotice } from '../utils/license.js';
|
|
9
|
+
import { createTempDir } from '../utils/tempFiles.js';
|
|
10
|
+
import { logProgress } from '../utils/logger.js';
|
|
11
|
+
function proGatedError() {
|
|
12
|
+
return {
|
|
13
|
+
isError: true,
|
|
14
|
+
content: [{ type: 'text', text: proNotice('Music generation') }],
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function missingKeyError() {
|
|
18
|
+
return {
|
|
19
|
+
isError: true,
|
|
20
|
+
content: [
|
|
21
|
+
{
|
|
22
|
+
type: 'text',
|
|
23
|
+
text: 'MINIMAX_API_KEY is not configured. Please set it in your MCP server environment variables.',
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export const generateMusicTool = async (params) => {
|
|
29
|
+
if (!isPro())
|
|
30
|
+
return proGatedError();
|
|
31
|
+
const apiKey = process.env.MINIMAX_API_KEY;
|
|
32
|
+
if (!apiKey)
|
|
33
|
+
return missingKeyError();
|
|
34
|
+
try {
|
|
35
|
+
await logProgress('Generating music with MiniMax...');
|
|
36
|
+
const client = new MinimaxClient({ apiKey });
|
|
37
|
+
const result = await client.generateMusic(params);
|
|
38
|
+
const tempDir = await createTempDir();
|
|
39
|
+
const ext = params.format ?? 'mp3';
|
|
40
|
+
const filePath = path.join(tempDir, `music_${Date.now()}.${ext}`);
|
|
41
|
+
await writeFile(filePath, result.audioBuffer);
|
|
42
|
+
await logProgress(`Music generated. Saved to ${filePath}`);
|
|
43
|
+
const mimeType = `audio/${ext === 'pcm' ? 'pcm' : ext}`;
|
|
44
|
+
return {
|
|
45
|
+
content: [
|
|
46
|
+
{
|
|
47
|
+
type: 'audio',
|
|
48
|
+
data: result.audioBuffer.toString('base64'),
|
|
49
|
+
mimeType,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
type: 'text',
|
|
53
|
+
text: [
|
|
54
|
+
`Music saved to: ${filePath}`,
|
|
55
|
+
`Duration: ${result.duration}ms`,
|
|
56
|
+
`Format: ${result.format}`,
|
|
57
|
+
`Sample rate: ${result.sampleRate}Hz`,
|
|
58
|
+
].join(' | '),
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
return {
|
|
65
|
+
isError: true,
|
|
66
|
+
content: [
|
|
67
|
+
{
|
|
68
|
+
type: 'text',
|
|
69
|
+
text: `Error generating music: ${error instanceof Error ? error.message : String(error)}`,
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=generateMusic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateMusic.js","sourceRoot":"","sources":["../../src/tools/generateMusic.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAKhD,SAAS,aAAa;IACpB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC;KAC1E,CAAA;AACH,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,4FAA4F;aACnG;SACF;KACF,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,MAA2B,EACF,EAAE;IAC3B,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,aAAa,EAAE,CAAA;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAA;IAC1C,IAAI,CAAC,MAAM;QAAE,OAAO,eAAe,EAAE,CAAA;IAErC,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,kCAAkC,CAAC,CAAA;QAErD,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAEjD,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAA;QACrC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,KAAK,CAAA;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QACjE,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QAE7C,MAAM,WAAW,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAA;QAE1D,MAAM,QAAQ,GAAG,SAAS,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;QACvD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,OAAgB;oBACtB,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAC3C,QAAQ;iBACT;gBACD;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,mBAAmB,QAAQ,EAAE;wBAC7B,aAAa,MAAM,CAAC,QAAQ,IAAI;wBAChC,WAAW,MAAM,CAAC,MAAM,EAAE;wBAC1B,gBAAgB,MAAM,CAAC,UAAU,IAAI;qBACtC,CAAC,IAAI,CAAC,KAAK,CAAC;iBACd;aACF;SACF,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAC1F;aACF;SACF,CAAA;IACH,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: generate_video
|
|
3
|
+
* Generate a video from a text prompt and/or first-frame image.
|
|
4
|
+
* Returns a task_id immediately; use query_generation_task to poll.
|
|
5
|
+
*/
|
|
6
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
import { generateVideoSchema } from './schemas.js';
|
|
8
|
+
type GenerateVideoParams = import('zod').infer<typeof generateVideoSchema>;
|
|
9
|
+
export declare const generateVideoTool: (params: GenerateVideoParams) => Promise<CallToolResult>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=generateVideo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateVideo.d.ts","sourceRoot":"","sources":["../../src/tools/generateVideo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAIxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,KAAK,mBAAmB,GAAG,OAAO,KAAK,EAAE,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAqB1E,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,mBAAmB,KAC1B,OAAO,CAAC,cAAc,CAuCxB,CAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: generate_video
|
|
3
|
+
* Generate a video from a text prompt and/or first-frame image.
|
|
4
|
+
* Returns a task_id immediately; use query_generation_task to poll.
|
|
5
|
+
*/
|
|
6
|
+
import { MinimaxClient } from '../services/minimaxClient.js';
|
|
7
|
+
import { isPro, proNotice } from '../utils/license.js';
|
|
8
|
+
import { logProgress } from '../utils/logger.js';
|
|
9
|
+
function proGatedError() {
|
|
10
|
+
return {
|
|
11
|
+
isError: true,
|
|
12
|
+
content: [{ type: 'text', text: proNotice('Video generation') }],
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function missingKeyError() {
|
|
16
|
+
return {
|
|
17
|
+
isError: true,
|
|
18
|
+
content: [
|
|
19
|
+
{
|
|
20
|
+
type: 'text',
|
|
21
|
+
text: 'MINIMAX_API_KEY is not configured. Please set it in your MCP server environment variables.',
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export const generateVideoTool = async (params) => {
|
|
27
|
+
if (!isPro())
|
|
28
|
+
return proGatedError();
|
|
29
|
+
const apiKey = process.env.MINIMAX_API_KEY;
|
|
30
|
+
if (!apiKey)
|
|
31
|
+
return missingKeyError();
|
|
32
|
+
try {
|
|
33
|
+
await logProgress('Submitting video generation task to MiniMax...');
|
|
34
|
+
const client = new MinimaxClient({ apiKey });
|
|
35
|
+
const { taskId } = await client.createVideoTask(params);
|
|
36
|
+
await logProgress(`Video generation task created: ${taskId}`);
|
|
37
|
+
return {
|
|
38
|
+
content: [
|
|
39
|
+
{
|
|
40
|
+
type: 'text',
|
|
41
|
+
text: [
|
|
42
|
+
`Video generation started successfully.`,
|
|
43
|
+
`Task ID: ${taskId}`,
|
|
44
|
+
`Model: ${params.model ?? 'T2V-01'}`,
|
|
45
|
+
'',
|
|
46
|
+
'Use the query_generation_task tool with this task_id to check status and download the result when complete.',
|
|
47
|
+
].join('\n'),
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
return {
|
|
54
|
+
isError: true,
|
|
55
|
+
content: [
|
|
56
|
+
{
|
|
57
|
+
type: 'text',
|
|
58
|
+
text: `Error starting video generation: ${error instanceof Error ? error.message : String(error)}`,
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=generateVideo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateVideo.js","sourceRoot":"","sources":["../../src/tools/generateVideo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAKhD,SAAS,aAAa;IACpB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC;KAC1E,CAAA;AACH,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,4FAA4F;aACnG;SACF;KACF,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,MAA2B,EACF,EAAE;IAC3B,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,aAAa,EAAE,CAAA;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAA;IAC1C,IAAI,CAAC,MAAM;QAAE,OAAO,eAAe,EAAE,CAAA;IAErC,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,gDAAgD,CAAC,CAAA;QAEnE,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;QAEvD,MAAM,WAAW,CAAC,kCAAkC,MAAM,EAAE,CAAC,CAAA;QAE7D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,wCAAwC;wBACxC,YAAY,MAAM,EAAE;wBACpB,UAAU,MAAM,CAAC,KAAK,IAAI,QAAQ,EAAE;wBACpC,EAAE;wBACF,6GAA6G;qBAC9G,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb;aACF;SACF,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,oCAAoC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBACnG;aACF;SACF,CAAA;IACH,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: query_generation_task
|
|
3
|
+
* Query the status of an async generation task (e.g., video generation).
|
|
4
|
+
* Downloads the result when the task is complete.
|
|
5
|
+
*/
|
|
6
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
import { queryGenerationTaskSchema } from './schemas.js';
|
|
8
|
+
type QueryGenerationTaskParams = import('zod').infer<typeof queryGenerationTaskSchema>;
|
|
9
|
+
export declare const queryGenerationTaskTool: (params: QueryGenerationTaskParams) => Promise<CallToolResult>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=queryGenerationTask.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryGenerationTask.d.ts","sourceRoot":"","sources":["../../src/tools/queryGenerationTask.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAIxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAGxD,KAAK,yBAAyB,GAAG,OAAO,KAAK,EAAE,KAAK,CAClD,OAAO,yBAAyB,CACjC,CAAA;AAkDD,eAAO,MAAM,uBAAuB,GAClC,QAAQ,yBAAyB,KAChC,OAAO,CAAC,cAAc,CA4BxB,CAAA"}
|