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.
98 lines (97 loc) • 3.56 kB
JavaScript
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
import yargs from 'yargs';
import { hideBin } from 'yargs/helpers';
import { MCPServer } from './mcp-server.js';
import { MCPSSEServer } from './mcp-sse-server.js';
import { MCPRestServer } from './mcp-rest-server.js';
import { ConfigManager } from './config/ConfigManager.js';
import { DEFAULT_TRANSPORT_MODE, TRANSPORT_MODE_REST, TRANSPORT_MODE_SSE, TRANSPORT_MODE_STDIO, } from './const/index.js';
export async function startMiniMaxMCP(customConfig) {
try {
const config = ConfigManager.getConfig(customConfig);
const mode = config.server?.mode || DEFAULT_TRANSPORT_MODE;
// console.log(`[${new Date().toISOString()}] Using transport mode: ${mode}`);
if (mode === TRANSPORT_MODE_REST) {
config.server = config.server || {};
config.server.port = config.server.port || 3000;
// console.log(`[WARN] No --port specified for REST; defaulting to ${config.server.port}`);
}
switch (mode) {
case TRANSPORT_MODE_REST:
// console.log(`[${new Date().toISOString()}] Starting REST server`);
return new MCPRestServer(config).start();
case TRANSPORT_MODE_SSE:
// console.log(`[${new Date().toISOString()}] Starting SSE server`);
return new MCPSSEServer(config).start();
case TRANSPORT_MODE_STDIO:
default:
// console.log(`[${new Date().toISOString()}] Starting STDIO server`);
return new MCPServer(config).start();
}
}
catch (err) {
// console.error(`[${new Date().toISOString()}] Failed to start server:`, err);
process.exit(1);
}
}
function isCLIEntry() {
if (typeof import.meta.main === 'boolean') {
return import.meta.main;
}
try {
const invoked = process.argv[1] ? fs.realpathSync(process.argv[1]) : '';
const self = fs.realpathSync(fileURLToPath(import.meta.url));
if (invoked === self)
return true;
}
catch {
/* ignore */
}
const invokedName = process.argv[1] ? path.basename(process.argv[1]) : '';
const selfName = path.basename(fileURLToPath(import.meta.url));
if (invokedName === selfName)
return true; // node build/index.js
if (invokedName === 'minimax-mcp-js')
return true; // global bin
return false;
}
if (isCLIEntry()) {
const argv = yargs(hideBin(process.argv))
.option('mode', {
alias: 'm',
type: 'string',
default: DEFAULT_TRANSPORT_MODE,
describe: 'transport mode (rest | sse | stdio)',
})
.option('port', {
alias: 'p',
type: 'number',
default: 3000,
describe: 'port for REST server (only applies when --mode=rest)',
})
.help()
.parseSync();
const customCfg = {
server: { mode: argv.mode },
};
if (argv.port) {
customCfg.server.port = argv.port;
}
startMiniMaxMCP(customCfg).catch((err) => {
// console.error(err);
process.exit(1);
});
}
export * from './types/index.js';
export * from './utils/api.js';
export * from './api/tts.js';
export * from './api/image.js';
export * from './api/video.js';
export * from './api/voice-clone.js';
export * from './api/voice.js';
export * from './exceptions/index.js';
export * from './const/index.js';
export { MCPServer, MCPSSEServer, MCPRestServer, ConfigManager };