code-auditor-mcp
Version:
Multi-language code quality auditor with MCP server - Analyze TypeScript, JavaScript, and Go code for SOLID principles, DRY violations, security patterns, and more
101 lines (96 loc) • 3.49 kB
JavaScript
/**
* MCP Server Entry Point - Switches between stdio and HTTP/UI modes
*
* Usage:
* node mcp-index.js # stdio mode (default)
* node mcp-index.js --ui # HTTP/UI mode
* node mcp-index.js --stdio # explicit stdio mode
*/
import chalk from 'chalk';
// Parse command line arguments
const args = process.argv.slice(2);
const uiMode = args.includes('--ui');
const stdioMode = args.includes('--stdio');
const helpMode = args.includes('--help') || args.includes('-h');
if (helpMode) {
console.log(`
${chalk.blue('MCP Code Auditor Server')}
Usage:
${chalk.cyan('node mcp-index.js')} # stdio mode (default)
${chalk.cyan('node mcp-index.js --ui')} # HTTP/UI mode
${chalk.cyan('node mcp-index.js --stdio')} # explicit stdio mode
Modes:
${chalk.yellow('stdio')} - Standard MCP protocol over stdin/stdout (for Claude Desktop, VS Code)
${chalk.yellow('ui')} - HTTP server with interactive UI capabilities (for web dashboards)
Examples:
${chalk.gray('# For Claude Desktop')}
node mcp-index.js
${chalk.gray('# For interactive web dashboards')}
node mcp-index.js --ui
Environment Variables:
${chalk.cyan('MCP_UI_PORT')}=3001 # Port for UI mode (default: 3001)
${chalk.cyan('MCP_MODE')}=stdio|ui # Override mode detection
`);
process.exit(0);
}
// Determine mode
let mode;
if (process.env.MCP_MODE) {
mode = process.env.MCP_MODE;
console.error(chalk.blue('[MCP]'), `Mode set via MCP_MODE environment variable: ${mode}`);
}
else if (uiMode) {
mode = 'ui';
console.error(chalk.blue('[MCP]'), 'UI mode requested via --ui flag');
}
else if (stdioMode) {
mode = 'stdio';
console.error(chalk.blue('[MCP]'), 'Stdio mode requested via --stdio flag');
}
else {
// Default to stdio for backward compatibility
mode = 'stdio';
console.error(chalk.blue('[MCP]'), 'Defaulting to stdio mode (use --ui for interactive mode)');
}
// Launch the appropriate server
async function startServer() {
try {
if (mode === 'ui') {
console.error(chalk.green('[MCP]'), 'Starting HTTP/UI server...');
const { startMcpUIServer } = await import('./mcp-ui-simple.js');
await startMcpUIServer();
}
else {
console.error(chalk.green('[MCP]'), 'Starting stdio server...');
await import('./mcp.js');
}
}
catch (error) {
console.error(chalk.red('[MCP ERROR]'), 'Failed to start server:', error);
console.error(chalk.red('[ERROR]'), 'Stack:', error instanceof Error ? error.stack : 'No stack');
process.exit(1);
}
}
// Handle shutdown gracefully
process.on('SIGINT', () => {
console.error(chalk.yellow(`[MCP]`), `Shutting down ${mode} server...`);
process.exit(0);
});
process.on('SIGTERM', () => {
console.error(chalk.yellow(`[MCP]`), `Received SIGTERM, shutting down ${mode} server...`);
process.exit(0);
});
process.on('uncaughtException', (error) => {
console.error(chalk.red('[MCP ERROR]'), 'Uncaught exception:', error);
console.error(chalk.red('[ERROR]'), 'Stack:', error.stack);
process.exit(1);
});
process.on('unhandledRejection', (reason, promise) => {
console.error(chalk.red('[MCP ERROR]'), 'Unhandled rejection at:', promise);
console.error(chalk.red('[ERROR]'), 'Reason:', reason);
process.exit(1);
});
// Start the server
startServer();
//# sourceMappingURL=mcp-index.js.map