55from urllib .parse import urlparse
66import base64
77
8+ from provision_lib import normalize_server_type , server_needs_recreate
9+
810def log (msg ):
911 print (f"[provision] { msg } " , flush = True )
1012
@@ -370,11 +372,9 @@ def delete_server(name, servers_by_name):
370372for s in servers :
371373 if not (s .get ('enabled' , True )):
372374 continue
373- name = s .get ('name' ); st = (s .get ('type' , 'SSE' ) or 'SSE' ). upper ( )
375+ name = s .get ('name' ); st = normalize_server_type (s .get ('type' ) )
374376 if not name :
375377 continue
376- if st in ('SSE' ,'STREAMABLE' ):
377- st = 'SSE' if st == 'SSE' else 'STREAMABLE_HTTP'
378378 body = {'name' : name , 'type' : st }
379379 # Pre-compute desired fields for STDIO so we can also update existing servers
380380 desired_cmd = None
@@ -435,9 +435,14 @@ def delete_server(name, servers_by_name):
435435
436436 # If server exists and updates are allowed, patch safe fields
437437 if name in srv_map :
438- if UPDATE_EXISTING and st in ('SSE' ,'STREAMABLE_HTTP' ):
438+ current = srv_info .get (name , {})
439+ if UPDATE_EXISTING and server_needs_recreate (current , st ):
440+ log (f"server transport cleanup: recreating { name } " )
441+ delete_server (name , srv_info )
442+ srv_map .pop (name , None )
443+ srv_info .pop (name , None )
444+ if UPDATE_EXISTING and name in srv_map and st in ('SSE' ,'STREAMABLE_HTTP' ):
439445 try :
440- current = srv_info .get (name , {})
441446 patch = {'uuid' : current .get ('uuid' ), 'name' : name , 'type' : st }
442447 # Always include required field for HTTP/SSE: url
443448 if desired_url :
@@ -454,9 +459,8 @@ def delete_server(name, servers_by_name):
454459 log (f"WARN server update { name } -> { r .status_code } : { r .text [:160 ]} " )
455460 except Exception :
456461 pass
457- elif UPDATE_EXISTING and st == 'STDIO' :
462+ elif UPDATE_EXISTING and name in srv_map and st == 'STDIO' :
458463 try :
459- current = srv_info .get (name , {})
460464 patch = {'uuid' : current .get ('uuid' ), 'name' : name , 'type' : st }
461465 # Always include required field for STDIO: command
462466 if desired_cmd is not None :
@@ -473,7 +477,8 @@ def delete_server(name, servers_by_name):
473477 log (f"WARN server update { name } -> { r .status_code } : { r .text [:160 ]} " )
474478 except Exception :
475479 pass
476- continue
480+ if name in srv_map :
481+ continue
477482 if st == 'STDIO' :
478483 if desired_cmd is not None :
479484 body ['command' ] = desired_cmd
0 commit comments