minimax-mcp-js
Version:
Official MiniMax Model Context Protocol (MCP) JavaScript implementation that provides seamless integration with MiniMax's powerful AI capabilities including image generation, video generation, text-to-speech, and voice cloning APIs.
63 lines (62 loc) • 2.42 kB
JavaScript
import { MinimaxRequestError } from '../exceptions/index.js';
import { ERROR_PROMPT_REQUIRED, ERROR_PREVIEW_TEXT_REQUIRED } from '../const/index.js';
import { buildOutputFile } from '../utils/file.js';
import * as path from 'path';
import * as fs from 'fs';
export class VoiceDesignAPI {
api;
constructor(api) {
this.api = api;
}
async voiceDesign(request) {
// Validate required parameters
if (!request.prompt || request.prompt.trim() === '') {
throw new MinimaxRequestError(ERROR_PROMPT_REQUIRED);
}
if (!request.previewText || request.previewText.trim() === '') {
throw new MinimaxRequestError(ERROR_PREVIEW_TEXT_REQUIRED);
}
// Process output file
const textPrefix = request.prompt.substring(0, 20).replace(/[^\w]/g, '_');
const fileName = `voice_design_${textPrefix}_${Date.now()}`;
const outputFile = buildOutputFile(fileName, request.outputDirectory, 'mp3');
// Prepare request data
const requestData = {
prompt: request.prompt,
preview_text: request.previewText,
voice_id: request.voiceId,
};
try {
// Send request
const response = await this.api.post('/v1/voice_design', requestData);
// Process response
const trialAudioData = response?.trial_audio;
const voiceId = response?.voice_id;
if (!trialAudioData) {
throw new MinimaxRequestError('Could not get audio data from response');
}
// decode and save file
try {
// Convert hex string to binary
const audioBuffer = Buffer.from(trialAudioData, 'hex');
// Ensure output directory exists
const outputDir = path.dirname(outputFile);
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir, { recursive: true });
}
// Write to file
fs.writeFileSync(outputFile, audioBuffer);
return {
voiceId,
outputFile,
};
}
catch (error) {
throw new MinimaxRequestError(`Failed to save audio file: ${String(error)}`);
}
}
catch (err) {
throw err;
}
}
}