diff --git a/src/index.ts b/src/index.ts index fca9b83f..59a6c76c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -31,15 +31,14 @@ async function main() { try { await transportRunner.start(); } catch (error: unknown) { - logger.emergency(LogId.serverStartFailure, "server", `Fatal error running server: ${error as string}`); + logger.info(LogId.serverCloseRequested, "server", "Closing server"); try { await transportRunner.close(); - logger.error(LogId.serverClosed, "server", "Server closed"); + logger.info(LogId.serverClosed, "server", "Server closed"); } catch (error: unknown) { logger.error(LogId.serverCloseFailure, "server", `Error closing server: ${error as string}`); - } finally { - process.exit(1); } + throw error; } } diff --git a/src/transports/streamableHttp.ts b/src/transports/streamableHttp.ts index 282cd7bc..4615d79f 100644 --- a/src/transports/streamableHttp.ts +++ b/src/transports/streamableHttp.ts @@ -14,7 +14,7 @@ const JSON_RPC_ERROR_CODE_SESSION_ID_INVALID = -32002; const JSON_RPC_ERROR_CODE_SESSION_NOT_FOUND = -32003; const JSON_RPC_ERROR_CODE_INVALID_REQUEST = -32004; -function promiseHandler( +function withErrorHandling( fn: (req: express.Request, res: express.Response, next: express.NextFunction) => Promise ) { return (req: express.Request, res: express.Response, next: express.NextFunction) => { @@ -50,7 +50,7 @@ export class StreamableHttpRunner extends TransportRunnerBase { app.enable("trust proxy"); // needed for reverse proxy support app.use(express.json()); - const handleRequest = async (req: express.Request, res: express.Response) => { + const handleSessionRequest = async (req: express.Request, res: express.Response) => { const sessionId = req.headers["mcp-session-id"]; if (!sessionId) { res.status(400).json({ @@ -88,10 +88,10 @@ export class StreamableHttpRunner extends TransportRunnerBase { app.post( "/mcp", - promiseHandler(async (req: express.Request, res: express.Response) => { + withErrorHandling(async (req: express.Request, res: express.Response) => { const sessionId = req.headers["mcp-session-id"]; if (sessionId) { - await handleRequest(req, res); + await handleSessionRequest(req, res); return; } @@ -141,8 +141,8 @@ export class StreamableHttpRunner extends TransportRunnerBase { }) ); - app.get("/mcp", promiseHandler(handleRequest)); - app.delete("/mcp", promiseHandler(handleRequest)); + app.get("/mcp", withErrorHandling(handleSessionRequest)); + app.delete("/mcp", withErrorHandling(handleSessionRequest)); this.httpServer = await new Promise((resolve, reject) => { const result = app.listen(this.userConfig.httpPort, this.userConfig.httpHost, (err?: Error) => {