UNPKG

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
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; } } }