Skip to main content
Glama

browse_to

Navigate to any URL and retrieve the full HTML content for web scraping, data extraction, or automated browsing tasks.

Instructions

Navigate to a specific URL and return the page's HTML content. Args: url: The full URL to navigate to context: Optional context object for logging (ignored) Returns: The full HTML content of the page

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYes
contextNo

Implementation Reference

  • The core handler function for the 'browse_to' tool. Uses Playwright to launch a browser (if needed), create a new page, navigate to the given URL with networkidle wait and 30s timeout, ignoring HTTPS errors, and returns the full HTML content of the page.
    @mcp.tool() async def browse_to(url: str, context: Optional[Any] = None) -> str: """ Navigate to a specific URL and return the page's HTML content. Args: url: The full URL to navigate to context: Optional context object for logging (ignored) Returns: The full HTML content of the page """ global _current_page, _browser, _browser_context # Ensure browser is launched with SSL validation disabled _, browser_context = await _ensure_browser() # Close any existing page await _close_current_page() # Optional logging, but do nothing with context print(f"Navigating to {url}", file=sys.stderr) try: # Create a new page and navigate _current_page = await browser_context.new_page() # Additional options to handle various SSL/security issues await _current_page.goto(url, wait_until='networkidle', timeout=30000, # 30 seconds timeout ) # Get full page content including dynamically loaded JavaScript page_content = await _current_page.content() # Optional: extract additional metadata try: title = await _current_page.title() print(f"Page title: {title}", file=sys.stderr) except Exception: pass return page_content except Exception as e: print(f"Error navigating to {url}: {e}", file=sys.stderr) raise
  • The @mcp.tool() decorator registers the browse_to function as an MCP tool.
    @mcp.tool()
  • Helper function to ensure the Playwright Chromium browser and context are initialized, with HTTPS errors ignored.
    async def _ensure_browser(): """Ensure a browser instance is available with SSL validation disabled""" global _browser, _browser_context, _playwright_instance if _browser is None: playwright_module = _import_playwright() _playwright_instance = await playwright_module().start() _browser = await _playwright_instance.chromium.launch() # Create a browser context that ignores HTTPS errors _browser_context = await _browser.new_context( ignore_https_errors=True, # Ignore SSL certificate errors ) return _browser, _browser_context
  • Helper to close the current browser page before navigating to a new URL.
    async def _close_current_page(): """Close the current page if it exists""" global _current_page if _current_page: try: await _current_page.close() except Exception: pass _current_page = None

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/random-robbie/mcp-web-browser'

If you have feedback or need assistance with the MCP directory API, please join our Discord server