Airsc is free for everyone. If it helps you, support it with $2–$20.

Support
MCP serverSafeBrowser automation & web dataSome setup Verified live

browser-tools-mcp

AgentDeskAI · AgentDeskAI/browser-tools-mcp

Lets your AI coding agent monitor a live Chrome session, streaming console output, network activity, screenshots, and Lighthouse audits directly.

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

7.3k stars537License: MITUpdated 2 months ago0 opens

Preview

▍

What you can do with it

  • Debug a web application by letting the agent see real-time browser logs and network requests.
  • Get Lighthouse performance and accessibility audits on your currently open web page.
  • Understand user interaction flows by streaming screenshots of your Chrome session to the agent.

Verified live · 16 tools

We started this MCP server in an isolated sandbox and it exposed these tools:

  • listBrowserTabs

    Every browser tab that currently has DevTools open, with the tabId you can pass to any other tool. Call this when a result reported otherTabs above 0, or when the user mentions a page other than the o

  • getConsoleLogs

    Console output from the current tab. Use keywords and limit to keep responses small — an unfiltered read can be large. Pass tabId for a different tab, or allTabs to read every tab; the result reports

  • getConsoleErrors

    Only error-level console output and uncaught exceptions from the current tab. Start here when diagnosing a failure. Pass tabId for a different tab, or allTabs to read every tab.

  • getNetworkLogs

    XHR and fetch requests from the current tab, including status and timing. Credential headers are redacted. Pass tabId for a different tab, or allTabs to read every tab.

  • getNetworkErrors

    Only requests that failed or returned a 4xx/5xx status. An empty result means there were no failures, which is a success, not an error.

  • getSelectedElement

    The DOM element the user has selected in the Chrome DevTools Elements panel, with its attributes and markup.

  • getPageInfo

    Which page the browser is currently on. Call this before reading telemetry so you know what the logs describe. If connectedTabs is above 1, call listBrowserTabs before assuming this is the page the us

  • getConnectionStatus

    Whether the Chrome extension is connected and how much telemetry has been captured. Call this first when something returns nothing.

  • takeScreenshot

    Captures the visible area of the current tab and returns the image directly, plus the path it was saved to and the url captured. Pass tabId to capture a different tab.

  • refreshBrowser

    Reloads the inspected tab. Useful for capturing a clean reproduction after calling wipeLogs.

  • getBrowserStorage

    Lists localStorage, sessionStorage and cookie entries for the current page. Values are withheld unless includeValues is set, because they routinely contain session tokens.

  • wipeLogs

    Discards captured console and network entries for every tab, or one tab if you name it. Use before reproducing a problem so the next read contains only relevant output.

  • runAccessibilityAudit

    Lighthouse accessibility audit of the current page: contrast, labels, semantics and screen-reader support. Takes up to a minute and launches a separate headless browser.

  • runPerformanceAudit

    Lighthouse performance audit of the current page, including Core Web Vitals. Takes up to a minute and launches a separate headless browser.

  • runSEOAudit

    Lighthouse SEO audit of the current page: metadata, indexability and crawlability. Takes up to a minute and launches a separate headless browser.

npx -y @agentdeskai/browser-tools-mcp@latest · 06/10/2026

Safety check

Safe

No risky patterns found in the files we scanned.

Automated scan of the repo files. Always review code you run.

From the README

BrowserTools MCP

Give your AI coding agent eyes on the browser. BrowserTools MCP streams console output, network activity, screenshots and Lighthouse audits from your real Chrome session — the one already logged into your app — to any MCP-compatible client: 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 — and upgrade, because 1.2.x has a critical vulnerability. See SECURITY.md.


Why this instead of a CDP-based server

Tools 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 for debugging the app you are actually looking at, because since Chrome 136 the browser refuses remote debugging on your default profile — the one holding your logins. So you end up recreating your auth state in a throwaway profile before you can debug anything.

BrowserTools attaches to the session you are already in, through a DevTools extension. You stay logged in, on the page you were already on, and your agent reads what you see. It also reports Lighthouse-grade performance, accessibility and SEO data, which the automation-first servers do not.

Install

Two pieces: an MCP server (one command) and a Chrome extension.

1. Point your MCP client at the server

{
  "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 or asdf, make sure your editor inherits the same version.

2. Load the Chrome extension

  1. Download or clone this repository.
  2. Open chrome://extensions and turn on Developer mode.
  3. Choose Load unpacked and select the chrome-extension directory.

That is the whole setup. There is no second server to start — the MCP server runs the connector itself.

3. Use it

Open Chrome DevTools (F12) on the page you want to inspect. Capture begins as soon as DevTools is open; the BrowserTools panel is only for settings and status. Then ask your agent something like "check the console for errors" or "run an accessibility audit on this page".

Not working? Run npx @agentdeskai/browser-tools-mcp --doctor, which reports exactly which piece is missing.

To watch capture happen live — useful when checking a fresh install — start the connector with --verbose:

npx @agentdeskai/browser-tools-server --verbose
· console error tab 42 Uncaught TypeError: total is not a function
· network 500 POST tab 42 https://myapp.local/api/pay (1310ms)

Without it the connector only reports connect and disconnect, so a working setup and a silent one look the same.

Tools

ToolWhat it does
getConsoleLogsConsole output, filterable by keyword with paging
getConsoleErrorsError-level output and uncaught exceptions
getNetworkLogsXHR/fetch requests with status, timing and bodies
getNetworkErrorsOnly failed and 4xx/5xx requests
getSelectedElementThe element selected in the Elements panel
getPageInfoWhich page the browser is currently on
getConnectionStatusWhether the extension is connected, and capture counts
listBrowserTabsEvery tab with DevTools open, and the id to address it by
takeScreenshotScreenshot returned as an image, plus its file path
refreshBrowserReloads the inspected tab
getBrowserStoragelocalStorage, sessionStorage and cookies (values gated)
wipeLogsClears captured telemetry before a clean reproduction
runAccessibilityAuditLighthouse accessibility audit
runPerformanceAuditLighthouse performance audit with Core Web Vitals
runSEOAuditLighthouse SEO audit
runBestPracticesAuditLighthouse best-practices audit

Three prompts ship alongside them — debuggerMode, auditMode and nextjsSeoAudit — giving your agent a systematic workflow instead of a wall of static text in every tool listing.

All tools declare MCP output schemas, so clients receive structured data rather than prose they have to parse, and read-only tools are annotated as such so clients can auto-approve them safely.

Several tabs at once

Every tab with DevTools open is tracked separately. Telemetry is attributed to the tab that produced it, and retention is per tab, so a chatty page cannot push out the history of the one you care about.

Tools act on the current tab — the one you most recently opened DevTools on. A tab whose connection drops and comes back does not steal that position, which is what used to make screenshots capture the wrong page. Every result reports the tabId and url it came from, plus otherTabs, so a wrong-tab answer is visible rather than silent. To target a specific tab, call listBrowserTabs and pass its tabId to any tool; pass allTabs: true to read across every tab.

Large data stays out of the context window

Whole-history payloads are exposed as MCP resources rather than inlined, and tools link to them with resource_link so your agent fetches them only when it decides to:

ResourceWhat it is
browser-tools://console/{tabId|all}Every console entry, with no per-call budget
browser-tools://network/{tabId|all}Every captured request, including bodies
browser-tools://har/{tabId|all}The same traffic as a HAR 1.2 file
browser-tools://screenshot/{name}A screenshot you captured earlier
browser-tools://audit/{reportId}The unabridged Lig
View source on GitHub