@@ -87,6 +87,7 @@ export class Server extends Protocol<ServerContext> {
8787 private _capabilities : ServerCapabilities ;
8888 private _instructions ?: string ;
8989 private _jsonSchemaValidator : jsonSchemaValidator ;
90+ private _receivedInitialize = false ;
9091
9192 /**
9293 * Callback for when initialization has fully completed (i.e., the client has sent an `notifications/initialized` notification).
@@ -106,7 +107,12 @@ export class Server extends Protocol<ServerContext> {
106107 this . _jsonSchemaValidator = options ?. jsonSchemaValidator ?? new DefaultJsonSchemaValidator ( ) ;
107108
108109 this . setRequestHandler ( 'initialize' , request => this . _oninitialize ( request ) ) ;
109- this . setNotificationHandler ( 'notifications/initialized' , ( ) => this . oninitialized ?.( ) ) ;
110+ this . setNotificationHandler ( 'notifications/initialized' , ( ) => {
111+ if ( ! this . _receivedInitialize ) {
112+ throw new ProtocolError ( ProtocolErrorCode . InvalidRequest , 'Server not initialized' ) ;
113+ }
114+ this . oninitialized ?.( ) ;
115+ } ) ;
110116
111117 if ( this . _capabilities . logging ) {
112118 this . _registerLoggingHandler ( ) ;
@@ -184,8 +190,19 @@ export class Server extends Protocol<ServerContext> {
184190 method : string ,
185191 handler : ( request : JSONRPCRequest , ctx : ServerContext ) => Promise < Result >
186192 ) : ( request : JSONRPCRequest , ctx : ServerContext ) => Promise < Result > {
193+ const lifecycleHandler : ( request : JSONRPCRequest , ctx : ServerContext ) => Promise < Result > = async ( request , ctx ) => {
194+ if ( ! ctx . http && ctx . sessionId === undefined && ! this . _receivedInitialize && method !== 'initialize' && method !== 'ping' ) {
195+ throw new ProtocolError ( ProtocolErrorCode . InvalidRequest , 'Server not initialized' ) ;
196+ }
197+ const result = await handler ( request , ctx ) ;
198+ if ( method === 'initialize' ) {
199+ this . _receivedInitialize = true ;
200+ }
201+ return result ;
202+ } ;
203+
187204 if ( method !== 'tools/call' ) {
188- return handler ;
205+ return lifecycleHandler ;
189206 }
190207 return async ( request , ctx ) => {
191208 const validatedRequest = parseSchema ( CallToolRequestSchema , request ) ;
@@ -195,7 +212,7 @@ export class Server extends Protocol<ServerContext> {
195212 throw new ProtocolError ( ProtocolErrorCode . InvalidParams , `Invalid tools/call request: ${ errorMessage } ` ) ;
196213 }
197214
198- const result = await handler ( request , ctx ) ;
215+ const result = await lifecycleHandler ( request , ctx ) ;
199216
200217 const validationResult = parseSchema ( CallToolResultSchema , result ) ;
201218 if ( ! validationResult . success ) {
0 commit comments