bwb-browser
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BWB_CDP_PORT | No | Remote debugging port (0 for random free port) | 0 |
| BWB_HEADLESS | No | Run headless (true/false) | true |
| BWB_CHROME_PATH | No | Path to Chrome/Chromium binary | auto-detected |
| BWB_NAV_TIMEOUT | No | Navigation timeout in ms | 30000 |
| BWB_USER_DATA_DIR | No | Browser profile directory | ~/.cache/bwb-browser |
| BWB_SCREENSHOTS_DIR | No | Screenshot save location | ~/bwb-screenshots/ |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| browser_gotoA | Navigate to a URL. Returns page title and URL. v4: static-first — plain pages are fetched + extracted with zero Chromium; JS pages escalate to CDP automatically (see mode field). |
| browser_screenshotB | Take a screenshot of the current page. Pass a CSS selector to capture just that element. |
| browser_htmlB | Get HTML source of the page or a CSS selector. |
| browser_textB | Get visible text content of the page or a CSS selector. |
| browser_backA | Go back in browser history (like clicking the browser back button). |
| browser_clickB | Click an element by CSS selector. Uses CDP Input.dispatchMouseEvent for native events. |
| browser_fillB | Clear and fill an input field with text using native CDP Input.insertText. |
| browser_elementsB | List interactive elements by kind: links, buttons, inputs, headings. |
| browser_evalC | Execute JavaScript in the page context. |
| browser_setViewportA | Change the viewport size (width × height). Useful for responsive testing. |
| browser_actA | GROUNDBREAKING: Natural language page interaction. One tool call does what normally takes 5-10. Examples: 'search for laptops under $1000', 'click the login button', 'go to google.com', 'fill email with test@test.com', 'extract the prices', 'scroll down'. Uses rule-based DOM heuristics — no LLM dependency. |
| browser_watchA | GROUNDBREAKING: Live capture of page events (console, network, navigation, exceptions). Start recording, browse around, then poll to see everything that happened. |
| browser_diagnoseA | Full page health diagnostic. Returns performance metrics, console errors, broken images, meta tags, and a health score. Like Lighthouse for your agent. |
| browser_fingerprintA | Apply a realistic browser fingerprint to reduce false-positive automation detection in CI/testing. Normalizes navigator.webdriver, plugins, languages, chrome.runtime, and user-agent for more realistic test conditions. |
| browser_waitForSelectorA | Wait for a CSS selector to appear (visible) or disappear from the DOM. Polls every 200ms until found or timeout. |
| browser_newTabA | Create a new browser tab, optionally navigate to a URL. Automatically switches to the new tab. |
| browser_closeTabA | Close a browser tab by targetId. If no targetId provided, closes the active tab. Cannot close the last remaining tab — use browser_restart instead. |
| browser_switchTabA | Switch to a different browser tab by targetId. |
| browser_listTabsA | List all open browser tabs with their IDs, titles, URLs, and active status. |
| browser_saveCookiesA | Save the current browser session (cookies) to disk. 'Login once, agent works for days.' Sessions persist across agent and server restarts. |
| browser_loadCookiesA | Load a saved browser session (cookies) from disk. Navigate to the target domain after loading for the cookies to take effect. |
| browser_listSessionsA | List all saved browser sessions with cookie counts and save dates. |
| browser_downloadA | Download media from a URL (video, audio, subtitles, thumbnail). Requires yt-dlp on the system — if missing, returns install instructions instead of failing silently. No silent installs, ever. |
| browser_exportA | Export findings/text to a file. md/txt/html always work (zero deps). docx/pdf/pptx need python libs — if missing, returns install instructions. No silent installs. |
| browser_statusA | Get browser and page status including opened tabs and connection info. v4: includes live resource readings (MCP + Chromium MB, budgets) so the agent sees pressure before Android does. |
| browser_restartA | Cleanly restart the browser process. Useful for freeing memory, clearing state, or recovering from issues during long-running sessions. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 26 tools
Most tools have clearly distinct purposes: navigation, DOM extraction, tab management, cookies, sessions, and utility actions are clearly separated. Minor overlap exists between browser_status and browser_listTabs (both report on open tabs) and between browser_text and browser_html (both retrieve page content), but these are distinguishable by their output types.
The browser_ prefix provides a consistent namespace, but the action portion mixes conventions: standalone verbs (click, fill, goto, watch), nouns (text, html, status), and camelCase compounds (setViewport, waitForSelector, listTabs, saveCookies). This is readable but lacks the uniform verb_noun pattern seen in the highest-coherence servers.
At 26 tools, the server technically crosses the 25-tool 'too many' threshold, but the count is justified by the broad scope of browser automation (navigation, DOM, tabs, cookies, download/export, diagnostics). It feels heavy rather than bloated, with only a few niche tools like browser_fingerprint and browser_export being arguably optional.
The domain is well covered: navigation, interaction, DOM extraction, tab management, sessions, waiting, and diagnostics all have dedicated tools. Minor gaps exist—there is no explicit browser_forward, browser_reload, or browser_scroll—but these can be worked around with browser_eval or browser_act, so agents won't hit dead ends.