66} from "@modelcontextprotocol/sdk/types.js" ;
77import { ToolLoader } from "./toolLoader.js" ;
88import { BaseTool } from "../tools/BaseTool.js" ;
9+ import { readFileSync } from "fs" ;
910import { join , dirname } from "path" ;
1011import { logger } from "./Logger.js" ;
1112
@@ -18,51 +19,73 @@ export class MCPServer {
1819 private server : Server ;
1920 private toolsMap : Map < string , BaseTool > = new Map ( ) ;
2021 private toolLoader : ToolLoader ;
22+ private serverName : string ;
23+ private serverVersion : string ;
2124
2225 constructor ( config : MCPServerConfig = { } ) {
23- const serverConfig = {
24- name : config . name ?? this . getDefaultName ( ) ,
25- version : config . version ?? this . getDefaultVersion ( ) ,
26- } ;
26+ this . serverName = config . name ?? this . getDefaultName ( ) ;
27+ this . serverVersion = config . version ?? this . getDefaultVersion ( ) ;
2728
28- this . server = new Server ( serverConfig , {
29- capabilities : {
30- tools : {
31- enabled : true ,
32- } ,
29+ logger . info (
30+ `Initializing MCP Server: ${ this . serverName } @${ this . serverVersion } `
31+ ) ;
32+
33+ this . server = new Server (
34+ {
35+ name : this . serverName ,
36+ version : this . serverVersion ,
3337 } ,
34- } ) ;
38+ {
39+ capabilities : {
40+ tools : {
41+ enabled : true ,
42+ } ,
43+ } ,
44+ }
45+ ) ;
3546
3647 this . toolLoader = new ToolLoader ( ) ;
3748 this . setupHandlers ( ) ;
3849 }
3950
40- private getDefaultName ( ) : string {
51+ private readPackageJson ( ) : any {
4152 try {
4253 const mainModulePath = process . argv [ 1 ] ;
4354 const packagePath = join ( dirname ( mainModulePath ) , ".." , "package.json" ) ;
44- const packageContent = require ( packagePath ) ;
45- logger . debug ( `Found package.json with name: ${ packageContent . name } ` ) ;
46- return packageContent . name ;
55+ const packageContent = readFileSync ( packagePath , "utf-8" ) ;
56+ const packageJson = JSON . parse ( packageContent ) ;
57+ logger . debug ( `Successfully read package.json from: ${ packagePath } ` ) ;
58+ return packageJson ;
4759 } catch ( error ) {
48- logger . warn ( `Could not read package.json for name : ${ error } ` ) ;
49- return "unnamed-mcp-server" ;
60+ logger . warn ( `Could not read package.json: ${ error } ` ) ;
61+ return null ;
5062 }
5163 }
5264
65+ private getDefaultName ( ) : string {
66+ try {
67+ const packageJson = this . readPackageJson ( ) ;
68+ if ( packageJson ?. name ) {
69+ logger . info ( `Using name from package.json: ${ packageJson . name } ` ) ;
70+ return packageJson . name ;
71+ }
72+ } catch ( error ) {
73+ logger . warn ( `Error getting name from package.json: ${ error } ` ) ;
74+ }
75+ return "unnamed-mcp-server" ;
76+ }
77+
5378 private getDefaultVersion ( ) : string {
5479 try {
55- const mainModulePath = process . argv [ 1 ] ;
56- const packagePath = join ( dirname ( mainModulePath ) , ".." , "package.json" ) ;
57- const packageContent = require ( packagePath ) ;
58- logger . debug (
59- `Found package.json with version: ${ packageContent . version } `
60- ) ;
61- return packageContent . version ;
80+ const packageJson = this . readPackageJson ( ) ;
81+ if ( packageJson ?. version ) {
82+ logger . info ( `Using version from package.json: ${ packageJson . version } ` ) ;
83+ return packageJson . version ;
84+ }
6285 } catch ( error ) {
63- logger . warn ( `Could not read package.json for version: ${ error } ` ) ;
64- return "0.0.0" ;
86+ logger . warn ( `Error getting version from package.json: ${ error } ` ) ;
6587 }
88+ return "0.0.0" ;
6689 }
6790
6891 private setupHandlers ( ) {
@@ -95,9 +118,14 @@ export class MCPServer {
95118 const transport = new StdioServerTransport ( ) ;
96119 await this . server . connect ( transport ) ;
97120
98- process . stderr . write ( `Server started with ${ tools . length } tools\n` ) ;
121+ logger . info (
122+ `Started ${ this . serverName } @${ this . serverVersion } with ${ tools . length } tools`
123+ ) ;
124+ logger . info (
125+ `Available tools: ${ Array . from ( this . toolsMap . keys ( ) ) . join ( ", " ) } `
126+ ) ;
99127 } catch ( error ) {
100- process . stderr . write ( `Server initialization error: ${ error } \n ` ) ;
128+ logger . error ( `Server initialization error: ${ error } ` ) ;
101129 throw error ;
102130 }
103131 }
0 commit comments