# Agent360 Browser MCP (npm · @agent360/browser-mcp)

Give AI agents control of your real, logged-in Chrome. Chrome extension + MCP server, 34 tools.

- Trust score: 70/100 (medium)
- Change this week: +42
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@agent360/browser-mcp`: 70/100 (this document), [markdown](https://verifymcp.io/servers/agent360dk-browser-mcp/agent360-browser-mcp.md), [page](https://verifymcp.io/servers/agent360dk-browser-mcp/agent360-browser-mcp)

## Channel facts

- Registry: `npm`
- Package: `@agent360/browser-mcp`
- Version: `1.25.0`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 9 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 81/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 3222 tokens (~94/item across 34 items; 34 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add agent360dk-browser-mcp -- npx -y @agent360/browser-mcp
```

### Codex

```bash
codex mcp add agent360dk-browser-mcp -- npx -y @agent360/browser-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "agent360dk-browser-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@agent360/browser-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add agent360dk-browser-mcp --command npx --arg -y --arg @agent360/browser-mcp
```

### Hermes

```yaml
mcp_servers:
  agent360dk-browser-mcp:
    command: "npx"
    args: ["-y", "@agent360/browser-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "agent360dk-browser-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@agent360/browser-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 70, +34)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [functional regression] Security disclosure: fail → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Stability: unverified → 0.23
- [functional] Licence: MIT

### 2026-07-31 (score 36, +30)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 6, −22)

- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 28)

First indexed and scored.

## MCP tools (34)

### `browser_navigate` (~77 tokens)

Navigate the active browser tab to a URL. Reuses the current tab by default (no tab spam). Pass new_tab=true only when you need to keep the current page open.

Input parameters:

- `new_tab` (boolean): Open in new tab instead of reusing current (default: false)
- `url` (string, required): URL to navigate to

### `browser_get_page_content` (~35 tokens)

Get the content of the current page as text or HTML.

Input parameters:

- `format` (string): Output format (default: text)

### `browser_screenshot` (~59 tokens)

Take a screenshot of the visible area of the current tab. Returns base64 PNG, or saves to disk if path is provided.

Input parameters:

- `path` (string): File path to save the screenshot to (e.g. /path/to/screenshot.png)

### `browser_execute_script` (~42 tokens)

Execute JavaScript code in the context of the current page. Returns the result.

Input parameters:

- `code` (string, required): JavaScript expression to evaluate (runs in page context)

### `browser_click` (~109 tokens)

Click an element on the page. Supports CSS selectors AND text-based selectors. Auto-scrolls element into view. Uses real mouse events (works on Angular/React SPAs and CSP-strict sites like Google, Stripe). Examples: "button:text(Get started)", "text=Submit", "#my-button", "a.btn-primary"

Input parameters:

- `selector` (string, required): CSS selector or text selector. Text formats: "text=Click me" (any element), "button:text(Submit)" (specific tag)

### `browser_fill` (~91 tokens)

Fill a form input field with a value. Supports CSS selectors AND text-based selectors. Auto-scrolls and focuses the element. Works on CSP-strict sites via Chrome Debugger API. For date inputs use browser_set_date, for autocomplete/combobox use browser_set_combobox.

Input parameters:

- `selector` (string, required): CSS selector or text selector for the input field
- `value` (string, required): Value to fill in

### `browser_press_key` (~162 tokens)

Press a keyboard key (Enter, Tab, Escape, ArrowDown, etc.). Useful for submitting forms, navigating dropdowns, closing dialogs. Supports modifier keys (ctrl, alt, shift, meta).

Input parameters:

- `alt` (boolean): Hold Alt key
- `code` (string): Key code (optional, defaults to key name). E.g. "KeyA" for "a"
- `ctrl` (boolean): Hold Ctrl/Cmd key
- `key` (string, required): Key to press: "Enter", "Tab", "Escape", "ArrowDown", "ArrowUp", "Backspace", "a", "1", etc.
- `meta` (boolean): Hold Meta (Cmd on Mac) key
- `shift` (boolean): Hold Shift key

### `browser_scroll` (~85 tokens)

Scroll the page to an element or by pixel amount. Useful for reaching elements below the fold.

Input parameters:

- `selector` (string): CSS or text selector to scroll to (element scrolled into center of viewport)
- `x` (number): Pixels to scroll horizontally (positive = right)
- `y` (number): Pixels to scroll vertically (positive = down, e.g. 500)

### `browser_wait` (~73 tokens)

Wait for an element to appear on the page. Supports CSS and text-based selectors.

Input parameters:

- `selector` (string, required): CSS selector or text selector (e.g. "text=Success", "button:text(Next)") to wait for
- `timeout` (number): Max wait time in ms (default: 10000)

### `browser_hover` (~63 tokens)

Hover over an element to trigger tooltips, dropdown menus, or hover states. Supports CSS and text selectors.

Input parameters:

- `duration` (number): How long to hold hover in ms (default: 500)
- `selector` (string, required): CSS or text selector to hover over

### `browser_select_option` (~131 tokens)

Select an option from a dropdown menu. Works with native <select> elements AND custom dropdowns (Angular Material, React Select, etc.). For custom dropdowns: clicks the trigger, waits for options, then clicks the matching option by text. For autocomplete (typing filters options) use browser_set_combobox instead.

Input parameters:

- `option` (string, required): Text of the option to select (partial match supported)
- `selector` (string, required): CSS or text selector for the dropdown trigger / <select> element
- `wait` (number): Ms to wait after clicking trigger for options to appear (default: 300)

### `browser_dismiss_overlays` (~161 tokens)

Dismiss visible popups, modals, tooltips, banners, and "Are you sure?"-style overlays in one call. Heuristic-based: finds close affordance via aria-label, text content (Skip/Cancel/Ikke nu/Don't show/Got it/Close), or × character button. Use when a flow is interrupted by unexpected dialogs (cookie banners, onboarding tooltips, draft-confirm prompts on Meta Ads, etc.). Returns list of what was dismissed.

Input parameters:

- `max_passes` (number): Number of dismissal passes (some overlays reveal others when closed). Default: 3
- `scope` (string): non_critical (default): skip dialogs containing editable form inputs (preserves user data). aggressive: dismiss everything.

### `browser_set_combobox` (~210 tokens)

Set value(s) on an autocomplete/combobox input. Handles the click → type query → wait for filtered listbox → click option flow as one MCP call. Supports multi-select (e.g., Languages on Meta Ads). Use when browser_select_option fails because options render lazily after typing.

Input parameters:

- `multi` (boolean): True if combobox accepts multiple values (chips). Default: auto-detected from presence of values array
- `query_chars` (number): How many characters to type as filter query (default: 4 or full value length, whichever is smaller)
- `selector` (string, required): CSS selector for the combobox/autocomplete input
- `value` (string): Single value to select (use this OR values)
- `values` (array): Array of values for multi-select. E.g. ["Danish", "English", "Swedish"]
- `wait_ms` (number): Max ms to wait for options listbox to appear after typing (default: 3000)

### `browser_drop_file` (~120 tokens)

Upload a file by finding a hidden <input type="file"> within a drag-drop zone's subtree (or parent up to 2 levels). Use when browser_upload_file fails because the dropzone has no visible file input. Returns clear error if no input is found anywhere — pure drop-zones without backing inputs require manual handling.

Input parameters:

- `file` (string): Single absolute file path
- `files` (array): Array of absolute file paths
- `selector` (string, required): CSS selector for the drop-zone target element (e.g. ".upload-area")

### `browser_set_date` (~165 tokens)

Robustly set a date input — handles native <input type="date">, masked text inputs (e.g. MM/DD/YYYY), and calendar pickers (MUI, react-datepicker, AntD, Lexical/Meta). Tries native value-set, format-aware typing via Input.insertText, and ARIA-based picker navigation in sequence with read-back verification. Use instead of browser_fill when fill fails or for any input that opens a calendar widget.

Input parameters:

- `date` (string, required): ISO date string (YYYY-MM-DD), e.g. "2026-05-15"
- `selector` (string, required): CSS selector for the date input element
- `skip_picker` (boolean): If true, only try native + masked paths and skip calendar-picker navigation (default: false)

### `browser_handle_dialog` (~96 tokens)

Handle JavaScript alert(), confirm(), or prompt() dialogs. Call this BEFORE triggering the action that causes the dialog. Waits for the dialog to appear, then accepts or dismisses it.

Input parameters:

- `action` (string): Accept or dismiss the dialog (default: accept)
- `text` (string): Text to enter for prompt() dialogs
- `timeout` (number): Max wait for dialog in ms (default: 10000)

### `browser_wait_for_network` (~95 tokens)

Wait for a network request to complete. Useful after clicking buttons that trigger API calls — ensures data is loaded before reading the page. Monitors real network traffic via Chrome DevTools Protocol.

Input parameters:

- `timeout` (number): Max wait in ms (default: 15000)
- `url_pattern` (string): Substring to match in the request URL (e.g. "/api/users", "graphql"). Empty = any request.

### `browser_fetch` (~104 tokens)

Make an HTTP request from the extension background (NOT subject to CORS). Use this when page-context fetch would be blocked by CORS or CSP. Useful for API calls to Google, Stripe, Slack APIs while on their pages.

Input parameters:

- `body` (string): Request body (for POST/PUT)
- `headers` (object): Request headers as key-value pairs
- `method` (string): HTTP method (default: GET)
- `url` (string, required): URL to fetch

### `browser_list_tabs` (~20 tokens)

List all open browser tabs with their URLs and titles.

### `browser_get_cookies` (~36 tokens)

Get cookies for a specific domain.

Input parameters:

- `domain` (string, required): Domain to get cookies for (e.g. ".stripe.com")

### `browser_get_local_storage` (~47 tokens)

Read localStorage from the current page. Pass key for a specific value, or omit for all.

Input parameters:

- `key` (string): Specific localStorage key to read (omit for all)

### `browser_set_cookies` (~140 tokens)

Set one or more cookies for a domain.

Input parameters:

- `cookies` (array): Array of cookie objects to set multiple at once
- `domain` (string): Cookie domain (e.g. ".example.com")
- `httpOnly` (boolean): HttpOnly flag (default: false)
- `name` (string, required): Cookie name
- `path` (string): Cookie path (default: /)
- `sameSite` (string): SameSite attribute (default: lax)
- `secure` (boolean): Secure flag (default: true)
- `url` (string): URL for the cookie (alternative to domain)
- `value` (string, required): Cookie value

### `browser_set_local_storage` (~46 tokens)

Set a localStorage key-value pair on the current page.

Input parameters:

- `key` (string, required): localStorage key to set
- `value` (string, required): Value to store (string)

### `browser_console_logs` (~55 tokens)

Get recent console.log/warn/error messages from the page. Installs a lightweight interceptor on first call. Returns the last N console messages.

Input parameters:

- `count` (number): Number of recent messages to return (default: 50)

### `browser_ask_user` (~150 tokens)

Show an overlay dialog asking the user to perform an action or provide information (credentials, 2FA, CAPTCHA, OAuth consent). Can include input fields for the user to fill in. Returns user responses.

Input parameters:

- `fields` (array): Input fields for user to fill in. Each field has: name (key), label (display text), type (text/password/email). Omit for simple "Done/Skip" confirmation.
- `message` (string, required): What the user needs to do or provide
- `timeout` (number): Max wait time in ms (default: 120000 = 2 min)
- `title` (string): Dialog title (default: "Agent360 — Action Required")

### `browser_list_frames` (~26 tokens)

List all frames (iframes) in the current page with their URLs and indices.

### `browser_select_frame` (~70 tokens)

Execute JavaScript in a specific iframe by frame index. Use browser_list_frames first to find the right index.

Input parameters:

- `code` (string): JavaScript to execute in the frame (default: returns text content)
- `frame_index` (number, required): Frame index from browser_list_frames (0 = main frame)

### `browser_get_new_tab` (~33 tokens)

Get the most recently opened tab (useful after clicking links that open new tabs, OAuth popups, etc.).

### `browser_switch_tab` (~43 tokens)

Switch to a specific browser tab by ID. Get tab IDs from browser_list_tabs or browser_get_new_tab.

Input parameters:

- `tab_id` (number, required): Tab ID to activate

### `browser_close_tab` (~45 tokens)

Close a browser tab by ID. Only tabs owned by the current session can be closed.

Input parameters:

- `tab_id` (number, required): Tab ID to close (get from browser_list_tabs)

### `browser_upload_file` (~112 tokens)

Upload a file to a <input type="file"> element on the page. Uses Chrome Debugger API to set files programmatically — no dialog needed. For drag-drop zones without visible file input use browser_drop_file.

Input parameters:

- `file` (string): Single file path (alternative to files array)
- `files` (array, required): Array of absolute file paths to upload. E.g. ["/Users/me/photo.jpg"]
- `selector` (string): CSS selector for the file input (default: input[type="file"])

### `browser_extract_token` (~46 tokens)

Navigate to a provider's API settings page so you can read its API token from the page.

Input parameters:

- `provider` (string, required): Provider slug (stripe, hubspot, slack, etc.)

### `browser_solve_captcha` (~201 tokens)

Detect and solve CAPTCHAs on the current page. Auto-detects reCAPTCHA v2/v3, hCaptcha, Cloudflare Turnstile, and FunCaptcha. Tries auto-click first (often clears reCAPTCHA v2 when signed into Google), then returns a screenshot for AI vision analysis, then falls back to asking the user. Returns detection info and solving status.

Input parameters:

- `action` (string): Action to take. "detect" scans for CAPTCHAs. "click_checkbox" clicks the reCAPTCHA checkbox. "click_grid" clicks specific grid cells (pass cells param). "ask_human" shows overlay to user. Default: "d…
- `cells` (array): Grid cell indices to click (0-indexed, left-to-right, top-to-bottom) for image challenges. E.g. [2, 5, 7] to click cells 3, 6, 8.

### `browser_about` (~274 tokens)

Returns Browser MCP info and pre-filled URLs the user can click to submit feature wishes, share use-cases, or report bugs. Call this PROACTIVELY whenever the user (a) mentions a feature they wish existed ("I wish browser-mcp could...", "it would be nice if..."), (b) says something is missing, broken, or unexpected, (c) asks how Browser MCP works or who maintains it, or (d) describes something cool they built with browser-mcp. Pass intent="wish" | "use_case" | "bug" | "info" plus an optional title and body, and offer the returned submit_url to the user. Browser MCP is community-shaped — this tool is how the user contributes back.

Input parameters:

- `body` (string): Optional pre-filled body / first-comment draft. Will be URL-encoded into the submit link. Keep it short; user can expand on GitHub.
- `intent` (string): What the user wants to share. "wish" = feature request, "use_case" = share what they built, "bug" = something broken, "info" = general (default: "info").
- `title` (string): Optional pre-filled issue title (e.g. "Support hCaptcha v3"). Will be URL-encoded into the submit link.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/agent360dk-browser-mcp/agent360-browser-mcp#diagnostics

## Score history

- 2026-08-03: 70
- 2026-08-02: 70
- 2026-08-01: 36
- 2026-07-31: 36
- 2026-07-30: 6
- 2026-07-28: 28
- 2026-07-27: 28

## Links

- npm package: https://www.npmjs.com/package/@agent360/browser-mcp
- Socket report: https://socket.dev/npm/package/@agent360/browser-mcp
- Repository: https://github.com/Agent360dk/browser-mcp
- Website: https://browsermcp.dev/
- Changelog RSS feed: https://verifymcp.io/servers/agent360dk-browser-mcp/agent360-browser-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/agent360dk-browser-mcp/agent360-browser-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/agent360dk-browser-mcp/agent360-browser-mcp
