@@ -270,6 +270,39 @@ export async function createServer() {
270270
271271 // Set up configuration change handler for tool discovery
272272 dynamicConfigManager . setConfigurationChangeHandler ( async ( config , changes ) => {
273+ // CLEANUP: Handle removed servers - terminate processes and clear tools
274+ if ( changes && changes . removedServers . length > 0 ) {
275+ for ( const serverName of changes . removedServers ) {
276+ try {
277+ server . log . info ( {
278+ operation : 'cleanup_removed_server' ,
279+ server_name : serverName
280+ } , `Cleaning up removed server: ${ serverName } ` ) ;
281+
282+ // Remove server completely (handles both active and dormant)
283+ const removed = await processManager . removeServerCompletely ( serverName ) ;
284+
285+ // Clear tools from cache
286+ stdioToolDiscoveryManager . clearServerTools ( serverName ) ;
287+
288+ server . log . info ( {
289+ operation : 'cleanup_removed_server_success' ,
290+ server_name : serverName ,
291+ removed_active : removed . active ,
292+ removed_dormant : removed . dormant
293+ } , `Server cleanup complete: ${ serverName } (active: ${ removed . active } , dormant: ${ removed . dormant } )` ) ;
294+
295+ } catch ( error ) {
296+ const errorMessage = error instanceof Error ? error . message : String ( error ) ;
297+ server . log . error ( {
298+ operation : 'cleanup_removed_server_failed' ,
299+ server_name : serverName ,
300+ error : errorMessage
301+ } , `Failed to cleanup removed server: ${ errorMessage } ` ) ;
302+ }
303+ }
304+ }
305+
273306 // Notify HTTP proxy manager of configuration changes
274307 await httpProxyManager . handleConfigurationUpdate ( config ) ;
275308
0 commit comments