@@ -6,36 +6,65 @@ import {
66} from "@modelcontextprotocol/sdk/types.js" ;
77import { ToolLoader } from "./toolLoader.js" ;
88import { BaseTool } from "../tools/BaseTool.js" ;
9+ import { join , dirname } from "path" ;
10+ import { logger } from "./Logger.js" ;
911
1012export interface MCPServerConfig {
11- name : string ;
12- version : string ;
13+ name ? : string ;
14+ version ? : string ;
1315}
1416
1517export class MCPServer {
1618 private server : Server ;
1719 private toolsMap : Map < string , BaseTool > = new Map ( ) ;
1820 private toolLoader : ToolLoader ;
1921
20- constructor ( config : MCPServerConfig ) {
21- this . server = new Server (
22- {
23- name : config . name ,
24- version : config . version ,
25- } ,
26- {
27- capabilities : {
28- tools : {
29- enabled : true ,
30- } ,
22+ constructor ( config : MCPServerConfig = { } ) {
23+ const serverConfig = {
24+ name : config . name ?? this . getDefaultName ( ) ,
25+ version : config . version ?? this . getDefaultVersion ( ) ,
26+ } ;
27+
28+ this . server = new Server ( serverConfig , {
29+ capabilities : {
30+ tools : {
31+ enabled : true ,
3132 } ,
32- }
33- ) ;
33+ } ,
34+ } ) ;
3435
3536 this . toolLoader = new ToolLoader ( ) ;
3637 this . setupHandlers ( ) ;
3738 }
3839
40+ private getDefaultName ( ) : string {
41+ try {
42+ const mainModulePath = process . argv [ 1 ] ;
43+ 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 ;
47+ } catch ( error ) {
48+ logger . warn ( `Could not read package.json for name: ${ error } ` ) ;
49+ return "unnamed-mcp-server" ;
50+ }
51+ }
52+
53+ private getDefaultVersion ( ) : string {
54+ 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 ;
62+ } catch ( error ) {
63+ logger . warn ( `Could not read package.json for version: ${ error } ` ) ;
64+ return "0.0.0" ;
65+ }
66+ }
67+
3968 private setupHandlers ( ) {
4069 this . server . setRequestHandler ( ListToolsRequestSchema , async ( ) => {
4170 return {
0 commit comments