UNPKG

mushcode-mcp-server

Version:

A specialized Model Context Protocol server for MUSHCODE development assistance. Provides AI-powered code generation, validation, optimization, and examples for MUD development.

183 lines 7.55 kB
#!/usr/bin/env node import { program } from 'commander'; import { getConfig } from '../config/index.js'; import { MushcodeProtocolHandler } from '../server/protocol.js'; import { NetworkMCPServer } from '../server/network-transport.js'; // Package info const packageJson = { name: 'mushcode-mcp-server', version: '1.0.0', description: 'A specialized Model Context Protocol server for MUSHCODE development assistance' }; program .name('mushcode-mcp-server') .description('MushcodeMCP Server - AI-powered MUSHCODE development assistance') .version(packageJson.version); // Start command (stdio mode - standard MCP) program .command('start') .description('Start the MCP server in stdio mode (default)') .option('-c, --config <path>', 'Path to configuration file', './mushcode-mcp.config.json') .action(async (options) => { try { console.log(`🚀 Starting ${packageJson.name} v${packageJson.version}`); console.log('📡 Mode: stdio (Model Context Protocol)'); const configManager = getConfig(options.config); const validation = configManager.validateConfig(); if (!validation.valid) { console.error('❌ Configuration validation failed:'); validation.errors.forEach(error => console.error(` - ${error}`)); process.exit(1); } const protocolHandler = new MushcodeProtocolHandler(configManager); // Handle graceful shutdown const shutdown = async () => { console.log('🛑 Shutting down gracefully...'); await protocolHandler.stop(); process.exit(0); }; process.on('SIGINT', shutdown); process.on('SIGTERM', shutdown); await protocolHandler.start(); } catch (error) { console.error('❌ Failed to start MCP server:', error); process.exit(1); } }); // Network command (HTTP/REST API mode) program .command('network') .description('Start the MCP server in network mode (HTTP/REST API)') .option('-p, --port <port>', 'Port to listen on', '3001') .option('-c, --config <path>', 'Path to configuration file', './mushcode-mcp.config.json') .action(async (options) => { try { console.log(`🚀 Starting ${packageJson.name} v${packageJson.version}`); console.log('🌐 Mode: Network (HTTP/REST API)'); console.log(`📡 Port: ${options.port}`); const configManager = getConfig(options.config); const validation = configManager.validateConfig(); if (!validation.valid) { console.error('❌ Configuration validation failed:'); validation.errors.forEach(error => console.error(` - ${error}`)); process.exit(1); } const networkServer = new NetworkMCPServer(configManager, parseInt(options.port)); // Handle graceful shutdown const shutdown = async () => { console.log('🛑 Shutting down gracefully...'); await networkServer.stop(); process.exit(0); }; process.on('SIGINT', shutdown); process.on('SIGTERM', shutdown); await networkServer.start(); } catch (error) { console.error('❌ Failed to start Network MCP server:', error); process.exit(1); } }); // Tools command (list available tools) program .command('tools') .description('List available MUSHCODE tools') .option('-c, --config <path>', 'Path to configuration file', './mushcode-mcp.config.json') .action(async (options) => { try { const configManager = getConfig(options.config); const protocolHandler = new MushcodeProtocolHandler(configManager); // Initialize tools await protocolHandler.registerDefaultTools(); const registry = protocolHandler.getRegistry(); const tools = registry.getTools(); console.log(`🛠️ Available MUSHCODE Tools (${tools.length}):`); console.log(''); tools.forEach((tool, index) => { console.log(`${index + 1}. ${tool.name}`); console.log(` 📝 ${tool.description}`); const required = tool.inputSchema?.['required']; const params = Array.isArray(required) ? required.join(', ') : 'None'; console.log(` 🔧 Parameters: ${params}`); console.log(''); }); console.log('💡 Use these tools via:'); console.log(' • Claude Desktop (MCP protocol)'); console.log(' • REST API (network mode)'); console.log(' • Direct integration (npm package)'); } catch (error) { console.error('❌ Failed to list tools:', error); process.exit(1); } }); // Config command (validate configuration) program .command('config') .description('Validate configuration file') .option('-c, --config <path>', 'Path to configuration file', './mushcode-mcp.config.json') .action(async (options) => { try { const configManager = getConfig(options.config); const validation = configManager.validateConfig(); if (validation.valid) { console.log('✅ Configuration is valid'); const config = configManager.getConfig(); console.log(''); console.log('📋 Configuration Summary:'); console.log(` Server: ${config.server.name} v${config.server.version}`); console.log(` Tools enabled: ${config.tools.enabled.length}`); console.log(` Cache enabled: ${config.knowledge.cacheEnabled}`); console.log(` Security validation: ${config.security.enableInputValidation}`); } else { console.error('❌ Configuration validation failed:'); validation.errors.forEach(error => console.error(` - ${error}`)); process.exit(1); } } catch (error) { console.error('❌ Failed to validate configuration:', error); process.exit(1); } }); // Init command (create default configuration) program .command('init') .description('Create a default configuration file') .option('-f, --force', 'Overwrite existing configuration file') .action(async (options) => { const fs = await import('fs/promises'); const path = await import('path'); const configPath = './mushcode-mcp.config.json'; try { // Check if config already exists if (!options.force) { try { await fs.access(configPath); console.log('❌ Configuration file already exists. Use --force to overwrite.'); process.exit(1); } catch { // File doesn't exist, continue } } // Copy default config const defaultConfig = path.join(process.cwd(), 'node_modules/mushcode-mcp-server/mushcode-mcp.config.json'); await fs.copyFile(defaultConfig, configPath); console.log('✅ Created default configuration file: mushcode-mcp.config.json'); console.log(''); console.log('📝 Next steps:'); console.log(' 1. Edit the configuration file as needed'); console.log(' 2. Run: mushcode-mcp-server start'); console.log(' 3. Or: mushcode-mcp-server network --port 3001'); } catch (error) { console.error('❌ Failed to create configuration file:', error); process.exit(1); } }); // Parse command line arguments program.parse(); //# sourceMappingURL=index.js.map