#!/usr/bin/env node import { Logger } from './utils/logger.util.js'; import { stdioTransport } from './server/stdio.js'; import { streamableHttpTransport } from './server/streamableHttp.js'; const logger = Logger.forContext('index.ts'); /** * Start the MCP server with the specified transport mode */ export async function startServer(): Promise { const mainLogger = Logger.forContext('index.ts', 'startServer'); // Define available transport modes and their handlers const transportModes = { stdio: { handler: stdioTransport, name: 'stdio' }, http: { handler: streamableHttpTransport, name: 'http' }, }; // Get requested transport mode (default to stdio) const requestedMode = (process.env.TRANSPORT_MODE || 'stdio').toLowerCase(); const transport = transportModes[requestedMode as keyof typeof transportModes] || transportModes.stdio; // Warn if requested mode is invalid if (!transportModes[requestedMode as keyof typeof transportModes]) { mainLogger.warn( `Unknown TRANSPORT_MODE "${requestedMode}", defaulting to stdio`, ); } // Start the selected transport mainLogger.info( `Starting server with ${transport.name.toUpperCase()} transport`, ); transport.handler(); } /** * Main entry point */ async function main() { // Server mode - determine transport and start server await startServer(); } // Run main if executed directly if (require.main === module) { main().catch((err) => { logger.error('Unhandled error in main process', err); process.exit(1); }); }