11import type { Server } from "@modelcontextprotocol/sdk/server/index.js" ;
22import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js" ;
3- import express , { Request , Response } from "express" ;
3+ import express , { type Request , type Response } from "express" ;
4+ import { logger } from "../utils/logger" ;
45
56export const startSSEMcpServer = async (
67 server : Server ,
@@ -14,32 +15,41 @@ export const startSSEMcpServer = async (
1415 const transports : Record < string , SSEServerTransport > = { } ;
1516
1617 app . get ( endpoint , async ( req : Request , res : Response ) => {
17- try {
18- const transport = new SSEServerTransport ( "/messages" , res ) ;
19- transports [ transport . sessionId ] = transport ;
20- transport . onclose = ( ) => delete transports [ transport . sessionId ] ;
21- await server . connect ( transport ) ;
22- } catch ( error ) {
23- if ( ! res . headersSent )
24- res . status ( 500 ) . send ( "Error establishing SSE stream" ) ;
25- }
18+ const transport = new SSEServerTransport ( "/messages" , res ) ;
19+ transports [ transport . sessionId ] = transport ;
20+
21+ transport . onclose = ( ) => {
22+ delete transports [ transport . sessionId ] ;
23+ logger . info ( `SSE Server disconnected: sessionId=${ transport . sessionId } ` ) ;
24+ } ;
25+
26+ await server . connect ( transport ) ;
27+ logger . info ( `SSE Server connected: sessionId=${ transport . sessionId } ` ) ;
2628 } ) ;
2729
28- app . post ( ' /messages' , async ( req : Request , res : Response ) => {
30+ app . post ( " /messages" , async ( req : Request , res : Response ) => {
2931 const sessionId = req . query . sessionId as string ;
30- if ( ! sessionId ) return res . status ( 400 ) . send ( "Missing sessionId parameter" ) ;
32+ if ( ! sessionId ) {
33+ logger . warn ( "SSE Server sessionId parameter is missing" ) ;
34+ return res . status ( 400 ) . send ( "Missing sessionId parameter" ) ;
35+ }
3136
3237 const transport = transports [ sessionId ] ;
33- if ( ! transport ) return res . status ( 404 ) . send ( "Session not found" ) ;
38+ if ( ! transport ) {
39+ logger . warn ( `SSE Server session not found: sessionId=${ sessionId } ` ) ;
40+ return res . status ( 404 ) . send ( "Session not found" ) ;
41+ }
3442
3543 try {
44+ logger . info ( `SSE Server handling message: sessionId=${ sessionId } ` ) ;
3645 await transport . handlePostMessage ( req , res , req . body ) ;
37- } catch ( error ) {
46+ } catch ( e ) {
47+ logger . error ( "SSE Server error handling message" , e ) ;
3848 if ( ! res . headersSent ) res . status ( 500 ) . send ( "Error handling request" ) ;
3949 }
4050 } ) ;
4151
4252 app . listen ( port , host , ( ) => {
43- console . log ( `SSE Server listening on http://${ host } :${ port } ${ endpoint } ` ) ;
53+ logger . success ( `SSE Server listening on http://${ host } :${ port } ${ endpoint } ` ) ;
4454 } ) ;
4555} ;
0 commit comments