index.ts•1.9 kB
#!/usr/bin/env node
/**
* Watchtower MCP Server - Main Entry Point
* Windows-native MCP ⇄ DAP bridge for C#, Node/TS, Python, and Dart
*/
import { createServer } from './server/server.js';
import { Logger } from './server/logger.js';
import { setupMetrics } from './server/metrics.js';
import { ConfigManager } from './server/config.js';
import { version } from '../package.json';
const logger = new Logger('main');
async function main() {
try {
// Initialize configuration
const config = ConfigManager.getInstance();
// Set up metrics
setupMetrics();
// Create and start MCP server
const server = await createServer(config);
logger.info(`Watchtower MCP Server v${version} started successfully`);
logger.info(`Server listening on port ${config.get('server.port', 0)}`);
// Graceful shutdown handling
process.on('SIGTERM', () => {
logger.info('Received SIGTERM, shutting down gracefully');
server.stop().catch(err => {
logger.error('Error during graceful shutdown:', err);
});
});
process.on('SIGINT', () => {
logger.info('Received SIGINT, shutting down gracefully');
server.stop().catch(err => {
logger.error('Error during graceful shutdown:', err);
});
});
process.on('uncaughtException', err => {
logger.error('Uncaught exception:', err);
process.exit(1);
});
process.on('unhandledRejection', (reason, promise) => {
logger.error('Unhandled rejection at:', { promise, reason });
});
} catch (error) {
logger.error('Failed to start Watchtower server:', error);
process.exit(1);
}
}
// Handle errors during startup
process.on('exit', code => {
if (code === 0) {
logger.info('Watchtower server shutdown completed');
} else {
logger.error(`Watchtower server shutdown with code ${code}`);
}
});
// Start the server
main();