@@ -35,7 +35,18 @@ export class Server {
35
35
}
36
36
37
37
async connect ( transport : Transport ) : Promise < void > {
38
+ try {
39
+ await this . setupAndConnect ( transport ) ;
40
+ } catch ( error ) {
41
+ this . emitServerEvent ( "stop" , Date . now ( ) - this . startTime , error as Error ) ;
42
+ throw error ;
43
+ }
44
+ }
45
+
46
+ private async setupAndConnect ( transport : Transport ) : Promise < void > {
38
47
this . mcpServer . server . registerCapabilities ( { logging : { } } ) ;
48
+ await this . setServerCallbacks ( transport ) ;
49
+ this . emitServerEvent ( "start" , Date . now ( ) - this . startTime ) ;
39
50
40
51
this . registerTools ( ) ;
41
52
this . registerResources ( ) ;
@@ -64,20 +75,27 @@ export class Server {
64
75
} ) ;
65
76
66
77
await initializeLogger ( this . mcpServer , this . userConfig . logPath ) ;
78
+ await this . validateConfig ( ) ;
67
79
68
80
await this . mcpServer . connect ( transport ) ;
81
+ }
69
82
83
+ /**
84
+ * Sets up the MCP serve instance by registering capabilities and setting up event listeners.
85
+ * @param transport - The transport to use for connecting to the server.
86
+ */
87
+ async setServerCallbacks ( transport : Transport ) {
70
88
this . mcpServer . server . oninitialized = ( ) => {
71
89
this . session . setAgentRunner ( this . mcpServer . server . getClientVersion ( ) ) ;
72
90
this . session . sessionId = new ObjectId ( ) . toString ( ) ;
73
91
74
92
logger . info (
75
93
LogId . serverInitialized ,
76
94
"server" ,
77
- `Server started with transport ${ transport . constructor . name } and agent runner ${ this . session . agentRunner ?. name } `
95
+ `Server connected with transport ${ transport . constructor . name } and agent runner ${ this . session . agentRunner ?. name } `
78
96
) ;
79
97
80
- this . emitServerEvent ( "start " , Date . now ( ) - this . startTime ) ;
98
+ this . emitServerEvent ( "connect " , Date . now ( ) - this . startTime ) ;
81
99
} ;
82
100
83
101
this . mcpServer . server . onclose = ( ) => {
@@ -88,9 +106,7 @@ export class Server {
88
106
this . mcpServer . server . onerror = ( error : Error ) => {
89
107
const closeTime = Date . now ( ) ;
90
108
this . emitServerEvent ( "stop" , Date . now ( ) - closeTime , error ) ;
91
- } ;
92
-
93
- await this . validateConfig ( ) ;
109
+ } ;
94
110
}
95
111
96
112
async close ( ) : Promise < void > {
@@ -101,7 +117,7 @@ export class Server {
101
117
102
118
/**
103
119
* Emits a server event
104
- * @param command - The server command (e.g., "start", "stop", "register", "deregister ")
120
+ * @param command - The server command (e.g., "start", "stop", "connect ")
105
121
* @param additionalProperties - Additional properties specific to the event
106
122
*/
107
123
private emitServerEvent ( command : ServerCommand , commandDuration : number , error ?: Error ) {
@@ -117,7 +133,7 @@ export class Server {
117
133
} ,
118
134
} ;
119
135
120
- if ( command === "start" ) {
136
+ if ( command === "start" || command === "connect" ) {
121
137
event . properties . startup_time_ms = commandDuration ;
122
138
event . properties . read_only_mode = this . userConfig . readOnly || false ;
123
139
event . properties . disabled_tools = this . userConfig . disabledTools || [ ] ;
0 commit comments