55 lines
1.5 KiB
JavaScript
55 lines
1.5 KiB
JavaScript
#!/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<void> {
|
|
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);
|
|
});
|
|
}
|