parallel mcp initialization

frdel committed Feb 10, 2026 at 17:31 UTC 6734b9dc0f562dad1abc83fd2197f44153e5654b
1 file changed +22 -6
python/helpers/mcp_handler.py
+22 -6
@@ -284,10 +284,9 @@ class MCPServerRemote(BaseModel):
284 key = "url" # remap serverUrl to url
285
286 setattr(self, key, value)
287 - # We already run in an event loop, dont believe Pylance
288 - return asyncio.run(self.__on_update())
287 + return self
288
290 - async def __on_update(self) -> "MCPServerRemote":
289 + async def initialize(self) -> "MCPServerRemote":
290 await self.__client.update_tools() # type: ignore
291 return self
292
@@ -361,10 +360,9 @@ class MCPServerLocal(BaseModel):
360 if key == "name":
361 value = normalize_name(value)
362 setattr(self, key, value)
364 - # We already run in an event loop, dont believe Pylance
365 - return asyncio.run(self.__on_update())
363 + return self
364
367 - async def __on_update(self) -> "MCPServerLocal":
365 + async def initialize(self) -> "MCPServerLocal":
366 await self.__client.update_tools() # type: ignore
367 return self
368
@@ -623,6 +621,24 @@ class MCPConfig(BaseModel):
621 {"config": server_item, "error": error_msg, "name": server_name}
622 )
623
624 + # Initialize all servers in parallel (fetch tools concurrently)
625 + if self.servers:
626 + async def _init_server(server):
627 + try:
628 + await server.initialize()
629 + except Exception as e:
630 + error_msg = str(e)
631 + PrintStyle(
632 + background_color="grey", font_color="red", padding=True
633 + ).print(
634 + f"MCPConfig::__init__: Failed to initialize MCPServer '{server.name}': {error_msg}"
635 + )
636 +
637 + async def _init_all():
638 + await asyncio.gather(*[_init_server(s) for s in self.servers])
639 +
640 + asyncio.run(_init_all())
641 +
642 def get_server_log(self, server_name: str) -> str:
643 with self.__lock:
644 for server in self.servers: