diff --git a/tools/mcp_tool.py b/tools/mcp_tool.py index 2a4d485f8d1..fabc1a74240 100644 --- a/tools/mcp_tool.py +++ b/tools/mcp_tool.py @@ -2340,6 +2340,7 @@ class MCPServerTask: self.name, ) self._tools = [] + self._register_discovered_tools_if_needed() return async with self._rpc_lock: tools_result = await self.session.list_tools() @@ -2348,6 +2349,23 @@ class MCPServerTask: if hasattr(tools_result, "tools") else [] ) + self._register_discovered_tools_if_needed() + + def _register_discovered_tools_if_needed(self) -> None: + """Re-register tools after a post-ready reconnect if needed. + + Initial registration is performed by ``_discover_and_register_server`` + after ``start()`` completes. During a later reconnect, however, + ``_ready`` remains set; if outage handling previously deregistered + stale tools (parking calls ``_deregister_tools``), a successful + revival must publish the freshly discovered tools again — otherwise + the transport comes back alive with zero registered tools. + """ + if not self._ready.is_set() or self._registered_tool_names: + return + self._registered_tool_names = _register_server_tools( + self.name, self, self._config + ) async def run(self, config: dict): """Long-lived coroutine: connect, discover tools, wait, disconnect.