@@ -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' ;
@@ -326,7 +328,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
326328 > = new Map ( ) ;
327329 private _requestHandlerAbortControllers : Map < RequestId , AbortController > = new Map ( ) ;
328330 private _notificationHandlers : Map < string , ( notification : JSONRPCNotification ) => Promise < void > > = new Map ( ) ;
329- private _responseHandlers : Map < number , ( response : JSONRPCResponse | Error ) => void > = new Map ( ) ;
331+ private _responseHandlers : Map < number , ( response : JSONRPCResultResponse | Error ) => void > = new Map ( ) ;
330332 private _progressHandlers : Map < number , ProgressCallback > = new Map ( ) ;
331333 private _timeoutInfo : Map < number , TimeoutInfo > = new Map ( ) ;
332334 private _pendingDebouncedNotifications = new Set < string > ( ) ;
@@ -337,7 +339,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
337339 private _taskStore ?: TaskStore ;
338340 private _taskMessageQueue ?: TaskMessageQueue ;
339341
340- private _requestResolvers : Map < RequestId , ( response : JSONRPCResponse | Error ) => void > = new Map ( ) ;
342+ private _requestResolvers : Map < RequestId , ( response : JSONRPCResultResponse | Error ) => void > = new Map ( ) ;
341343
342344 /**
343345 * Callback for when the connection is closed for any reason.
@@ -410,18 +412,18 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
410412 const requestId = message . id ;
411413
412414 // Lookup resolver in _requestResolvers map
413- const resolver = this . _requestResolvers . get ( requestId ) ;
415+ const resolver = this . _requestResolvers . get ( requestId as RequestId ) ;
414416
415417 if ( resolver ) {
416418 // Remove resolver from map after invocation
417- this . _requestResolvers . delete ( requestId ) ;
419+ this . _requestResolvers . delete ( requestId as RequestId ) ;
418420
419421 // Invoke resolver with response or error
420422 if ( queuedMessage . type === 'response' ) {
421- resolver ( message as JSONRPCResponse ) ;
423+ resolver ( message as JSONRPCResultResponse ) ;
422424 } else {
423425 // Convert JSONRPCError to McpError
424- const errorMessage = message as JSONRPCError ;
426+ const errorMessage = message as JSONRPCErrorResponse ;
425427 const error = new McpError (
426428 errorMessage . error . code ,
427429 errorMessage . error . message ,
@@ -548,6 +550,9 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
548550 }
549551
550552 private async _oncancel ( notification : CancelledNotification ) : Promise < void > {
553+ if ( ! notification . params . requestId ) {
554+ return ;
555+ }
551556 // Handle request cancellation
552557 const controller = this . _requestHandlerAbortControllers . get ( notification . params . requestId ) ;
553558 controller ?. abort ( notification . params . reason ) ;
@@ -618,7 +623,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
618623 const _onmessage = this . _transport ?. onmessage ;
619624 this . _transport . onmessage = ( message , extra ) => {
620625 _onmessage ?.( message , extra ) ;
621- if ( isJSONRPCResponse ( message ) || isJSONRPCError ( message ) ) {
626+ if ( isJSONRPCResultResponse ( message ) || isJSONRPCErrorResponse ( message ) ) {
622627 this . _onresponse ( message ) ;
623628 } else if ( isJSONRPCRequest ( message ) ) {
624629 this . _onrequest ( message , extra ) ;
@@ -677,7 +682,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
677682 const relatedTaskId = request . params ?. _meta ?. [ RELATED_TASK_META_KEY ] ?. taskId ;
678683
679684 if ( handler === undefined ) {
680- const errorResponse : JSONRPCError = {
685+ const errorResponse : JSONRPCErrorResponse = {
681686 jsonrpc : '2.0' ,
682687 id : request . id ,
683688 error : {
@@ -708,7 +713,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
708713 const abortController = new AbortController ( ) ;
709714 this . _requestHandlerAbortControllers . set ( request . id , abortController ) ;
710715
711- const taskCreationParams = request . params ?. task ;
716+ const taskCreationParams = isTaskAugmentedRequestParams ( request . params ) ? request . params . task : undefined ;
712717 const taskStore = this . _taskStore ? this . requestTaskStore ( request , capturedTransport ?. sessionId ) : undefined ;
713718
714719 const fullExtra : RequestHandlerExtra < SendRequestT , SendNotificationT > = this . createRequestExtra ( {
@@ -765,7 +770,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
765770 return ;
766771 }
767772
768- const errorResponse : JSONRPCError = {
773+ const errorResponse : JSONRPCErrorResponse = {
769774 jsonrpc : '2.0' ,
770775 id : request . id ,
771776 error : {
@@ -880,14 +885,14 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
880885 handler ( params ) ;
881886 }
882887
883- private _onresponse ( response : JSONRPCResponse | JSONRPCError ) : void {
888+ private _onresponse ( response : JSONRPCResponse | JSONRPCErrorResponse ) : void {
884889 const messageId = Number ( response . id ) ;
885890
886891 // Check if this is a response to a queued request
887892 const resolver = this . _requestResolvers . get ( messageId ) ;
888893 if ( resolver ) {
889894 this . _requestResolvers . delete ( messageId ) ;
890- if ( isJSONRPCResponse ( response ) ) {
895+ if ( isJSONRPCResultResponse ( response ) ) {
891896 resolver ( response ) ;
892897 } else {
893898 const error = new McpError ( response . error . code , response . error . message , response . error . data ) ;
@@ -907,7 +912,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
907912
908913 // Keep progress handler alive for CreateTaskResult responses
909914 let isTaskResponse = false ;
910- if ( isJSONRPCResponse ( response ) && response . result && typeof response . result === 'object' ) {
915+ if ( isJSONRPCResultResponse ( response ) && response . result && typeof response . result === 'object' ) {
911916 const result = response . result as Record < string , unknown > ;
912917 if ( result . task && typeof result . task === 'object' ) {
913918 const task = result . task as Record < string , unknown > ;
@@ -922,7 +927,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
922927 this . _progressHandlers . delete ( messageId ) ;
923928 }
924929
925- if ( isJSONRPCResponse ( response ) ) {
930+ if ( isJSONRPCResultResponse ( response ) ) {
926931 handler ( response ) ;
927932 } else {
928933 const error = McpError . fromError ( response . error . code , response . error . message , response . error . data ) ;
@@ -1219,7 +1224,7 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
12191224 const relatedTaskId = relatedTask ?. taskId ;
12201225 if ( relatedTaskId ) {
12211226 // Store the response resolver for this request so responses can be routed back
1222- const responseResolver = ( response : JSONRPCResponse | Error ) => {
1227+ const responseResolver = ( response : JSONRPCResultResponse | Error ) => {
12231228 const handler = this . _responseHandlers . get ( messageId ) ;
12241229 if ( handler ) {
12251230 handler ( response ) ;
0 commit comments