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: