usable-browser-agent-free
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| UBA_PORT | No | Port for the local WebSocket connection between the MCP server and the browser extension. Default is 8876. The published extension connects to this port, so keep the default in the free tier. | 8876 |
| UBA_SECRETS_FILE | No | Path to the secrets vault file (JSON array of credential entries). Default is ~/.config/usable-browser-agent/secrets.json. The server warns if the file is readable by group/other users; keep it at mode 0600. | ~/.config/usable-browser-agent/secrets.json |
| UBA_STRICT_SECRETS | No | Hardened mode is on by default: browser_eval (arbitrary-JS escape hatch) is disabled and screenshots are blocked whenever any password field exists, even if empty. Set to '0' to opt out of hardened mode. | 1 |
| UBA_BROWSER_APP_NAME | No | (macOS, optional) Overrides which application the OS-level input tools focus before a trusted click. Defaults to 'Firefox' or 'Google Chrome' based on which extension build is connected. |
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_workflow_recallA | Search local workflow memory BEFORE starting any multi-step or repeated browser task. Use this first for changing sites like app stores, admin consoles, checkout flows, dashboards, or any task you may have done before. |
| browser_workflow_rememberA | Save the verified reusable workflow after discovering or completing a browser task. Store durable UI labels, decisions, and pitfalls; do not store passwords, one-time codes, or transient [ref=eN] handles. |
| browser_workflow_forgetA | Remove a stale, sensitive, or incorrect workflow memory by id. This appends a local tombstone; normal recall will stop returning that memory. |
| browser_native_statusA | Report which OS-level input capabilities are available (trusted keystrokes, native-dialog control, raw clicks) and any setup needed. Check this before relying on the browser_os_* / browser_native_dialog tools. |
| browser_os_typeA | Type text using REAL OS keystrokes into whatever currently has focus. Use only when in-page typing fails because the element checks event.isTrusted (some payment fields, editors, games). Focus the field first (e.g. browser_click), then call this. macOS only; needs Accessibility permission. |
| browser_os_keyA | Press a REAL OS key (Enter, Tab, Escape, ArrowDown, F1-F8, or a single char), optionally with modifiers. For native UI and isTrusted-checking pages. macOS only. |
| browser_os_clickA | Click at absolute screen coordinates with a REAL OS mouse event. Prefer browser_click; use this only for trusted clicks or native chrome. macOS only; raw clicks need |
| browser_os_click_refA | Click a page element by ref with a REAL, OS-trusted mouse event (for elements that ignore synthetic clicks). Computes the element's on-screen position via the connected browser, raises its window, then clicks. On Firefox coordinates are exact; on Chrome they are approximate (refused unless allowApproximate is set) and iframe elements are not supported. macOS only; needs cliclick + Accessibility permission. |
| browser_native_dialogA | Inspect or operate a NATIVE browser dialog that no extension can touch — the file picker, print dialog, basic-auth popup, or 'Leave page?'. action='list' shows the dialog's buttons; 'click_button' presses one by name (e.g. 'Open', 'Save', 'Don't Save'); 'set_text' types into the focused dialog field. macOS only; needs Accessibility permission. |
| browser_focus_browserA | Bring the connected browser (Firefox or Chrome, per the bridge connection) to the foreground so OS-level input lands in it. macOS only. |
| browser_request_human_helpA | Hand control to the human for something automation must not or cannot do — CAPTCHAs, anti-bot 'verify you're human' walls, 2FA approvals, or a deliberate judgment call. Sends a desktop notification and returns a message you should relay to the user, then STOP and wait for them to act before continuing. Do not attempt to bypass CAPTCHAs yourself. |
| browser_snapshotA | Capture an accessibility/DOM snapshot of the active Firefox tab as a structured tree. Each interactive element gets a stable [ref=eN] handle. USE THIS to understand the page before acting, and re-run it after the page changes — refs become stale after navigation or DOM updates. If workflow-memory hints appear, call browser_workflow_recall before continuing. |
| browser_navigateA | Navigate the active tab to a URL and wait for it to finish loading. |
| browser_backA | Go back in the active tab's history. |
| browser_forwardB | Go forward in the active tab's history. |
| browser_reloadA | Reload the active tab. |
| browser_clickA | Click an element by its ref from the latest snapshot. Supports right/middle button, double-click, and modifier keys (ctrl/shift/alt/meta) for context menus, multi-select, and open-in-new-tab. |
| browser_dragA | Drag one element onto another (kanban cards, sortable lists, file tiles, sliders). Fires both HTML5 drag-and-drop and a pointer-drag sequence so native and JS-library targets both respond. |
| browser_typeC | Focus a text field by ref and type text into it. Set submit=true to press Enter afterward (e.g. to submit a search). |
| browser_fill_formA | Fill multiple fields in one call. Pass fields as an array of {ref, text}. Faster and more reliable than many browser_type calls for forms. |
| browser_fill_secretA | Fill a username or password field from the server-side credential broker. Pass only a secret alias; secret values are never accepted as tool input or returned. |
| browser_loginA | Atomically fill username/password fields from a server-side secret alias and submit the login form. Pass only refs and the secret alias; secret values are never accepted as tool input or returned. |
| browser_selectA | Choose an option in a dropdown by visible label or value. |
| browser_hoverC | Hover the pointer over an element by ref. |
| browser_press_keyA | Press a key (Enter, Tab, Escape, ArrowDown, etc.). Optionally target an element by ref; otherwise the focused element receives it. |
| browser_clipboard_readA | Read text from the system clipboard. Use after the page put something on the clipboard (e.g. a 'Copy' button) or to move data between pages and apps. |
| browser_clipboard_writeC | Write text to the system clipboard. |
| browser_pasteA | Paste into an element by ref as a real paste event — rich editors (Google Docs, Notion, contenteditable) handle this better than typing. Pastes the given text, or the current clipboard contents when text is omitted. |
| browser_clipboard_read_imageA | Read an image from the system clipboard (e.g. after a 'Copy image' action) and return it as a PNG/JPEG. Errors if the clipboard holds no image. |
| browser_clipboard_write_imageA | Put a local image file onto the system clipboard so it can be pasted into a page. |
| browser_set_dialog_policyA | Set how native JS dialogs are auto-answered so they never block the agent. accept=true confirms (default), promptText sets what prompt() returns, suppress=true neutralizes 'Leave page?' beforeunload guards. Applies to the current page; re-set after navigation if needed. |
| browser_dialogsA | List native JS dialogs (alert/confirm/prompt) the page tried to open and how they were auto-answered. Use this to see if the page asked something. |
| browser_mock_geolocationA | Make navigator.geolocation return a fixed position (so location-gated tasks proceed without the native permission prompt). Pass clear=true to stop mocking. Applies to the current page; re-set after navigation. |
| browser_downloadA | Download a file to disk WITHOUT the OS save dialog, and return its local path so you can read it. Use for PDFs, exports, attachments — the file lands in the browser's downloads folder. |
| browser_downloads_listC | List recent downloads with their on-disk paths and state. |
| browser_save_pdfA | Save the current tab as a PDF to the downloads folder (dialog-free). Useful to capture a rendered page. If your Firefox build still shows a save dialog, use browser_native_dialog to confirm it. |
| browser_network_logA | Inspect recent network requests (method, URL, status, type, errors) the browser made. Use to diagnose why a button 'did nothing', find an API endpoint, or confirm a request succeeded. |
| browser_http_authA | Arm answers for HTTP basic-auth prompts (the native username/password dialog) from a server-side secret alias, scoped to that secret's domains. Pass only the alias; the credential value is never accepted as input or returned. Call before navigating to the protected URL. |
| browser_clear_http_authA | Disarm previously-armed HTTP basic-auth answers (all domains, or specific ones). |
| browser_upload_fileA | Attach local file(s) to the page WITHOUT opening the OS file picker (the picker cannot be automated — never click elements that open it). Pass the ref of a file input (hidden ones appear in snapshots as 'file-input ... [hidden]'), or of an upload button/dropzone near it, plus absolute local file paths. Sets the input's files directly, or simulates a drag-and-drop when no file input is found. |
| browser_scrollA | Scroll the page or a specific scrollable container. Pass a ref to scroll that container (inner panes, virtualized/infinite lists); omit it to scroll the window. Use to='bottom' to jump to the end (e.g. trigger infinite-scroll loading). |
| browser_read_textA | Get the visible text of the page (or of one element by ref). Use for reading article/content; use browser_snapshot for interactive structure. |
| browser_get_valueB | Get the current value/text of a field or element by ref. |
| browser_waitA | Wait a fixed number of milliseconds (use sparingly). |
| browser_wait_for_textB | Wait until the given text appears anywhere on the page (or timeout). |
| browser_list_tabsA | List all open tabs with their ids, urls, and titles. |
| browser_select_tabC | Make a tab active by id (the agent acts on the active tab). |
| browser_new_tabB | Open a new tab, optionally at a URL, and make it active. |
| browser_close_tabB | Close a tab by id (defaults to the active tab). |
| browser_statusA | Check the bridge connection and the current active tab. If the active tab has workflow memories, this returns short hints. |
| browser_infoA | Get the active tab's url, title, load state, scroll position, and short workflow-memory hints when available. |
| browser_screenshotA | Capture a PNG screenshot of the visible part of the active tab. Use only when the snapshot is insufficient (e.g. canvas, charts, visual layout). |
| browser_evalA | Run JavaScript in the page and return the result. Disabled under hardened mode, which is the default; the operator enables it by setting UBA_STRICT_SECRETS=0 in the server environment. On Firefox the code runs in the content-script sandbox; on Chrome it runs in the page's own realm, where the page can observe it and its CSP applies. Use only when no dedicated tool fits. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |