Skip to main content
Glama
index.tsโ€ข3.22 kB
#!/usr/bin/env node import { RubberDuckServer } from './server.js'; import { logger } from './utils/logger.js'; // Global error handlers for crash diagnosis process.on('uncaughtException', (error) => { logger.error('FATAL: Uncaught Exception', { error: error.message, stack: error.stack, pid: process.pid, memory: process.memoryUsage(), uptime: process.uptime(), }); process.exit(1); }); process.on('unhandledRejection', (reason, _promise) => { logger.error('FATAL: Unhandled Promise Rejection', { reason: reason instanceof Error ? reason.message : String(reason), stack: reason instanceof Error ? reason.stack : undefined, promise: '[Promise object]', pid: process.pid, memory: process.memoryUsage(), uptime: process.uptime(), }); process.exit(1); }); async function main() { logger.info('Starting MCP Rubber Duck Server', { pid: process.pid, nodeVersion: process.version, platform: process.platform, arch: process.arch, cwd: process.cwd(), argv: process.argv, env: { NODE_ENV: process.env.NODE_ENV, LOG_LEVEL: process.env.LOG_LEVEL, MCP_SERVER: process.env.MCP_SERVER, MCP_BRIDGE_ENABLED: process.env.MCP_BRIDGE_ENABLED, MCP_APPROVAL_MODE: process.env.MCP_APPROVAL_MODE, } }); try { const server = new RubberDuckServer(); // Handle graceful shutdown process.on('SIGINT', () => { void (async () => { logger.info('Received SIGINT, shutting down gracefully...', { pid: process.pid, uptime: process.uptime(), }); try { await server.stop(); logger.info('Server stopped gracefully'); process.exit(0); } catch (error) { logger.error('Error during graceful shutdown:', error); process.exit(1); } })(); }); process.on('SIGTERM', () => { void (async () => { logger.info('Received SIGTERM, shutting down gracefully...', { pid: process.pid, uptime: process.uptime(), }); try { await server.stop(); logger.info('Server stopped gracefully'); process.exit(0); } catch (error) { logger.error('Error during graceful shutdown:', error); process.exit(1); } })(); }); // Start the server logger.info('Initializing server...'); await server.start(); logger.info('Server started successfully', { pid: process.pid, memory: process.memoryUsage(), }); } catch (error) { logger.error('Failed to start server:', { error: error instanceof Error ? error.message : String(error), stack: error instanceof Error ? error.stack : undefined, pid: process.pid, memory: process.memoryUsage(), uptime: process.uptime(), }); process.exit(1); } } // Run the server main().catch((error) => { logger.error('Unhandled error in main:', { error: error instanceof Error ? error.message : String(error), stack: error instanceof Error ? error.stack : undefined, pid: process.pid, memory: process.memoryUsage(), uptime: process.uptime(), }); process.exit(1); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nesquikm/mcp-rubber-duck'

If you have feedback or need assistance with the MCP directory API, please join our Discord server