@@ -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