diff --git a/mcp_browser/proxy.py b/mcp_browser/proxy.py index 7e43288..79e2ba6 100644 --- a/mcp_browser/proxy.py +++ b/mcp_browser/proxy.py @@ -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']}") - - # Update registry with tools - if "result" in tools_response and "tools" in tools_response["result"]: - self.registry.update_tools(tools_response["result"]["tools"]) + # 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") + + if tools_data: + self.registry.update_tools(tools_data) # Also get tools from multi-server if enabled if self.multi_server: