@@ -28,6 +28,9 @@ import { HttpStreamTransport } from "../transports/http/server.js";
2828import  {  HttpStreamTransportConfig ,  DEFAULT_HTTP_STREAM_CONFIG  }  from  "../transports/http/types.js" ; 
2929import  {  DEFAULT_CORS_CONFIG  }  from  "../transports/sse/types.js" ; 
3030import  {  AuthConfig  }  from  "../auth/types.js" ; 
31+ import  {  createRequire  }  from  'module' ; 
32+ 
33+ const  require  =  createRequire ( import . meta. url ) ; 
3134
3235function  isRequest ( msg : any ) : boolean  { 
3336  return  msg  &&  typeof  msg . method  ===  'string'  &&  msg . jsonrpc  ===  "2.0"  &&  'id'  in  msg ; 
@@ -219,7 +222,6 @@ export class MCPServer {
219222  private  getDefaultName ( ) : string  { 
220223    const  packageJson  =  this . readPackageJson ( ) ; 
221224    if  ( packageJson ?. name )  { 
222-       logger . info ( `Using name from package.json: ${ packageJson . name }  ` ) ; 
223225      return  packageJson . name ; 
224226    } 
225227    logger . error ( "Couldn't find project name in package json" ) ; 
@@ -229,7 +231,6 @@ export class MCPServer {
229231  private  getDefaultVersion ( ) : string  { 
230232    const  packageJson  =  this . readPackageJson ( ) ; 
231233    if  ( packageJson ?. version )  { 
232-       logger . info ( `Using version from package.json: ${ packageJson . version }  ` ) ; 
233234      return  packageJson . version ; 
234235    } 
235236    return  "0.0.0" ; 
@@ -391,14 +392,40 @@ export class MCPServer {
391392    return  this . capabilities ; 
392393  } 
393394
395+   private  getSdkVersion ( ) : string  { 
396+     try  { 
397+       const  sdkSpecificFile  =  require . resolve ( "@modelcontextprotocol/sdk/server/index.js" ) ; 
398+ 
399+       const  sdkRootDir  =  resolve ( dirname ( sdkSpecificFile ) ,  '..' ,  '..' ,  '..' ) ; 
400+ 
401+       const  correctPackageJsonPath  =  join ( sdkRootDir ,  "package.json" ) ; 
402+ 
403+       const  packageContent  =  readFileSync ( correctPackageJsonPath ,  "utf-8" ) ; 
404+ 
405+       const  packageJson  =  JSON . parse ( packageContent ) ; 
406+ 
407+       if  ( packageJson ?. version )  { 
408+         logger . debug ( `Found SDK version: ${ packageJson . version }  ` ) ; 
409+         return  packageJson . version ; 
410+       }  else  { 
411+         logger . warn ( "Could not determine SDK version from its package.json." ) ; 
412+         return  "unknown" ; 
413+       } 
414+     }  catch  ( error : any )  { 
415+       logger . warn ( `Failed to read SDK package.json: ${ error . message }  ` ) ; 
416+       return  "unknown" ; 
417+     } 
418+   } 
419+ 
394420  async  start ( )  { 
395421    try  { 
396422      if  ( this . isRunning )  { 
397423        throw  new  Error ( "Server is already running" ) ; 
398424      } 
399425      this . isRunning  =  true ; 
400426
401-       logger . info ( "Starting MCP server..." ) ; 
427+       const  sdkVersion  =  this . getSdkVersion ( ) ; 
428+       logger . info ( `Starting MCP server with SDK ${ sdkVersion }  ...` ) ; 
402429
403430      const  tools  =  await  this . toolLoader . loadTools ( ) ; 
404431      this . toolsMap  =  new  Map ( 
@@ -420,13 +447,10 @@ export class MCPServer {
420447
421448      this . setupHandlers ( ) ; 
422449
423-       logger . info ( "Creating transport..." ) ; 
424450      this . transport  =  this . createTransport ( ) ; 
425451
426452      logger . info ( `Connecting transport (${ this . transport . type }  ) to SDK Server...` ) ; 
427-       // Let the SDK handle starting the transport through the connect method 
428453      await  this . server . connect ( this . transport ) ; 
429-       logger . info ( `SDK Server connected to ${ this . transport . type }   transport.` ) ; 
430454
431455      logger . info ( `Started ${ this . serverName }  @${ this . serverVersion }   successfully on transport ${ this . transport . type }  ` ) ; 
432456
@@ -466,69 +490,8 @@ export class MCPServer {
466490    } 
467491  } 
468492
469-   private  async  handleSdkMessage ( message : JsonRpcMessage ) : Promise < void >  { 
470-     let  method  =  'response/notification' ; 
471-     let  id : JsonRpcId  =  null ; 
472-     
473-     if  ( isRequest ( message )  ||  isNotification ( message ) )  { 
474-       method  =  ( message  as  any ) . method ; 
475-     } 
476-     if  ( isRequest ( message )  ||  isResponse ( message ) )  { 
477-       id  =  ( message  as  any ) . id ; 
478-     } 
479- 
480-     logger . debug ( `[MCPServer <- Transport] Received: ${ method }   ${ id }  ` ) ; 
481-     logger . debug ( `[MCPServer <- Transport] Message Detail: ${ JSON . stringify ( message ) }  ` ) ; 
482- 
483-     if  ( ! this . server )  { 
484-       logger . error ( "Cannot handle message: SDK Server not initialized." ) ; 
485-       if  ( id  !==  null  &&  id  !==  undefined )  { 
486-         await  this . trySendErrorResponse ( id ,  - 32005 ,  "Server not fully initialized" ) ; 
487-       } 
488-       return ; 
489-     } 
490493
491-     try  { 
492-       const  sdkMessage  =  message  as  unknown  as  JSONRPCMessage ; 
493-       const  response  =  await  ( this . server  as  any ) . processMessage ( sdkMessage ) ; 
494- 
495-       if  ( response )  { 
496-         const  responses  =  Array . isArray ( response )  ? response  : [ response ] ; 
497-         logger . debug ( `[MCPServer -> Transport] Sending ${ responses . length }   response(s) for ID ${ id  ??  'N/A' }  ` ) ; 
498-         
499-         for  ( const  resp  of  responses )  { 
500-           logger . debug ( `[MCPServer -> Transport] Sending Detail: ${ JSON . stringify ( resp ) }  ` ) ; 
501-           await  this . transport ?. send ( resp ) ; 
502-         } 
503-       }  else  { 
504-         logger . debug ( `[MCPServer] SDK processed ${ method }   ${ id }   without direct response.` ) ; 
505-       } 
506-     }  catch  ( error : any )  { 
507-       logger . error ( `[MCPServer] Error processing message via SDK Server: ${ error . message }  ` ) ; 
508-       logger . debug ( error . stack ) ; 
509-       
510-       if  ( id  !==  null  &&  id  !==  undefined )  { 
511-         await  this . trySendErrorResponse ( id ,  - 32000 ,  `Internal server error: ${ error . message }  ` ) ; 
512-       } 
513-     } 
514-   } 
515494
516-   private  async  trySendErrorResponse ( id : JsonRpcId ,  code : number ,  message : string ) : Promise < void >  { 
517-     if  ( ! this . transport )  return ; 
518-     
519-     const  errorResponse : JsonRpcErrorResponse  =  { 
520-       jsonrpc : "2.0" , 
521-       id : id , 
522-       error : {  code,  message } 
523-     } ; 
524-     
525-     try  { 
526-       logger . debug ( `[MCPServer -> Transport] Sending Error Response: ${ JSON . stringify ( errorResponse ) }  ` ) ; 
527-       await  this . transport . send ( errorResponse  as  unknown  as  JSONRPCMessage ) ; 
528-     }  catch  ( sendError : any )  { 
529-       logger . error ( `[MCPServer -> Transport] Failed to send error response for ID ${ id }  : ${ sendError . message }  ` ) ; 
530-     } 
531-   } 
532495
533496  async  stop ( )  { 
534497    if  ( ! this . isRunning )  { 
0 commit comments