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.
125 lines (124 loc) • 3.17 kB
JavaScript
import { MiniMaxAPI } from '../utils/api.js';
/**
* Base service abstract class, all services inherit from this class
*/
export class BaseService {
api;
config;
initialized = false;
serviceName;
/**
* Create service instance
* @param api API instance
* @param serviceName Service name
*/
constructor(api, serviceName) {
this.api = api;
this.serviceName = serviceName;
this.config = {}; // Initialize as empty object, will be set in initialize
}
/**
* Get service name
* @returns Service name
*/
getServiceName() {
return this.serviceName;
}
/**
* Initialize service
* @param config Configuration
*/
async initialize(config) {
this.config = config;
this.initialized = true;
}
/**
* Check if service is initialized
* @throws Error when not initialized
*/
checkInitialized() {
if (!this.initialized) {
throw new Error(`服务 ${this.serviceName} 尚未初始化`);
}
}
/**
* Update API instance
* @param api New API instance
*/
updateApi(api) {
this.api = api;
}
}
/**
* Service manager, responsible for managing and accessing all services
*/
export class ServiceManager {
static instance;
services = new Map();
api;
config;
/**
* Create service manager instance
* @param api API instance
* @param config Configuration
*/
constructor(api, config) {
this.api = api;
this.config = config;
}
/**
* Get service manager instance (singleton pattern)
* @param api API instance
* @param config Configuration
* @returns Service manager instance
*/
static getInstance(api, config) {
if (!ServiceManager.instance) {
ServiceManager.instance = new ServiceManager(api, config);
}
return ServiceManager.instance;
}
/**
* Register service
* @param service Service instance
*/
registerService(service) {
service.initialize(this.config);
this.services.set(service.getServiceName(), service);
}
/**
* Get service
* @param serviceName Service name
* @returns Service instance
* @throws Error when service not found
*/
getService(serviceName) {
const service = this.services.get(serviceName);
if (!service) {
throw new Error(`找不到服务: ${serviceName}`);
}
return service;
}
/**
* Update configuration and API instance
* @param config New configuration
*/
updateConfig(config) {
this.config = config;
this.api = new MiniMaxAPI(config);
// Update all services
for (const service of this.services.values()) {
if (service instanceof BaseService) {
service.updateApi(this.api);
}
service.initialize(config);
}
}
/**
* Get all service names
* @returns Array of service names
*/
getServiceNames() {
return [...this.services.keys()];
}
}