browser-devtools-mcp
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-mcpcheck 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 153.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 153.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 |
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
一键保存
见上 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.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 → 页面面板,取值有两层兜底(先抓请求、失败页内重拉),并含文本乱码兜底与半截内容兜底。 抓取与归档: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 会话;可选按端口关闭由本服务启动的浏览器实例,或全部关闭。
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | 要关闭的已启动实例端口 | |
| closeAll | No | 关闭本服务启动的所有实例 | |
| killBrowser | No | 同时关闭当前连接对应的已启动实例 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it scopes which instances can be closed ('由本服务启动的浏览器实例') and distinguishes session teardown from process termination. It omits reversibility/auth/error behavior, which keeps it out of the top band.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with the primary action (session disconnect) front-loaded and the optional closings trailing. No filler, though the branching could be marginally clearer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-annotation, no-output-schema teardown tool with three optional flags, the description covers the main behavior and the scope limitation adequately. Only precondition/irreversibility information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description restates the three optional branches (port / closeAll / killBrowser) without adding format or precedence detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource: it disconnects the current CDP session and can optionally close browser instances launched by the service. This separates it from siblings like browser_launch/browser_connect, though it does not name them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage through the optional branches (disconnect only, close by port, or close all), but never states when to prefer this over leaving sessions open or how it relates to browser_connect. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_connect连接浏览器B
附加到已开启调试端口的浏览器实例(或给定完整 WebSocket 地址),建立 CDP 会话。
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | ||
| port | No | 调试端口;省略时自动扫描 | |
| targetId | No | 要切换到的标签页 ID;省略时自动选第一个可用页面 | |
| autoAttach | No | 是否自动附加页面,默认 true | |
| webSocketUrl | No | 完整 browser WebSocket 地址,优先于 port | |
| watchAllTargets | No | 连到浏览器后是否为所有标签页(含之后新开的)都开启抓取,默认 false 只抓当前页 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses only that a CDP session is established; it says nothing about failure modes when no browser is found, whether multiple connects are allowed, or how the session interacts with the many capture/session siblings. For a foundational connectivity tool with zero annotation coverage, this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no wasted words, and the primary case (debug-port browser) is front-loaded ahead of the WebSocket fallback. It is appropriately sized for the action it describes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six optional parameters, no output schema, and no annotations, the description is thin for a tool that anchors the whole session workflow. It omits what a successful connection returns and how the established session is consumed by siblings. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83% (high), so the schema already documents port, targetId, autoAttach, webSocketUrl, and watchAllTargets. The description reinforces only that webSocketUrl is a full-address alternative, adding marginal meaning beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (attach/connect) and resource (a browser instance with debug port, or a WebSocket URL) and the outcome (establishing a CDP session). This is clearer than the sibling names alone, but it never distinguishes itself from browser_discover, browser_launch, or browser_close, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase '已开启调试端口' (debug port already open) implies a precondition — the browser must already be running — which is useful context. However, there is no explicit when-to-use guidance and no mention of the alternatives (browser_discover to find, browser_launch to start) that would tell the agent when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_discover扫描调试端口C
扫描本机的 DevTools HTTP 端点(默认 9222–9235),找出已经开启远程调试的浏览器。
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | 结束端口,默认 9235 | |
| from | No | 起始端口,默认 9222 | |
| host | No | 目标主机,默认 127.0.0.1 | |
| ports | No | 额外要探测的端口 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden but only states what is scanned and default ports. It omits whether the scan is non-destructive, blocking, timeout behavior, permissions required, or what is returned when no endpoints are found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the purpose and default port range with zero waste. It is appropriately sized for a discovery tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a network scanning tool with no annotations and no output schema, the description is incomplete. It does not describe the return format (e.g., list of endpoints), timeout behavior, or how results are structured, leaving an agent unable to interpret the output correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema. The description repeats the default port range but adds no new meaning beyond what the schema provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (扫描) and resource (本机的 DevTools HTTP 端点) and includes the default port range, making the tool's purpose clear. However, it does not explicitly differentiate itself from sibling tools like browser_connect or browser_list_processes, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The description only states what the tool does, leaving the agent to infer that it should be used before connecting to a browser.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_installed查找已安装浏览器A
列出本机已安装的 Chromium 系浏览器及其可执行文件路径,供 browser_launch 使用。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the scope (Chromium-family only, executable paths) and implies a read-only listing, but says nothing about whether results are cached, how the filesystem is scanned, or what the shape of the return is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. The resource being listed comes first and the intended consumer (browser_launch) trails as a brief rationale.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter discovery tool with no output schema and no annotations, the description is nearly complete: it names what is returned (installed browsers and their paths) and why. The only gap is the lack of differentiation from the overlapping browser_discover sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies. The description adds no parameter detail because none exists, which is correct; there is no parameter gap to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: lists locally installed Chromium-family browsers and their executable paths. This clearly distinguishes it from launch/connect siblings, though it does not explicitly set itself apart from browser_discover, which could plausibly overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trailing clause '供 browser_launch 使用' implies the downstream workflow (feed results into browser_launch), which is useful context. However, it gives no explicit when-to-use vs alternatives such as browser_discover or browser_list_processes, leaving the agent to infer the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_launch启动浏览器B
以独立 user-data-dir 启动一个带远程调试端口的 Chromium 浏览器(不污染你的个人配置),默认立即附加会话。
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | 启动后打开的 URL | |
| args | No | 额外的 Chromium 启动参数 | |
| host | No | ||
| kind | No | ||
| port | No | 调试端口,缺省自动挑选空闲端口 | |
| attach | No | 是否启动后自动附加会话,默认 true | |
| headless | No | 是否使用 --headless=new | |
| targetId | No | 附加后要切换到的标签页 | |
| executable | No | 浏览器可执行文件绝对路径,优先级高于 kind | |
| keepProfile | No | 关闭后保留临时 profile,默认 false | |
| userDataDir | No | 指定持久化 profile 目录;缺省用临时目录 | |
| watchAllTargets | No | 是否为所有标签页(含之后新开的)都开启抓取,默认 false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
由于没有提供任何注解,描述必须承担全部行为说明责任。它明确说明了隔离 profile 不污染个人配置、开放远程调试端口、默认立即附加会话——这些都是有用的上下文。但未提及进程生命周期、清理行为、权限要求或端口冲突处理方式。
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
单句结构紧凑,核心信息(隔离启动、调试端口、默认附加)前置,几乎没有冗余。信息密度高,但受限于句子过短,无法承载更多必要的使用指引。
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
该工具参数多达 12 个且无注解、无输出 schema,描述仅覆盖了其中少数几个核心概念。虽然 schema 本身有 83% 的描述覆盖率可以弥补部分缺失,但对于如此复杂且具有副作用的启动操作,描述仍显得不够完整。
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
schema 描述覆盖率为 83%,基线即为 3。描述中提到的 user-data-dir、调试端口和 attach 行为与 schema 中已有说明高度重合,未对 headless、keepProfile、watchAllTargets、targetId 等参数补充新的语义细节。
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
明确给出了动词(启动)、资源(Chromium 浏览器)和关键属性(独立 user-data-dir、远程调试端口),足以将其与 browser_connect / browser_discover 等同类工具区分开来。但它没有像高质量定义那样点明具体的不适用场景或直接命名同类工具。
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
描述仅隐含了使用该工具的情境(需要启动新浏览器时),没有明确说明何时应改用 browser_connect、browser_discover 或 browser_installed。默认 attach 行为提供了一点上下文,但未形成真正的使用指引。
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_list_processes列出浏览器进程A
枚举本机正在运行的浏览器进程,标出哪些可以通过 CDP 附加(需要 --remote-debugging-port)。Firefox/Safari 不走 CDP,会被标记为不可附加。
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | 按浏览器名或命令行过滤 | |
| includeChildren | No | 是否包含 renderer/gpu 等子进程,默认 false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does notable work: it discloses that results are annotated as attachable/non-attachable, that attachability depends on --remote-debugging-port, and that Firefox/Safari are always non-attachable. Gaps remain (read-only nature is only implied, no mention of output shape or failure behavior).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, the core purpose is front-loaded, and every clause earns its place by adding the CDP constraint and browser-exclusion behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only enumeration with no output schema, the definition covers what the agent most needs to interpret results (attachability marking). It could say more about the returned fields or whether filtering affects children, but it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents 'filter' and 'includeChildren'. The description adds no parameter-level detail, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: enumerating locally running browser processes, and adds the distinguishing CDP-attachability angle. This clearly separates it from siblings like browser_installed (installed vs running) and browser_discover, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied – an agent can infer it should run this before browser_connect to find an attachable target, but the description never states when to use it versus browser_discover/browser_installed or any prerequisites for the call itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_list_saved列出已保存的抓取B
列出之前保存过的抓取目录(含内存记录与 captures 根目录下的结果)。
| Name | Required | Description | Default |
|---|---|---|---|
| rootDir | No | 要扫描的根目录,缺省 <cwd>/captures |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose a useful behavioral fact – that results come from in-memory records as well as the captures root directory – but it never states that this is a read-only operation, nor describes return format, ordering, or whether the scan can be slow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence, front-loaded with the action and resource. No waste, though it is arguably too terse to earn a 5 for a listing tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description should carry return-shape expectations. It says what gets listed but not what the agent receives back (paths? IDs? metadata?), leaving a modest but real gap for a retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is only one optional parameter, so the schema already documents rootDir including its default. The description adds nothing beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: '列出...保存过的抓取目录', and clarifies scope as both in-memory records and results under the captures root dir. It is distinguishable from capture_save (which persists data), though it never explicitly names a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus capture_status, resources_list, or capture_save. The agent gets a description of what is listed but no trigger condition or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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。
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 直接指定输出目录(绝对路径);缺省用 captures/<会话名> | |
| name | No | 输出目录名,缺省用会话 ID | |
| maxRows | No | HTML 报告里每表最多渲染行数,默认 500 | |
| rootDir | No | 输出根目录,缺省 <cwd>/captures | |
| includeDom | No | 是否抓取 DOM 快照,默认 true | |
| includeStorage | No | 是否抓取存储数据,默认 true | |
| includeSummary | No | 是否返回 Markdown 摘要文本,默认 true | |
| includeScreenshot | No | 是否抓取截图,默认 true | |
| includePerformance | No | 是否抓取性能指标,默认 true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose concrete behavioral output: the exact set of files written to a directory, including an offline HTML report. However, it omits important traits such as whether an existing directory is overwritten, whether writes are additive, and any permission or failure behavior for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence states the action first, then enumerates outputs. It is efficient and waste-free, though the long artifact list is somewhat dense and could be trimmed to the most distinguishing files.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter tool with no output schema, the description usefully enumerates what gets written to disk, which compensates for the missing return documentation. It falls short only on behavioral caveats (overwrite handling, session requirements) that an agent would want before invoking a write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters (dir, name, maxRows, rootDir, and the five include* toggles) are already fully documented in the schema. The description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific action (把抓到的全部内容落盘, persisting captured content to disk) with an exhaustive enumeration of the resulting artifacts (session.json, network.har, dom.html, report.html, manifest.json, etc.). This makes it unambiguous against siblings like capture_stop (which halts), capture_list_saved (which lists), or network_list (which reads), so an agent can tell what this produces without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to invoke this versus alternatives such as capture_stop or capture_list_saved, nor any prerequisite (e.g. an active session, completed capture). Usage is only weakly implied by '抓到的内容' (the captured content). No exclusions or routing guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_start开始一轮抓取A
清空缓冲并记录起始时间,之后发生的 console / 网络 / 错误都会被计入本轮抓取。
| Name | Required | Description | Default |
|---|---|---|---|
| targetId | No | 可选,顺带切换到该标签页 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does disclose a meaningful side effect: the buffer is cleared, which destroys any previously captured console/network/error data. It also defines the capture scope and the timestamping behavior. It omits what happens if a capture is already running and any permission/session requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the destructive buffer-clear front-loaded and the scoping clause second. No filler, nothing repeated from the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-param lifecycle starter with no annotations and no output schema, the description covers side effects and capture scope adequately. Remaining gaps (re-invocation behavior, interaction with capture_stop/status, return value) are minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so targetId's meaning ('optionally switch to that tab') is already fully documented in the schema. The description adds no additional parameter detail, which matches the baseline of 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete verb and resource: it begins a capture round, clears the buffer, and stamps a start time. It is clearly the initiator of a capture lifecycle, but it never distinguishes itself by name from the closely related capture_status/capture_stop (or recording_start) siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by '之后发生的...都会被计入本轮抓取' – the agent can infer it should be called before the activity it wants recorded. There is no explicit statement of when to use this versus capture_status, capture_stop, or the overlapping recording_start, nor any prerequisite (e.g. session/target requirement).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_status抓取状态B
查看当前会话的缓冲计数、目标页与是否处于某一轮抓取中。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the inspected state (buffer count, target page, in-round flag), which implies a read-only probe, but never states explicitly that it has no side effects, nor whether it is scoped to the current session only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence covering all three returned facts with zero filler. Nothing redundant or misplaced.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description must carry both the return-shape and safety burden. It names the three returned facts but does not describe the shape of the response (field names, units of the buffer count) or the non-mutating nature of the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to clarify beyond the schema. Baseline 4 applies; the description correctly implies the call needs no arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear inspection purpose and enumerates exactly what is read: buffer count, target page, and whether a capture round is active. That is specific enough to distinguish it from capture_start/capture_stop, though it never names those siblings or session_info to disambiguate similar status reads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no reference to the sibling capture_start / capture_stop / capture_list_saved tools. The agent must infer that this is a non-mutating poll used before or during a capture round.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_stop结束抓取并汇总A
结束当前这一轮抓取,返回统计与建议摘要(不落盘;要落盘用 capture_save)。
| Name | Required | Description | Default |
|---|---|---|---|
| includeDom | No | ||
| includeStorage | No | ||
| includeScreenshot | No | ||
| includePerformance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses the non-persistent behavior ('不落盘') and the return content, but says nothing about prerequisites (must a capture be running?), error/empty conditions, or what the returned summary contains operationally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with the primary action front-loaded, followed by the persistence caveat in a parenthetical. Nothing is wasted and the key differentiator is not buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and four undocumented parameters, the description is only partially sufficient: it explains scope and persistence but leaves both the parameter meanings and the nature of the returned 'suggestion summary' unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four boolean parameters (includeDom, includeStorage, includeScreenshot, includePerformance) have 0% schema description coverage and are completely unmentioned in the description. The agent cannot learn from either source what toggling these flags changes in the returned statistics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('结束当前这一轮抓取') plus the return payload ('统计与建议摘要'), and explicitly names the sibling it is not ('要落盘用 capture_save'). An agent can separate it from capture_start/capture_save/capture_status without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one explicit routing rule: use capture_save when persistence is required. It implies usage after a capture round, but never says when to prefer this over capture_status or what state (an active capture) must hold before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
console_clear清空 console 缓冲A
清空当前会话缓冲的 console 数据(不影响已经落盘的产物)。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the blast radius (session buffer only, persisted artifacts untouched), which is real behavioral value, but says nothing about reversibility, whether the clear is immediate, or any return signal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the scope qualifier is attached directly to the action it modifies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output tool with no annotations, the description covers what is affected and what is not. Only the post-clear state (empty buffer, irreversibility) is left unstated, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: clearing console data buffered in the current session. The parenthetical scoping clause distinguishes it from a broader purge affecting persisted artifacts, though it does not explicitly name siblings like console_read or network_clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the scope statement — this clears the in-session console buffer rather than stored output — but there is no explicit when-to-use guidance, no prerequisites, and no named alternative to compare against.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
console_read读取 console 日志A
读取已捕获的 console 输出,支持按级别、关键字、时间、来源页过滤。适用于排查报错、定位日志来源。
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | 级别过滤:log/debug/info/warn/error/trace 等,可传数组 | |
| limit | No | 最多返回条数,默认 200 | |
| since | No | 仅返回该时间戳(epoch ms)之后的条目 | |
| format | No | 输出格式,默认 json | |
| search | No | 文本包含匹配 | |
| targetId | No | 限定某个标签页 | |
| errorsOnly | No | 只要 error 级别与异常 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose that output is already captured rather than live, and lists filter capabilities, but says nothing about pagination, return shape, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and followed by filter capabilities and use cases. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully documents all optional parameters, so the description does not need to repeat them. However, with no output schema, it leaves the return format and pagination behavior unexplained, which limits completeness for an agent invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters are already documented in the schema. The description adds a useful summary of filter categories but no syntax or default-value details beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: reading already-captured console output, with supported filter dimensions. It is clearly distinct from console_clear by implication, but does not explicitly differentiate itself from siblings such as page_errors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: troubleshooting errors and locating log sources. It does not state when not to use it or name alternative tools for similar needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_list列出实时订阅B
列出所有订阅及其过滤条件、已匹配条数、缓冲条数与当前游标。
| Name | Required | Description | Default |
|---|---|---|---|
| includeHidden | No | 是否包含内部订阅(磁盘录制用),默认 false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided the description carries the full burden, and it does disclose what each listed subscription reports (filter, matched count, buffer count, cursor), which is genuinely useful behavioral context. It stops short of stating read-only semantics, whether subscriptions are live/active, or whether the listing is paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; every clause names a concrete returned attribute and nothing is repeated from the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the enumeration of returned fields is the right thing to include and partially compensates. But with no annotations and no usage guidance, an agent still lacks the safety profile and the selection criteria needed to confidently choose this tool over its events_* siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter (includeHidden) is fully documented in the schema with a default. The description adds nothing about the hidden/internal-subscription distinction, so the schema does all the work — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('列出所有订阅') and even enumerates the fields surfaced for each subscription (filter conditions, matched count, buffered count, cursor). It does not, however, distinguish itself from adjacent siblings like events_read or events_subscribe, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites, and no naming of alternatives such as events_read or events_unsubscribe. The description only says what it returns, leaving selection among the four events_* siblings entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_read读取实时事件快照A
立即读取订阅里已积累的实时事件,不等待。适合先看一眼再决定是否阻塞等待。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 最多返回条数,默认 50 | |
| cursor | No | 只返回该游标之后的事件 | |
| subscriptionId | Yes | ||
| includeFrameData | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the core non-blocking trait ('不等待', reads already-accumulated events), but says nothing about subscription validity requirements, the return shape of a 'snapshot', or behavior when no events exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the non-blocking core behavior front-loaded and the usage hint second. No waste, though it is arguably terse enough to leave gaps rather than being fully economical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter read tool with no output schema and no annotations, the description covers the key non-blocking behavior but omits return-format expectations, what happens on an invalid/unknown subscription, and the meaning of includeFrameData. Adequate but with visible gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: limit and cursor are documented in the schema, while subscriptionId and includeFrameData are documented in neither. The description adds no parameter-level meaning at all, leaving half the parameters (including the undocumented includeFrameData) unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (立即读取, read immediately) plus resource (订阅里已积累的实时事件, accumulated real-time events in the subscription) and explicitly contrasts with the blocking behavior of its sibling events_wait via '不等待'. An agent can distinguish this from events_wait without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives clear when-to-use context ('适合先看一眼再决定是否阻塞等待'), effectively pointing to events_wait as the blocking alternative. It stops short of naming the alternative tool explicitly, so it is strong but not fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_subscribe订阅实时事件A
订阅实时事件流:所有新发生的 console 输出、网络请求(请求/响应/完成/失败)、异常、导航、标签页增减、性能指标采样与页面画面帧都会即时进入该订阅。返回 subscriptionId,之后用 events_wait(阻塞等待)或 events_read(立即取)消费。
| Name | Required | Description | Default |
|---|---|---|---|
| push | No | 是否主动向客户端推送通知,默认 notification(若客户端不支持会自动退化为轮询) | |
| level | No | console 级别过滤,如 ["error","warn"] | |
| buffer | No | 保留的最大事件数,默认 500(画面帧订阅默认 40) | |
| frames | No | 订阅页面实时画面(Page.startScreencast),可配置画质与帧率 | |
| search | No | 关键字过滤,命中 URL / 文本 / 载荷 | |
| channels | No | 通道:console / network / error / navigation / target / metric / frame,省略表示全部 | |
| targetId | No | 只看某个标签页 | |
| maxEvents | No | 匹配到这么多条后自动退订 | |
| errorsOnly | No | 只看错误与失败请求 | |
| maxDurationMs | No | 持续这么久后自动退订 | |
| performanceSampleMs | No | 每隔多少毫秒采样一次性能指标并产出 metric 事件 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the return value (subscriptionId) and that events arrive immediately, but it omits lifecycle behavior such as auto-unsubscribe, buffer limits, and the push/notification fallback to polling (which live only in the schema). No auth or rate-limit context is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and scope, then the return/consumption workflow. The enumeration of event types is somewhat long but earns its place by defining scope; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema, 11-param subscription tool, the description supplies the critical missing piece (it returns subscriptionId and how to consume it) plus the event scope. It is fairly complete, though it leaves auto-unsubscribe/buffer semantics and push fallback to the schema rather than surfacing them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 11 params (push, level, buffer, frames, channels, etc.). The description adds only a general list of what events exist, which maps loosely to the channels enum but adds no syntax or format detail beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('订阅实时事件流') and enumerates exactly what flows in (console, network, error, navigation, target, metric, frame). It also names the sibling tools used to consume the subscription, so an agent can distinguish this from events_read/events_wait.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description defines the workflow clearly: subscribe here, then consume via events_wait (blocking) or events_read (immediate), which effectively routes the agent across siblings. However, it gives no explicit comparison against alternative event-acquisition tools such as recording_start or the individual console_read/network_list/page_errors readers, nor any when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_unsubscribe取消订阅B
结束订阅并释放缓冲。会自动停止没人用的性能采样与画面推流。
| Name | Required | Description | Default |
|---|---|---|---|
| subscriptionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It usefully discloses side effects beyond the schema: releasing buffers and automatically stopping unused performance sampling and screen streaming. However, it omits permissions, idempotency, error behavior, and whether the subscription ID must be active.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and followed by a relevant side-effect note. No wasted wording, and the essential behavior is conveyed immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter mutation tool with no annotations or output schema, the description covers the core action and key side effects. It is not fully complete because it lacks usage context and parameter semantics, but it does enough to support correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate for the undocumented subscriptionId parameter. It does not explain the parameter's format, source, or meaning beyond the implicit association with '订阅'; the schema only declares it as a required string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: '结束订阅并释放缓冲' clearly identifies the tool as ending a subscription and releasing its buffer. It contrasts implicitly with the sibling events_subscribe, but does not explicitly name alternatives or distinguish itself from other event-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as events_subscribe or events_read. Usage is only implied by the phrase '结束订阅', leaving the agent to infer the correct context without any when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_wait等待实时事件A
长轮询:等到有匹配的实时事件就立刻返回,最多等待 timeoutMs(默认 15 秒,上限 120 秒)。传入上次返回的 cursor 就不会漏也不会重。这是任何客户端都能用的实时消费方式。
| Name | Required | Description | Default |
|---|---|---|---|
| min | No | 至少攒够几条才返回,默认 1 | |
| limit | No | 本次最多返回多少条,默认 50 | |
| cursor | No | 上次消费到的游标位置 | |
| timeoutMs | No | 最长等待毫秒数,默认 15000 | |
| subscriptionId | Yes | events_subscribe 返回的订阅 ID | |
| includeFrameData | No | 画面帧事件是否包含 base64 数据,默认 false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses the blocking long-poll semantics, immediate return on match, the timeout default of 15s and the 120s ceiling. It stops short of stating what happens on timeout (empty result vs error), which would be the last useful behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact clauses with zero filler, front-loaded with the mechanism, then the timeout bound, then cursor semantics. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should hint at returns; it partially does via 'the cursor returned last time', implying a cursor in the response. It does not describe the event payload shape or the timeout-return behavior, leaving a modest gap for a polling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all six parameters and the baseline is 3. The description adds value beyond the schema by noting the 120s cap on timeoutMs (schema only lists the 15000 default) and by explaining the no-loss/no-duplicate guarantee of cursor resumption.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific mechanism and resource: long-polling wait for matching real-time events, returning immediately on arrival. Clear verb+resource, but it does not explicitly contrast itself with the sibling events_read, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase '这是任何客户端都能用的实时消费方式' implies a general-purpose consumption path, and cursor handling hints at sequential polling, but the description never states when to prefer this over events_read or events_list. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_body获取响应体B
取指定请求的响应体内容(文本)。二进制响应建议结合 mimeType 自行判断是否需要 base64。
| Name | Required | Description | Default |
|---|---|---|---|
| maxChars | No | 最多返回字符数,默认 20000 | |
| requestId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It usefully discloses that the returned content is text and that binary payloads must be judged by the caller (via mimeType) for base64 handling. However, it omits behavior an agent needs: what happens when the body is unavailable or evicted, whether the response is truncated by maxChars, and any permission or session-state requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the core purpose is front-loaded before the binary-response caveat. The mimeType reference is the only mildly confusing element in an otherwise tight definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description must carry more weight than it does. It covers the essence of the return (text body plus a binary caveat) but leaves gaps around requestId provenance, truncation behavior at maxChars, and failure cases for unavailable bodies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: maxChars is documented in the schema (default 20000) but requestId has no schema description, and the tool description does not explain where requestId comes from or its expected form. The description also references mimeType, which is not a parameter of this tool at all, adding confusion rather than semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource: retrieve the response body (text) of a specified request. It is clearly distinct from network_list and network_clear, though it never explicitly contrasts itself with the closest sibling, network_detail. An agent can infer the purpose but must assume the relationship to network_detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance: no statement that requestId comes from network_list/network_detail, no prerequisites, no indication of when to prefer network_detail instead. The only conditional advice concerns binary responses and base64, which is a handling note rather than a tool-selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_clear清空网络缓冲A
清空当前会话缓冲的网络请求记录。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It does disclose the key scoping fact – only records in the current session buffer are destroyed – but omits that the operation is irreversible, whether it affects an in-progress capture, and whether a count or confirmation is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that front-loads the verb and scope with zero filler. Nothing redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema utility, the description covers what is cleared and where. The only meaningful gap is the absence of any warning that the clear is destructive and unrecoverable in an environment with no annotations to signal this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The description correctly implies no arguments are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (清空/clear) and a precise resource (当前会话缓冲的网络请求记录 – network request records buffered in the current session), which is distinct from siblings like network_list or network_detail. It does not explicitly name the complementary tools, but the action is unambiguous from name plus description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus alternatives such as console_clear, nor any prerequisites or caution about clearing after a capture. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_detail查看单个请求详情B
按 requestId 查看单个请求的完整信息:请求头、响应头、Post body、timing、initiator、cookie 等。
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | Yes | CDP requestId,可用 network_list 获取 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the payload it returns (headers, response headers, Post body, timing, initiator, cookie), but says nothing about read-only/side-effect-free nature, permissions, or whether full bodies are always available versus truncated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the keying parameter and then lists the returned information. No filler, nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description's field enumeration covers what an agent needs to decide the retrieval is worthwhile. It stops just short of stating read-only behavior or body-size caveats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains that requestId is a CDP requestId obtainable from network_list. The description merely restates '按 requestId' without adding format or constraint detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('按 requestId 查看单个请求') and enumerates the retrieved fields (headers, body, timing, initiator, cookie), which lets an agent distinguish it from network_list. It does not explicitly contrast with the closest sibling network_body, whose 'Post body' content overlaps with what this tool claims to return.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use or when-not-to-use guidance and names no alternatives. The only routing hint ('可用 network_list 获取') lives in the input schema, not in the description, so the description itself supplies no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_list列出网络请求B
列出捕获到的网络请求,可按 URL 关键字、方法、资源类型、状态码过滤,也可只看失败或 4xx/5xx。
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | 资源类型:document/script/xhr/fetch/image 等 | |
| limit | No | 最多返回条数,默认 200 | |
| since | No | 仅返回该时间戳之后的请求 | |
| method | No | HTTP 方法,如 GET/POST | |
| search | No | URL 包含匹配 | |
| status | No | 状态码,或 failed/error 表示只要失败 | |
| targetId | No | ||
| failuresOnly | No | 只要加载失败的请求 | |
| httpErrorsOnly | No | 只要 4xx/5xx |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. '捕获到的' implies data comes from an active capture, and it discloses the available filter modes including failure/4xx/5xx subsets, which is useful context. However, it omits pagination behavior, default limits, and return shape for a 9-parameter read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with the core action front-loaded and filters enumerated efficiently. No wasted clauses, though it leaves useful detail unstated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with no annotations and no output schema, the description covers the main filter parameters but is silent on time-range (since), result cap (limit), and pagination. Adequate but with clear gaps for an agent to call it precisely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 89%, so the schema already documents nearly every parameter. The description restates the filter dimensions (URL, method, type, status, failure flags) but adds no format or syntax detail and never mentions limit, since, or targetId. Baseline 3 applies when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('列出' / list) and resource ('网络请求' / network requests), and the filtering scope is described concretely. It implicitly separates itself from sibling network_detail (single request) and network_clear, but does not name any sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what can be filtered but gives no guidance on when to choose this over network_detail, network_body, or network_clear. No prerequisites (e.g. that a capture must be running) or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_dom抓取页面 DOMB
获取当前页面的 DOM:可返回原始 HTML、适合 LLM 阅读的缩进结构大纲,或两者。默认 both,并自动截断超长 HTML。
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 输出内容,默认 both | |
| depth | No | 大纲层级深度,默认 4 | |
| maxNodes | No | 大纲最多节点数,默认 800 | |
| skipHidden | No | 是否跳过 script/style/noscript,默认 true | |
| maxHtmlChars | No | HTML 最大字符数,默认 50000 | |
| maxTextLength | No | 大纲里文本节点的最大长度,默认 60 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose two useful traits beyond the schema: the default is 'both' and overly long HTML is automatically truncated. However, it omits whether this is a pure read, any permission/context requirements, and what truncation actually does to the returned payload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence front-loads the resource, then lists the output modes and the two behavioral facts (default 'both', auto-truncation). Nothing is wasted and the key information comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter, no-required-args read tool with no output schema and no annotations, the description is adequate on purpose but thin on behavior: it does not characterize the returned payload shape, how truncation is signaled, or any relationship to sibling capture tools. Parameters themselves are fully covered by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (mode, depth, maxNodes, skipHidden, maxHtmlChars, maxTextLength) is already documented with its default in the schema. The description only restates the mode default and truncation behavior, adding no syntax or interaction detail beyond the structured fields — the expected baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('获取当前页面的 DOM') and enumerates the three output modes (raw HTML, LLM-friendly indented outline, or both), so the agent knows exactly what this returns. It does not, however, differentiate itself from nearby siblings like page_evaluate or page_screenshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance. The phrase '适合 LLM 阅读的缩进结构大纲' implies the outline mode exists for LLM consumption, but the description never says when to prefer this over page_evaluate, page_screenshot, or network_body, nor does it state any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_errors页面错误列表B
列出捕获到的未捕获异常、console.error、日志错误与渲染进程崩溃,含 URL 与调用栈。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 最多返回条数,默认 100 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose the aggregating nature and the returned fields (URL and call stack). However, it omits ordering/recency, whether results reflect a live session or persisted capture, deduplication, and pagination behavior. Useful surface, but not full disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with no filler, and the core content (what error types are captured) is front-loaded. Efficient for the complexity level.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, one-optional-param read tool with no output schema, the description is adequate about content but silent on ordering, session scope, and how to interpret or page results. Minimum-viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single optional limit parameter is already documented as '最多返回条数,默认 100'. The description adds no meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (列出) plus the resource (errors) and enumerates the sources it aggregates: uncaught exceptions, console.error, log errors, and renderer crashes. It is clear what the tool returns. It does not explicitly distinguish itself from the sibling console_read, which also surfaces console output, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this instead of console_read, console_clear, or events_read is given. There is no mention of live vs. historical scope, retention, or exclusions. The agent must infer eligibility from the sibling list alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_evaluate执行 JavaScriptA
在当前页面上下文执行一段 JavaScript 并返回结果(支持 await Promise),等价于 DevTools Console。
| Name | Required | Description | Default |
|---|---|---|---|
| expression | Yes | 要执行的 JS 表达式或语句 | |
| awaitPromise | No | 是否等待返回的 Promise,默认 true | |
| returnByValue | No | 是否按值返回,默认 true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully equates the tool to the DevTools Console, which conveys full page-context access and mutation capability, but it says nothing about side effects, destructive potential, serialization limits, or sandboxing. Given arbitrary code execution is possible, this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that states action, context, return behavior, and the mental model (DevTools Console). Every clause earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description must carry more weight. It adequately describes what happens for the happy path (returns result, supports await) but omits serialization behavior tied to returnByValue, failure modes, and safety implications of running arbitrary JS in the page context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (expression, awaitPromise, returnByValue) and their defaults are already documented in the schema. The description's mention of await Promise support is already captured by the awaitPromise parameter, so it adds no new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (执行/execute) and a specific resource (JavaScript in the current page context), plus the return behavior and await support. No sibling tool shares this purpose, so the agent can immediately tell it apart from page_dom, storage_read or console_read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The DevTools Console equivalence implies when the tool is appropriate, but there is no explicit when-to-use or when-not-to-use guidance relative to alternatives like page_dom or console_read. Usage is left to inference from the stated purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_screenshot页面截图A
对当前页面截图。图片数据默认不回传(体积大),需要看图时把 returnBase64 设为 true。
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | 图片格式,默认 png | |
| quality | No | jpeg/webp 质量 0-100 | |
| fullPage | No | 是否尝试整页截图,默认 false | |
| maxBytes | No | 返回 base64 的体积上限,默认 800000 字节 | |
| returnBase64 | No | 是否返回 base64 数据,默认 false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the non-obvious default that base64 payloads are suppressed because of size, which is the single most important behavior here. It does not state what is returned when returnBase64 is false (a reference, a saved file, a truncated payload?), nor any permission or side-effect considerations, so the disclosure is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero padding, and the critical default-and-override pair is front-loaded exactly where the agent needs it. Nothing is repeated that the schema already covers verbatim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with no annotations and no output schema, the description omits the return shape: an agent cannot tell what comes back when returnBase64 is false, which is the default path. The tool is simple enough that this is a moderate rather than fatal gap, but the default outcome is left undefined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces returnBase64 with a rationale ('图片数据默认不回传(体积大)') that the schema only states tersely, but it adds nothing for format, quality, fullPage, or maxBytes, which remain schema-only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('对当前页面截图' – screenshot the current page), which is unambiguous about what the tool produces. However, it never distinguishes itself from the many sibling tools in the capture/recording family (capture_start, capture_stop, capture_save), leaving the agent to infer how page_screenshot differs from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one concrete usage rule: image data is not returned by default, so set returnBase64=true when you actually need to see the image. That is real conditional guidance, but there is no when-to-use/when-not-to-use framing against alternatives or any precondition (e.g., a page must be loaded/selected first).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
performance_metrics性能指标B
获取 Performance.getMetrics 指标,以及导航计时、绘制时间和 JS 堆占用。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden, yet it only lists the metrics returned. It does not state that this is a safe read-only operation, whether it perturbs the page, what it costs to call, or what the response shape looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Every clause enumerates a distinct metric class, so nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, annotation-free read tool with no output schema, the description covers what is returned but not the return format, units, or nesting of the metrics. It is adequate but leaves the agent guessing about response structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no argument semantics to document; baseline 4 applies. The description correctly spends its text on output content instead of inventing parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (获取/get) and enumerates the actual resources fetched: Performance.getMetrics metrics, navigation timing, paint timing, and JS heap usage. This clearly distinguishes it from siblings like page_screenshot or network_list, though it never explicitly contrasts itself with any of them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus other diagnostics tools (page_errors, console_read, network_list). Usage is only implied by the tool name and metric list; there are no preconditions, alternatives, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recording_start开始实时录制到磁盘A
把实时事件流持续追加写入 JSONL 文件(每条一行),适合长时间监控而不怕内存爆掉;可同时把页面画面帧按序存成图片。用 recording_stop 结束并拿统计。
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | 直接指定输出目录(绝对路径),优先于 name | |
| name | No | 输出目录名,缺省 live-<时间戳> | |
| rootDir | No | 输出根目录,缺省 <cwd>/captures | |
| channels | No | 只录制指定通道,省略表示全部 | |
| saveFrames | No | 是否把画面帧存到 frames/ 目录,默认 false | |
| performanceSampleMs | No | 同时开启性能采样写入事件流 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose meaningful behavior: append-only JSONL with one event per line, memory-safe for long sessions, and ordered frame persistence. It omits overwrite/append semantics for pre-existing files and any permission requirements, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense, front-loaded sentences plus a short routing clause; the core behavior (append JSONL) leads, the secondary feature (frames) follows, and the hand-off to recording_stop closes it with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter, no-output-schema tool with no annotations, the description covers the essential mechanics and points to recording_stop for results. Remaining gaps are minor: file naming/collision behavior and concurrency expectations are not addressed, but the agent can call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters (dir, name, rootDir, channels, saveFrames, performanceSampleMs) are already documented in the schema. The description only loosely gestures at channels and frames, adding no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource: continuously appending the live event stream into a JSONL file, with optional ordered frame image saving. This is distinguishable from disk-unrelated siblings like events_subscribe or capture_start because the description emphasizes sustained disk-backed logging rather than one-off capture.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage context ('suitable for long-running monitoring without memory blowup') and names the terminating companion tool, recording_stop, for stats. It does not, however, state when to prefer this over capture_start or events_subscribe, so alternatives are left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recording_stop停止录制B
结束实时录制并输出统计信息与产物路径。
| Name | Required | Description | Default |
|---|---|---|---|
| recordingId | No | 要停止的录制 ID;省略则停止全部 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose that statistics and artifact paths are produced on stop, which is useful behavior beyond structured fields. However, it says nothing about whether a partially completed recording is persisted, whether the call is idempotent, or what happens when no recording is active.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It is appropriately sized for the operation, though slightly terse given the absence of annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since no output schema exists, the description helpfully previews the return content (statistics and artifact paths). But for a stop/mutation operation with zero annotation coverage, it omits error conditions and side effects, leaving meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains the recordingId semantics including the 'omit to stop all' behavior. The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('结束实时录制' – end live recording) and states the outcome ('输出统计信息与产物路径'). It is clearly distinct from recording_start, but it does not distinguish itself from the nearby capture_stop sibling, leaving the recording-vs-capture boundary implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of the obvious alternatives (capture_stop, recording_start). An agent must infer from the sibling list whether this is the correct stop tool for a given capture session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resources_get读取资源内容(按 URL)A
按 URL 读取页面资源的内容,等同于在开发者工具 Sources 面板里点开某个文件看源码。会自动采用 UTF-8 纠偏,避免无 charset 的中文文本变乱码。图片/音视频等二进制会返回 base64。
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | 资源 URL,可用 resources_list 或 network_list 获取 | |
| asBase64 | No | 强制按 base64 返回原始字节,适合图片/音视频 | |
| maxChars | No | 最多返回字符数,默认 20000 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and delivers real behavioral detail: automatic UTF-8 correction to avoid mojibake in Chinese text, and base64 output for binary media. It does not mention permissions, truncation side effects beyond maxChars, or error behavior, but the encoding/binary disclosure is genuinely useful beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then the encoding caveat and the binary return behavior. Every sentence conveys distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only fetch tool with no output schema and no annotations, the description covers the return shape (text vs base64) and encoding handling. It leaves error and permission behavior unstated, but the essentials an agent needs to call it correctly are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so url, asBase64, and maxChars are already documented. The description echoes the base64 behavior for binaries but adds no syntax or format detail beyond what the schema states, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (read page resource content by URL) and clarifies scope with a concrete analogy, likening it to opening a file in the DevTools Sources panel. This clearly separates it from siblings like resources_list or network_list, which enumerate rather than fetch content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the analogy (fetch a known resource's body) and the schema points to resources_list/network_list as URL sources, but the description itself gives no explicit when-to-use versus alternatives such as network_body or page_dom. An agent must infer the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resources_list页面资源树(Sources 面板)A
返回开发者工具「源代码 / Sources > 页面」面板里那棵树:按 frame 分层,列出页面实际加载的全部资源(文档、样式表、脚本、图片、字体、音视频等),并交叉带上对应的 requestId / 状态码 / 大小。与 network_list 互补:这里给的是页面资源视角(含已进入页面但未必在 Network 缓冲里的资源),network_list 给的是 HTTP 请求视角。
| Name | Required | Description | Default |
|---|---|---|---|
| targetId | No | 限定某个标签页,默认当前页 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the tree shape, the frame-based grouping, the resource categories covered, and the cross-referenced requestId/status/size fields, plus the important nuance that items may not appear in the Network buffer. It stays silent on ordering, size limits, or cost of the call, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what is returned and then the complementary relationship. Every clause carries information; nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description compensates by describing the return structure (per-frame tree with resource entries carrying requestId/status/size). That is enough for an agent to call it correctly and interpret the result, though pagination and result-size behavior remain unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter targetId is already documented there. The description adds no further detail about the parameter (defaults, scope, format), so the schema does the work and the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns the DevTools Sources > Page tree, layered by frame, listing all page-loaded resources (documents, stylesheets, scripts, images, fonts, media). It explicitly distinguishes itself from the sibling network_list, so an agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names network_list as the alternative and gives the condition that selects between them (page-resource perspective vs HTTP-request perspective, including resources that entered the page but may not be in the Network buffer). It doesn't route against resources_get, the obvious detail sibling, so the guidance is clear but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_dump导出原始会话数据B
把当前缓冲里的全部数据按 CapturedData 结构返回(不做落盘),适合你想自己加工时用。
| Name | Required | Description | Default |
|---|---|---|---|
| includeDom | No | ||
| includeStorage | No | ||
| includeScreenshot | No | ||
| includePerformance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that nothing is written to disk and that the return shape is CapturedData, but is silent on whether the buffer is cleared after the dump, size/rate limits, or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the purpose front-loaded, followed by the key constraint and the use-case. Zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no annotations, no output schema, and 0% parameter coverage, the description leaves the four include flags unexplained and the buffer-lifecycle semantics unaddressed. It is not complete enough for an agent to invoke confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and all four boolean flags (includeDom, includeStorage, includeScreenshot, includePerformance) are entirely undocumented in both schema and description. The phrase '全部数据' (all data) arguably conflicts with the selective-include flags, adding confusion rather than clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: returns the current buffer's data as a CapturedData structure, and clarifies it does NOT persist to disk. This distinguishes it from capture_save-style siblings, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear conditional use case ('适合你想自己加工时用') and implies a contrast with disk-saving tools ('不做落盘'). No explicit when-not or named alternative, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_info会话状态A
查看当前会话的连接信息、目标页、缓冲计数与告警。常用于判断“现在到底连着谁”。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 查看 implies a non-mutating read, and the enumeration of returned fields gives some behavioral picture, but there is no statement about side effects, permissions, or whether this reflects live state versus a snapshot.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the core purpose is front-loaded before the usage hint. Efficient, though the second sentence is more colloquial than informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description usefully compensates by listing what is returned (connection info, target page, buffer counts, alerts). For a zero-parameter read-only diagnostic that is largely sufficient; a note on freshness or live-vs-cached state would complete it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which sets the baseline at 4. There is nothing for the description to clarify beyond confirming it is a no-argument call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (查看) and resource (当前会话), and enumerates the concrete contents it reports: connection info, target page, buffer counts, alerts. An agent can tell it apart from target_list or capture_status. It lacks an explicit contrast with siblings, so it does not reach 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 常用于判断"现在到底连着谁" implies a diagnostic usage context, but no alternatives (target_list, browser_list_processes, session_dump) are named and there are no when-not conditions. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
storage_read读取页面存储A
读取当前页面的 Cookies、localStorage、sessionStorage 与 IndexedDB 数据库名。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses a scope limit — IndexedDB is exposed only as database names, not record contents — but says nothing about cross-origin/iframe restrictions, permissions, or whether writes are involved (it is read-only by implication of 读取).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the action and then enumerates the covered stores. Every clause earns its place, with no preamble or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read tool with no annotations and no output schema, the description adequately names what is retrieved, and the IndexedDB-names caveat pre-empts a wrong expectation about return depth. It could say slightly more about the shape of what comes back, but it is substantially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty, so there is no parameter semantics to clarify; the baseline for a parameterless tool is 4. Nothing in the description misleads about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (读取/read) and resource (页面存储/page storage) and enumerates exactly which stores are covered: Cookies, localStorage, sessionStorage, and IndexedDB database names. No sibling overlaps with this scope, so an agent can select it without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never states when to reach for this tool versus adjacent read tools such as console_read, network_list, or page_evaluate. There are no prerequisites, exclusions, or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
target_list列出标签页A
列出当前浏览器中可附加的页面。默认隐藏扩展页 / service worker / devtools 等后台目标(Edge、Chrome 装着扩展时这类目标往往有十几个),需要全量时把 includeBackground 设为 true。
| Name | Required | Description | Default |
|---|---|---|---|
| includeBackground | No | 是否包含扩展页、service worker、offscreen 文档等后台目标,默认 false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, and it delivers real behavior: results are filtered by default, background targets (extension pages, service workers, devtools) are hidden, and the filter is what causes the visible/count discrepancy on Edge/Chrome with extensions. It stops short of stating return shape or permissions, which keeps it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler: the default behavior is front-loaded, the rationale follows, and the override instruction closes. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single optional-boolean list tool with no output schema or annotations, the description covers the key decision (default filter vs. includeBackground) and the practical reason for it. It could add a hint about what a listing entry contains, but that is minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes beyond the schema by explaining why the boolean exists – the volume of noisy extension/service-worker targets – which helps an agent decide when to set it. That is meaningful added context over the schema's terse field description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (列出) and resource (当前浏览器中可附加的页面), and the scope phrase '可附加的页面' distinguishes it from siblings like browser_list_processes and target_select. An agent can tell what it enumerates without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains when to flip includeBackground to true (when you need the full target set rather than the filtered view). It doesn't name an explicit alternative tool for attaching to a target, but the use context is unambiguous for a list operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
target_select切换标签页A
附加到指定标签页并把它设为当前抓取对象;后续 console / network / DOM 工具都作用在这个页面上。
| Name | Required | Description | Default |
|---|---|---|---|
| targetId | Yes | 目标 ID,可用 target_list 查看 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden, and it does disclose the key trait: this is a stateful selection whose effect persists across subsequent console/network/DOM calls. It does not say whether the previous attachment is released, whether it is session-scoped, or how invalid IDs fail, so it is not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action, then the consequence. Nothing is redundant and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, annotation-free selection tool with no output schema, the description conveys purpose, the state change, and its downstream effect. Missing only edge-case behavior (invalid ID, prior attachment) to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single targetId parameter is documented in the schema with the pointer to target_list. The description adds no syntax, format, or example detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (attach to a tab and make it the current capture target) and immediately differentiates itself by naming the scope of downstream tools it affects (console/network/DOM). An agent can distinguish it from target_list, which merely enumerates IDs, without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies when to use it: before invoking console/network/DOM tools, since those operate on whichever tab is selected. The schema points to target_list as the way to obtain an ID, so the prerequisite path is discoverable. It stops short of explicit when-not guidance or state about what happens if an ID is invalid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
36 tool updates
v0.1.0- First observed
browser_close - First observed
browser_connect - First observed
browser_discover - First observed
browser_installed - First observed
browser_launch - First observed
browser_list_processes - First observed
capture_list_saved - First observed
capture_save - First observed
capture_start - First observed
capture_status - First observed
capture_stop - First observed
console_clear - First observed
console_read - First observed
events_list - First observed
events_read - First observed
events_subscribe - First observed
events_unsubscribe - First observed
events_wait - First observed
network_body - First observed
network_clear - First observed
network_detail - First observed
network_list - First observed
page_dom - First observed
page_errors - First observed
page_evaluate - First observed
page_screenshot - First observed
performance_metrics - First observed
recording_start - First observed
recording_stop - First observed
resources_get - First observed
resources_list - First observed
session_dump - First observed
session_info - First observed
storage_read - First observed
target_list - First observed
target_select
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.
Hosted browser for AI agents: screenshots, post-JS DOM, console, WCAG. No install, no API key.
A paid remote MCP for AI agent browser DevTools MCP, built to return verdicts, receipts, usage logs,
- TabfleetOAuthcom.tabfleet
Launch, inspect, control, and share isolated cloud browsers for your agents.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables 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.3,058,477 npm52,668Apache 2.0
- AlicenseAqualityDmaintenanceEnables AI coding assistants to control and inspect a live Chrome browser for automation, debugging, performance analysis, and screenshot capture through Chrome DevTools.263,058,477 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.3,058,477 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.-