File tree Expand file tree Collapse file tree 2 files changed +20
-4
lines changed Expand file tree Collapse file tree 2 files changed +20
-4
lines changed Original file line number Diff line number Diff line change 3
3
CancelledNotificationSchema ,
4
4
ClientCapabilities ,
5
5
ErrorCode ,
6
+ isJSONRPCRequest ,
7
+ isJSONRPCResponse ,
8
+ isJSONRPCNotification ,
6
9
JSONRPCError ,
7
10
JSONRPCNotification ,
8
11
JSONRPCRequest ,
@@ -271,12 +274,14 @@ export abstract class Protocol<
271
274
} ;
272
275
273
276
this . _transport . onmessage = ( message ) => {
274
- if ( ! ( "method" in message ) ) {
277
+ if ( isJSONRPCResponse ( message ) ) {
275
278
this . _onresponse ( message ) ;
276
- } else if ( "id" in message ) {
279
+ } else if ( isJSONRPCRequest ( message ) ) {
277
280
this . _onrequest ( message ) ;
278
- } else {
281
+ } else if ( isJSONRPCNotification ( message ) ) {
279
282
this . _onnotification ( message ) ;
283
+ } else {
284
+ this . _onerror ( new Error ( `Unknown message type: ${ JSON . stringify ( message ) } ` ) ) ;
280
285
}
281
286
} ;
282
287
@@ -437,7 +442,7 @@ export abstract class Protocol<
437
442
this . _progressHandlers . delete ( messageId ) ;
438
443
this . _cleanupTimeout ( messageId ) ;
439
444
440
- if ( "result" in response ) {
445
+ if ( isJSONRPCResponse ( response ) ) {
441
446
handler ( response ) ;
442
447
} else {
443
448
const error = new McpError (
Original file line number Diff line number Diff line change @@ -78,6 +78,9 @@ export const JSONRPCRequestSchema = z
78
78
. merge ( RequestSchema )
79
79
. strict ( ) ;
80
80
81
+ export const isJSONRPCRequest = ( value : unknown ) : value is JSONRPCRequest =>
82
+ JSONRPCRequestSchema . safeParse ( value ) . success ;
83
+
81
84
/**
82
85
* A notification which does not expect a response.
83
86
*/
@@ -88,6 +91,11 @@ export const JSONRPCNotificationSchema = z
88
91
. merge ( NotificationSchema )
89
92
. strict ( ) ;
90
93
94
+ export const isJSONRPCNotification = (
95
+ value : unknown
96
+ ) : value is JSONRPCNotification =>
97
+ JSONRPCNotificationSchema . safeParse ( value ) . success ;
98
+
91
99
/**
92
100
* A successful (non-error) response to a request.
93
101
*/
@@ -99,6 +107,9 @@ export const JSONRPCResponseSchema = z
99
107
} )
100
108
. strict ( ) ;
101
109
110
+ export const isJSONRPCResponse = ( value : unknown ) : value is JSONRPCResponse =>
111
+ JSONRPCResponseSchema . safeParse ( value ) . success ;
112
+
102
113
/**
103
114
* Error codes defined by the JSON-RPC specification.
104
115
*/
You can’t perform that action at this time.
0 commit comments