fix: fallback to real server when built-ins disabled

This commit is contained in:
gpt-5-codex 2025-10-10 23:15:09 +02:00 committed by Andre Heinecke
parent 6199f28e9e
commit 4b14d45e28
1 changed files with 32 additions and 7 deletions

View File

@ -116,9 +116,30 @@ class MCPBrowser:
# Determine which server to use
server_name = self._server_name or self.config.default_server
if not server_name or server_name not in self.config.servers:
if not server_name:
raise ValueError("No default MCP server configured")
if server_name not in self.config.servers:
raise ValueError(f"Server '{server_name}' not found in configuration")
# If built-ins are disabled but the selected server is builtin-only,
# fall back to the first enabled non-builtin server if available.
if (not self._enable_builtin_servers) and server_name == "builtin-only":
fallback_name = next(
(
name for name, cfg in self.config.servers.items()
if name != "builtin-only" and cfg.enabled
),
None
)
if fallback_name:
self.logger.info(
"Built-in servers disabled; falling back to '%s' instead of 'builtin-only'",
fallback_name,
)
server_name = fallback_name
self._server_name = fallback_name
server_config = self.config.servers[server_name]
if self._transport_override:
self._apply_transport_override(server_config)
@ -418,12 +439,16 @@ class MCPBrowser:
if self.server:
tools_response = await self.server.send_request("tools/list", {})
if "error" in tools_response:
raise RuntimeError(f"Failed to list tools: {tools_response['error']}")
# Normalize response structure
tools_data = None
if isinstance(tools_response, dict):
if "tools" in tools_response:
tools_data = tools_response["tools"]
elif "result" in tools_response and isinstance(tools_response["result"], dict):
tools_data = tools_response["result"].get("tools")
# Update registry with tools
if "result" in tools_response and "tools" in tools_response["result"]:
self.registry.update_tools(tools_response["result"]["tools"])
if tools_data:
self.registry.update_tools(tools_data)
# Also get tools from multi-server if enabled
if self.multi_server: