@@ -6,36 +6,65 @@ import {
6
6
} from "@modelcontextprotocol/sdk/types.js" ;
7
7
import { ToolLoader } from "./toolLoader.js" ;
8
8
import { BaseTool } from "../tools/BaseTool.js" ;
9
+ import { join , dirname } from "path" ;
10
+ import { logger } from "./Logger.js" ;
9
11
10
12
export interface MCPServerConfig {
11
- name : string ;
12
- version : string ;
13
+ name ? : string ;
14
+ version ? : string ;
13
15
}
14
16
15
17
export class MCPServer {
16
18
private server : Server ;
17
19
private toolsMap : Map < string , BaseTool > = new Map ( ) ;
18
20
private toolLoader : ToolLoader ;
19
21
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 ,
31
32
} ,
32
- }
33
- ) ;
33
+ } ,
34
+ } ) ;
34
35
35
36
this . toolLoader = new ToolLoader ( ) ;
36
37
this . setupHandlers ( ) ;
37
38
}
38
39
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
+
39
68
private setupHandlers ( ) {
40
69
this . server . setRequestHandler ( ListToolsRequestSchema , async ( ) => {
41
70
return {
0 commit comments