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 33 CancelledNotificationSchema ,
44 ClientCapabilities ,
55 ErrorCode ,
6+ isJSONRPCRequest ,
7+ isJSONRPCResponse ,
8+ isJSONRPCNotification ,
69 JSONRPCError ,
710 JSONRPCNotification ,
811 JSONRPCRequest ,
@@ -271,12 +274,14 @@ export abstract class Protocol<
271274 } ;
272275
273276 this . _transport . onmessage = ( message ) => {
274- if ( ! ( "method" in message ) ) {
277+ if ( isJSONRPCResponse ( message ) ) {
275278 this . _onresponse ( message ) ;
276- } else if ( "id" in message ) {
279+ } else if ( isJSONRPCRequest ( message ) ) {
277280 this . _onrequest ( message ) ;
278- } else {
281+ } else if ( isJSONRPCNotification ( message ) ) {
279282 this . _onnotification ( message ) ;
283+ } else {
284+ this . _onerror ( new Error ( `Unknown message type: ${ JSON . stringify ( message ) } ` ) ) ;
280285 }
281286 } ;
282287
@@ -437,7 +442,7 @@ export abstract class Protocol<
437442 this . _progressHandlers . delete ( messageId ) ;
438443 this . _cleanupTimeout ( messageId ) ;
439444
440- if ( "result" in response ) {
445+ if ( isJSONRPCResponse ( response ) ) {
441446 handler ( response ) ;
442447 } else {
443448 const error = new McpError (
Original file line number Diff line number Diff line change @@ -78,6 +78,9 @@ export const JSONRPCRequestSchema = z
7878 . merge ( RequestSchema )
7979 . strict ( ) ;
8080
81+ export const isJSONRPCRequest = ( value : unknown ) : value is JSONRPCRequest =>
82+ JSONRPCRequestSchema . safeParse ( value ) . success ;
83+
8184/**
8285 * A notification which does not expect a response.
8386 */
@@ -88,6 +91,11 @@ export const JSONRPCNotificationSchema = z
8891 . merge ( NotificationSchema )
8992 . strict ( ) ;
9093
94+ export const isJSONRPCNotification = (
95+ value : unknown
96+ ) : value is JSONRPCNotification =>
97+ JSONRPCNotificationSchema . safeParse ( value ) . success ;
98+
9199/**
92100 * A successful (non-error) response to a request.
93101 */
@@ -99,6 +107,9 @@ export const JSONRPCResponseSchema = z
99107 } )
100108 . strict ( ) ;
101109
110+ export const isJSONRPCResponse = ( value : unknown ) : value is JSONRPCResponse =>
111+ JSONRPCResponseSchema . safeParse ( value ) . success ;
112+
102113/**
103114 * Error codes defined by the JSON-RPC specification.
104115 */
You can’t perform that action at this time.
0 commit comments