@@ -13,22 +13,20 @@ import {
1313 ListTasksResultSchema ,
1414 CancelTaskRequestSchema ,
1515 CancelTaskResultSchema ,
16- isJSONRPCError ,
16+ isJSONRPCErrorResponse ,
1717 isJSONRPCRequest ,
18- isJSONRPCResponse ,
18+ isJSONRPCResultResponse ,
1919 isJSONRPCNotification ,
20- JSONRPCError ,
20+ JSONRPCErrorResponse ,
2121 JSONRPCNotification ,
2222 JSONRPCRequest ,
2323 JSONRPCResponse ,
2424 McpError ,
25- Notification ,
2625 PingRequestSchema ,
2726 Progress ,
2827 ProgressNotification ,
2928 ProgressNotificationSchema ,
3029 RELATED_TASK_META_KEY ,
31- Request ,
3230 RequestId ,
3331 Result ,
3432 ServerCapabilities ,
@@ -41,7 +39,11 @@ import {
4139 CancelledNotification ,
4240 Task ,
4341 TaskStatusNotification ,
44- TaskStatusNotificationSchema
42+ TaskStatusNotificationSchema ,
43+ Request ,
44+ Notification ,
45+ JSONRPCResultResponse ,
46+ isTaskAugmentedRequestParams
4547} from '../types.js' ;
4648import { Transport , TransportSendOptions } from './transport.js' ;
4749import { AuthInfo } from '../server/auth/types.js' ;
@@ -324,7 +326,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
324326 > = new Map ( ) ;
325327 private _requestHandlerAbortControllers : Map < RequestId , AbortController > = new Map ( ) ;
326328 private _notificationHandlers : Map < string , ( notification : JSONRPCNotification ) => Promise < void > > = new Map ( ) ;
327- private _responseHandlers : Map < number , ( response : JSONRPCResponse | Error ) => void > = new Map ( ) ;
329+ private _responseHandlers : Map < number , ( response : JSONRPCResultResponse | Error ) => void > = new Map ( ) ;
328330 private _progressHandlers : Map < number , ProgressCallback > = new Map ( ) ;
329331 private _timeoutInfo : Map < number , TimeoutInfo > = new Map ( ) ;
330332 private _pendingDebouncedNotifications = new Set < string > ( ) ;
@@ -335,7 +337,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
335337 private _taskStore ?: TaskStore ;
336338 private _taskMessageQueue ?: TaskMessageQueue ;
337339
338- private _requestResolvers : Map < RequestId , ( response : JSONRPCResponse | Error ) => void > = new Map ( ) ;
340+ private _requestResolvers : Map < RequestId , ( response : JSONRPCResultResponse | Error ) => void > = new Map ( ) ;
339341
340342 /**
341343 * Callback for when the connection is closed for any reason.
@@ -408,18 +410,18 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
408410 const requestId = message . id ;
409411
410412 // Lookup resolver in _requestResolvers map
411- const resolver = this . _requestResolvers . get ( requestId ) ;
413+ const resolver = this . _requestResolvers . get ( requestId as RequestId ) ;
412414
413415 if ( resolver ) {
414416 // Remove resolver from map after invocation
415- this . _requestResolvers . delete ( requestId ) ;
417+ this . _requestResolvers . delete ( requestId as RequestId ) ;
416418
417419 // Invoke resolver with response or error
418420 if ( queuedMessage . type === 'response' ) {
419- resolver ( message as JSONRPCResponse ) ;
421+ resolver ( message as JSONRPCResultResponse ) ;
420422 } else {
421423 // Convert JSONRPCError to McpError
422- const errorMessage = message as JSONRPCError ;
424+ const errorMessage = message as JSONRPCErrorResponse ;
423425 const error = new McpError (
424426 errorMessage . error . code ,
425427 errorMessage . error . message ,
@@ -546,6 +548,9 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
546548 }
547549
548550 private async _oncancel ( notification : CancelledNotification ) : Promise < void > {
551+ if ( ! notification . params . requestId ) {
552+ return ;
553+ }
549554 // Handle request cancellation
550555 const controller = this . _requestHandlerAbortControllers . get ( notification . params . requestId ) ;
551556 controller ?. abort ( notification . params . reason ) ;
@@ -616,7 +621,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
616621 const _onmessage = this . _transport ?. onmessage ;
617622 this . _transport . onmessage = ( message , extra ) => {
618623 _onmessage ?.( message , extra ) ;
619- if ( isJSONRPCResponse ( message ) || isJSONRPCError ( message ) ) {
624+ if ( isJSONRPCResultResponse ( message ) || isJSONRPCErrorResponse ( message ) ) {
620625 this . _onresponse ( message ) ;
621626 } else if ( isJSONRPCRequest ( message ) ) {
622627 this . _onrequest ( message , extra ) ;
@@ -675,7 +680,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
675680 const relatedTaskId = request . params ?. _meta ?. [ RELATED_TASK_META_KEY ] ?. taskId ;
676681
677682 if ( handler === undefined ) {
678- const errorResponse : JSONRPCError = {
683+ const errorResponse : JSONRPCErrorResponse = {
679684 jsonrpc : '2.0' ,
680685 id : request . id ,
681686 error : {
@@ -706,7 +711,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
706711 const abortController = new AbortController ( ) ;
707712 this . _requestHandlerAbortControllers . set ( request . id , abortController ) ;
708713
709- const taskCreationParams = request . params ?. task ;
714+ const taskCreationParams = isTaskAugmentedRequestParams ( request . params ) ? request . params . task : undefined ;
710715 const taskStore = this . _taskStore ? this . requestTaskStore ( request , capturedTransport ?. sessionId ) : undefined ;
711716
712717 const fullExtra : RequestHandlerExtra < SendRequestT , SendNotificationT > = {
@@ -791,7 +796,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
791796 return ;
792797 }
793798
794- const errorResponse : JSONRPCError = {
799+ const errorResponse : JSONRPCErrorResponse = {
795800 jsonrpc : '2.0' ,
796801 id : request . id ,
797802 error : {
@@ -852,14 +857,14 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
852857 handler ( params ) ;
853858 }
854859
855- private _onresponse ( response : JSONRPCResponse | JSONRPCError ) : void {
860+ private _onresponse ( response : JSONRPCResponse | JSONRPCErrorResponse ) : void {
856861 const messageId = Number ( response . id ) ;
857862
858863 // Check if this is a response to a queued request
859864 const resolver = this . _requestResolvers . get ( messageId ) ;
860865 if ( resolver ) {
861866 this . _requestResolvers . delete ( messageId ) ;
862- if ( isJSONRPCResponse ( response ) ) {
867+ if ( isJSONRPCResultResponse ( response ) ) {
863868 resolver ( response ) ;
864869 } else {
865870 const error = new McpError ( response . error . code , response . error . message , response . error . data ) ;
@@ -879,7 +884,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
879884
880885 // Keep progress handler alive for CreateTaskResult responses
881886 let isTaskResponse = false ;
882- if ( isJSONRPCResponse ( response ) && response . result && typeof response . result === 'object' ) {
887+ if ( isJSONRPCResultResponse ( response ) && response . result && typeof response . result === 'object' ) {
883888 const result = response . result as Record < string , unknown > ;
884889 if ( result . task && typeof result . task === 'object' ) {
885890 const task = result . task as Record < string , unknown > ;
@@ -894,7 +899,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
894899 this . _progressHandlers . delete ( messageId ) ;
895900 }
896901
897- if ( isJSONRPCResponse ( response ) ) {
902+ if ( isJSONRPCResultResponse ( response ) ) {
898903 handler ( response ) ;
899904 } else {
900905 const error = McpError . fromError ( response . error . code , response . error . message , response . error . data ) ;
@@ -1191,7 +1196,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
11911196 const relatedTaskId = relatedTask ?. taskId ;
11921197 if ( relatedTaskId ) {
11931198 // Store the response resolver for this request so responses can be routed back
1194- const responseResolver = ( response : JSONRPCResponse | Error ) => {
1199+ const responseResolver = ( response : JSONRPCResultResponse | Error ) => {
11951200 const handler = this . _responseHandlers . get ( messageId ) ;
11961201 if ( handler ) {
11971202 handler ( response ) ;
0 commit comments