@@ -102,6 +102,8 @@ export class Server extends Protocol<ServerContext> {
102102 private _instructions ?: string ;
103103 private _jsonSchemaValidator : jsonSchemaValidator ;
104104 private _experimental ?: { tasks : ExperimentalServerTasks } ;
105+ private _receivedInitialize = false ;
106+ private _initialized = false ;
105107
106108 /**
107109 * Callback for when initialization has fully completed (i.e., the client has sent an `notifications/initialized` notification).
@@ -132,7 +134,13 @@ export class Server extends Protocol<ServerContext> {
132134 }
133135
134136 this . setRequestHandler ( 'initialize' , request => this . _oninitialize ( request ) ) ;
135- this . setNotificationHandler ( 'notifications/initialized' , ( ) => this . oninitialized ?.( ) ) ;
137+ this . setNotificationHandler ( 'notifications/initialized' , ( ) => {
138+ if ( ! this . _receivedInitialize ) {
139+ throw new ProtocolError ( ProtocolErrorCode . InvalidRequest , 'Server not initialized' ) ;
140+ }
141+ this . _initialized = true ;
142+ this . oninitialized ?.( ) ;
143+ } ) ;
136144
137145 if ( this . _capabilities . logging ) {
138146 this . _registerLoggingHandler ( ) ;
@@ -226,8 +234,19 @@ export class Server extends Protocol<ServerContext> {
226234 method : string ,
227235 handler : ( request : JSONRPCRequest , ctx : ServerContext ) => Promise < Result >
228236 ) : ( request : JSONRPCRequest , ctx : ServerContext ) => Promise < Result > {
237+ const lifecycleHandler : ( request : JSONRPCRequest , ctx : ServerContext ) => Promise < Result > = async ( request , ctx ) => {
238+ if ( ! ctx . http && ctx . sessionId === undefined && ! this . _receivedInitialize && method !== 'initialize' && method !== 'ping' ) {
239+ throw new ProtocolError ( ProtocolErrorCode . InvalidRequest , 'Server not initialized' ) ;
240+ }
241+ const result = await handler ( request , ctx ) ;
242+ if ( method === 'initialize' ) {
243+ this . _receivedInitialize = true ;
244+ }
245+ return result ;
246+ } ;
247+
229248 if ( method !== 'tools/call' ) {
230- return handler ;
249+ return lifecycleHandler ;
231250 }
232251 return async ( request , ctx ) => {
233252 const validatedRequest = parseSchema ( CallToolRequestSchema , request ) ;
@@ -239,7 +258,7 @@ export class Server extends Protocol<ServerContext> {
239258
240259 const { params } = validatedRequest . data ;
241260
242- const result = await handler ( request , ctx ) ;
261+ const result = await lifecycleHandler ( request , ctx ) ;
243262
244263 // When task creation is requested, validate and return CreateTaskResult
245264 if ( params . task ) {
0 commit comments