io.github.Savvy-Tech-Sphere/usable-browser-agent
NPM · USABLE-BROWSER-AGENT
MCP server and Firefox add-on that let an AI agent drive your real, logged-in browser. Free tier.
Available components
Last scanned (21 hours ago)
Scores higher than 50% of npm servers
Category Browser Automation
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security81
- No malware found by supply-chain analysis.Pass
- CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available. View diagnostics → Fail
- No install/post-install scripts declared.Pass
- 30 of 94 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency32
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Licence could not be checked: the licence is shipped as a file inside the package, not declared as a standard (SPDX) licence identifier, so we cannot tell whether it is OSI-approved.Unverified
- Actively maintained (last published 42 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability81
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 3771 tokens (~71/item across 53 items; 53 tools + 0 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage88
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 64% of tool parameters carry a description.Partial
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "browser_workflow_forget" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 53 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 2 Nov 26 +1
- Stability: 0.97 → pass security
- 1 Nov 26 −1
- Stability: pass → 0.97 functional
- 26 Oct 26 +1
- Stability: 0.97 → pass security
- 24 Oct 26 −5
- CVE-2023-54404 affects this package: high ▼ security
- Known CVEs: pass → fail ▼ security
- 23 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.
- 21 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
- 19 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 4 Nov 2026 · Analysed npm/usable-browser-agent@0.7.1
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Vulnerabilities 1 finding
| ID | CVE | Severity | Vector | Fix available |
|---|---|---|---|---|
| GHSA-mrhx-c7xc-m3w5 | CVE-2023-54404 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H | yes |
Background: What a vulnerability scan can and cannot prove →
Dependencies 94 packages
| Packages resolved | 94 |
|---|---|
| Stale | 30 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
browser_back ~17
Go back in the active tab's history.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
browser_clear_http_auth ~34
Disarm previously-armed HTTP basic-auth answers (all domains, or specific ones).
| Name | Type | Req | Description |
|---|---|---|---|
| domains | array | – | – |
No output schema declared.
No examples provided.
browser_click ~118
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.
| Name | Type | Req | Description |
|---|---|---|---|
| button | string | – | Mouse button (default left). 'right' opens context menus. |
| count | number | – | Click count; 2 = double-click. |
| modifiers | array | – | Modifier keys held during the click. |
| ref | string | yes | Element ref, e.g. e12, from browser_snapshot. |
No output schema declared.
No examples provided.
browser_clipboard_read ~45
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
browser_clipboard_read_image ~47
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
browser_clipboard_write ~24
Write text to the system clipboard.
| Name | Type | Req | Description |
|---|---|---|---|
| text | string | yes | – |
No output schema declared.
No examples provided.
browser_clipboard_write_image ~43
Put a local image file onto the system clipboard so it can be pasted into a page.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | Absolute path to a local image file. |
No output schema declared.
No examples provided.
browser_close_tab ~29
Close a tab by id (defaults to the active tab).
| Name | Type | Req | Description |
|---|---|---|---|
| tabId | number | – | – |
No output schema declared.
No examples provided.
browser_dialogs ~43
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
browser_download ~95
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.
| Name | Type | Req | Description |
|---|---|---|---|
| filename | string | – | Optional filename (relative to the downloads folder). |
| timeout | number | – | Max ms to wait for completion (default 60000). |
| url | string | yes | Full URL of the file to download. |
No output schema declared.
No examples provided.
browser_downloads_list ~29
List recent downloads with their on-disk paths and state.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | – |
No output schema declared.
No examples provided.
browser_drag ~75
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.
| Name | Type | Req | Description |
|---|---|---|---|
| fromRef | string | yes | Ref of the element to drag. |
| toRef | string | yes | Ref of the drop target. |
No output schema declared.
No examples provided.
browser_eval ~109
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.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | JS body; use `return value;` to return data. |
No output schema declared.
No examples provided.
browser_fill_form ~46
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.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | array | yes | – |
No output schema declared.
No examples provided.
browser_fill_secret ~88
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.
| Name | Type | Req | Description |
|---|---|---|---|
| field | string | – | Which secret field to fill (default password). |
| ref | string | yes | Element ref, e.g. e12, from browser_snapshot. |
| secret | string | yes | Secret alias from the server-side secrets vault. |
No output schema declared.
No examples provided.
browser_focus_browser ~38
Bring the connected browser (Firefox or Chrome, per the bridge connection) to the foreground so OS-level input lands in it. macOS only.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
browser_forward ~17
Go forward in the active tab's history.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
browser_get_value ~29
Get the current value/text of a field or element by ref.
| Name | Type | Req | Description |
|---|---|---|---|
| ref | string | yes | – |
No output schema declared.
No examples provided.
browser_hover ~24
Hover the pointer over an element by ref.
| Name | Type | Req | Description |
|---|---|---|---|
| ref | string | yes | – |
No output schema declared.
No examples provided.
browser_http_auth ~93
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.
| Name | Type | Req | Description |
|---|---|---|---|
| once | boolean | – | Answer only the next auth challenge, then disarm. |
| secret | string | yes | Secret alias from the server-side secrets vault. |
No output schema declared.
No examples provided.
browser_info ~31
Get the active tab's url, title, load state, scroll position, and short workflow-memory hints when available.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
browser_list_tabs ~22
List all open tabs with their ids, urls, and titles.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
browser_login ~126
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.
| Name | Type | Req | Description |
|---|---|---|---|
| password_ref | string | yes | Password field ref, e.g. e12, from browser_snapshot. |
| secret | string | yes | Secret alias from the server-side secrets vault. |
| submit_ref | string | – | Submit button ref. If omitted, the password field's enclosing form is submitted. |
| username_ref | string | – | Username field ref. Filled only when provided and the secret has a username. |
No output schema declared.
No examples provided.
browser_mock_geolocation ~91
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accuracy | number | – | Accuracy in meters (default 20). |
| clear | boolean | – | Stop mocking and restore real geolocation. |
| latitude | number | – | – |
| longitude | number | – | – |
No output schema declared.
No examples provided.
browser_native_dialog ~133
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.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | – |
| button | string | – | Button label for click_button. |
| process | string | – | Process name (default firefox). |
| text | string | – | Text for set_text. |
No output schema declared.
No examples provided.
browser_native_status ~50
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
browser_navigate ~43
Navigate the active tab to a URL and wait for it to finish loading.
| Name | Type | Req | Description |
|---|---|---|---|
| timeout | number | – | – |
| url | string | yes | Full URL including https:// |
No output schema declared.
No examples provided.
browser_network_log ~120
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.
| Name | Type | Req | Description |
|---|---|---|---|
| filter | string | – | Only requests whose URL contains this substring. |
| limit | number | – | Max requests to return (default 50). |
| onlyErrors | boolean | – | Only failed requests (network error or status >= 400). |
| type | string | – | Resource type, e.g. xmlhttprequest, script, document, image. |
No output schema declared.
No examples provided.
browser_new_tab ~31
Open a new tab, optionally at a URL, and make it active.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | – | – |
No output schema declared.
No examples provided.
browser_os_click ~81
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 `brew install cliclick`.
| Name | Type | Req | Description |
|---|---|---|---|
| button | string | – | – |
| count | number | – | 2 = double-click. |
| x | number | yes | – |
| y | number | yes | – |
No output schema declared.
No examples provided.
browser_os_click_ref ~174
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.
| Name | Type | Req | Description |
|---|---|---|---|
| allowApproximate | boolean | – | Chrome only: opt in to clicking at APPROXIMATE screen coordinates (no exact viewport-origin API exists there). Only set this after visually confirming the window is a normal browser window (no docked… |
| button | string | – | – |
| count | number | – | – |
| ref | string | yes | – |
No output schema declared.
No examples provided.
browser_os_key ~66
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.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | – |
| modifiers | array | – | – |
No output schema declared.
No examples provided.
browser_os_type ~83
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.
| Name | Type | Req | Description |
|---|---|---|---|
| modifiers | array | – | – |
| text | string | yes | – |
No output schema declared.
No examples provided.
browser_paste ~81
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.
| Name | Type | Req | Description |
|---|---|---|---|
| ref | string | yes | – |
| text | string | – | Text to paste. Omit to paste the current clipboard contents. |
No output schema declared.
No examples provided.
browser_press_key ~53
Press a key (Enter, Tab, Escape, ArrowDown, etc.). Optionally target an element by ref; otherwise the focused element receives it.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | – |
| ref | string | – | – |
No output schema declared.
No examples provided.
browser_read_text ~52
Get the visible text of the page (or of one element by ref). Use for reading article/content; use browser_snapshot for interactive structure.
| Name | Type | Req | Description |
|---|---|---|---|
| maxChars | number | – | – |
| ref | string | – | – |
No output schema declared.
No examples provided.
browser_reload ~13
Reload the active tab.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
browser_request_human_help ~142
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.
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | What you need the human to do, e.g. 'Solve the CAPTCHA on the login page, then tell me to continue.' |
| reason | string | – | Short category, e.g. 'captcha', '2fa', 'permission'. |
No output schema declared.
No examples provided.
browser_save_pdf ~59
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.
| Name | Type | Req | Description |
|---|---|---|---|
| filename | string | – | Optional output filename. |
No output schema declared.
No examples provided.
browser_screenshot ~40
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).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
browser_scroll ~112
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).
| Name | Type | Req | Description |
|---|---|---|---|
| amount | number | – | – |
| direction | string | – | – |
| ref | string | – | Scroll this container (or, with no direction/to, just reveal it). |
| to | string | – | Jump to the top or bottom of the target. |
No output schema declared.
No examples provided.
browser_select ~37
Choose an option in a <select> dropdown by visible label or value.
| Name | Type | Req | Description |
|---|---|---|---|
| ref | string | yes | – |
| value | string | yes | – |
No output schema declared.
No examples provided.
browser_select_tab ~32
Make a tab active by id (the agent acts on the active tab).
| Name | Type | Req | Description |
|---|---|---|---|
| tabId | number | yes | – |
No output schema declared.
No examples provided.
browser_set_dialog_policy ~118
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accept | boolean | – | Answer confirm()/prompt() affirmatively (default true). |
| promptText | string | – | Value returned from prompt() when accepted. |
| suppress | boolean | – | Neutralize beforeunload 'leave page?' guards (default true). |
No output schema declared.
No examples provided.
browser_snapshot ~96
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.
| Name | Type | Req | Description |
|---|---|---|---|
| maxNodes | number | – | Max nodes to include (default 1500). |
No output schema declared.
No examples provided.
browser_status ~31
Check the bridge connection and the current active tab. If the active tab has workflow memories, this returns short hints.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
browser_type ~75
Focus a text field by ref and type text into it. Set submit=true to press Enter afterward (e.g. to submit a search).
| Name | Type | Req | Description |
|---|---|---|---|
| clear | boolean | – | Clear the field first (default true). |
| ref | string | yes | – |
| submit | boolean | – | Press Enter after typing. |
| text | string | yes | – |
No output schema declared.
No examples provided.
browser_upload_file ~163
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.
| Name | Type | Req | Description |
|---|---|---|---|
| mode | string | – | auto (default): find and fill the file input. drop: force a drag-and-drop onto the ref'd element (for dropzones). |
| paths | array | yes | Absolute paths of local files to attach. |
| ref | string | yes | Ref of the file input, upload button, or dropzone. |
No output schema declared.
No examples provided.
browser_wait ~26
Wait a fixed number of milliseconds (use sparingly).
| Name | Type | Req | Description |
|---|---|---|---|
| ms | number | yes | – |
No output schema declared.
No examples provided.
browser_wait_for_text ~38
Wait until the given text appears anywhere on the page (or timeout).
| Name | Type | Req | Description |
|---|---|---|---|
| text | string | yes | – |
| timeout | number | – | – |
No output schema declared.
No examples provided.
How do I install the io.github.Savvy-Tech-Sphere/usable-browser-agent MCP server?
io.github.Savvy-Tech-Sphere/usable-browser-agent runs locally as an npm package, launched with npx -y usable-browser-agent. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · usable-browser-agent
claude mcp add savvy-tech-sphere-usable-browser-agent -- npx -y usable-browser-agent
What is the io.github.Savvy-Tech-Sphere/usable-browser-agent MCP server?
io.github.Savvy-Tech-Sphere/usable-browser-agent is an MCP server listed in the public MCP registry as io.github.Savvy-Tech-Sphere/usable-browser-agent. MCP server and Firefox add-on that let an AI agent drive your real, logged-in browser. Free tier. This page covers its npm package (usable-browser-agent).
Is the io.github.Savvy-Tech-Sphere/usable-browser-agent MCP server safe to use?
io.github.Savvy-Tech-Sphere/usable-browser-agent scores 75 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 4 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.Savvy-Tech-Sphere/usable-browser-agent MCP server expose?
io.github.Savvy-Tech-Sphere/usable-browser-agent exposes 53 tools: browser_workflow_recall, browser_workflow_remember, browser_workflow_forget, browser_native_status, browser_os_type, and 48 more. Their descriptions and schemas cost roughly 3,771 tokens of context every time the server is loaded.
Is the io.github.Savvy-Tech-Sphere/usable-browser-agent MCP server still maintained?
io.github.Savvy-Tech-Sphere/usable-browser-agent is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.