browser-devtools-mcp
browser-devtools-mcp lets an AI assistant inspect and control a running Chrome/Edge browser over CDP, capture data, watch live events, and save offline archives.
Enumerate browser processes, detect CDP-attachable instances, list installed Chromium browsers, and scan debugging ports.
Attach to an existing browser or launch an isolated throwaway Chrome/Edge instance, then list/select/close tabs and sessions.
Read console logs, network requests/responses/bodies/timing, errors/crashes, DOM snapshots and outlines, screenshots, performance metrics, storage, and page resources.
Execute JavaScript, send raw CDP commands, dispatch real mouse/keyboard/text input, wait for selectors/text, and drive reload/back navigation.
Run capture sessions and save one-shot archives: JSON, CSV, HAR, DOM, screenshot, offline HTML report, Markdown summary, and manifest.
Subscribe to live event streams for console, network, errors, navigation, tabs, performance metrics, and page screen frames; consume by long-poll/push or record continuously to JSONL and frame images.
Works via stdio or HTTP MCP transport; supports only Google Chrome and Microsoft Edge.
Allows inspecting a running Google Chrome browser over the Chrome DevTools Protocol (CDP): attach to an existing Chrome instance or launch an isolated throwaway profile, read console, network, DOM, performance, storage, and screenshots, subscribe to live page events, and save a self-contained offline archive.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@browser-devtools-mcp check the current tab for console errors and failed network requests"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
browser-devtools-mcp
An MCP (Model Context Protocol) server that lets an AI assistant inspect a running browser over the Chrome DevTools Protocol (CDP) — enumerate browser processes, read everything visible in DevTools (console, network, DOM, performance metrics, storage, screenshots), subscribe to a live event stream, and save everything in one shot into a self-contained, offline-readable archive.
It uses a single lightweight WebSocket client to multiplex every tab. No puppeteer, no playwright, no browser bundled — just CDP.
🇨🇳 中文:一个基于 Chrome DevTools Protocol(CDP)的 MCP 服务,让 AI 助手读取正在运行的浏览器:枚举进程、抓取开发者工具里的一切(console、网络、DOM、性能指标、storage、截图),支持实时事件订阅,并支持一键保存成离线可读取的归档。只用一条轻量 WebSocket 复用所有标签页,不依赖 puppeteer / playwright,也不绑定任何浏览器。
Supported browsers
Only Google Chrome and Microsoft Edge are supported and tested.
Browser | Supported | Notes |
Google Chrome | ✅ Yes | Verified (Chrome 154.x) |
Microsoft Edge | ✅ Yes | Verified (Edg 140.x); identical to Chrome on CDP |
Vivaldi / Brave / Opera / Chromium | ❌ No | Not supported (see below) |
Firefox / Safari | ❌ No | Not supported (see below) |
Edge and Chrome are fully equivalent — same protocol, same events. Microsoft Edge's built-in extension/service-worker targets are automatically collapsed by target_list.
Why only Chrome and Edge? This server is built directly on CDP flatten session routing, which Chrome and Edge implement correctly. Other browsers diverge:
Vivaldi does not respond to
flattensession-scoped CDP commands (e.g.Runtime.enable); it only answers browser-level commands. A non-flattenworkaround exists but is not wired in yet.Firefox removed CDP in v141+ and only speaks WebDriver BiDi, which this server does not implement.
Brave / Opera / Chromium have not been verified and are not claimed as supported.
🇨🇳 中文:目前仅官方支持并经过测试的是 Google Chrome 与 Microsoft Edge。
浏览器
是否支持
说明
Google Chrome
✅ 支持
已验证(Chrome 154.x)
Microsoft Edge
✅ 支持
已验证(Edg 140.x),CDP 上与 Chrome 完全等价
Vivaldi / Brave / Opera / Chromium
❌ 不支持
见下方说明
Firefox / Safari
❌ 不支持
见下方说明
Edge 与 Chrome 在 CDP 上完全等价、事件一致;Edge 自带的扩展页 / service worker 会被
target_list自动折叠。为什么只支持 Chrome 和 Edge? 本服务直接基于 CDP 的
flatten会话路由,而 Chrome 与 Edge 对该方式实现正确,其他浏览器存在差异:
Vivaldi 不响应
flatten会话级 CDP 命令(如Runtime.enable),只对浏览器级命令应答;存在非flatten的绕行方案,但尚未接入。Firefox 自 v141 起已移除 CDP,仅支持 WebDriver BiDi,而本服务未实现 BiDi。
Brave / Opera / Chromium 未经验证,声明为不支持。
Related MCP server: Chrome DevTools MCP
What it does
Category | Capability |
Browser processes | Enumerate local browser processes, detect which are CDP-attachable, list installed Chromium browsers, scan local debugging ports |
Connection | Attach to an already-running browser ( |
Console | All console output, filterable by level / keyword / time / source page |
Network | Request & response headers, POST body, timing, initiator, cache hit; response body on demand |
Errors | Uncaught exceptions, |
Page | DOM snapshot (HTML + LLM-friendly indented outline), run JS, screenshot, performance metrics, Cookies / localStorage / IndexedDB |
Interaction | Raw CDP pass-through ( |
One-shot save |
|
Live | Subscribe to an event stream: console / every network phase / exceptions / navigation / tab add-remove / performance samples / page screen frames; consume via long-poll or server push, or record continuously to disk JSONL |
The exported HAR imports cleanly into Chrome DevTools / Charles / Fiddler; report.html is a single self-contained offline report — double-click to open, no external CDN dependencies.
🇨🇳 中文:
类别
能力
浏览器进程
枚举本机浏览器进程、识别可 CDP 附加者、列出已装 Chromium 浏览器、扫描本机调试端口
连接
附加已有浏览器(需带
--remote-debugging-port)或自行拉起独立临时 profile 实例,绝不污染个人配置console
全部 console 输出,可按级别 / 关键字 / 时间 / 来源页过滤
网络
请求与响应头、POST body、timing、initiator、缓存命中;按需取响应体
错误
未捕获异常、console.error、日志错误、渲染进程崩溃(含 URL 与调用栈)
页面
DOM 快照(HTML + 适合 LLM 的大纲)、执行 JS、截图、性能指标、Cookies / localStorage / IndexedDB
交互
任意 CDP 命令透传(
cdp_send)、通过Input域的真实鼠标/键盘/文本输入(游戏/Canvas/视频可识别)、等待选择器/文本、刷新/后退导航一键保存
见上 13 类产物(HAR / CSV / HTML 报告等)
实时
订阅事件流:console / 网络各阶段 / 异常 / 导航 / 标签页增减 / 性能采样 / 页面画面帧;可长轮询或推送消费,或持续录制到磁盘 JSONL
导出的 HAR 可直接导入 Chrome DevTools / Charles / Fiddler;
report.html是单文件离线报告,双击即看,无外部 CDN 依赖。
Install
npm install -g cdp-browser-mcp # then run: cdp-browser-mcp
# or, without installing:
npx -y cdp-browser-mcpRequires Node.js >= 18.17.
🇨🇳 中文:
npm install -g cdp-browser-mcp后直接运行cdp-browser-mcp;或npx -y cdp-browser-mcp免安装使用。需要 Node.js >= 18.17。(包名以最终发布为准,若不同请替换。)
MCP client configuration
The server defaults to stdio transport (cdp-browser-mcp), and can switch to HTTP with --transport http --port 8931.
WorkBuddy
Write to ~/.workbuddy/mcp.json (note: mcp.json, not .mcp.json):
{
"mcpServers": {
"browser-devtools": {
"command": "cdp-browser-mcp"
}
}
}Claude Desktop
claude_desktop_config.json:
{
"mcpServers": {
"browser-devtools": {
"command": "cdp-browser-mcp"
}
}
}Cursor
Project or global ~/.cursor/mcp.json, same shape as above.
After writing the config, restart the client, then click Trust on the new server in the connector management page to enable it.
🇨🇳 中文:服务默认走 stdio 传输(命令
cdp-browser-mcp),也可加--transport http --port 8931切到 HTTP。WorkBuddy:写入
~/.workbuddy/mcp.json(注意是mcp.json,不是.mcp.json)。Claude Desktop:写入claude_desktop_config.json。Cursor:项目级或全局~/.cursor/mcp.json,结构相同。写完后重启客户端,并在连接器管理页对新服务点「信任」启用。
Typical usage
The simplest path — let it launch its own browser:
browser_launch({ headless: true, url: "https://example.com" })Then read data directly, no connection step needed:
console_read({ level: ["error", "warn"] })
network_list({ httpErrorsOnly: true })
page_errors()
page_dom({ mode: "outline" })
capture_save()To inspect the browser you already use, restart it with a debugging port first:
chrome.exe --remote-debugging-port=9222 --remote-allow-origins=*Then browser_discover finds it and browser_connect({ port: 9222 }) attaches.
A built-in diagnose_page prompt walks the model through a fixed order to debug page issues.
🇨🇳 中文:最简路径——让它自己开一个浏览器:
browser_launch({ headless: true, url: "https://example.com" }),随后直接console_read/network_list/page_errors/page_dom/capture_save抓数据,无需先建立连接。要抓你正在用的浏览器,先用调试端口重启它(chrome.exe --remote-debugging-port=9222 --remote-allow-origins=*),再browser_discover找到、browser_connect({ port: 9222 })连上。内置diagnose_pageprompt 会引导模型按固定顺序排查页面问题。
Live mode: get events as they happen
Default capture is "read the buffer once" — good for post-mortems. To watch a process over time, use live mode.
Step 1 — subscribe. Once subscribed, events are buffered whether or not you are reading, so nothing is lost if you are a beat late:
events_subscribe({
channels: ["console", "network", "error", "navigation", "target"],
performanceSampleMs: 500
})
-> { subscriptionId: "sub-...", cursor: 1234 }Step 2 — consume. Two ways, usable together:
events_wait({ subscriptionId, cursor, timeoutMs: 15000 }) # long-poll: returns immediately on data, empty on timeout
events_read({ subscriptionId, cursor }) # no wait, peek what has accumulatedevents_wait returns { events, cursor }; pass cursor straight back next time — no replay, no dropped events. Loop on it to watch a page continuously (works over both stdio and HTTP).
The server can also push. Subscriptions default to push: "notification", so the server proactively pushes new events via MCP notifications/browser-devtools/events (or push: "logging" for standard notifications/message). If the client does not understand the notification, push degrades gracefully and events stay in the buffer — polling still works, 100% lossless.
To see the page moving, subscribe to the frame channel (backed by Page.startScreencast):
events_subscribe({ channels: ["frame"], frames: { maxWidth: 800, quality: 60, everyNthFrame: 1 } })
events_wait({ subscriptionId, includeFrameData: true, limit: 5 }) # base64 returned only when you askFor long monitoring without memory blow-up, record to disk as it arrives:
recording_start({ name: "checkout-flow", saveFrames: true, performanceSampleMs: 1000 })
... reproduce the steps ...
recording_stop({ recordingId })Artifacts land in captures/<name>/: live-events.jsonl (one event per line, jq-friendly), frames/00000001.jpg (screen frames, sequential), recording-summary.json (stats). To watch multiple tabs at once: browser_connect({ watchAllTargets: true }) attaches capture to every page, including ones opened later. The built-in monitor_live prompt guides the model through the "subscribe → wait → summarize" rhythm.
Channel reference:
channel | events | meaning |
|
| console output & |
|
| full network lifecycle |
|
| a new row in the error table (incl. renderer crash) |
|
| top-frame navigation |
|
| tab / window add-remove |
|
| periodic |
|
| page screen frames (needs |
🇨🇳 中文:默认抓取是「一次性读缓冲」,适合事后取证;要盯过程就用实时模式。 第一步订阅:订阅后无论你是否在读,事件都会先入缓冲,不会因慢一步而丢。
events_subscribe({ channels: [...], performanceSampleMs: 500 })返回{ subscriptionId, cursor }。 第二步消费:events_wait(长轮询,有数据即回、超时回空)与events_read(不等待先看一眼)可并用;events_wait返回{ events, cursor },下次把 cursor 原样传回即可,不重放、不丢。循环调用即持续监控(stdio / HTTP 皆可)。 服务端也能主动推:默认push:"notification",通过notifications/browser-devtools/events推新事件(或push:"logging"走标准notifications/message);客户端不认得通知也能优雅降级,事件仍在缓冲、轮询照常。 看页面动态:订阅frame通道(底层Page.startScreencast)。长时监控防内存爆:recording_start/stop边收边写磁盘,产物在captures/<name>/(live-events.jsonl、frames/、recording-summary.json)。多标签页:browser_connect({ watchAllTargets: true })给所有页面(含之后新开)挂抓取。内置monitor_liveprompt 引导「订阅→等待→汇总」节奏。通道一览见表。
Tools overview
Browser: browser_list_processes, browser_installed, browser_discover, browser_launch, browser_connect, browser_close, target_list, target_select, session_info, session_dump
target_listlists only real web pages by default and collapses Edge/Chrome built-in extension pages, service workers, and offscreen documents (a headed Edge often has a dozen of these that would drown the two or three real pages). PassincludeBackground: trueto see everything. If filtering leaves nothing, it falls back to the full list automatically — you never get a misleading "no tabs" result.
Content capture: console_read, console_clear, network_list, network_detail, network_body, network_clear, resources_list, resources_get, page_errors, page_dom, page_evaluate, page_screenshot, performance_metrics, storage_read
resources_list/resources_getmirror the DevTools Sources → Page panel:resources_listreconstructs the frame tree and every resource that frame loaded;resources_getreads any resource's content by URL (equivalent to clicking a file in the panel). Two fallbacks apply when reading: first try the captured request, then re-fetch in-page, soHEADprobes,Rangemedia requests, and bodies the browser dropped for size are all recoverable.
Interaction (real runtime input): cdp_send, page_click, page_key, page_type, page_wait_for, page_reload, page_back
cdp_sendis a raw CDP pass-through that unlocks anything not separately wrapped (e.g.Emulation.*,Page.bringToFront,DOM.focus).page_click/page_key/page_typeuse genuineInput.dispatchMouseEvent/Input.dispatchKeyEvent/Input.insertTextevents — the ones games, canvas apps and video players actually honour, unlike synthetic in-pagedispatchEvent.page_wait_forpolls until a selector / text / predicate is true;page_reload/page_backdrive navigation.browser_launchacceptsemulateVisible(keeps the page in the active lifecycle so headless rAF / game loops keep running) andpage_evaluateexposestimeoutMs.Text mojibake fallback: when the server sends no
charset, the browser decodes by its locale default (GBK on Chinese Windows — a lossy transform), turning Chinese into garbage.network_body/resources_getfirst try a reversible single-byte restore, then fall back to an in-pagefetch()that re-decodes as UTF-8 per the WHATWG spec, guaranteeing the correct original.Partial-content fallback: reading a request before it finishes makes
Network.getResponseBodysilently return what arrived so far.resources_getchecks completeness and re-fetches in-page if incomplete;network_bodyreturnspartial: truewith a hint, so you never mistake a half file for a whole one.Ordering matters:
resources_getwaits for full load;network_bodyreturns "the request captured right now" — different purposes (reproduce the file vs. analyze the actual request).
Capture & archive: capture_start, capture_status, capture_stop, capture_save, capture_list_saved
Live: events_subscribe, events_wait, events_read, events_unsubscribe, events_list, recording_start, recording_stop
🇨🇳 中文: 浏览器:
browser_list_processes、browser_installed、browser_discover、browser_launch、browser_connect、browser_close、target_list、target_select、session_info、session_dump。target_list默认只列真实网页,折叠 Edge/Chrome 自带扩展页、service worker、offscreen 文档;includeBackground:true看全量,过滤到空会自动回退全量。 内容抓取:console_read、console_clear、network_list、network_detail、network_body、network_clear、resources_list、resources_get、page_errors、page_dom、page_evaluate、page_screenshot、performance_metrics、storage_read。resources_list/resources_get对应 Sources → 页面面板,取值有两层兜底(先抓请求、失败页内重拉),并含文本乱码兜底与半截内容兜底。 实时交互(真实运行时输入):cdp_send、page_click、page_key、page_type、page_wait_for、page_reload、page_back。cdp_send是任意 CDP 命令透传;page_click/page_key/page_type走真正的Input.dispatch*事件(游戏/Canvas/视频能识别,而页内合成的dispatchEvent识别不了);page_wait_for等选择器/文本/条件成立;page_reload/page_back驱动导航;browser_launch的emulateVisible让无头页面保持活跃(rAF/游戏循环不被冻结),page_evaluate暴露timeoutMs。 抓取与归档:capture_start、capture_status、capture_stop、capture_save、capture_list_saved。实时:events_subscribe、events_wait、events_read、events_unsubscribe、events_list、recording_start、recording_stop。
Saved artifacts
captures/<session>/
├── session.json raw full data (console / network / errors / dom / metrics / storage)
├── console.json console logs, structured
├── console.csv console logs, tabular
├── network.har HAR 1.2, importable into DevTools / Charles
├── network.csv network requests, tabular
├── metrics.json performance metric snapshots
├── storage.json Cookies / localStorage / sessionStorage / IndexedDB
├── dom.html page HTML snapshot
├── dom-outline.txt page structure outline (LLM-friendly)
├── screenshot.png page screenshot
├── report.html offline HTML report, double-click to view
├── summary.md Markdown summary, ready to paste into chat
└── manifest.json artifact indexWhen capture is large, the report renders only the most recent 500 rows/tables; full data lives in the JSON and CSV.
🇨🇳 中文:产物目录
captures/<会话名>/含session.json、console.json、console.csv、network.har、network.csv、metrics.json、storage.json、dom.html、dom-outline.txt、screenshot.png、report.html、summary.md、manifest.json。抓取量大时报告只渲染最近 500 行/表,完整数据在 JSON 与 CSV 中。
Known limitations & security
Only Google Chrome and Microsoft Edge are supported (see Supported browsers). Firefox/Safari do not speak CDP and are listed as non-attachable.
Browsers started with
--remote-debugging-pipedo not listen on a TCP port and cannot be attached; usebrowser_launchto start an instance.Chrome 111+ requires
--remote-allow-origins=*, or the WebSocket handshake is rejected —browser_launchadds it automatically.Attaching to a debugging port grants full control of that browser. Do not open a debugging port on a profile holding sensitive accounts. Instances this server launches always use a throwaway profile, cleaned up asynchronously on close.
For safety, throwaway-profile deletion is restricted to folders under the system temp directory whose path contains
browser-devtools-mcp.Buffer caps default to 5000 console / 5000 network / 1000 errors / 5000 live events; oldest data is evicted ring-style once exceeded.
Long-poll
events_waitis bounded by the client's own timeout (default 15s, max 120s); loop it for longer watches.Screen frames are sizable; only metadata is returned by default — pass
includeFrameData: trueto get base64 (max 12 frames per call).
🇨🇳 中文:仅支持 Google Chrome 与 Microsoft Edge(见上)。Firefox/Safari 不走 CDP,会被标为不可附加。用
--remote-debugging-pipe启动的浏览器不监听 TCP,无法附加,请用browser_launch。Chrome 111+ 必须带--remote-allow-origins=*(本服务已自动加)。附加调试端口等于获得该浏览器完整控制权,勿对存敏感账号的 profile 开放调试端口;本服务自动启动的实例一律用临时 profile 并异步清理,且删除仅限于系统临时目录下含browser-devtools-mcp的文件夹。缓冲上限默认 console/network 各 5000、错误 1000、实时事件 5000;长轮询events_wait受客户端超时限制(默认 15s、上限 120s);画面帧默认只回传元信息。
Development
npm run typecheck # type-check
npm run build # compile to dist/
npm run smoke # end-to-end: start server, open a real browser, capture, save, verify
npm run smoke:edge # same, but explicitly Edge (--browser=chrome / edge)
npm run acceptance:edge # headed-browser acceptance: process enum, attach running instance, multi-tab
npm run acceptance:chrome # same suite on Chrome
npm run verify:site # live-site check: capture vs. local directory, byte-for-byte
npm run verify:sources # Sources-panel coverage: resource tree + every resource readable & correct
npm run inspect # start over HTTP transport for local debuggingSource layout:
src/
├── cdp/ lightweight CDP WebSocket client, RemoteObject → text
├── browser/ process enum, port discovery, install-path probe, debug-port launch
├── capture/ ring-buffer store, DOM outline, DevToolsSession (event wiring)
├── export/ HAR / CSV / HTML report / one-shot save
├── live/ event-stream subscription manager, disk recorder (JSONL + frames)
├── tools/ MCP tool implementations
└── server.ts server assembly (incl. live-event push wiring)🇨🇳 中文:开发脚本见上(
typecheck/build/smoke/smoke:edge/acceptance:edge/acceptance:chrome/verify:site/verify:sources/inspect)。源码结构:cdp/(CDP 客户端)、browser/(进程枚举/端口发现/启动)、capture/(环形缓冲/DOM 大纲/会话接线)、export/(HAR/CSV/报告/保存)、live/(订阅管理/磁盘录制)、tools/(MCP 工具)、server.ts(服务组装)。
License
MIT
Available Tools
36 toolsbrowser_close关闭连接或浏览器A
断开当前 CDP 会话;可选按端口关闭由本服务启动的浏览器实例,或全部关闭。
Inputs: port, closeAll, killBrowser.
browser_connect连接浏览器B
附加到已开启调试端口的浏览器实例(或给定完整 WebSocket 地址),建立 CDP 会话。
Inputs: host, port, targetId, autoAttach, +2 more.
browser_discover扫描调试端口C
扫描本机的 DevTools HTTP 端点(默认 9222–9235),找出已经开启远程调试的浏览器。
Inputs: to, from, host, ports.
browser_installed查找已安装浏览器A
列出本机已安装的 Chromium 系浏览器及其可执行文件路径,供 browser_launch 使用。
Inputs: no named parameters.
browser_launch启动浏览器B
以独立 user-data-dir 启动一个带远程调试端口的 Chromium 浏览器(不污染你的个人配置),默认立即附加会话。
Inputs: url, args, host, kind, +8 more.
browser_list_processes列出浏览器进程A
枚举本机正在运行的浏览器进程,标出哪些可以通过 CDP 附加(需要 --remote-debugging-port)。Firefox/Safari 不走 CDP,会被标记为不可附加。
Inputs: filter, includeChildren.
capture_list_saved列出已保存的抓取B
列出之前保存过的抓取目录(含内存记录与 captures 根目录下的结果)。
Inputs: rootDir.
capture_save一键保存A
把抓到的全部内容落盘成一个目录:session.json、console.json/csv、network.har、network.csv、metrics.json、storage.json、dom.html、截图、离线 HTML 报告 report.html、summary.md 与 manifest.json。
Inputs: dir, name, maxRows, rootDir, +5 more.
capture_start开始一轮抓取A
清空缓冲并记录起始时间,之后发生的 console / 网络 / 错误都会被计入本轮抓取。
Inputs: targetId.
capture_status抓取状态B
查看当前会话的缓冲计数、目标页与是否处于某一轮抓取中。
Inputs: no named parameters.
capture_stop结束抓取并汇总A
结束当前这一轮抓取,返回统计与建议摘要(不落盘;要落盘用 capture_save)。
Inputs: includeDom, includeStorage, includeScreenshot, includePerformance.
console_clear清空 console 缓冲A
清空当前会话缓冲的 console 数据(不影响已经落盘的产物)。
Inputs: no named parameters.
console_read读取 console 日志A
读取已捕获的 console 输出,支持按级别、关键字、时间、来源页过滤。适用于排查报错、定位日志来源。
Inputs: level, limit, since, format, +3 more.
events_list列出实时订阅B
列出所有订阅及其过滤条件、已匹配条数、缓冲条数与当前游标。
Inputs: includeHidden.
events_read读取实时事件快照A
立即读取订阅里已积累的实时事件,不等待。适合先看一眼再决定是否阻塞等待。
Inputs: subscriptionId (required), limit, cursor, includeFrameData.
events_subscribe订阅实时事件A
订阅实时事件流:所有新发生的 console 输出、网络请求(请求/响应/完成/失败)、异常、导航、标签页增减、性能指标采样与页面画面帧都会即时进入该订阅。返回 subscriptionId,之后用 events_wait(阻塞等待)或 events_read(立即取)消费。
Inputs: push, level, buffer, frames, +7 more.
events_unsubscribe取消订阅B
结束订阅并释放缓冲。会自动停止没人用的性能采样与画面推流。
Inputs: subscriptionId (required).
events_wait等待实时事件A
长轮询:等到有匹配的实时事件就立刻返回,最多等待 timeoutMs(默认 15 秒,上限 120 秒)。传入上次返回的 cursor 就不会漏也不会重。这是任何客户端都能用的实时消费方式。
Inputs: subscriptionId (required), min, limit, cursor, +2 more.
network_body获取响应体B
取指定请求的响应体内容(文本)。二进制响应建议结合 mimeType 自行判断是否需要 base64。
Inputs: requestId (required), maxChars.
network_clear清空网络缓冲A
清空当前会话缓冲的网络请求记录。
Inputs: no named parameters.
network_detail查看单个请求详情B
按 requestId 查看单个请求的完整信息:请求头、响应头、Post body、timing、initiator、cookie 等。
Inputs: requestId (required).
network_list列出网络请求B
列出捕获到的网络请求,可按 URL 关键字、方法、资源类型、状态码过滤,也可只看失败或 4xx/5xx。
Inputs: type, limit, since, method, +5 more.
page_dom抓取页面 DOMB
获取当前页面的 DOM:可返回原始 HTML、适合 LLM 阅读的缩进结构大纲,或两者。默认 both,并自动截断超长 HTML。
Inputs: mode, depth, maxNodes, skipHidden, +2 more.
page_errors页面错误列表B
列出捕获到的未捕获异常、console.error、日志错误与渲染进程崩溃,含 URL 与调用栈。
Inputs: limit.
page_evaluate执行 JavaScriptA
在当前页面上下文执行一段 JavaScript 并返回结果(支持 await Promise),等价于 DevTools Console。
Inputs: expression (required), awaitPromise, returnByValue.
page_screenshot页面截图A
对当前页面截图。图片数据默认不回传(体积大),需要看图时把 returnBase64 设为 true。
Inputs: format, quality, fullPage, maxBytes, +1 more.
performance_metrics性能指标B
获取 Performance.getMetrics 指标,以及导航计时、绘制时间和 JS 堆占用。
Inputs: no named parameters.
recording_start开始实时录制到磁盘A
把实时事件流持续追加写入 JSONL 文件(每条一行),适合长时间监控而不怕内存爆掉;可同时把页面画面帧按序存成图片。用 recording_stop 结束并拿统计。
Inputs: dir, name, rootDir, channels, +2 more.
recording_stop停止录制B
结束实时录制并输出统计信息与产物路径。
Inputs: recordingId.
resources_get读取资源内容(按 URL)A
按 URL 读取页面资源的内容,等同于在开发者工具 Sources 面板里点开某个文件看源码。会自动采用 UTF-8 纠偏,避免无 charset 的中文文本变乱码。图片/音视频等二进制会返回 base64。
Inputs: url (required), asBase64, maxChars.
resources_list页面资源树(Sources 面板)A
返回开发者工具「源代码 / Sources > 页面」面板里那棵树:按 frame 分层,列出页面实际加载的全部资源(文档、样式表、脚本、图片、字体、音视频等),并交叉带上对应的 requestId / 状态码 / 大小。与 network_list 互补:这里给的是页面资源视角(含已进入页面但未必在 Network 缓冲里的资源),network_list 给的是 HTTP 请求视角。
Inputs: targetId.
session_dump导出原始会话数据B
把当前缓冲里的全部数据按 CapturedData 结构返回(不做落盘),适合你想自己加工时用。
Inputs: includeDom, includeStorage, includeScreenshot, includePerformance.
session_info会话状态A
查看当前会话的连接信息、目标页、缓冲计数与告警。常用于判断“现在到底连着谁”。
Inputs: no named parameters.
storage_read读取页面存储A
读取当前页面的 Cookies、localStorage、sessionStorage 与 IndexedDB 数据库名。
Inputs: no named parameters.
target_list列出标签页A
列出当前浏览器中可附加的页面。默认隐藏扩展页 / service worker / devtools 等后台目标(Edge、Chrome 装着扩展时这类目标往往有十几个),需要全量时把 includeBackground 设为 true。
Inputs: includeBackground.
target_select切换标签页A
附加到指定标签页并把它设为当前抓取对象;后续 console / network / DOM 工具都作用在这个页面上。
Inputs: targetId (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 36 tools
Most tools map to a distinct resource+action, but three families (capture_*, events_*, recording_*) all concern capturing telemetry yet differ only by buffering/persistence strategy, which an agent could confuse. resources_list vs network_list and page_dom vs resources_get are documented as complementary and distinguishable. Overall boundaries are mostly clear with a few overlapping regions.
Names consistently use snake_case with a domain prefix (browser_, page_, console_, network_, events_, capture_, recording_, resources_, target_, session_). A few tools drop the verb (capture_status, capture_save, session_info, session_dump), which is a minor deviation from the verb_noun ideal. Still highly predictable overall.
36 tools is heavy for a single server and crosses into the 'too many' band. The breadth across launch/discovery/session/capture/events/recording/console/network/DOM/resources/storage/performance is genuine, but the capture/events/recording redundancy inflates the count beyond what the domain strictly needs.
Coverage is strong: process discovery, launch/attach/close, target selection, console, network, DOM, resources, storage, performance, screenshots, buffered capture, real-time events, and persistent recording. Minor gaps exist (no navigation/reload control, no input/interaction or request interception), but core diagnostic workflows are covered.
Maintenance
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
Cloud browser, web extraction, screenshots, and remote CDP tools for AI agents.
Give AI agents a real cloud Chrome: open sessions, navigate, read pages, click, type and screenshot.
Hosted browser for AI agents: screenshots, post-JS DOM, console, WCAG. No install, no API key.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI coding assistants to control and inspect a live Chrome browser through Chrome DevTools. Provides browser automation, performance analysis, debugging capabilities, and network request monitoring.2,099,626 npm55,156Apache 2.0
- AlicenseAqualityCmaintenanceEnables AI coding assistants to control and inspect a live Chrome browser for automation, debugging, performance analysis, and screenshot capture through Chrome DevTools.262,099,626 npm3Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI coding assistants to control and inspect a live Chrome browser for automation, debugging, performance analysis, network monitoring, and DOM interaction through Chrome DevTools Protocol.2,099,626 npmApache 2.0
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI coding assistants to control and inspect a live Chrome browser for automated debugging, performance analysis, and web interaction. It leverages Puppeteer and Chrome DevTools to provide capabilities like network monitoring, console logging, and automated browser actions.-