@@ -137,6 +137,27 @@ export class MCPServer {
137
137
} ;
138
138
logger . debug ( `Creating HttpStreamTransport. response mode: ${ httpConfig . responseMode } ` ) ;
139
139
transport = new HttpStreamTransport ( httpConfig ) ;
140
+
141
+ ( transport as HttpStreamTransport ) . setServerConfig (
142
+ { name : this . serverName , version : this . serverVersion } ,
143
+ async ( mcpServer ) => {
144
+ for ( const [ toolName , tool ] of this . toolsMap . entries ( ) ) {
145
+ ( mcpServer as any ) . tool (
146
+ toolName ,
147
+ tool . inputSchema . properties || { } ,
148
+ async ( params : any ) => {
149
+ const result = await tool . toolCall ( {
150
+ params : {
151
+ name : toolName ,
152
+ arguments : params ,
153
+ } ,
154
+ } ) ;
155
+ return result ;
156
+ }
157
+ ) ;
158
+ }
159
+ }
160
+ ) ;
140
161
break ;
141
162
}
142
163
case 'stdio' :
@@ -164,6 +185,16 @@ export class MCPServer {
164
185
return transport ;
165
186
}
166
187
188
+ private createServerInstance ( ) {
189
+ const server = new Server (
190
+ { name : this . serverName , version : this . serverVersion } ,
191
+ { capabilities : this . capabilities }
192
+ ) ;
193
+
194
+ this . setupHandlers ( server ) ;
195
+ return server ;
196
+ }
197
+
167
198
private readPackageJson ( ) : any {
168
199
try {
169
200
const projectRoot = process . cwd ( ) ;
@@ -201,9 +232,11 @@ export class MCPServer {
201
232
return '0.0.0' ;
202
233
}
203
234
204
- private setupHandlers ( ) {
235
+ private setupHandlers ( server ?: Server ) {
236
+ const targetServer = server || this . server ;
237
+
205
238
// TODO: Replace 'any' with the specific inferred request type from the SDK schema if available
206
- this . server . setRequestHandler ( ListToolsRequestSchema , async ( request : any ) => {
239
+ targetServer . setRequestHandler ( ListToolsRequestSchema , async ( request : any ) => {
207
240
logger . debug ( `Received ListTools request: ${ JSON . stringify ( request ) } ` ) ;
208
241
209
242
const tools = Array . from ( this . toolsMap . values ( ) ) . map ( ( tool ) => tool . toolDefinition ) ;
@@ -221,7 +254,7 @@ export class MCPServer {
221
254
} ) ;
222
255
223
256
// TODO: Replace 'any' with the specific inferred request type from the SDK schema if available
224
- this . server . setRequestHandler ( CallToolRequestSchema , async ( request : any ) => {
257
+ targetServer . setRequestHandler ( CallToolRequestSchema , async ( request : any ) => {
225
258
logger . debug ( `Tool call request received for: ${ request . params . name } ` ) ;
226
259
logger . debug ( `Tool call arguments: ${ JSON . stringify ( request . params . arguments ) } ` ) ;
227
260
@@ -251,14 +284,14 @@ export class MCPServer {
251
284
} ) ;
252
285
253
286
if ( this . capabilities . prompts ) {
254
- this . server . setRequestHandler ( ListPromptsRequestSchema , async ( ) => {
287
+ targetServer . setRequestHandler ( ListPromptsRequestSchema , async ( ) => {
255
288
return {
256
289
prompts : Array . from ( this . promptsMap . values ( ) ) . map ( ( prompt ) => prompt . promptDefinition ) ,
257
290
} ;
258
291
} ) ;
259
292
260
293
// TODO: Replace 'any' with the specific inferred request type from the SDK schema if available
261
- this . server . setRequestHandler ( GetPromptRequestSchema , async ( request : any ) => {
294
+ targetServer . setRequestHandler ( GetPromptRequestSchema , async ( request : any ) => {
262
295
const prompt = this . promptsMap . get ( request . params . name ) ;
263
296
if ( ! prompt ) {
264
297
throw new Error (
@@ -275,7 +308,7 @@ export class MCPServer {
275
308
}
276
309
277
310
if ( this . capabilities . resources ) {
278
- this . server . setRequestHandler ( ListResourcesRequestSchema , async ( ) => {
311
+ targetServer . setRequestHandler ( ListResourcesRequestSchema , async ( ) => {
279
312
return {
280
313
resources : Array . from ( this . resourcesMap . values ( ) ) . map (
281
314
( resource ) => resource . resourceDefinition
@@ -284,7 +317,7 @@ export class MCPServer {
284
317
} ) ;
285
318
286
319
// TODO: Replace 'any' with the specific inferred request type from the SDK schema if available
287
- this . server . setRequestHandler ( ReadResourceRequestSchema , async ( request : any ) => {
320
+ targetServer . setRequestHandler ( ReadResourceRequestSchema , async ( request : any ) => {
288
321
const resource = this . resourcesMap . get ( request . params . uri ) ;
289
322
if ( ! resource ) {
290
323
throw new Error (
@@ -299,7 +332,7 @@ export class MCPServer {
299
332
} ;
300
333
} ) ;
301
334
302
- this . server . setRequestHandler ( ListResourceTemplatesRequestSchema , async ( ) => {
335
+ targetServer . setRequestHandler ( ListResourceTemplatesRequestSchema , async ( ) => {
303
336
logger . debug ( `Received ListResourceTemplates request` ) ;
304
337
const response = {
305
338
resourceTemplates : [ ] ,
@@ -310,7 +343,7 @@ export class MCPServer {
310
343
} ) ;
311
344
312
345
// TODO: Replace 'any' with the specific inferred request type from the SDK schema if available
313
- this . server . setRequestHandler ( SubscribeRequestSchema , async ( request : any ) => {
346
+ targetServer . setRequestHandler ( SubscribeRequestSchema , async ( request : any ) => {
314
347
const resource = this . resourcesMap . get ( request . params . uri ) ;
315
348
if ( ! resource ) {
316
349
throw new Error ( `Unknown resource: ${ request . params . uri } ` ) ;
@@ -325,7 +358,7 @@ export class MCPServer {
325
358
} ) ;
326
359
327
360
// TODO: Replace 'any' with the specific inferred request type from the SDK schema if available
328
- this . server . setRequestHandler ( UnsubscribeRequestSchema , async ( request : any ) => {
361
+ targetServer . setRequestHandler ( UnsubscribeRequestSchema , async ( request : any ) => {
329
362
const resource = this . resourcesMap . get ( request . params . uri ) ;
330
363
if ( ! resource ) {
331
364
throw new Error ( `Unknown resource: ${ request . params . uri } ` ) ;
0 commit comments