browser
Browse websites and interact with web content to access online information and perform web-based tasks through the MCP server.
Instructions
Browse websites and interact with web content
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| parameters | Yes |
Implementation Reference
- openai_tool2mcp/tools/browser.py:6-68 (handler)BrowserAdapter class: defines tool_id 'browser', translates MCP requests/responses for OpenAI web_browser tool. Core implementation logic for the browser tool.class BrowserAdapter(ToolAdapter): """Adapter for OpenAI's web browser tool""" @property def tool_id(self) -> str: """Get the MCP tool ID""" return "browser" @property def openai_tool_type(self) -> str: """Get the OpenAI tool type""" return "web_browser" @property def description(self) -> str: """Get the tool description""" return "Browse websites and interact with web content" async def translate_request(self, request: MCPRequest) -> dict: """ Translate MCP request to OpenAI parameters Args: request: The MCP request to translate Returns: Dictionary of OpenAI parameters """ # Extract URL and action url = request.parameters.get("url", "") action = request.parameters.get("action", "browse") logger.debug(f"Translating browser request for URL: {url}, action: {action}") # Return OpenAI parameters return {"url": url, "action": action} async def translate_response(self, response: dict) -> MCPResponse: """ Translate OpenAI response to MCP response Args: response: The OpenAI response to translate Returns: MCP response object """ # Extract content content = response.get("content", "") title = response.get("title", "") url = response.get("url", "") logger.debug(f"Translating browser response for URL: {url}") # Format content as markdown formatted_content = f"# {title}\n\n{content}" if title else content # Check for errors error = response.get("error") # Return MCP response return MCPResponse(content=formatted_content, error=error, context={"url": url, "title": title})
- openai_tool2mcp/server.py:53-60 (registration)Registration of BrowserAdapter instance in the adapters list and addition to tools_map if enabled.adapters = [WebSearchAdapter(), CodeInterpreterAdapter(), BrowserAdapter(), FileManagerAdapter()] for adapter in adapters: # Only register if the tool is enabled if adapter.openai_tool_type in self.config.tools: tools_map[adapter.tool_id] = adapter return tools_map
- openai_tool2mcp/tools/registry.py:48-52 (registration)ToolRegistry defines mapping for 'browser' tool to OpenAI's WEB_BROWSER, with description and enabled status."browser": { "openai_tool": OpenAIBuiltInTools.WEB_BROWSER.value, "enabled": OpenAIBuiltInTools.WEB_BROWSER.value in self.enabled_tools, "description": "Browse websites and access web content", },
- openai_tool2mcp/translator/mcp_to_openai.py:54-56 (registration)Tool ID mapping in translator: 'browser' to OpenAI 'web_browser' type."browser": "web_browser", "file-io": "file_search", }
- openai_tool2mcp/server.py:63-113 (helper)Dynamic registration of MCP tools using @mcp.tool decorator, creates handler that uses adapter for translation and invokes OpenAI client for browser tool execution."""Register tools with the MCP SDK""" for tool_id, adapter in self.tools_map.items(): # Define a tool handler for each adapter # Create a closure to properly capture the values def create_tool_handler(tool_id=tool_id, adapter=adapter): @self.mcp.tool(name=tool_id, description=adapter.description) async def tool_handler(**parameters): """ MCP tool handler for OpenAI tools. """ # Create an MCP request from the parameters mcp_request = MCPRequest(parameters=parameters) # Translate the request parameters using the adapter translated_params = await adapter.translate_request(mcp_request) # Create an OpenAI tool request openai_request = mcp_to_openai.translate_request(mcp_request, tool_id) # Override the parameters with the adapter-specific ones openai_request.parameters = translated_params try: # Call OpenAI API to execute the tool openai_response = await self.openai_client.invoke_tool(openai_request) # Translate the OpenAI response to MCP format using the adapter if openai_response.tool_outputs: # Use the adapter to translate the tool-specific response mcp_response = await adapter.translate_response(openai_response.tool_outputs[0].output) # Add thread_id to context for state management if mcp_response.context is None: mcp_response.context = {} mcp_response.context["thread_id"] = openai_response.thread_id # Return the response content which will be used by MCP SDK return mcp_response.content else: # Fallback to generic translation mcp_response = openai_to_mcp.translate_response(openai_response) return mcp_response.content except Exception as e: logger.error(f"Error invoking tool {tool_id}: {e!s}") # Using custom exception class to fix TRY003 raise ToolInvocationError() from e return tool_handler # Create and register the tool handler create_tool_handler()