UNPKG

christmas-mcp-copilot-runner

Version:

A Model Copilot Provider (MCP) for safely executing whitelisted system commands across platforms with automatic VS Code setup

128 lines (114 loc) 5.16 kB
#!/usr/bin/env node const { runCommand } = require('../src/handlers/runCommand'); /** * Show help information */ function showHelp() { console.log('🎄 Christmas MCP Copilot Runner'); console.log('=============================='); console.log(''); console.log('Usage:'); console.log(' christmas-mcp-copilot-runner [command] # Execute a command'); console.log(' christmas-mcp-copilot-runner --mcp # Start MCP server mode'); console.log(' christmas-mcp-copilot-runner --test # Start HTTP test server'); console.log(' christmas-mcp-copilot-runner --help # Show this help'); console.log(' mcp-setup-vscode # Setup VS Code integration'); console.log(''); console.log('Examples:'); console.log(' christmas-mcp-copilot-runner "ls -la"'); console.log(' christmas-mcp-copilot-runner "php test.php"'); console.log(' christmas-mcp-copilot-runner "git status"'); console.log(''); console.log('VS Code Integration:'); console.log(' 1. Install: npm install -g christmas-mcp-copilot-runner'); console.log(' 2. Setup runs automatically during install'); console.log(' 3. Restart VS Code and ask Copilot to use the tool'); console.log(''); console.log('For more information: https://github.com/christmas/christmas-mcp-copilot-runner'); } /** * CLI interface for the MCP Runner */ async function main() { const args = process.argv.slice(2); if (args.length === 0) { console.log('Usage: christmas-mcp-copilot-runner <command>'); console.log(''); console.log('Examples:'); console.log(' christmas-mcp-copilot-runner "php --version"'); console.log(' christmas-mcp-copilot-runner "node --version"'); console.log(' christmas-mcp-copilot-runner "curl -s https://api.github.com/users/github"'); console.log(' christmas-mcp-copilot-runner "ls -la" # Unix/macOS'); console.log(' christmas-mcp-copilot-runner "dir" # Windows'); console.log(''); console.log('Cross-platform: Commands are automatically normalized for your OS'); console.log('Whitelisted commands: php, curl, node, git, ls/dir, cat/type, npm, python, etc.'); process.exit(1); } if (args[0] === '--help' || args[0] === '-h') { console.log('Christmas MCP Copilot Runner CLI'); console.log(''); console.log('Usage: christmas-mcp-copilot-runner <command>'); console.log(''); console.log('Cross-platform command executor with automatic OS command normalization.'); console.log(''); console.log('Options:'); console.log(' -h, --help Show this help message'); console.log(' --version Show version information'); console.log(''); console.log('Examples:'); console.log(' christmas-mcp-copilot-runner "php hello.php"'); console.log(' christmas-mcp-copilot-runner "node app.js"'); console.log(' christmas-mcp-copilot-runner "curl -s https://httpbin.org/ip"'); console.log(' christmas-mcp-copilot-runner "git status"'); console.log(' christmas-mcp-copilot-runner "ls -la" # Unix/macOS (auto-converts to "dir" on Windows)'); console.log(' christmas-mcp-copilot-runner "cat file.txt" # Unix/macOS (auto-converts to "type" on Windows)'); console.log(''); console.log('Platform Support:'); console.log(' - Windows: Supports cmd, powershell, dir, type, where, findstr'); console.log(' - macOS/Linux: Supports ls, cat, which, grep, and standard Unix tools'); console.log(' - Auto-normalization: Unix commands automatically converted on Windows'); console.log(''); console.log('Security:'); console.log(' - Only whitelisted base commands are allowed'); console.log(' - Dangerous patterns (rm -rf, del /s, Remove-Item -Recurse, etc.) are blocked'); console.log(' - All commands are logged to the logs/ directory'); console.log(' - Commands timeout after 30 seconds'); process.exit(0); } if (args[0] === '--version' || args[0] === '-v') { const pkg = require('../package.json'); console.log(`${pkg.name} v${pkg.version}`); process.exit(0); } const command = args.join(' '); try { console.log(`🚀 Executing: ${command}`); console.log('─'.repeat(50)); const result = await runCommand({ cmd: command }); if (result.success) { console.log(result.output); console.log('─'.repeat(50)); console.log(`✅ Command completed successfully at ${result.timestamp}`); } else { console.error(`❌ Command failed: ${result.error}`); console.log('─'.repeat(50)); console.log(`⏰ Failed at ${result.timestamp}`); process.exit(1); } } catch (error) { console.error(`💥 Unexpected error: ${error.message}`); process.exit(1); } } // Handle unhandled promise rejections process.on('unhandledRejection', (reason, promise) => { console.error('Unhandled Rejection at:', promise, 'reason:', reason); process.exit(1); }); // Handle uncaught exceptions process.on('uncaughtException', (error) => { console.error('Uncaught Exception:', error); process.exit(1); }); main();