devcdp
Provides full browser DevTools access (console, network, DOM, breakpoints, step-through debugging) via Chrome's remote debugging protocol.
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., "@devcdpdebug why the Save button does nothing"
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.
DevCDP
Real Chrome DevTools access for an AI assistant, over MCP. Your assistant reads the console, watches the network, queries the DOM, resolves source maps, sets breakpoints and inspects live variables — so it can tell you why something broke instead of guessing from a pasted error.
Works with any assistant that speaks MCP, and with any web app: nothing about a particular framework, product or company is built in.
60 tools — see docs/TOOLS.md for the full reference, generated from the server itself, and docs/PERFORMANCE.md for measured token costs and how to lower them.
What it does
Console | Logs, warnings and uncaught exceptions with file, 1-based line and stack. |
Network | Every request from the moment it attaches — method, status, timing, size, initiator, and response bodies on request. |
DOM | Selector queries with real visibility and geometry, named computed styles, mutation history, iframe support, and structural dialog detection. |
Sources | Loaded scripts, plus original pre-bundling files recovered from source maps — including external |
Debugger | Breakpoints on original files by original line, stepping, and scope inspection that expands nested objects instead of printing |
Discovery | Asks the app what it is: framework, routing, working selectors for its buttons and fields, its backend API surface, and your project's own docs. |
Collaboration | You can take over at any time; what you click, choose and type is recorded and readable by the assistant. |
Four things it is careful about
It never fakes success. A breakpoint that cannot bind says bound: false and
explains why. A body Chrome has discarded says so. A capture from a pause that has
already resumed is marked stale. Every failure is {ok: false, code, message, hint}
with the next action named.
It tells you where its knowledge ends. Chrome cannot replay console history to a debugger that attaches later, so attaching reports exactly that rather than presenting an empty buffer as "no errors".
It cannot be stranded. Every call into the page is bounded on our side —
Runtime.evaluate's own timeout is enforced by the renderer, which is useless when
the renderer is what is stuck. A page wedged in an infinite loop fails in seconds
with the recovery path named, and DevCDP will abort the runaway script and retry by
itself.
It never leaves your app frozen. Breakpoints capture what you need and then
resume on their own. A pause held deliberately is still released after
maxPauseMs, and everything is cleaned up on disconnect.
Related MCP server: Chrome DevTools MCP
Setup
Requirements: Node 18+, Chrome, and an MCP-capable assistant.
1. node initialize_MCP.js (or double-click initialize_MCP.bat)
2. Fully quit and reopen your assistant
3. Double-click debug-chrome.bat, open your app
4. Describe the bugThe wizard detects installed editors, writes the right config shape for each, and drops a launcher. It never overwrites a config file it cannot parse — it prints the snippet to paste instead — every write is atomic with one timestamped backup, and duplicate registrations from older installs are removed. That path is covered by 23 tests, because getting it wrong damages your machine rather than just failing.
Settings
Everything is optional. Ask the assistant to run devcdp_settings to see the
effective values and where each came from, or devcdp_settings_init to write an
annotated file you can edit.
Files are merged, later winning, so an install-wide baseline can be overridden per project:
<install>/devcdp.settings.json or <install>/settings.json
<cwd>/.devcdp/settings.json
<cwd>/devcdp.settings.jsonthen DEVCDP_* environment variables, then tool arguments. Comments and trailing
commas are tolerated.
Setting | Default | |
|
| show live status messages |
|
| how long, how visible, how many |
|
| the tab indicator and its breathing border |
|
| where the overlay parks. Drag the chip to move it anywhere; that position is remembered per origin. Messages travel with it, so |
|
| show where interaction happens, and what was inspected |
|
| how long an indicator stays up without hearing from its session, before removing itself |
|
| mark and hold tabs the app opens for itself, so a popup is never an unmarked blind spot |
|
| or |
|
| leave off: it hides the CORS bugs you would be debugging |
|
| extra Chrome flags |
|
| liveness ceilings |
|
| autonomous pause control |
|
| always-on capture of typed values |
| auto | where to read your project's README and docs |
|
| pool learned fixes across a team |
|
| one tab group per session, or |
docsRoot and sharedMemoryDir are the two worth setting: the first lets the
assistant learn your domain vocabulary, the second is what makes "the team's fixes
accumulate" actually true.
Multiple sessions at once
Several agents can debug on one machine safely. Each session claims a tab in a
registry under ~/.devcdp/registry/, taken atomically so two processes cannot win
the same tab. A session that dies stops heartbeating and its claim is reaped, so
nothing stays wedged.
A new session gets an unclaimed tab; if all are taken it opens its own — on the page you wanted, not blank, and it says why.
Reloading your assistant briefly overlaps two server processes, so a short grace period lets the departing one release its tab and the new one simply reattaches.
browser: 'new'launches a separate Chrome, own port and profile.window: 'new'gives the session its own browser window.sessions_listshows which session holds which tab.
Knowing which tab is in use
Every claimed tab carries a 1px edge border and a small identity chip. The border tells you who is driving:
breathing blue glow — DevCDP is working
still, green — it has handed control to you
still, red — something failed
Three states, three colours, and each colour means exactly one thing regardless of how many sessions are running. Sessions are told apart by the chip text and by their own Chrome tab group — not by hue, which would turn the border into a puzzle when the only thing worth knowing at a glance is whether the tab is waiting for you.
Tabs the app opens for itself — window.open, target="_blank", a detail screen
in its own window — are marked and held too, labelled "opened tab". devtools_status
lists them under tabsAppOpened, with the call that switches to one.
The indicator cannot outlive the session that drew it. A normal finish — you close
the assistant, it disconnects, the session ends — removes the border immediately. If the
server is killed and never gets to clean up, the overlay notices it has stopped hearing
from its session and removes itself within ownerTimeoutMs (45s), taking the tab out of
its group with it. Either way, a border on screen means a session is genuinely there. For
one left behind by an older build, node scripts/sweep.mjs clears any that no live
session owns (--dry to look first).
Status messages appear as translucent, self-fading toasts. A ring follows pointer activity and a ripple marks each click, so an agent's actions are followable. When the debugger pauses, Chrome's own "Paused in debugger" banner appears — browser UI, adding nothing to your page.
None of it can intercept a click: the whole layer is pointer-events: none except
the confirmation button during a handover, which is 91×24px. There is a test that
fires real mouse events through it.
Real Chrome tab groups are drawn by the bundled extension, which puts each session's
tabs in a titled blue group. Chrome will not let a tool install an extension for you —
branded Google Chrome ignores --load-extension ("not allowed in Google Chrome", from its
own log) and does not expose Extensions.loadUnpacked over the debugging port — so pick
one of:
No manual step: point
chromePathat Chromium or Chrome for Testing. Those builds allow the switch, so the extension loads itself and grouping just works. If such a binary is already on your machine,devtools_statustells you where it is.Branded Chrome: install it once —
chrome://extensions→ Developer mode → Load unpacked → selectextension/. The debug profile is persistent and shared bydebug-chrome.batand DevCDP's own launcher, so once is once.
devtools_status.tabGrouping reports whether the tab is actually in a group, and when it
is not, whether that is because no extension is installed or because an installed one
failed — with the error. Nothing else depends on grouping: the border, the chip and
window:'new' all work without it.
Working with the assistant
You do not have to wait to be asked. Click, type, choose — it is recorded, and the
assistant reads it with session_get_user_actions: which element, which option,
and the value you typed.
Ctrl+Shift+D in the tab hands control to you explicitly. That also opens the window in which typed values are captured, so "use this reference" reaches the assistant. Outside that window values stay private, and password-like fields are redacted either way.
When the assistant needs something only you can do, it asks on the page and waits for the I've done it ✓ button. That button is the only unambiguous signal — Chrome reports automation input as trusted too, so an action cannot be proven human, and the tools say so rather than pretending.
A typical investigation
"The save button does nothing. Find the exact line."devtools_connect— attaches, claims the tab, marks itsource_search("save")— finds the handler by content, no path neededdebugger_set_breakpoint(file, line)— repliesbound: truethe click is triggered
debugger_get_capture— scope, console and network from the pause, one callthe answer is a value that was actually observed, at a line that actually exists
Breakpoints resume themselves, so the click that tripped one still completes.
When you know the function but not the file — which is the usual case with a framework —
debugger_set_breakpoint_at_function("app.store.save") asks the engine where that
function was defined and breaks at its first statement. Searching for a name in source
text is unreliable: a function assigned as Foo.bar = function cannot be found by
searching "bar: function", and that query happily returns unrelated methods on other
classes instead.
A capture stays small even on a framework object graph: the variable that matters is
printed, and anything too large says what it is ("constructor", 77747 bytes expanded)
so you can read just the part you want with debugger_evaluate_at_frame.
Security
The launcher uses a separate Chrome profile, so your everyday browsing is untouched, and leaves web security enabled — disabling it hides exactly the cross-origin failures you would be debugging.
Typed values are not recorded unless you enable it or are actively collaborating, and password-like fields stay redacted regardless.
Remote debugging gives full control of the browser profile to anything that can reach the port. Use the debug profile for development, not for personal accounts.
Layout
index.js entry point
server.js shim for older configs pointing here
src/
core/ config, context, buffers, structured errors, tool registry
cdp/ connection, target selection, session claim registry, launching
browser/ the injected in-page agent
debug/ source maps, scope expansion
store/ learned-memory store
tools/ one module per tool group
extension/ companion extension for Chrome tab groups
scripts/gen-docs.mjs regenerates docs/TOOLS.md from the registry
docs/TOOLS.md full tool reference (generated)
test/
validate.mjs offline checks, no browser needed
installer.test.mjs the setup wizard, against real files
integration.mjs real Chrome against a fixture app
fixture-app/ small app with a staged bug and a real source map
BACKLOG.md every defect found, its fix, and what remainsWorking on DevCDP
node scripts/call.mjs <tool> '<json>' call one tool, see the exact response and its cost
node scripts/mcp-probe.mjs the same thing over real MCP, raw JSON-RPCBreakpoints, logs, and the traps this codebase has already fallen into: docs/DEBUGGING.md.
Tests
npm run validate offline checks
npm run test:installer the setup wizard
npm test all three suites
npm run docs regenerate the tool reference124 checks. The integration suite attaches to a page that has already finished
loading, because that is the case the previous version got wrong. npm run validate fails if docs/TOOLS.md is out of date, so the reference cannot drift.
Troubleshooting
Tools not appearing — fully quit the assistant (tray/menu, not just the window) and reopen. Re-run the wizard if still missing.
"Chrome is not reachable" — launch via debug-chrome.bat, then check
http://localhost:9222/json/version. Only one Chrome can own a port.
A breakpoint never fires — debugger_list_breakpoints and look at bound. An
unbound breakpoint reports why.
A selector finds nothing — dom_list_frames; the content may be in an iframe.
Retry with frame: 'all'.
Empty console or network right after attaching — expected. Capture starts at
attach; page_reload replays the page with DevCDP watching.
The page stops responding — its main thread is blocked, usually a loop in app
JS. page_interrupt aborts the running script; reloading will not free it.
A tab is unavailable — sessions_list shows which session holds it.
Available Tools
73 toolsapi_discoverA
Build a map of the backend the page actually talks to: endpoints grouped with ids collapsed, call counts, status codes, timings and failures — plus an OpenAPI/Swagger specification if the server publishes one at a standard path. Use it to understand the API surface, and to see at a glance which calls are failing.
| Name | Required | Description | Default |
|---|---|---|---|
| probe_openapi | No | Also try standard OpenAPI discovery paths on the page's origin. | |
| include_static | No | Include scripts, styles, images and fonts, not just data calls. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the aggregation behavior, failure visibility, and conditional OpenAPI discovery. However, it does not mention that probe_openapi causes active network probing by default, nor any side effects or access implications of the discovery process.
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 compact sentences with no filler. The core outcome and primary output attributes are front-loaded, and the usage guidance follows naturally.
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 tool with no output schema, the description adequately conveys what the returned map will contain and why it is useful. It could mention the overall return shape more explicitly, but the listed fields give an agent enough to anticipate the result.
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 both parameters. The description adds no parameter-level meaning beyond what the schema provides, which matches the baseline expectation.
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 uses a specific verb-resource pair ('Build a map of the backend') and enumerates concrete output details (endpoint groups, collapsed ids, call counts, status codes, timings, failures, OpenAPI). It is clearly distinct from raw network request tools like network_get_requests, though it does not explicitly name 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?
It states a clear use case: 'Use it to understand the API surface, and to see at a glance which calls are failing.' However, it gives no guidance about when to choose this over network_get_requests or other network/source tools, and no exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_discoverA
Ask the running page what it is: which UI libraries it uses, how it routes, how many frames it has, and its actual interactive surface — visible buttons, fields, grids and tabs with working selectors. Call this once before driving an unfamiliar app, instead of guessing selectors.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description bears full responsibility for behavior. 'Ask the running page' and 'actual interactive surface' make clear this is an inspection/discovery operation that reports on the live page rather than mutating it, and the inclusion of 'working selectors' discloses a key deliverble. It does not explicitly state side-effect-freedom or prerequisities, but the read-only intent is strongly conveyed.
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, no filler. The first sentence front-loads purpose and concrete output categories; the second supplies a usage rule and rationale. 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 no-parameter tool with no output schema, the description covers what the agent needs: when to call, why, and what will be returned. It could add the exact response shape or mention that a devtools/page connection is required, but those dependencies are reasonably inferred from sibling tools like devtools_connect and page_navigate.
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 has zero parameters and an empty schema, so there is no parameter documentation burden. The description's only input-related obligation is to make clear the tool takes no arguments and can be invoked immediately, which it implicitly does.
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 opens with a concrete verb and resource ('Ask the running page what it is') and enumerates the exact information categories reterned: UI libraries, routing, frame count, and interactive elements with selectors. This clearly distinguishes app_discover from sibling DOM/UI tools like ui_click or dom_quer, which operate on known selectors rather than discovering an unfamiliar page.
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 explicit timing and context—'Call this once before driving an unfamiliar app'—and warns against guessing selectors. It does not name an alternative tool or give a when-not-to-use condition, but the intended placement in the workflow is unmistakeable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
console_clearA
Empty the console buffer so that what you read next belongs only to the action you are about to take. Does not touch the browser's own console display.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly notes that the tool clears the console buffer but does not affect the browser's own console display, which is useful boundary information. It does not describe irreversibility in detail, but for a simple clear operation the key behavior is covered.
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, each earning its place. The first states the action and purpose; the second clarifies an important boundary. No filler or 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?
For a zero-parameter tool with no output schema, the description provides sufficient context: what it does, why to use it, and what it does not affect. Nothing essential 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?
The tool has zero parameters, so the schema already fully defines the input surface. The description does not need to add parameter-level detail. Baseline 4 is appropriate for a parameterless tool.
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: 'Empty the console buffer.' It also explains the intent ('so that what you read next belongs only to the action you are about to take'), making the tool's role unambiguous. It is clearly distinct from siblings like network_clear or console_get_logs.
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 clearly implies when to use the tool: before an action whose console output you want to isolate. It does not explicitly mention alternatives or exclusions, but the intended use case is evident enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
console_evaluateA
Run a JavaScript expression in the page and return its value. On failure returns the full exception detail (message, 1-based line and column, URL, stack). Use it to read app state; use debugger_evaluate_at_frame instead when you are paused and need a local variable.
| Name | Required | Description | Default |
|---|---|---|---|
| expression | Yes | JavaScript to evaluate in the page's main frame. | |
| timeout_ms | No | Abandon the evaluation after this long. | |
| await_promise | No | Await the result if the expression returns a promise. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose important behavior: success returns a value, and failure returns full exception detail (message, 1-based line/column, URL, stack). It does not explicitly warn about potential side effects of arbitrary JS execution, though the phrase 'read app state' implies a read-oriented intent. This is a minor omission, not a major 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?
Three tight sentences, each earning its place: the action, the error behavior, and the usage alternative. The most important information is front-loaded in the first sentence. No fluff or repetition.
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 return value and error detail provided in the description are essential and well-covered. For a tool with 3 well-documented params, this is sufficient, though a note on promise behavior when await_promise is false and a warning about side effects would make it 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%: every parameter already has a clear description. The tool description adds no parameter-level semantics beyond what the schema provides, so the baseline of 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 clearly states the specific action ('Run a JavaScript expression in the page and return its value') and distinguishes itself from the key sibling debugger_evaluate_at_frame by contrast ('use debugger_evaluate_at_frame instead when you are paused and need a local variable'). This makes it easy for an agent to select the right tool.
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?
Explicitly gives a primary use case ('Use it to read app state') and names the alternative with a concrete condition ('use debugger_evaluate_at_frame instead when you are paused and need a local variable'). This is clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
console_get_logsA
Read console output captured since attach: logs, warnings, uncaught exceptions with file, line and stack. Pass cursor=nextCursor from a previous call to get only what is new. Note that Chrome does not replay messages logged before DevCDP attached — reproduce the action or call page_reload to see those.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | Empty the buffer after reading. | |
| level | No | Only this level. | all |
| limit | No | Maximum entries to return (most recent first in the buffer order). | |
| since | No | ISO timestamp lower bound. | |
| cursor | No | Return only entries with seq greater than this. 0 for everything held. | |
| include_agent | No | Include DevCDP's own diagnostics, normally hidden so they cannot be mistaken for app errors. |
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 capture semantics, the Chrome pre-attach limitation, and a workaround. It also implies a non-destructive read operation, though it does not mention that clear=true will empty the buffer or that include_agent hides DevCDP's own diagnostics.
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 sentences with no filler. The core read action, incremental cursor pattern, and key limitation are front-loaded, and every sentence contributes useful operational 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 six-parameter tool with no annotations and no output schema, the description gives a solid picture of what is returned, how to page through results, and the major environment constraint. It leaves some output-shape details unspecified, but the essential context for correctly using the tool is 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 the baseline is 3; the description adds real value by explaining the cursor parameter as a nextCursor pattern from a previous call. It does not detail clear/level/limit/since/include_agent, but those parameters are already fully described in the input 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 opens with a specific verb and resource: 'Read console output captured since attach.' It also identifies the contents (logs, warnings, uncaught exceptions with file, line, and stack), which clearly distinguishes it from sibling tools like console_evaluate, console_clear, and network_get_requests.
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 practical usage guidance: pass cursor=nextCursor from a previous call for incremental reads, and note that pre-attach messages won't be replayed unless the action is reproduced or page_reload is called. It does not explicitly name alternative tools or provide when-not-to-use conditions, but the context is clear enough for an agent to select this tool appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debugger_evaluate_at_frameA
Evaluate an expression in the scope of a paused call frame, so local variables and closures are in scope. This is how you confirm a hypothesis with a real value rather than inferring one.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | How deep to expand an object result. | |
| expression | Yes | JavaScript evaluated in the frame's scope. | |
| frame_index | No | Which frame; 0 is innermost. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a prerequisite (a paused call frame) but never states it explicitly, and it does not disclose that evaluating arbitrary JavaScript can have side effects, may throw, or may require an active debugger connection. This is a significant gap for an execution 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?
Two sentences with no wasted words. The first sentence front-loads the core function and scope; the second adds a practical purpose that helps an agent decide to use it.
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?
Purpose, scope, and parameters are well covered, and the schema fully documents the arguments. However, with no annotations and no output schema, the description omits behavioral prerequisites, side-effect potential, and error behavior—information an agent needs to invoke this safely and correctly in a debugging workflow.
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 input schema already documents expression, depth, and frame_index meaningfully. The main description adds context about frame scope but no parameter-level detail 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?
States a specific verb ('Evaluate') and resource ('scope of a paused call frame'), and explains why local variables and closures are accessible. This distinguishes it from generic evaluate tools like console_evaluate and runtime_evaluate_many, and the 'confirm a hypothesis' phrase clarifies the intended use.
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?
Clearly implies when to use: when a call frame is paused and the agent wants to verify a hypothesis with a real value. It does not explicitly name alternatives or exclusion conditions, but the paused-frame context is a strong and clear signal that alternatives like console_evaluate do not fit this scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debugger_get_captureA
Everything captured automatically at the last breakpoint hit — scope for the top frames, recent console output and recent network requests — in one call instead of four. Tells you whether the pause is still current or has already resumed, so a stale snapshot is never mistaken for live state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 discloses the two most important behavioral traits: the payload is a snapshot captured at the last breakpoint, not live state, and the tool ships a staleness signal distinguishing a current pause from a resumed one. That directly prevents the classic misuse of treating stale data as live. It does not cover error behavior when no breakpoint has ever been hit, nor the prerequisite of an attached devtools/debugger connection, which the sibling set implies.
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?
Exactly two sentences (~50 words) with zero waste. The first sentence front-loads the composite payload and scopes it to the last breakpoint hit before introducing the alternative framing; the second sentence supplies the staleness disclosure. Every phrase earns its place and nothing repeats what the empty schema already says.
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-param aggregator with no output schema, the description sketches the return content at enought granularity — top-frame scope, console, network, plus a staleness flag — for an agent to decide whether to invoke it and how to interpret the result. The gaps are the no-breakpoint-hit edge case and the requirement of a live debugging connection, both moderately relevant given the sibling tools. Neither is fatal for an agent choosing this 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?
The tool has 0 parameters with trivial 100% schema coverage, so the baseline is 4. The description reinforces that no input is needed ('captured automatically', 'in one call') and there are no enums or required fields to document. There is nothing more the description could meaningfully add about 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?
The description states a specific verb+resource: it retrieves everything captured automatically at the last breakpoint hit — top-frame scope, recent console output, and recent network requests — in one call. The 'instead of four' clause explicitly differentiates it from the individual console_get_logs / network_get_requests / debugger_get_scope family, and the em-dash list makes the exact resource unmistakable.
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?
'In one call instead of four' is an implicit but clear efficiency directive: use this tool when you want the aggregated capture in a single call rather than four separate retrievers. The staleness sentence ('Tells you whether the pause is still current or has already resumed') also states the specific situation where this tool adds value over a plain snapshot. However, it never names the alternative tools explicitly or says when NOT to use it (e.g., when only one data type is needed), 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.
debugger_get_scopeA
Read the variables in scope at a paused call frame, with objects and arrays expanded rather than printed as 'Object'. Includes this. Anything omitted for size is explicitly marked, so you never have to guess whether you saw the whole value.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | How many levels of nested objects to expand. 3 covers object → array → record. | |
| frame_index | No | 0 is the innermost frame; see debugger_get_state for the stack. | |
| include_global | No | Include the global scope (thousands of properties). | |
| max_properties | No | Maximum properties per object. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden, and it does well: it discloses that nested objects/arrays are expanded, that `this` appears, and that any size-based omission is explicitly marked. This prevents an agent from incorrectly assuming truncated values are complete, which is valuable behavioral detail beyond the raw 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?
The description is three sentences, front-loaded with the core action, and every sentence adds useful information: scope context, expansion behavior, `this` inclusion, and the omission guarantee. There is no filler or repetition.
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 tool with four optional parameters, no output schema, and no annotations, the description plus schema covers most of what an agent needs: what it reads, when it applies, and how results are represented. It could add a little more about what happens if the debugger is not paused, but it otherwise gives enough context to invoke 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?
The input schema already covers all four parameters with meaningful descriptions at 100% coverage, so the baseline is 3. The description adds general context about expanded objects but does not add specific parameter-level meaning; it correctly leaves parameter details to 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 uses a specific verb ('Read') and resource ('variables in scope at a paused call frame'), and immediately distinguishes this from sibling tools by highlighting that objects and arrays are expanded rather than shown as 'Object' and that `this` is included. This lets an agent identify the right debugger inspection tool without comparing schemas.
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 intended context is explicit: this tool is for reading scoped variables while the debugger is paused at a call frame. It does not explicitly name alternatives like debugger_evaluate_at_frame, but the distinction is implied by focusing on scope inspection rather than expression evaluation, and no misleading guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debugger_get_stateA
Where execution is paused right now: the reason, and the full call stack with function names and 1-based file positions. Returns paused:false when the page is running.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It transparently describes the returned information (reason, full call stack, file positions) and the special paused:false behavior when running. This gives the agent a clear behavioral model of the tool despite lacking annotations.
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 two sentences, front-loads the primary purpose, and includes the important running-state edge case without extra fluff. Every clause adds value, and the structure is easy to parse quickly.
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 explains the main return fields: pause reason, call stack with function names and positions, and paused:false when running. It could go slightly further in describing the exact shape of the call stack entries, but it is largely complete for a parameterless getter.
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 has zero parameters, so parameter documentation is not needed. The description adds useful context about what the returned state represents, aligning with the baseline for a no-parameter tool.
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 clearly states what the tool does: it reports where execution is paused, including the reason and the full call stack with function names and 1-based file positions. It also explicitly covers the running-state case with paused:false, making the tool's purpose unambiguous and distinct from sibling debugger 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?
The description implies when to use the tool: when execution is paused and you need the current location and call stack. It even signals that it can be used to check whether the page is running. However, it does not explicitly mention alternatives or state when not to use it, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debugger_list_breakpointsA
List the breakpoints DevCDP has set, including whether each is actually bound to executable code. An unbound breakpoint will never fire — check here first when a breakpoint 'is not hitting'.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral context. It discloses that the tool reports binding status and explains the operational consequence ('An unbound breakpoint will never fire'), which goes beyond the tool name and gives the agent useful diagnostic knowledge.
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, each earning its place: the first states the tool's scope, the second adds a practical diagnostic use. The most important information is front-loaded, and there is 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?
This is a simple zero-parameter tool with no output schema and no annotations. The description covers what is returned, the meaning of the returned data, and a concrete use case, so an agent has enough context to invoke it 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?
The input schema has zero parameters, so the 0-parameter baseline applies. There are no parameter semantics to clarify, and the description appropriately focuses on behavior and use instead.
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: 'List the breakpoints DevCDP has set'. It also adds a distinguishing detail, whether each breakpoint is bound to executable code, which clearly separates it from breakpoint creation/removal and other debugger commands.
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 provides a concrete trigger condition: 'check here first when a breakpoint is not hitting'. This gives clear guidance on when to use the tool, though it does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debugger_pauseA
Pause JavaScript execution at the next statement the page runs, and hold it so you can inspect and step. The page is frozen while held, so DevCDP releases it automatically after maxPauseMs if you have not resumed — no human ever has to press resume in Chrome.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively explains that the page is frozen while held, and importantly, that DevCDP auto-releases after maxPauseMs if not resumed, so no human intervention is needed. This reveals timeout and safety behavior beyond a simple 'pause' statement, which is valuable for an agent.
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 two sentences with no filler. The core action and purpose are front-loaded, and the auto-release behavior is stated efficiently. The colloquial reassurance about never having to press resume in Chrome adds helpful context without bloating the description.
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 tool with no annotations and no output schema, the description is largely complete: it explains what happens, what the page state is, and how long the pause can last. It does not explicitly describe return values or mention sibling tools for earlier resume or stepping, but those are minor gaps 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?
The tool takes zero parameters, and the schema already documents this with an empty properties object, so there are no undocumented arguments. The description adds relevant context by mentioning maxPauseMs as a behavior, though it is not a parameter. This meets the baseline for parameterless tools.
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: 'Pause JavaScript execution at the next statement the page runs.' It also clarifies the holding behavior and distinguishes itself from other debugger tools by focusing on pausing rather than stepping, resuming, or evaluating. The phrase 'so you can inspect and step' makes the purpose concrete.
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 implies when to use this tool: when you want to freeze page execution to inspect or step through code. However, it does not explicitly mention alternatives or when not to use it, such as using debugger_set_breakpoint for a specific location or debugger_step_over after pausing. The guidance is clear enough but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debugger_remove_all_breakpointsA
Remove every breakpoint DevCDP set, and resume the page if it is currently paused. Call this before handing the browser back to a human, so they do not find a frozen app.
| 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 and discloses the key side effects: removing all DevCDP-set breakpoints and resuming the page if paused. It adds useful cleanup semantics beyond the bare tool name, though it does not mention idempotence or what happens when no breakpoints are present.
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, both load-bearing: the first states exactly what the tool does, the second explains when to use it. No filler or 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?
For a zero-parameter tool with no output schema, the description is complete. It explains both the action and the practical cleanup scenario, leaving no ambiguity about invocation intent.
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 has zero parameters, so the baseline is 4. The description adds no parameter details because none 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 identifies a specific verb and resource: 'Remove every breakpoint DevCDP set' plus the conditional resume action. This clearly distinguishes it from siblings like debugger_remove_breakpoint, which removes a single breakpoint, and debugger_resume, which only resumes.
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 explicitly states when to call it: 'Call this before handing the browser back to a human.' It gives a clear motivating context, though it does not name alternative tools or specify when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debugger_remove_breakpointA
Remove one breakpoint by its breakpointId. Use debugger_remove_all_breakpoints to clear them in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| breakpoint_id | Yes | breakpointId from debugger_set_breakpoint. |
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 clearly communicates the destructive side effect of removing a single breakpoint, but it does not mention behavior when the breakpointId is invalid, whether removal is reversible, or what state changes occur in the debugger session.
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, no filler. The core action is front-loaded, and the sibling alternative is given in the second sentence without repeating schema details or adding unnecessary context.
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, the description is nearly complete: it states the operation, the identifier source is in the schema, and the sibling alternative is named. The main gap is the lack of any information about return values or error cases, though neither is essential for this straightforward removal action.
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%: the only parameter, breakpoint_id, is already documented as 'breakpointId from debugger_set_breakpoint.' The description adds no new parameter semantics beyond restating the breakpointId concept, so the baseline score 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 states a specific verb ('Remove'), a specific resource ('one breakpoint'), and the key identifier ('breakpointId'). It also distinguishes itself from the sibling tool debugger_remove_all_breakpoints, which is a clear point of confusion an agent would otherwise face.
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 explicitly routes the agent to the alternative: 'Use debugger_remove_all_breakpoints to clear them in one call.' This directly tells the agent when to choose this tool versus the sibling, with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debugger_resumeA
Resume execution and drop any hold. Breakpoints resume themselves by default, so this is only needed after an explicit pause, after stepping, or after a breakpoint set with auto_resume:false.
| 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. It discloses key behavioral context: resume is conditional and normal breakpoints auto-resume. It could additionally mention behavior when already running or after a step completes, but for a zero-parameter debugger control the core behavior is transparent enough.
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 the core action front-loaded and the conditional usage guidance compressed into the second sentence. No redundant or vague phrasing.
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 tool with no output schema, the description provides sufficient selection and invocation context. It explains both when to call the tool and when to avoid it, making it complete for an agent.
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 has zero parameters, so the baseline is 4. There is nothing for the description to clarify about arguments, and the input schema confirms no parameters are required.
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 clear verb and resource ('Resume execution') and adds 'drop any hold,' which gives a precise operational meaning. It also distinguishes itself from normal breakpoint auto-resume and from sibling debugger controls like debugger_pause and stepping 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?
It explicitly lists when the tool is needed: after an explicit pause, after stepping, or after a breakpoint with auto_resume:false. It also states when it is not needed by explaining that breakpoints resume themselves by default, giving the agent clear selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debugger_set_breakpointA
Set a breakpoint and report honestly whether Chrome could bind it. Accepts either a loaded script URL (a substring is resolved to the exact script) or an original pre-bundling file path, which is translated through the source map. Set auto_resume:true when the action is being driven by an automation tool, so the page does not stay frozen and time that action out.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Script URL, URL substring, or original source path. | |
| line | Yes | 1-based line number, as shown by source_get_script / source_get_file. | |
| column | No | 1-based column, when several statements share a line. | |
| condition | No | JavaScript condition — pause only when it is truthy, e.g. 'id === 42'. | |
| auto_resume | No | Default true: capture scope/console/network on hit, then resume, so the page is never left frozen and the action that tripped it completes. Pass false to hold the pause for stepping; released after maxPauseMs regardless. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full disclosure burden, and it does so well. It reveals that URL substrings are resolved to exact scripts, original paths are translated through source maps, Chrome might fail to bind the breakpoint and the tool will report that honestly, and auto_resume affects whether the page stays frozen. The note that a paused execution is released after maxPauseMs regardless is especially valuable transparency.
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 three sentences with no filler. The core action and reporting promise are front-loaded, followed by the input-mode details and then the auto_resume guidance. Every sentence earns its place and contributes to correct invocation.
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 tool with five parameters, no output schema, and no annotations, the description is nearly complete: input modes, failure honesty, and pause/resume behavior are all covered. The main omission is lack of explicit routing to sibling tools such as debugger_set_breakpoint_at_function or debugger_list_breakpoints, but the description plus a detailed input schema is enough for an agent to invoke this 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 coverage is 100%, so the baseline is 3. The description adds real semantic value beyond the schema: it explains substring resolution behavior for url and the source-map translation for original pre-bundling paths. It also adds context for auto_resume beyond its schema description, clarifying the automation-driven scenario and the timeout release behavior.
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 opens with a specific verb and resource: 'Set a breakpoint' in Chrome. It also commits to a distinctive behavioral promise, 'report honestly whether Chrome could bind it,' which makes the tool's purpose concrete. The accepted input modes (script URL/substring vs. original source path) clearly separate this from the sibling debugger_set_breakpoint_at_function even without naming it.
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 explicit conditional guidance for the auto_resume parameter, telling the agent when to set it to true versus false and explaining the consequence of each choice. However, it does not explicitly say when to choose this tool over the function-based breakpoint sibling or the breakpoint-management siblings. That routing is only implied by the input-mode description, so the guidance is present but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debugger_set_breakpoint_at_functionA
Set a breakpoint on a function you can name, without knowing which file it lives in. Give any expression that evaluates to a function — 'app.saveOrder', 'MyClass.prototype.load', a framework helper — and DevCDP finds its definition and breaks at its first statement. Use this when you know what runs but not where it is defined; use debugger_set_breakpoint when you already have a file and line.
| Name | Required | Description | Default |
|---|---|---|---|
| condition | No | JavaScript condition — pause only when it is truthy, e.g. 'id === 42'. | |
| auto_resume | No | Default true: capture scope/console/network on hit, then resume, so the page is never left frozen and the action that tripped it completes. Pass false to hold the pause for stepping; released after maxPauseMs regardless. | |
| function_expression | Yes | JavaScript evaluating to the function itself — no call parentheses. For example 'app.store.save', not 'app.store.save()'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It clearly explains that DevCDP resolves any function expression to its definition and breaks at its first statement. It does not cover breakpoint persistence or the return result, but the core runtime behavior is transparent enough for selection and invocation.
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 with no filler. The main behavior is front-loaded, examples are compactly integrated, and the sibling comparison appears at the end without bloating the description.
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 3-parameter tool with no output schema and no annotations, the description covers purpose, usage, and behavior well. It slightly lacks return-value expectations and breakpoint lifecycle details, but those are not critical for selecting and invoking this 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 baseline is 3. The description adds helpful examples like 'app.saveOrder' and 'MyClass.prototype.load', reinforcing the function_expression parameter, but the schema already documents the key semantics such as 'no call parentheses'. No additional parameter meaning is 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 action: set a breakpoint on a named function without knowing its file. It also distinguishes itself from the sibling debugger_set_breakpoint by contrasting function-based vs file-and-line-based breakpoints, so an agent can select the right tool immediately.
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 an explicit when-to-use rule: 'Use this when you know what runs but not where it is defined; use debugger_set_breakpoint when you already have a file and line.' This is direct, actionable guidance that names the alternative and the selecting condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debugger_step_intoA
Step into from the current pause and stop at the next statement. Stepping implies you want the pause held, so it will not auto-resume between steps — but it is still released automatically after maxPauseMs if you stop. The new location and scope are available from debugger_get_state and debugger_get_scope once it settles.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral disclosure burden. It explains pausing semantics, auto-resume behavior, maxPauseMs release, and where to get results (debugger_get_state, debugger_get_scope). While it doesn't mention side effects on breakpoints or what happens if not paused, the disclosed behavior is substantial and goes beyond a terse verb phrase.
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 compact: three sentences, each with distinct value—action, pause semantics, and postcondition/result location. It avoids tautology and structured redundancy. No 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 zero-parameter stepping tool with no output schema, the description covers the action, preconditions ('from the current pause'), duration, and where to inspect results. It does not explicitly state an error condition if not paused, but that is a minor gap given sibling context and existing debugger state tools.
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 has zero parameters, and schema description coverage is 100% because there is nothing to describe. No parameter detail is needed, so this is effectively a non-issue; the description explains the behavior contextualizing the input-less 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?
The description clearly identifies a specific action: 'Step into from the current pause and stop at the next statement'. The verb 'step into' is precise in the debugging context and the resource (debugger execution state) is clear. It distinguishes itself from siblings like debugger_step_over and debugger_step_out through the 'step into' phrase, and it also points to related state/scope retrieval 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?
The description explicitly explains when it is used ('from the current pause') and the behavioral implication: 'Stepping implies you want the pause held, so it will not auto-resume between steps'. It also gives a boundary condition ('released automatically after maxPauseMs if you stop'). This is strong usage guidance for an agent deciding to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debugger_step_outA
Step out from the current pause and stop at the next statement. Stepping implies you want the pause held, so it will not auto-resume between steps — but it is still released automatically after maxPauseMs if you stop. The new location and scope are available from debugger_get_state and debugger_get_scope once it settles.
| 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 and does it well: it discloses that the pause is held between steps, that the pause is auto-released after maxPauseMs, and that new location/scope can be retrieved via debugger_get_state and debugger_get_scope. This is meaningful behavioral context beyond a simple action statement.
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 tight sentences, each carrying distinct information: the operation, the pause lifecycle behavior, and how to observe the result. No filler or 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?
For a parameter-free tool with no output schema, the description covers the key post-conditions and where to find results. It does not explicitly state that the debugger must already be paused or what happens if it is not, and the phrase 'stop at the next statement' could be more precise about exiting the current function, but the overall guidance is sufficient for most calls.
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 has zero parameters and the schema already fully covers this, so no parameter explanation is needed. The description's mention of maxPauseMs refers to a behavior/timing detail rather than a tool parameter.
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 action with 'Step out from the current pause' and gives a concrete result: 'stop at the next statement.' It clearly belongs to the debugger stepping family and is distinguishable from step_over/step_into by the operation named, though it does not explicitly contrast with those 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?
No guidance is given about when to choose step_out over step_over or step_into. The description explains pause-holding behavior but does not state the common use case, such as exiting the current function to return to a caller, nor any exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debugger_step_overA
Step over from the current pause and stop at the next statement. Stepping implies you want the pause held, so it will not auto-resume between steps — but it is still released automatically after maxPauseMs if you stop. The new location and scope are available from debugger_get_state and debugger_get_scope once it settles.
| 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 and does it well: it discloses that the pause is held, that auto-resume is suppressed between steps, and that release still happens after maxPauseMs. It also tells the agent where to observe the results (debugger_get_state and debugger_get_scope), which is exactly the non-obvious, useful context an agent needs.
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 two well-organised sentences: the first states the core action and result, and the second adds the consequential behavior and data-access pointers. Every sentence earns its place with no filler or repetition.
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 command, the description is nearly complete: it defines the action, the pause semantics, timeout behavior, and where to retrieve resulting state. Minor gaps include not defining maxPauseMs, but in the debugger-devtools context this is an acceptable assumption.
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?
This tool accepts zero parameters, and the schema coverage is 100%. There are no parameter semantics to document, so the description cannot be expected to add parameter detail. The baseline for a zero-parameter tool 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 states a specific verb and resource: 'Step over from the current pause and stop at the next statement.' It is clear and not a tautology, but it does not explicitly contrast itself with the sibling tools debugger_step_into and debugger_step_out, leaving some distinction to inference from the tool name.
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 guidance on when to choose this tool over debugger_step_into, debugger_step_out, debugger_resume, or other stepping alternatives. The description explains behavioral consequences of stepping but not selection criteria, so an agent must infer usage context from sibling names and the debugger state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devcdp_settingsA
Show every DevCDP setting: its effective value, where that value came from (default, which settings file, or which environment variable), which files were searched and loaded, and any that failed to parse or were not recognised. Use it before changing configuration, and to check a change actually took effect.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | Only one group of settings. | all |
| changed_only | No | Only settings that are not at their default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of explaining behavior. It clearly portrays a read-only inspection operation and discloses the range of information returned, including file search paths and error cases such as failed parses and unrecognized settings. It could be slightly more explicit about having no mutation side effects, but 'Show' plus the detailed listing strongly implies this.
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 two sentences with no filler. The primary verb and purpose are front-loaded, followed by a compact enumeration of the tool's outputs and then a practical usage note. 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?
The tool is a straightforward read-only introspection command with two optional parameters. The description compensates for the lack of an output schema by explaining what information will be shown, and it also gives a practical usage context. Nothing essential is missing for an agent to select and correctly invoke 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?
Schema description coverage is 100%, so the input schema already fully documents both parameters (group and changed_only) with defaults and meanings. The tool description does not add additional parameter-level detail, which is acceptable given the schema already carries that load.
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 opens with a specific verb and resource: 'Show every DevCDP setting' and then details exactly what will be displayed: effective value, provenance, searched/loaded files, and parse failures. This clearly differentiates it from the sibling devcdp_settings_init, which is about initialization rather than inspection.
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 explicitly states when to use the tool: 'Use it before changing configuration, and to check a change actually took effect.' It provides clear context for the appropriate moment to invoke it, though it does not name alternatives or give explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devcdp_settings_initA
Write a settings file containing every option with its current value and an explanation, so it can be edited by hand. Refuses to overwrite an existing file unless you say so.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Where to write it. Defaults to devcdp.settings.json in the install directory. | |
| overwrite | No | Replace the file if it already exists. |
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 clearly discloses that the tool writes a file, includes every option with current values and explanations, and refuses to overwrite unless explicitly asked. This is meaningful behavioral context beyond a simple 'write settings' statement, though it does not mention error handling or filesystem side effects beyond overwrite.
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 convey the tool's purpose, content of the file, and overwrite behavior without wasted words. The primary action is front-loaded, and the safety caveat is placed immediately after. 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?
For a low-complexity tool with two optional parameters, full schema coverage, and no nested objects or output schema, the description is reasonably complete. It explains what the file contains and the overwrite guard. It could mention what happens on refusal or what the tool returns, but these are minor gaps 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?
The input schema already provides 100% coverage of both parameters ('path' and 'overwrite') with descriptions and defaults. The tool description adds no new parameter-level detail, but the phrase 'unless you say so' loosely maps to the overwrite parameter. This meets the baseline for schema-driven semantics but adds little beyond it.
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 action ('Write a settings file') with a clear resource ('every option with its current value and an explanation'). It also conveys the file's purpose ('so it can be edited by hand'), distinguishing it from generic settings readers/writers. It does not explicitly name sibling tools, so it stops short of perfect differentiation.
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 implies when to use it: to create an editable, hand-maintainable settings file. It also implies the overwrite condition. However, it does not explicitly say when to prefer this tool over the sibling 'devcdp_settings' or any alternative, nor does it describe exclusions. Usage context is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devtools_connectA
Attach to a Chrome tab over the DevTools Protocol and start observing it (console, network, DOM, debugger). Claims the tab so no other DevCDP session can drive it, marks it visibly in the browser, and reports what was loaded before we attached. Call this once at the start of a debugging session.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | Chrome host. | localhost |
| port | No | Chrome remote-debugging port. | |
| target | No | 'visible' (the tab on screen) | 'url-match:<substring>' | 'index:<n>' from list_tabs | 'new' | a URL substring. | visible |
| window | No | 'new' gives this session its own browser window — the fallback when Chrome tab groups are unavailable. | current |
| browser | No | 'new' launches a separate isolated Chrome on the next free port — a browser no other session has touched. | existing |
| allow_new_tab | No | If every tab is already claimed by another session, open a new one instead of failing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes on the burden of disclosing side effects. It clearly states that the tool claims the tab, blocks other DevCDP sessions, marks the tab visibly, and reports pre-attachment loaded state. This is good transparency, though it does not mention cleanup 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?
The description is three compact sentences that front-load the core purpose, immediately state the key side effect, and finish with a clear usage directive. Every sentence earns its place with no fluff or repetition.
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 moderately complex connection tool, the description covers the essential preconditions and consequences: when to call it, what it claims, what it starts observing, and what it reports. The lack of an output schema and the absence of annotations mean some return-shape details are unspecified, but the important contextual guidance is 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?
The input schema has 100% description coverage, so every parameter is already documented with type, default, and meaning. The tool description does not need to repeat these, and it does not add significant extra parameter-level meaning 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 uses a specific verb ('Attach') and a clear resource ('a Chrome tab over the DevTools Protocol'), and it explains the immediate effect: start observing console, network, DOM, and debugger activity. This clearly distinguishes it from sibling tools like devtools_status or devtools_disconnect.
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 explicitly says to call this once at the start of a debugging session, giving the agent a clear temporal trigger. It does not explicitly discuss alternatives or when not to use it, but the guidance is sufficient for a session-initialization tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devtools_disconnectA
Detach cleanly: resume the page if it is paused at a breakpoint, remove every breakpoint we set, remove the in-page badge, and release the tab claim so another session can use it. Always call this when you are done.
| 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 burden and fully discloses side effects: resumption, removal of session-set breakpoints only, badge removal, and tab-claim release. It even conditions one effect ('if it is paused at a breakpoint') and scopes another ('we set').
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 expresses the core verb first, then a tight colon-separated list of side effects, ending with the usage directive. No filler or 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?
For a parameterless cleanup tool with no output schema, the description covers what it does, the conditionality of one action, the side effect on the tab claim, and when to call it. Nothing necessary for selecting and invoking it 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?
The tool has zero parameters and an empty schema, so parameter semantics are trivially covered; the baseline is 4. The description reinforces that invocation requires 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?
The description opens with 'Detach cleanly' and enumerates concrete effects: resume paused page, remove breakpoints, remove badge, release tab claim. This clearly identifies a distinct cleanup operation and contrasts with sibling devtools_connect.
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 an explicit trigger: 'Always call this when you are done.' This tells the agent exactly when to invoke the tool and implies it is the terminal cleanup step, so no alternative cleanup tool is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
devtools_statusA
Connection health and buffer accounting: which tab is attached, how many console/network/script entries are held, whether the debugger is paused, and whether anything has been evicted from the buffers.
| 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 behavioral context. It does so by disclosing the exact state it reports: attached tab, entry counts, debugger pause state, and buffer eviction. It does not explicitly state read-only or side-effect-free behavior, but the status nature and accounting language make this reasonably clear.
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 dense, well-structured sentence with a colon-led list. It is front-loaded with the core purpose and contains no filler or redundant 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 status tool with no output schema, the description fully previews the kind of information returned: attached tab, buffer counts, debugger pause state, and eviction status. Nothing essential for invoking this tool correctly 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?
The input schema has zero parameters, so there is no parameter semantics to explain. The baseline for zero-parameter tools is 4, and the description does not need to compensate for any schema gaps.
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 clearly defines what the tool reports—connection health, attached tab, buffer counts for console/network/script, debugger pause state, and eviction. It is specific and resource-focused, though it lacks an explicit verb and does not directly name sibling tools for differentiation.
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 purpose implies when to use it—when an agent needs a status/health summary of the devtools connection and buffers—but it provides no explicit when-to-use guidance, exclusions, or alternatives. It is adequate but inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dialog_detectA
Detect modal dialogs, alerts and confirmation overlays that are visible right now, with their title, message and button labels. Detection is structural — ARIA roles, the dialog element, and stacked-overlay geometry — so it works regardless of which UI framework drew it. Call it after any action that might raise a prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| frame | No | 'main' (default) or 'all' to include iframes. | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden, and it delivers by explaining the detection mechanism is structural (ARIA roles, dialog element, stacked-overlay geometry) and framework-agnostic. This helps an agent trust results across UI stacks. It does not explicitly state that the tool is read-only, but 'detect' and the structural explanation strongly imply non-destructive inspection.
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 sentences with no wasted words: the first defines what it detects, the second explains the mechanism, and the third gives the calling context. The most important information is front-loaded.
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 tool with one optional parameter and no output schema, the description is largely complete: it names the output fields, explains the detection method, and gives usage timing. It could be slightly stronger by stating the empty-result behavior when no dialog is present, but that is 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 frame parameter is fully described in the schema, and the tool description does not repeat it. The schema text is slightly inconsistent (default 'all' but says 'main (default)'), so a brief clarification would help, but with 100% schema coverage the baseline of 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 uses a specific verb ('Detect') with a concrete resource ('modal dialogs, alerts and confirmation overlays') and states the exact information returned (title, message, button labels). It also clarifies the 'visible right now' scope, which distinguishes it from broader DOM or wait-oriented 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?
The description gives an explicit trigger: 'Call it after any action that might raise a prompt.' This clearly states when to use the tool. It does not explicitly name alternatives or say when not to use it, but the timing guidance is strong enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docs_outlineA
List the documentation available under the docs root, with each file's headings, so you can see what the project documents before searching. A good first call when you do not yet know the app's vocabulary.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Override the docs root for this call. | |
| max_files | No | Maximum files to describe. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It clearly indicates this is a read/list operation and conveys the tool is safe enough to be a first call. It does not explicitly discuss side effects, output size, or performance, but it is not misleading and discloses the essential 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 concise sentences with no filler. The action is front-loaded, the return content is summarized, and the second sentence provides a clear usage recommendation.
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 listing tool with no required parameters and a complete schema, the description sufficiently explains what it returns and when to call it. It could say more about the exact output structure, but an agent has enough to select and invoke it 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%, with both optional parameters documented in the schema. The description adds only the context of 'docs root' but does not need to compensate since the schema already explains root and max_files.
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: 'List the documentation available under the docs root, with each file's headings.' It also distinguishes itself from search by framing this as an orientation call 'before searching,' which separates it from tools like docs_search.
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 explicit usage context: 'A good first call when you do not yet know the app's vocabulary' and places it 'before searching.' It does not explicitly name sibling alternatives or state when not to use it, but the intended timing is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docs_searchA
Search the project's own documentation — README and any markdown/text/pdf docs under the configured docs root — and return matching passages with file and line. Use it to learn what a screen, field or business term means in this app, instead of inferring it from the UI. Set docsRoot in your settings file if the docs live elsewhere.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Override the docs root for this call. | |
| query | Yes | Words or a phrase to look for. | |
| max_results | No | Maximum passages to return. | |
| context_lines | No | Lines of surrounding context per hit. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It states the exact search corpus, the returned artifact (passages with file and line), and the configurable docsRoot. For a read-only search tool, this is sufficient disclosure; there are no destructive or side-effect behaviors that need explaining.
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 sentences with no filler: action and scope first, then usage guidance, then configuration note. 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?
The description plus the fully documented schema provide everything needed to invoke this tool correctly: what it searches, what it returns, when to use it, and how to configure the docs root. No output schema exists, but the high-level return information is adequate for a passage-search 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 the baseline is 3. The description adds context about the docs root and result passages, but it does not add much meaning to specific parameters beyond what the schema already documents.
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 ('Search'), a specific resource ('the project's own documentation — README and any markdown/text/pdf docs under the configured docs root'), and the result shape ('matching passages with file and line'). This clearly distinguishes it from sibling tools like source_search or docs_outline by corpus and operation.
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 a concrete when-to-use scenario: 'Use it to learn what a screen, field or business term means in this app, instead of inferring it from the UI.' It does not explicitly name alternative tools or exclusions, but the context is clear enough for an agent to route to it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dom_get_htmlA
Get the inner or outer HTML of the first element matching a selector, truncated to a byte budget. Useful for understanding structure you cannot infer from dom_query alone.
| Name | Required | Description | Default |
|---|---|---|---|
| frame | No | 'main' (default), or a substring of a frame's origin/name. | main |
| inner | No | innerHTML instead of outerHTML. | |
| selector | Yes | CSS selector. | |
| max_bytes | No | Truncate beyond this many characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the behavioral disclosure burden. It does reveal non-obvious behavior: only the first matching element is returned, and the output is truncated. The 'byte budget' wording is slightly inconsistent with the schema's 'characters' description, but the core operation and scoping are transparent.
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 concise sentences with no filler. The operation is front-loaded, and the comparison with dom_query is placed in the second sentence as useful context.
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?
This is a simple read-only tool, the schema covers all parameter details, and the description explains purpose, selector scoping, inner/outer mode, and truncation. Minor gaps around no-match behavior and exact return wrapping remain, but they are not critical for a tool that returns HTML.
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 parameters already have full descriptions in the schema, so the baseline is 3. The description loosely reinforces the inner/outer behavior and truncation, but it does not materially improve parameter understanding, and the byte-budget phrasing conflicts with max_bytes being described in characters.
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 the specific operation: get the inner or outer HTML of the first element matching a selector, with truncation. It also distinguishes itself from the sibling dom_query by explaining that it is useful when structure cannot be inferred from dom_query alone.
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 provides a practical use case and names dom_query as the alternative to consider. It does not list exclusions or other sibling tools, but the context is clear enough for an agent to choose this tool when raw HTML markup is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dom_get_mutationsA
DOM changes recorded since the last call — what was added, removed or re-attributed, and where. Use it after an action to see whether the app re-rendered at all, which distinguishes 'handler never ran' from 'handler ran and produced nothing'.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | Drain the buffer as you read it. | |
| limit | No | Maximum records to return. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden, and it does well by revealing that the tool returns a stateful buffer of changes since the last call and explaining the diagnostic meaning of empty results. It does not explicitly mention the default clear/drain side effect, though that is described in the input schema; the core behavior is still transparent.
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 compact sentences deliver the core definition and the practical use case with no filler. The most important information—what the tool returns and its temporal scope—is front-loaded.
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 description is sufficient for a low-complexity diagnostic tool: it explains what is returned, when to use it, and what an empty result means. Since there is no output schema, a bit more detail about the exact record shape could help, but the description covers the essential decision-making 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 the parameters are already fully documented in the input schema. The tool description adds context about when to use the tool but no additional parameter-level meaning, which fits the baseline of 3 for complete schema coverage.
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 resource (DOM mutations) and a precise temporal scope (since the last call), then lists the kinds of changes recorded: added, removed, or re-attributed, and where. This clearly differentiates it from static DOM inspection tools like dom_get_html or dom_query.
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 an explicit use case: call it after an action to determine whether the app re-rendered at all. It does not explicitly contrast it with sibling alternatives, but the contextual guidance is clear enough to 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.
dom_list_framesA
List the frames and JavaScript execution contexts in the attached tab. Use it when a selector finds nothing — the content may live in an iframe, which needs frame:'all' on dom_query.
| 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, and it largely delivers: 'List' clearly conveys a read-only diagnostic op, and the mention of 'JavaScript execution contexts' discloses that results cover more than DOM frames. Remaining gaps are edge behaviors — whether nested iframes are included, behavior with no attached tab, and whether results are live — but the core safety profile and return scope are accurately conveyed. No contradiction with annotations, since none 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 sentences, each earning its place: the first states what it lists and where, the second gives the exact use case, cause, and follow-up action. The purpose is front-loaded before the guidance. No redundant phrasing, no restating of the tool name, 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?
Given zero parameters, no output schema, and no annotations, the description covers everything needed to invoke it correctly: what it lists, where, when to call it, and what to do next (frame:'all' on dom_query). The return format is implied rather than stated explicitly, and edge cases (nested frames, no-tab error) go unaddressed — minor for a tool this simple, hence 4 rather than 5.
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 schema is empty (0 params), so the baseline is 4 and there is nothing to document. The description's second sentence (iframe diagnosis leading to frame:'all') indirectly explains why the tool takes no arguments — it operates on the already-attached tab. It adds useful context without needing to clarify any argument semantics, since none exist.
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'), a concre's resource ('frames and JavaScript execution contexts'), and a scope ('in the attached tab'), so an agent knows exactly what the tool returns. It further distinguishes itself from siblings like dom_query and debugger_evaluate_at_frame by framing itself as an inspection/discovery step rather than a query or evaluation. No tautology — the description adds real content beyond the name.
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 an explicit trigger condition: 'Use it when a selector finds nothing.' It names the consequence and the alternative — content 'needs frame:'all' on dom_query' — so the agent knows both when to pick this tool and what to do with its results. This is explicit when/alternative guidance, not an implied hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dom_queryA
Query elements by CSS selector and return tag, id, classes, text, attributes, geometry and real visibility. Ask for computed styles by naming the properties you want. Set frame:'all' to search inside iframes too — single-page apps often render the screen you care about in a child frame.
| Name | Required | Description | Default |
|---|---|---|---|
| frame | No | 'main' (default), 'all', or a substring of a frame's origin/name. | main |
| limit | No | Maximum elements to return. | |
| fields | No | Restrict the returned keys, e.g. ['tag','id','text','visible']. | |
| styles | No | Computed style properties to read, e.g. ['display','zIndex','color']. | |
| selector | Yes | CSS selector. | |
| include_html | No | Include a truncated outerHTML for each match. | |
| visible_only | No | Drop elements that are not actually rendered. | |
| include_attrs | No | Include every HTML attribute of each match. Off by default: attributes dominate the response on real apps. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavior, and it delivers: it explains computed style access on demand, iframe search with practical reasoning, and 'real visibility' as a distinct concept. It does not mention response limits, but the schema covers those details.
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 function and return data, and no wasted words. The second sentence adds actionable usage guidance efficiently.
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?
Given eight parameters and no output schema, the description covers the most decision-critical behaviors: selector querying, return fields, computed styles, and iframe search. The schema fully documents the remaining parameters, so an agent has enough context to call this 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 the baseline is 3. The description adds value beyond the schema by explaining the rationale for frame:'all' in single-page apps and clarifying how the styles parameter should be used. This is extra guidance, not just restatement.
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: 'Query elements by CSS selector' and enumerates the rich set of returned data (tag, id, classes, text, attributes, geometry, visibility). This clearly separates it from sibling tools like dom_get_html or dom_list_frames, which have different scopes.
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 provides clear usage context, such as setting frame:'all' to search inside iframes and asking for computed styles by naming properties. It does not explicitly name alternatives or state when not to use this tool, but the guidance is strong enough to steer an agent effectively.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tabsA
List the debuggable tabs in Chrome with their index, title, URL, whether each is the visible one, and which DevCDP session (if any) currently owns it. Use the index with target:'index:' in devtools_connect.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | Chrome host. | localhost |
| port | No | Chrome remote-debugging port. | |
| probe | No | Check which tab is really visible (one extra round trip). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden and does it well: it discloses that the tool checks visibility, that probe requires an extra round trip, and that session ownership may be absent '(if any)'. This gives the agent useful expectations beyond the bare 'list' verb.
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 with no filler: the first delivers the purpose and output fields, the second connects the result to the next step. Every clause adds value, and the most important information is front-loaded.
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?
Given there is no output schema, the description compensates by listing the returned fields explicitly and explains how the index should be consumed. It does not describe output formatting or failure behavior, but for a simple listing tool the critical context is 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 the input schema already documents host, port, and probe. The tool description does not add parameter details, but it also does not need to because the schema already carries that weight. 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 opens with the specific verb 'List' and the resource 'debuggable tabs in Chrome', then enumerates the exact fields returned: index, title, URL, visible flag, and owning DevCDP session. This clearly distinguishes list_tabs from sibling tools like sessions_list or devtools_connect.
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 clear context for when this tool is useful: when you need the list of tabs and their indices. It also provides direct downstream guidance by instructing the agent to use the index with target:'index:<n>' in devtools_connect. It does not explicitly name alternatives or exclusions, so it misses the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_getA
Look up what previous sessions learned about this app — failures and the recovery that worked. Returns short summaries so it is cheap to call at the start of a session; pass full:true or an id to read one in detail. Search it whenever a step fails, before asking the user for help.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Return this single entry in full. | |
| full | No | Return complete entries instead of summaries. | |
| limit | No | Maximum entries to return. | |
| query | No | Words to match against category, failure, recovery, pattern or URL. Omit for the most recent. | |
| category | No | Restrict to one category. |
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 that calls return short summaries by default, that full:true or id returns detailed entries, and that it is designed to be cheap. As a read tool, the behavior is clearly non-mutating. It doesn't discuss edge cases like empty results, but covers the main behavioral traits.
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, each earning its place: the first establishes purpose and return format, the second gives usage guidance. No filler or repetition of schema content.
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 description adequately covers what the tool does, when to use it, and how to get detailed entries. It does not describe the structure of summaries or full entries, and there is no output schema, but the core semantics are clear for an agent to invoke and use the results effectively.
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 parameters. The description adds a small amount of value by explaining that 'full:true or an id' reads entries in detail, which maps to the full and id parameters, but otherwise it does not go 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 uses a specific verb ('Look up') with a clear resource ('what previous sessions learned about this app — failures and the recovery that worked'). It distinguishes itself from sibling memory_record and memory_import_legacy by focusing on retrieval, and from docs_search by pointing to session-learned knowledge rather than general docs.
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 explicit usage triggers: 'Search it whenever a step fails, before asking the user for help' and 'cheap to call at the start of a session'. It does not name alternatives or exclusions, but the guidance is actionable and enough for an agent to know when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_import_legacyA
One-off import of a v4 Markdown memory file into the current store, skipping the malformed entries v4's missing validation produced. Run once after upgrading, then delete the old file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Full path to the old memorymanagement.md. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It discloses that malformed entries are skipped and that this is a one-off operation. It does not explicitly state whether the import merges or overwrites existing store entries, but the core behavioral traits are conveyed.
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 tightly written sentences with no filler. The key operation and migration caveat are front-loaded, and every sentence contributes useful 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 one-parameter tool with no output schema and no annotations, the description is largely complete: it states what the tool does, when to run it, and the important malformed-entry caveat. It could add return/error behavior or explicit merge vs overwrite semantics, but the tool's low complexity keeps this gap modest.
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 schema already provides 100% coverage for the single path parameter and describes it as the full path to the old memorymanagement.md file. The description adds contextual color about v4 Markdown and legacy status, but no substantive 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?
The description uses a specific verb and resource: it imports a v4 Markdown memory file into the current store. It also clearly marks the operation as a one-off migration, distinguishing it from sibling tools like memory_get or memory_record.
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 states explicit timing and lifecycle context: 'Run once after upgrading, then delete the old file.' It does not name alternative tools or when-not conditions, but the specialized migration framing makes the intended usage unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_recordA
Record a failure and the recovery that worked, so a later session can skip the dead end. Call it after any user-assisted recovery or non-obvious workaround. All four fields are required and validated — a vague entry is worse than none, because it costs context on every future lookup.
| Name | Required | Description | Default |
|---|---|---|---|
| shared | No | Write to the shared team store instead of local, if one is configured. | |
| failure | Yes | What went wrong, concretely. e.g. 'Clicking Save did nothing because the form was still validating.' | |
| pattern | Yes | The reusable rule for next time. e.g. 'Wait for the validation spinner to clear before clicking Save.' | |
| category | Yes | What kind of problem this was. | |
| recovery | Yes | What actually resolved it, as steps someone could repeat. | |
| url_pattern | No | URL substring this applies to, so it can be matched to a page later. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the burden and does meaningfully disclose behavior: all four fields are required and validated, and a vague entry has a future cost ('it costs context on every future lookup'). It does not describe persistence details like the shared/local store distinction, but that is already covered in the schema, so the description adds useful behavioral context.
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 sentences each earn their place: purpose, when to call, and quality/validation guidance. Information is front-loaded with the core action 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 record/write tool with no annotations and no output schema, the description covers purpose, usage trigger, validation, and quality expectations. The sibling memory_get implies the retrieval path, but the description could have directly noted that the stored entry is later read via memory_get to tie the workflow together.
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 adds qualitative guidance beyond the schema by warning that 'a vague entry is worse than none,' which affects how an agent should fill failure, recovery, and pattern. This is meaningful extra parameter semantics.
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 clearly identifies the action ('Record'), the object ('a failure and the recovery that worked'), and the intended outcome ('so a later session can skip the dead end'). It is immediately distinguishable from sibling tools like memory_get and memory_import_legacy because it is the write/record path.
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 an explicit trigger condition: 'Call it after any user-assisted recovery or non-obvious workaround.' This tells an agent when to use it, but it does not explicitly contrast it with memory_get or state when not to use it, so it misses the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_clearA
Empty the network buffer so the next thing you read belongs only to the action you are about to take. Does not affect the browser's own Network panel.
| 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 of behavioral disclosure. It clearly states that the network buffer is emptied, describes the intended effect on future reads, and explicitly notes that the browser's own Network panel is unaffected. This is strong transparency for a zero-parameter utility.
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 tightly written sentences, with the core action front-loaded and the key clarification in the second sentence. Every word earns its place; there is no fluff or repetition.
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 tool with no output schema and no annotations, the description is fully sufficient. It explains what the tool does, why an agent would use it, and what it does not affect. Nothing essential 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?
The tool has no parameters, so the baseline is 4. The description adds useful context by explaining why no parameters are needed: the tool acts on the current network buffer as a whole. There is no parameter ambiguity to resolve.
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 clearly states the specific action ('Empty the network buffer') and distinguishes it from the browser's own Network panel, which prevents confusion. It is immediately obvious what this tool does and how it differs from related tools like network_get_requests or console_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?
The description implies when to use it: before taking an action, to ensure subsequent network reads only reflect that action. It does not explicitly name alternatives or state when not to use it, but the purpose is clear enough that an agent can infer the right context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_get_requestsA
List HTTP requests captured since attach, with method, status, duration, size and initiator. Filter by URL substring, method, status or failures only. Response bodies are opt-in via include_bodies because they are large. Capture starts when DevCDP attaches, so requests from before that are not here — reload to see them.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum requests to return. | |
| method | No | Only this HTTP method, e.g. POST. | |
| offset | No | Skip this many of the newest matches, for paging back in time. | |
| status | No | Only this exact response status. | |
| min_status | No | Only responses with status >= this, e.g. 400 for problems. | |
| url_filter | No | Only requests whose URL contains this substring. | |
| failed_only | No | Only network failures and 4xx/5xx responses. | |
| include_bodies | No | Include response bodies, subject to max_body_bytes. | |
| max_body_bytes | No | Per-body byte cap when include_bodies is set. | |
| include_headers | No | Include request and response headers. | |
| include_post_data | No | Include request payloads. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Wit no annotations, the description carries the full disclosure burden and does so well: it reveals the capture-boundary limitation, explains that response bodies are excluded by default 'because they are large', and offers the reload remedy. The read-only nature is implied by 'List' with no hidden mutating effects. Minor omission: no statement about pagination/ordering behavior, though the schema covers offset semantics.
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?
Four sentences, each earning its place: core purpose, filter modes, body-size caveat, and capture boundary with a remedy. The verb+resource is front-loaded in the first word. There is no filler and no redundant restatement of schema content.
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 tool with 11 parameters and no output schema or annotations, the description covers purpose, returned fields, filter modes, and the key trap (capture start), so an agent can call it correctly without further research. It could add a pointer to network_get_response_body for full bodies, but include_bodies largely fills that role.
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%, putting the baseline at 3, but the description adds real value beyond the schema: it groups the filter dimensions ('Filter by URL substring, method, status or failures only') and explains the rationale for include_bodies being opt-in ('because they are large'), naming the parameter directly. That pushes it a step above 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?
Opens with a specific verb and resource — 'List HTTP requests captured since attach' — and enumerates the returned fields (method, status, duration, size, initiator). The listing verb disambiguates it from siblings like network_clear, network_wait_for_request, and network_get_response_body, and the filter sentence adds further scope. Nothing ambiguous remains about what the tool does.
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 final sentence gives actionable context: 'Capture starts when DevCDP attaches, so requests from before that are not here — reload to see them.' This tells an agent why prior requests may be absent and how to remedy it. It does not explicitly name alternatives such as network_wait_for_request or state when-not-to-use this tool, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_get_response_bodyA
Fetch the full response body for one requestId from network_get_requests. Chrome discards bodies when the page navigates, so read them while the page is still on the same document.
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | No | Deprecated spelling of request_id; both work. | |
| request_id | No | The requestId field from a network_get_requests row. | |
| max_body_bytes | No | Byte cap; 0 means no limit. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden, and it delivers the single most important non-obvious trait: Chrome discards bodies on navigation, so reads must happen before leaving the document. It does not describe error behavior when the body has already been discarded or the response format, but the core failure mode is proactively disclosed.
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 with zero filler: the first front-loads the purpose and resource, the second adds a high-value caveat. Every word 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 simple follow-up read tool, the description covers purpose, id provenance, and the critical lifecycle constraint. Gaps are minor: there is no output schema and the description does not hint at the return format, and the schema marks all params optional while the description implies one id is needed — but neither gap is likely to cause a wrong 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?
Schema description coverage is 100%: requestId/request_id aliasing, the source of the id, and the max_body_bytes cap semantics are all documented in the schema. The description's reference to "from network_get_requests" mostly restates what the schema already says, so it adds minimal value beyond the schema; 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?
"Fetch the full response body for one requestId from network_get_requests" uses a specific verb and resource and names the upstream tool that produces the requestId. This cleanly distinguishes it from siblings such as network_get_requests (lists requests) and network_wait_for_request (waits for a request), so an agent can tell them apart without opening schemas.
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 clear when-to-use context: it is a follow-up to network_get_requests, and the warning "read them while the page is still on the same document" provides explicit timing guidance that prevents a common failure. It does not explicitly name alternatives or exclusions, but the context is unambiguous enough that an agent will use it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_wait_for_requestA
Block until a request whose URL contains url_filter completes, then return it. Event driven, so there is no polling. Call this immediately AFTER triggering the action, or pass a filter that has not fired yet — a request that already completed is returned straight away. Gives up after timeout_ms and tells you so.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Also require this HTTP method. | |
| timeout_ms | No | Give up after this long. | |
| url_filter | Yes | Substring the request URL must contain. | |
| allow_existing | No | Satisfy immediately from an already-completed matching request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: event-driven/no polling, immediate return for pre-existing matches, and a timeout failure mode. This goes well beyond the schema details.
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 sentences, front-loaded with the core blocking behavior, then edge cases and failure mode. Every sentence adds value with no repetition or fluff.
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?
Covers the wait mechanism, when to call, the already-completed case, and timeout failure. Although there is no output schema, the description clearly says it returns the matched request; the exact request structure is reasonably implied by the network tool family.
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 applies. The description reinforces url_filter and timeout_ms but does not add meaning for method or allow_existing beyond what the schema already documents.
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 operation: block until a matching network request completes, then return it. The 'Block until...' phrasing clearly distinguishes it from sibling list/get tools like network_get_requests and network_get_response_body.
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?
Provides explicit call timing ('immediately AFTER triggering the action') and covers the edge case of an already-completed request. It does not name alternative tools for non-wait scenarios, so it lacks explicit exclusions, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notify_userA
Show a short status line to the human, in the badge on the page you are debugging. This is the only channel the user actually sees — call it before a slow or surprising step so a frozen-looking app is explained. Keep it to a few words.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | What you are doing. | |
| detail | Yes | Short human-readable detail, e.g. 'checking the save handler'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the visible effect (a status line in the badge) and highlights an important trait: this is the only channel the user actually sees. It also gives a style constraint ('Keep it to a few words'), which helps agents use it appropriately. It doesn't mention return/blocking behavior, but for this simple notification tool that is a minor omission.
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 three sentences with zero filler. The first sentence states the core function, the second gives timing and rationale, and the third gives a constraint. Information is front-loaded and 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?
For a tool with 2 parameters, full schema coverage, no output schema, and no annotations, the description provides everything an agent needs to invoke it correctly: what it does, when to use it, and how to phrase the content. It is complete for its intended purpose.
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 adds stylistic guidance ('Keep it to a few words') that applies to the 'detail' parameter, but the individual parameter meanings are already fully covered by the schema ('What you are doing' and 'Short human-readable detail'). The description does not need to add more.
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 ('Show'), a specific resource ('a short status line ... in the badge'), and a clear audience ('the human'). It also distinguishes itself as the only visible user channel, which separates it from other session/communication tools like session_ask_user.
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 explicit guidance on when to use the tool: 'call it before a slow or surprising step so a frozen-looking app is explained.' It explains the context and benefits clearly. It does not explicitly name alternatives or when not to use it, but the usage context is strong enough to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_interruptA
Abort the JavaScript the page is currently running. Use it when a tool reports PAGE_UNRESPONSIVE — an infinite loop or a long synchronous task has blocked the main thread. This is the only thing that frees it: reloading and navigating do not, because the blocked thread never processes them. The page keeps its DOM and state; only the in-flight script is killed.
| 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 full burden. It clearly discloses the side effect profile: 'The page keeps its DOM and state; only the in-flight script is killed.' It also explains why the main thread cannot process navigation, adding important behavioral context beyond the basic action.
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 well-organized sentences: action first, trigger second, consequence and why nothing else works third. Every sentence earns its place, with no repetition or fluff.
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 tool with no output schema and no annotations, the description fully equips an agent: it states what the tool does, when to invoke it, what happens to the page, and why alternatives won't work. Nothing essential 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?
The tool takes zero parameters, so no parameter semantics need to be explained. The empty schema covers everything; a baseline of 4 is appropriate because there is nothing parameter-related for the description to add.
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: 'Abort the JavaScript the page is currently running.' It also explicitly distinguishes itself from page_navigate and page_reload by explaining that they do not free a blocked thread, making the tool's unique role 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?
It gives an explicit trigger condition: 'Use it when a tool reports PAGE_UNRESPONSIVE.' It also names alternatives that should not be chosen (reloading, navigating) and explains why they fail, leaving no ambiguity about when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_reloadA
Reload the attached tab. Useful right after attaching, because console history and network traffic from before the attach cannot be recovered — a reload replays everything with DevCDP watching.
| Name | Required | Description | Default |
|---|---|---|---|
| bypass_cache | No | Ignore the HTTP cache (hard reload). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It explains a non-obvious trait: reloading replays console and network activity under DevCDP observation, recovering data unavailable from before the attach. It could more explicitly warn about page state loss, but the reload semantics largely imply it.
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 two sentences with no filler. The primary action is front-loaded, and the explanatory context about post-attach reloading is directly relevant and 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 simple one-parameter tool with no output schema, the description provides sufficient context: what it reloads, why it is useful right after attaching, and what benefit the agent gains. Nothing critical 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?
The input schema fully describes the only parameter (bypass_cache) with a clear description and default, so the schema already carries the parameter meaning. The description adds no extra parameter detail, which is acceptable at 100% schema coverage.
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 ('reload') and resource ('attached tab'), making the tool's action unambiguous. It also distinguishes itself from page_navigate by targeting the current attached tab rather than navigating elsewhere.
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 clear when-to-use context: right after attaching, because pre-attach console history and network traffic cannot be recovered. It does not explicitly name alternatives or exclusions, but the use case is clearly scoped and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runtime_evaluate_manyA
Evaluate several named expressions in one round trip and get a map of name to result. Use it to sample a lot of app state at once instead of paying a round trip per question. Individual failures are reported per entry rather than aborting the batch.
| Name | Required | Description | Default |
|---|---|---|---|
| expressions | Yes | Array of { name, expression } objects. | |
| await_promise | No | Await promise results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the useful non-aborting per-entry failure behavior, but doesn't mention that expressions may execute arbitrary code with side effects or how promise results are serialized. This is partial transparency 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?
Three concise sentences, each earning its place: the core operation, the motivating use case, and the failure model. The most important behavioral distinction is front-loaded.
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 tool with no output schema, the description gives the essential contract: a map of name to result and per-entry failure handling. It could mention evaluation context or value serialization, but those are minor gaps for an agent selecting and 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?
The input schema already describes both parameters and has 100% coverage. The description's 'named expressions' mirrors the `{ name, expression }` structure but adds no meaningful detail about `await_promise` or expression evaluation semantics. 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 names a specific operation — evaluate several named expressions — and explicitly promises a name-to-result map. It distinguishes itself from single-expression evaluation tools by emphasizing the batch, single-round-trip behavior.
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 use case: sample a lot of app state at once instead of paying a round trip per question. It doesn't explicitly name an alternative like console_evaluate or state when not to use it, but the intended context is well defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_ask_userA
Ask the human to do something in the browser, and show the request in the on-page badge with a confirmation button. Returns immediately — poll session_poll_user_action for the outcome. Also relay the instruction in your reply, so it is visible whether or not they are looking at the browser window.
| Name | Required | Description | Default |
|---|---|---|---|
| wait_for | No | What counts as done. 'confirmation' — the on-page button — is the only unambiguous one. | confirmation |
| instruction | Yes | Exactly what the person should do, in one sentence. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavioral traits, and it does so strongly. It reveals the non-blocking nature ('Returns immediately'), the required polling follow-up, the on-page badge UI, and the need to relay the instruction in the reply. These are behaviors not inferable from the schema and essential for correct usage.
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 sentences, each earning its place: the first states purpose and UI, the second conveys async behavior and polling target, and the third mandates relay behavior. Information is front-loaded, with the core ask in the first sentence and no redundant or filler content.
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 description is fully adequate for a two-parameter tool: parameters are fully documented by the schema, and the description explains the async outcome pattern, the badge UI, and the agent-side relay requirement. It covers everything an agent needs to invoke the tool correctly and handle the follow-up step, despite the absence of an output 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 the baseline is 3. The description mentions 'confirmation button' which aligns with the wait_for enum's 'confirmation' option and 'instruction' schema text already states 'Exactly what the person should do, in one sentence.' The description does not add meaningful parameter-level detail beyond what the schema already 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 begins with a specific verb-resource pair: 'Ask the human to do something in the browser,' and further distinguishes it from notification tools by specifying it 'show[s] the request in the on-page badge with a confirmation button.' This makes the tool's unique role clear and differentiates it from sibling tools like notify_user and session_poll_user_action.
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 provides clear context for use: it is for asking a human to act in the browser and uses a badge with a confirmation button. It also gives explicit follow-up guidance: 'Returns immediately — poll session_poll_user_action for the outcome' and instructs the agent to relay the instruction in the reply. However, it does not explicitly state when not to use this tool or mention an alternative such as notify_user, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_endA
Close the session and return a summary. Does not detach — call devtools_disconnect to release the tab and clear breakpoints when you are finished with the browser entirely.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It usefully clarifies that session_end does NOT detach the tab or clear breakpoints, and notes that a summary is returned. However, it does not disclose whether the session becomes unusable after closing, whether it is irreversible, or what the summary contains.
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 wasted words. The primary action is front-loaded, and the important non-detach caveat plus the alternative tool are provided in the second sentence.
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 tool with no output schema, the description is complete: it explains the action, the return value, and the key behavioral boundary (does not detach), and directs the agent to the correct sibling when a different outcome is needed.
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 has zero parameters and the schema is fully covered at 100%, so there is nothing for the description to explain. The baseline for zero-parameter tools is 4, and the description adds no conflicting or confusing parameter information.
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 ('Close'), resource ('session'), and expected outcome ('return a summary'). It also differentiates from the sibling devtools_disconnect by explicitly saying it does not detach, so the agent can tell the two apart immediately.
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 clear usage context: call session_end to close a session and get a summary, and use devtools_disconnect instead when done with the browser entirely. This is an explicit when-to-use versus when-not-to-use contrast with the relevant alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_get_activityA
Unified timeline of everything observed in this session — console output, requests, navigations, dialogs, clicks, pauses and handovers, in order. Use it to reconstruct what happened when a step behaved unexpectedly.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum entries. | |
| since | No | ISO timestamp lower bound. | |
| types | No | Restrict to these activity types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears the full burden of behavioral disclosure. It transparently explains that the tool returns a chronological timeline of mixed event types and names those types. It does not mention retention limits or response format details, but for a read-only history retrieval tool this is reasonable.
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, no filler: the first sentence defines the tool's scope and output, and the second states the intended use case. Both sentences earn their place, and the key information is front-loaded.
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 optional-parameter retrieval tool with a rich sibling set, the description is mostly complete: it names the returned content, ordering, and use case. It could add a bit more about the return entry structure, but the absence of an output schema is not critical when the semantics are clear from the name and supporting 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 the parameters need no elaboration in the description. The description adds contextual meaning about what the timeline contains but does not need to explain limit, since, or types because the schema already covers them adequately.
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, useful purpose: a unified, ordered timeline of session activity including specific event categories. It clearly distinguishes itself from focused siblings like console_get_logs or network_get_requests by emphasizing breadth and chronological ordering.
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 explicitly advises using this tool to reconstruct what happened when a step behaved unexpectedly, which gives clear contextual guidance. It does not mention when to prefer the more specialized sibling tools, but the primary use case is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_get_stateA
One snapshot of console output, network requests and DOM mutations together, instead of three separate calls. Pass the cursors back on the next call to get only what is new. This is the cheapest way to see the effect of an action.
| Name | Required | Description | Default |
|---|---|---|---|
| log_limit | No | Maximum console entries. | |
| mut_limit | No | Maximum DOM mutation records. | |
| net_limit | No | Maximum network requests. | |
| log_cursor | No | Only console entries newer than this seq. | |
| net_filter | No | Only requests whose URL contains this. | |
| errors_only | No | Restrict console to warnings and errors, and network to failures. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses a genuinely non-obvious behavior: the tool is cursor-based and stateful ('Pass the cursors back on the next call to get only what is new'), enabling incremental polling, and 'snapshot' implies a non-destructive read. However, it does not disclose whether an active session is required, what happens without one, or how the response/cursors are structured, and there is no output schema to cover that 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?
Three sentences, front-loaded with the core purpose first, then the cursor protocol, then the cost-based usage rationale. Every sentence earns its place; the 'cheapest' claim doubles as usage guidance rather than fluff.
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?
Given no annotations and no output schema, the description carries a heavy burden and it covers the core concept, the incremental pattern, and the efficiency rationale. It leaves gaps: whether an active session is a prerequisite, the shape of the returned snapshot (where cursors appear), and explicit naming of the three per-channel alternatives. Sufficient for a safe first call, but not complete guidance.
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 and the schema already documents all six parameters. The description adds modest connective meaning by explaining the incremental pattern behind the cursor parameters, though it does not re-explain individual fields. Minor friction: the description says 'the cursors' (plural) while the schema exposes only log_cursor as an input.
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 action and resource: it produces 'one snapshot of console output, network requests and DOM mutations together'. It distinguishes itself from siblings by explicitly offering the combined view 'instead of three separate calls', which maps to console_get_logs, network_get_requests and dom_get_mutations in the sibling list, so an agent can tell this tool apart without opening schemas.
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 clear usage context: use this to observe 'the effect of an action' and because it is 'the cheapest way' compared to making three separate calls. The cursor sentence further defines the expected call pattern for successive retrieval. It stops short of explicit when-not guidance, such as preferring console_get_logs/network_get_requests/dom_get_mutations when only a single channel is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_get_statusA
Where the session plan stands: the goal, each step's status, which step is current, and whether a human handover is outstanding.
| 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 burden of showing this is a read-only inspection: 'Where the session plan stands' conveys a status query rather than a mutation. However, it does not explicitly state that it has no side effects, nor what happens when no session exists or a handover is pending.
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 phrases each piece of returned information compactly. The core meaning, 'where the session plan stands', is front-loaded.
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 status getter with no output schema, the description adequately enumerates the expected return content: goal, per-step status, current step, and outstanding handover. It is not exhaustive about edge cases or relation to session_get_state, but it is sufficient for a basic 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 the description does not need to detail arguments. The absence of an input schema is therefore not a gap.
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 identifies the tool as a status read for the session plan and lists the specific data returned: goal, step statuses, current step, and human-handover flag. It distinguishes this from generic session tools by focusing on the plan's step-level state, though it uses a noun phrase rather than a verb and does not explicitly contrast with session_get_state.
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 is given about when to call this tool versus session_get_state, session_get_activity, or sessions_list. The description implies a status-check use case but provides no exclusions, prerequisites, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_get_user_actionsA
What the human has done in the browser — clicks, typed values, chosen options, submissions — and the element each one touched. Works whether or not you asked, so unprompted help is still readable. Pass the cursor back for only what is new. Values are captured during a handover or takeover; sensitive fields stay redacted.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | Restrict to these kinds, e.g. ['click','input_change','option_chosen']. | |
| limit | No | Maximum actions to return. | |
| cursor | No | Only actions newer than this seq. 0 for everything retained. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the behavioral burden. It discloses that sensitive fields are redacted, values are only captured during handover/takeover, and unprompted actions are still readable. It does not state side-effect characteristics, but the 'get' semantics and history focus make those less critical.
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?
Four short sentences, no fluff, and each sentence carries valuable context: what is returned, unprompted availability, cursor pagination, capture timing, and redaction. The most important statement is front-loaded.
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 covers the essential contract: action kinds, element association, redaction, and cursor-based pagination. It does not spell out exact response fields, but for a read-only history getter the description provides enough detail for an agent to select and call it 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?
All three parameters already have clear descriptions in the schema: kinds examples, limit constraints, and cursor behavior. The description adds conceptual context like 'typed values, chosen options' and cursor-as-new-only, but it mostly reinforces what the schema already communicates, so no strong bump above 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?
Description states exactly what the tool returns: user actions in the browser (clicks, typed values, chosen options, submissions) and the element each action touched. It also distinguishes itself from sibling tools by noting it works whether or not it was prompted, making it readable even for unprompted help.
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?
Description gives clear usage context: use this when you need to see what the human did, even if you didn't explicitly ask. It also explains cursor usage for incremental reads. It does not name alternative sibling tools explicitly, but the unprompted work note is strong enough guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_poll_user_actionA
Check whether the human has completed what session_ask_user requested. Returns acted:false while waiting. Poll at a human pace — a few seconds apart — rather than in a tight loop.
| 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 disclosure burden. It does reveal the key return behavior ('Returns acted:false while waiting') and advises against tight-loop polling. However, it does not describe what a successful completion response looks like, whether the call blocks or returns immediately, or any error or timeout behavior, leaving some important behavioral context unspecified.
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 two concise sentences with no filler. It front-loads the core purpose, then delivers return behavior and polling guidance in an efficient, scannable format. 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?
For a simple, zero-parameter polling tool with no output schema, the description covers the essential operational context: what it checks, what acted:false means, and how often to call it. It does not specify the full return shape or how to retrieve the actual action results, but the tool is simple enough that this is 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 has zero parameters, so the schema fully covers parameter semantics. The description does not need to add parameter details, and the baseline of 4 for a no-parameter tool 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 action—check whether the human has completed what session_ask_user requested—and clearly identifies the resource being polled. It distinguishes itself from the related ask_user workflow by focusing on the poll-for-completion role, making its purpose immediately understandable.
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 clear context for when to use this tool: after session_ask_user has been called, to check human completion. It also provides explicit cadence guidance ('a few seconds apart rather than in a tight loop'), but it does not explicitly mention alternatives or when not to use it, such as using session_get_user_actions to retrieve the actual action details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sessions_listA
Show every DevCDP session currently running on this machine and the tabs each one holds. Use it to understand why a tab is unavailable, or to confirm two agents are not fighting over the same page.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral disclosure burden. It indicates a read-only listing operation via 'Show', scopes results to currently running sessions on this machine, and links results to diagnostic uses. However, it does not explicitly state side effects, data freshness, or structural behavior beyond listing.
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 two sentences with no filler. The first sentence states what the tool does, and the second gives practical guidance, both earning their 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 zero-parameter listing tool with no output schema, the description provides a complete enough picture: what is returned (sessions and tabs) and when to use it. It does not detail the exact response shape, but that is less critical given the simplicity of the 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?
This tool has zero parameters, so there is no schema burden. The description still clarifies what the returned data represents (sessions and their tabs), which is useful despite the empty input 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 uses a specific verb ('Show') and resource ('every DevCDP session currently running on this machine and the tabs each one holds'), making the tool's scope immediately clear. It also differentiates itself from sibling tools like list_tabs by emphasizing the all-sessions-on-machine view rather than a single context.
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 explicitly provides two concrete use cases: understanding why a tab is unavailable and confirming whether two agents are fighting over the same page. It does not mention when not to use the tool or name alternative sibling tools, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_startA
Open a debugging session with a goal and an ordered list of steps, so progress is tracked and a failed step can fall back to asking the human. Use it for multi-step reproductions; a single-question investigation does not need it.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | What you are trying to find out or prove. | |
| steps | Yes | Ordered steps, each { id, description, actor }. actor is 'agent', 'user' or 'either'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full disclosure burden. It clearly discloses that calling this tool opens a tracked session and that failed steps can fall back to asking the human. It does not mention whether an existing session is replaced or what the function returns, but the main stateful behavior is transparent.
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 two sentences with no filler: one defines what the tool does, and the other gives the usage boundary. It is well structured and front-loaded.
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 session-start tool with two required parameters, the description sufficiently explains its purpose, inputs, and applicability. The main omission is return-value or reentry behavior, but the schema and sibling session tools provide enough surrounding 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 the parameters are already fully documented. The description adds only the framing that steps are ordered, which reinforces rather than extends the schema. This matches the baseline of 3.
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 action and resource: 'Open a debugging session with a goal and an ordered list of steps.' It also distinguishes the tool from lighter-weight investigations by explaining that it tracks progress and supports fallback to asking the human.
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?
Explicit usage guidance is present: 'Use it for multi-step reproductions; a single-question investigation does not need it.' This clearly tells the agent when to invoke the tool and when to skip it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_step_doneA
Mark the current step complete with what you found, and advance. Returns the next step, or allDone when the plan is finished.
| Name | Required | Description | Default |
|---|---|---|---|
| result | No | What this step established — a real observed value, not a guess. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
由于无注释,描述承担了行为揭示的全部责任。这是正面的:它陈述了这是一项修改性的状态推进操作('Mark...complete'、'advance'),并给出了结果状语。但该描述未提及其他的副作用(例如,该操作不可逆吗?原本的步骤是否被永久覆盖?)也没有透露状态型或会话层的前置条件(例如,是否需要同步存在 session_start 或当前步骤)。它具有一定的透明度,但有所保留。
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?
该描述由两句话构成,恰当紧凑,且功能说明被优先放置。不存在冗余:它将动作(标记完成并推进)、参数的角色(附带你的发现),以及返回值(下一步或 allDone)都包含其中,而没有一句冗余。
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?
对于只带一个参数且无输出模式的工具,描述覆盖了主要的调用语义:何时使用该工具以及返回内容。然而它遗漏了关键前置条件——未说明需要一个活动会话或已存在当前步骤——且'next step'的具体形式(如步骤ID、步骤对象或文本)并未被定义,使得返回值在一定程度上是不确定的。它足以支撑基本调用,但不足以支撑完整理解。
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?
输入模式的描述覆盖率为100%,并且模式中已经将'result'参数刻画为'What this step established — a real observed value, not a guess.' 该描述只是以'with what you found'重新复述了这一概念,并未增加任何语义。它还留下了一些隐式的不一致:描述强调要提供一个 result,但模式中该参数却是可选的(required:0)。该项信息停留在原有模式内容层面上。
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?
该描述使用明确的动词、资源和作用对象:'Mark the current step complete' 和 'advance',并说明了返回行为(下一步或 allDone)。这对工具的核心功能给出了清晰定义,但它并未提名任何兄弟工具来辅助区分(例如 session_step_failed),因此以4分被扣留。
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?
该描述隐含了使用场景:当代理已成功完成某一步,并开启后续步骤时。它隐含地将'完成'与失败的操作相对照(如 session_step_failed),但从未明确说明备选方案何时适用,也未列出任何前置条件(例如,必须当前有一步正在进行)。该指引是推断性的,而非显式。
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_step_failedA
Report that you cannot complete the current step yourself. Checks memory for a known recovery first, then tells you how to hand over to the human. Use it for anything automation genuinely cannot do — a login you have no credentials for, a challenge, a physical device.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why the step could not be completed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses useful behavior: checks memory for a known recovery first, then tells the agent how to hand over to the human. It does not fully explain side effects like whether a failure is recorded, but the disclosed flow is meaningful.
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 concise sentences, each earning its place: purpose, behavior, and usage context. The primary action is front-loaded and no redundant detail is included.
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 tool with full schema coverage and no output schema, the description is complete. It covers purpose, underlying behavior, when to use it, and realistic examples, giving an agent enough context to select and invoke it 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% and the single 'reason' parameter is already documented as 'Why the step could not be completed.' The description adds no additional parameter semantics, so the baseline score of 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: 'Report that you cannot complete the current step yourself.' It clearly distinguishes the tool from siblings like session_step_done by emphasizing the inability to complete the step and the handover to a human.
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?
Provides an explicit use case: 'Use it for anything automation genuinely cannot do' with concrete examples. It implies when not to use it (automation can do the step), but does not explicitly name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
source_get_fileA
Read an original pre-bundling source file via the page's source maps. Falls back to the loaded script when no map is available, and always tells you which of the two you got, so a bundle line is never mistaken for an original one.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Original file path or a suffix of it, e.g. 'components/SaveButton.tsx'. | |
| end_line | No | Last line to return (1-based). | |
| start_line | No | First line to return (1-based). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently explains the fallback to the loaded script when no source map is available and the guarantee that the caller is told which of the two was returned, preventing confusion between bundle and original lines. This is meaningful behavioral context beyond a bare 'read' statement, though it does not touch on other traits like error handling 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?
Two sentences with no wasted words. The primary action is front-loaded, and the second sentence adds valuable fallback and disambiguation behavior in a compact way. Every phrase 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?
Given there is no output schema, the description usefully hints at the response by explaining that the tool always indicates which of the two sources (original vs loaded) was returned. Combined with the schema's full parameter documentation, an agent has enough to invoke the tool correctly and interpret the result. Minor gaps like exact return structure or error behavior exist, but they are not critical for calling 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?
The input schema already documents all three parameters with descriptions, so schema coverage is 100%. The description does not add extra meaning to path, start_line, or end_line beyond what the schema states, so the baseline of 3 applies. No parameter information is missing that the description needs 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?
The description opens with a specific verb ('Read') and a specific resource ('original pre-bundling source file via the page's source maps'), clearly distinguishing it from siblings like source_get_script, which presumably returns the loaded script. The fallback clause further reinforces the difference between original and bundle content. An agent can tell this tool apart from neighboring source tools without opening their schemas.
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 implies when to use this tool: when you need the original pre-bundling source rather than the loaded script. However, it does not explicitly name alternative tools or state when not to use it, leaving the routing decision partly to inference. The fallback note is behavioral context rather than a direct usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
source_get_scriptA
Read the source Chrome actually loaded, by scriptId or URL substring, optionally a line range. Lines come back numbered so the numbers you quote to a breakpoint are the numbers you saw.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL substring identifying the script. | |
| end_line | No | Last line to return (1-based). | |
| script_id | No | scriptId from source_list_scripts. | |
| start_line | No | First line to return (1-based). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it adds meaningful behavioral detail: it reads the 'actually loaded' source (not the file), and returned lines are numbered consistently with breakpoint quoting. This is enough for a simple read operation.
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 focused sentences that front-load the core purpose and the most important behavioral guarantee (line numbers match breakpoints). 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?
For a read-only, 4-optional-parameter tool with no output schema, the description covers selection, line range, and return-values behavior concisely. It could additionally clarify behavior when both script_id and url are provided, and what happens with no matches, but nothing essential 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 description coverage is 100%, so the baseline is 3. The description broadly maps scriptId/URL substring/line range to the parameters, but adds only minimal semantic value beyond the schema's existing per-parameter descriptions.
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 ('Read'), the resource ('source Chrome actually loaded'), and the selection methods (scriptId or URL substring, optional line range). This clearly separates it from sibling tools like source_list_scripts and source_get_file.
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 clear context for when to use the tool: to read the actual loaded script source rather than what's on disk, and you can identify it by scriptId or URL. It does not explicitly name alternatives or exclusion cases, but the usage scenario is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
source_list_filesA
List the original source files recoverable from the page's source maps — the pre-bundling file tree. Use it to discover real file paths before calling source_get_file or setting a breakpoint on an original file.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum paths to return. | |
| filter | No | Only paths containing this substring. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that listed files are 'recoverable from source maps' and represent the 'pre-bundling file tree', which sets expectations about scope. But it does not mention behavior when source maps are absent, ordering, or whether all recoverable files are included.
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 with no fluff. The first defines the operation and the second supplies the usage context. Both sentences earn their place and the key information is front-loaded.
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 list tool with two optional, well-documented parameters and no output schema, the description covers purpose, scope, and use-case. It could be more explicit about return format or handling of missing source maps, but nothing critical 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% and the schema descriptions for limit and filter are already clear ('Maximum paths to return', 'Only paths containing this substring'). The tool description adds no additional parameter meaning, 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 opens with a specific verb and resource: 'List the original source files recoverable from the page's source maps — the pre-bundling file tree.' It clearly differentiates this from sibling tools by framing it as a discovery step before source_get_file or setting a breakpoint, so an agent knows its role immediately.
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 explicit guidance: 'Use it to discover real file paths before calling source_get_file or setting a breakpoint on an original file.' This states when to use the tool and positions it relative to downstream actions, though it does not name alternatives it is better than.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
source_list_scriptsA
List the JavaScript files loaded in the page, with size and whether each has a source map. This is indexed the moment DevCDP attaches, so it works on a page that was already open. Filter by URL substring to find the file you need before setting a breakpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum scripts to return. | |
| filter | No | Only scripts whose URL contains this substring. | |
| with_source_maps | No | Only scripts that carry a source map. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses that the index is captured when DevCDP attaches, which is a meaningful timing trait, and it correctly implies a read-only listing operation. It could add more about whether the list updates dynamically, but the provided timing context is a solid addition.
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 concise sentences with no fluff. The core action and return info come first, then the timing nuance, then a practical usage pointer. 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?
The tool is simple, has no required parameters, and the description covers what is listed and why. Since there is no output schema, the description's mention of size and source map helps fill the return-value gap. Missing details like dynamic runtime script inclusion are minor for this use case.
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 the schema already documents limit, filter, and with_source_maps. The description adds a small behavioral clue for filter ('URL substring') and application context, but it does not materially expand parameter semantics 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 clearly states the tool lists JavaScript files loaded in the page and specifies what information is returned (size, source map presence). It is specific enough to distinguish it from broad debugger or navigation tools, though it does not explicitly differentiate it from sibling source_list_files or source_get_script.
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 useful context for when to use it—before setting a breakpoint, and notes it works on already-open pages. However, it does not mention alternatives or any conditions where another tool should be used instead, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
source_searchA
Search the text of every loaded script — and every original file recoverable from source maps — for a string or regular expression. This is the fastest way to locate a handler when you know a function name, a message or a field name but not the file. Returns file, 1-based line and the matching line.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Text or regular expression to find. | |
| regex | No | Treat query as a regular expression. | |
| url_filter | No | Only search scripts whose URL contains this. | |
| ignore_case | No | Case-insensitive search. | |
| max_results | No | Stop after this many matches. | |
| context_chars | No | Characters of the matching line to return. | |
| include_original_sources | No | Also search original files from source maps. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It reveals that search covers both loaded scripts and source-map-recoverable original files, and specifies the return shape: file, 1-based line, and matching line. It does not discuss regex failure modes or result limits in prose, but the read-only nature is clear and the schema covers result-limiting parameters.
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 tightly written sentences: the first conveys action and scope, the second gives the use case and return values. Every sentence earns its place, and the most important operational detail (search scope) is front-loaded.
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 search tool with fully documented parameters, the description supplies the missing context: the intended use case, the source scope, and the output. Even without an output schema or annotations, an agent has enough information to decide when to invoke it and what to expect back.
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 and the description does not need to repeat parameter details. It adds only minor semantic reinforcement by mentioning that the query can be a string or regular expression, which is already reflected in 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 names a specific verb ('Search'), the exact resource ('text of every loaded script...and every original file recoverable from source maps'), and the accepted input ('string or regular expression'). It clearly differentiates this search tool from sibling list/get source tools by emphasizing discovery when the file is unknown.
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 explicitly states when to use this tool: 'fastest way to locate a handler when you know a function name, a message or a field name but not the file.' It implies alternatives like source_get_script or source_get_file when the file is known, though it does not name them explicitly or list exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_checkA
Set a checkbox or radio to a specific state, rather than toggling it blindly. Reads the current state first and clicks only if it differs, so calling it twice does not undo the first call — the usual way a 'toggle' helper leaves a form in the wrong state.
| Name | Required | Description | Default |
|---|---|---|---|
| nth | No | Which match to use when several qualify, 0-based. | |
| role | No | Narrow the matches to this ARIA role. | |
| text | No | Visible text on the control. Matches the innermost element that carries it, and follows a <label> to its input. | |
| exact | No | Require the whole text to match rather than a substring. | |
| frame | No | 'main' (default) or a substring of a frame's origin/name. Single-page apps often render the screen you want in a child frame. | main |
| testid | No | Value of a test attribute (data-testid and friends — see the testAttributes setting). | |
| checked | No | The state you want. | |
| selector | No | CSS selector. Descends into open shadow roots. | |
| timeout_ms | No | How long to wait for the element to become actionable before giving up. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and delivers: it reads the current state first, clicks only if it differs, and is therefore idempotent across repeated calls. This is exactly the behavioral insight an agent needs to avoid double-calling and to predict the outcome of a second invocation, going well beyond any structured field.
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 with zero filler: the first front-loads the action and operand scope, the second explains the mechanism and the pitfall it avoids. Every clause earns its place, including the concrete example of why a naive toggle fails.
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 purpose, operand scope, and the crucial idempotency behavior. The remaining gaps are minor: return values, timeout/no-match failure behavior, and explicit routing among the many sibling ui_* tools.
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% — all 9 parameters carry individual descriptions — so the baseline of 3 holds even though the tool description itself adds no per-parameter meaning. The central 'checked' parameter is adequately covered by the schema ('The state you want'), consistent with the declared purpose.
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 — 'Set a checkbox or radio to a specific state' — and contrasts with 'toggling blindly', distinguishing it behaviorally from generic click/toggle helpers among the siblings (notably ui_click). The purpose is unmistakable before reading 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?
The description gives clear context for when this tool is the right choice: when a control must reach a deterministic state, and why it beats a 'toggle' helper that can leave the form in the wrong state. It doesn't explicitly name an alternative tool or state exclusions (e.g., 'use ui_click for non-form controls'), so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_clickA
Click an element, identified by CSS selector, visible text or test id. Waits until it is actually clickable — rendered, enabled, stopped moving, and not covered by anything — then dispatches real (trusted) mouse events, and reports what the click caused: requests fired, console errors, whether the DOM changed at all. If it never became clickable it says which of those conditions failed and what was in the way.
| Name | Required | Description | Default |
|---|---|---|---|
| nth | No | Which match to use when several qualify, 0-based. | |
| role | No | Narrow the matches to this ARIA role. | |
| text | No | Visible text on the control. Matches the innermost element that carries it, and follows a <label> to its input. | |
| exact | No | Require the whole text to match rather than a substring. | |
| force | No | Skip the hit-test and click the centre regardless of what is on top. A last resort — it is how you click the wrong thing. | |
| frame | No | 'main' (default) or a substring of a frame's origin/name. Single-page apps often render the screen you want in a child frame. | main |
| button | No | Which mouse button. | left |
| testid | No | Value of a test attribute (data-testid and friends — see the testAttributes setting). | |
| selector | No | CSS selector. Descends into open shadow roots. | |
| modifiers | No | Held while clicking: shift, ctrl, alt, meta. | |
| timeout_ms | No | How long to wait for the element to become actionable before giving up. | |
| click_count | No | 2 for a double-click. |
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 delivers substantially: it discloses the waiting semantics (rendered, enabled, stopped moving, not covered), that it dispatches real trusted mouse events, what the click reports (requests fired, console errors, DOM changes), and the failure mode (which condition failed and what was in the way). It does not warn that trusted clicks can trigger navigation, dialogs, or state changes, which is a notable side-effect disclosure for a no-annotation 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?
Three dense sentences with the core action and identification front-loaded first, followed by the wait-and-report behavior and then the failure fallback. Every sentence earns its place — it is moderately long but contains no fluff or repetition of schema content.
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 12-parameter tool with no annotations and no output schema, the description is unusually complete: it covers identification, clickability semantics, event fidelity, return information, and failure diagnostics. Remaining gaps are minor and schema-covered, such as frame-specific behavior and how the force parameter interacts with the clickability guarantee.
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 of 3 applies — every one of the 12 parameters is already documented in the schema. The description adds some semantic framing by mapping 'CSS selector, visible text or test id' onto selector/text/testid and by defining 'clickable,' which gives meaning to timeout_ms, but it provides no syntax or format details beyond what the schema already contains.
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 opens with a specific verb and resource — 'Click an element, identified by CSS selector, visible text or test id' — which unambiguously states the action and the identification strategies. The additional detail on the clickability wait and outcome reporting further separates it from interaction siblings like ui_hover, ui_press, and ui_drag, even without naming 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?
Usage is implied rather than explicit: the tool is for clicking elements and waiting until they are truly actionable, which suggests it is the right choice for finicky click targets. However, with more than a dozen ui_* interaction siblings (hover, press, fill, type, select, check, drag, scroll, upload), the description gives no when-to-use, when-not-to-use, or alternative routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_dragA
Drag one element onto another — reordering rows, moving a card between columns, resizing a split. Dispatches a real press, several intermediate moves and a release, because drag implementations almost always ignore a press followed immediately by a release somewhere else.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Visible text of what to drag. | |
| frame | No | 'main' (default) or a substring of a frame's origin/name. | main |
| steps | No | Intermediate move events. More is slower but survives pickier drag handlers. | |
| testid | No | Test id of what to drag. | |
| to_text | No | Visible text of where to drop it. | |
| selector | No | CSS selector for what to drag. | |
| to_testid | No | Test id of where to drop it. | |
| timeout_ms | No | How long to wait for either element to become actionable. | |
| to_selector | No | CSS selector for where to drop it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It transparently explains that the tool dispatches a real press, several intermediate moves, and a release, and why that sequence matters. This is valuable 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?
Two sentences, both purposeful. The first states what the tool does with concrete use cases; the second explains the behavioral mechanism and its rationale. No 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 an action-oriented tool with no output schema, the description plus fully documented 9-parameter schema is largely complete. It covers the drag lifecycle and target/source concept. A minor gap is that it does not describe what is returned or how success is reported, but this is not critical for a UI interaction 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?
The schema already provides 100% parameter coverage with detailed descriptions, defaults, and ranges, so the baseline is 3. The tool description adds no parameter-specific details, but it is not necessary given the schema's completeness.
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 action (drag one element onto another) with concrete examples (reordering rows, moving cards, resizing a split). It clearly identifies the resource and operation, though it does not explicitly contrast itself with sibling UI tools like ui_click or ui_hover.
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 examples imply when to use the tool, but there is no explicit guidance on when not to use it or which alternative to prefer. The phrase 'drag implementations almost always ignore...' gives rationale rather than usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_fillA
Set the value of a text field, textarea or contenteditable in one step, and fire the input and change events the application listens for. Fast, because it does not type character by character — use ui_type instead when the field reacts to each keystroke, such as a typeahead or an autocomplete.
| Name | Required | Description | Default |
|---|---|---|---|
| nth | No | Which match to use when several qualify, 0-based. | |
| role | No | Narrow the matches to this ARIA role. | |
| text | No | Visible text on the control. Matches the innermost element that carries it, and follows a <label> to its input. | |
| exact | No | Require the whole text to match rather than a substring. | |
| frame | No | 'main' (default) or a substring of a frame's origin/name. Single-page apps often render the screen you want in a child frame. | main |
| value | Yes | The text to put in the field. Pass an empty string to clear it. | |
| submit | No | Press Enter afterwards. | |
| testid | No | Value of a test attribute (data-testid and friends — see the testAttributes setting). | |
| selector | No | CSS selector. Descends into open shadow roots. | |
| timeout_ms | No | How long to wait for the element to become actionable before giving up. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It does this well by stating that the tool fires the 'input' and 'change' events the application listens for, and that it is fast because it bypasses per-keystroke typing. It does not mention return/error behavior or permission requirements, but the core hidden behavior is disclosed.
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 deliver the action, the side effect, the performance characteristic, and the alternative tool. There is no filler, and the most important behavioral facts are front-loaded.
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 tool with 10 parameters and no output schema, the description covers the primary behavior, event side effects, and sibling differentiation, while the schema covers parameter semantics. It leaves return-value and failure-mode behavior to inference, which is a minor gap given the otherwise rich schema and clear description.
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 explains every parameter. The description reinforces the meaning of 'value' by saying it sets the field's value and fires events, but it does not add material parameter-level detail beyond what the schema provides. The baseline of 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 opens with a specific verb and resource: 'Set the value of a text field, textarea or contenteditable in one step'. It also explicitly contrasts with ui_type by noting this tool does not type character by character, so an agent can distinguish it from its closest sibling without opening schemas.
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 an explicit routing rule: use ui_type instead when a field reacts to each keystroke, such as a typeahead or autocomplete. This tells the agent both when to use this tool and when to prefer an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_hoverA
Move the pointer over an element and leave it there. Use before clicking anything that only appears on hover — dropdown menus, row action buttons, tooltips — because those elements do not exist to click until something is hovering over their parent.
| Name | Required | Description | Default |
|---|---|---|---|
| nth | No | Which match to use when several qualify, 0-based. | |
| role | No | Narrow the matches to this ARIA role. | |
| text | No | Visible text on the control. Matches the innermost element that carries it, and follows a <label> to its input. | |
| exact | No | Require the whole text to match rather than a substring. | |
| frame | No | 'main' (default) or a substring of a frame's origin/name. Single-page apps often render the screen you want in a child frame. | main |
| testid | No | Value of a test attribute (data-testid and friends — see the testAttributes setting). | |
| selector | No | CSS selector. Descends into open shadow roots. | |
| timeout_ms | No | How long to wait for the element to become actionable before giving up. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It states both the action and the resulting state ('leave it there') and explains why hover must precede certain clicks. It could add more about timing or side effects, but the core behavior is clearly conveyed.
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, no filler. The first sentence states the action, and the second provides the crucial usage rationale and examples. Every word 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?
The description covers the essential when and why for a hover tool, and the schema covers all parameters. It does not explain return values, but there is no output schema and hover tools generally don't need elaborate return-value documentation.
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 input schema already documents all 8 parameters. The description adds no parameter-specific meaning, which is acceptable because the schema fully covers them.
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 uses a specific verb and resource: 'Move the pointer over an element and leave it there.' It clearly differentiates hover from click by explaining that hover-only elements do not exist until the pointer is over their parent, which sets it apart from sibling tools like ui_click.
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 explicitly says when to use the tool: 'before clicking anything that only appears on hover' and gives concrete examples like dropdown menus, row action buttons, and tooltips. It does not explicitly name alternatives or list when not to use it, but the context is clear enough to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_inspectA
List what can be interacted with on the current screen — buttons, links, inputs, selects and anything with an interactive ARIA role — with the target you would use to reach each one. Use it when a selector fails and you need to see what is really there. Far cheaper than dumping the DOM, and it names elements the way these tools expect them to be named.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Restrict to one family of control. | all |
| frame | No | 'main' (default) or a substring of a frame's origin/name. | main |
| limit | No | Maximum controls to return. | |
| filter | No | Only controls whose text, id or name contains this. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It signals a read-only operation via 'List', and adds practical behavioral context: the cost relative to DOM dumping and the fact returned targets match how other tools expect elements to be named. It does not go into frame handling or pagination, but those are documented in the schema and this is still enough for safe use.
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 three short sentences with no filler. The core purpose is front-loaded, and each sentence earns its place: what it returns, when to use it, and why it is preferable to the alternative.
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 inspection tool with a well-covered schema and no output schema, the description gives enough context to select and invoke it correctly. It states the output concept (targets for interaction) and the usage trigger, though it stops short of describing the exact return structure or how it behaves across frames.
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 parameters are already well documented and the description need not repeat them. The prose does add mild value by aligning the listed element families with the kind enum, but it doesn't meaningfully enhance understanding of frame or limit semantics 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 opens with a specific verb and resource: listing what can be interacted with on the current screen, and enumerates the element families included. By adding the target handle semantics, it clearly differentiates itself from both DOM inspection tools and UI action tools like ui_click or ui_fill.
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 explicitly states when to use the tool ('when a selector fails and you need to see what is really there') and contrasts it with a heavier alternative ('Far cheaper than dumping the DOM'). It also explains why the tool's naming style matters for downstream tools, giving an agent clear routing guidance without opening schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_pressA
Press a key — Enter to submit, Tab to move on, Escape to dismiss, arrows to move through a list or grid. Optionally focuses an element first. This is the tool for keyboard-driven screens, where clicking the control is not how the application expects to be used.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key name: Enter, Tab, Escape, Backspace, Delete, ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Home, End, PageUp, PageDown, Space. | |
| nth | No | Which match to use when several qualify, 0-based. | |
| role | No | Narrow the matches to this ARIA role. | |
| text | No | Visible text on the control. Matches the innermost element that carries it, and follows a <label> to its input. Optional: focuses this element first. | |
| exact | No | Require the whole text to match rather than a substring. | |
| frame | No | 'main' (default) or a substring of a frame's origin/name. Single-page apps often render the screen you want in a child frame. | main |
| times | No | Press it this many times. | |
| testid | No | Value of a test attribute (data-testid and friends — see the testAttributes setting). Optional: focuses this element first. | |
| selector | No | CSS selector. Descends into open shadow roots. Optional: focuses this element first. | |
| modifiers | No | Held while pressing: shift, ctrl, alt, meta. | |
| timeout_ms | No | How long to wait for the element to become actionable before giving up. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does disclose key effects like submitting, dismissing, and navigating, and notes that an element can be focused first. However, it does not mention waiting behavior, repeated presses, modifier handling, or what happens after a key triggers navigation or a mutation, leaving some behavioral uncertainty.
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 carry the core purpose, examples, optional-focus behavior, and usage context. There is no repetition of schema documentation and no filler; the most important information is front-loaded.
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 tool has 11 parameters and no annotations or output schema, so the description needs to provide enough decision context. It does this well by explaining when keyboard interaction is expected and what pressing keys accomplishes. The schema documents all parameter semantics, so the main remaining gap is lack of detail about post-press behavior and return values, which is minor given the tool's nature.
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 adds semantic value beyond the schema by explaining common key meanings (Enter submits, Tab moves on, Escape dismisses, arrows navigate lists/grids) and by clarifying that focusing an element is optional, which maps to the selector/text/testid 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?
The description opens with a specific verb+resource ('Press a key') and then gives concrete examples of supported keys and their typical effects (submit, dismiss, move through a list). It also differentiates this tool from pointer-based siblings by calling it 'the tool for keyboard-driven screens, where clicking the control is not how the application expects to be used.'
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 clearly states when to use the tool: for keyboard-driven screens rather than clicking a control. It implicitly tells the agent to prefer ui_click for clickable controls, but it does not explicitly compare against related keyboard/input tools such as ui_type or ui_fill.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_scrollA
Scroll the page, or scroll a specific container. Needed before interacting with anything in a virtualised list or grid, where rows outside the viewport do not exist in the DOM at all — scrolling is what creates them.
| Name | Required | Description | Default |
|---|---|---|---|
| dx | No | Horizontal pixels; positive is right. | |
| dy | No | Vertical pixels; positive is down. | |
| to | No | Jump instead of scrolling by an amount. | none |
| text | No | Visible text inside the container to scroll. | |
| frame | No | 'main' (default) or a substring of a frame's origin/name. | main |
| testid | No | Test id of the container to scroll. | |
| selector | No | CSS selector of the container to scroll. Omit to scroll the page. | |
| timeout_ms | No | How long to wait for the container. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses a key non-obvious behavior: scrolling is what creates off-viewport DOM rows in virtualised containers, which directly affects when the agent must call it. It could mention side effects or return behavior, but the core behavioral caveat is covered.
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, no filler, with the primary operation front-loaded and the critical virtualised-list context stated immediately. 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?
Given the rich schema coverage and the lack of an output schema, the description plus schema is sufficient for an agent to invoke scrolling correctly. The virtualisation warning is important context that the schema cannot express. It could slightly expand on failure behavior, but the core invocation context is complete enough.
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 input schema covers 100% of the 8 parameters with meaningful descriptions, so the baseline is 3. The description does not add extra parameter nuance beyond the schema, but it does not need to because the schema is already thorough.
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: scroll the page or a specific container. It also gives a concrete motivating use case—virtualised lists/grids—which makes its purpose unmistakable and distinct from all sibling UI 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?
It clearly says when to use the tool: before interacting with anything in a virtualised list or grid, where off-screen rows are not in the DOM. It does not explicitly name alternatives or when-not cases, but the scroll function is unique among the listed siblings and the guidance is otherwise strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_selectA
Choose an option in a dropdown, by visible label or by value. Handles a native directly; for the custom dropdowns most applications actually use — a div that opens a list — it opens the control and clicks the matching option. Reports the options it could see when nothing matches, which is usually the whole answer.
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | Match the label, the value, or either. | either |
| nth | No | Which match to use when several qualify, 0-based. | |
| role | No | Narrow the matches to this ARIA role. | |
| text | No | Visible text on the control. Matches the innermost element that carries it, and follows a <label> to its input. | |
| exact | No | Require the whole text to match rather than a substring. | |
| frame | No | 'main' (default) or a substring of a frame's origin/name. Single-page apps often render the screen you want in a child frame. | main |
| option | Yes | The option's visible label, or its value attribute. | |
| testid | No | Value of a test attribute (data-testid and friends — see the testAttributes setting). | |
| selector | No | CSS selector. Descends into open shadow roots. | |
| timeout_ms | No | How long to wait for the element to become actionable before giving up. |
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 it delivers: it discloses that custom dropdowns are opened and the matching option clicked, and that the tool reports visible options when nothing matches. This is actionable context beyond the schema, though it does not describe waiting behavior or side effects in 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?
The description is three sentences with no filler: primary action, native-vs-custom handling, and no-match reporting. It is front-loaded and every sentence contributes behavior an agent needs.
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 description covers the core action, the key implementation nuance, and the failure-report behavior, which partially substitutes for the missing output schema. With 10 parameters but full schema coverage, nothing essential to invoking correctly is missing, though more detail on return values or side effects would make it 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%, so the schema already documents all 10 parameters including option, by, exact, and timeout_ms. The description adds useful context about matching by visible label or value and the custom-dropdown click path, but it does not add substantial meaning beyond what the parameter descriptions already provide.
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 action and domain: 'Choose an option in a dropdown, by visible label or by value.' It also distinguishes this tool from generic clicks by explicitly covering native <select> elements and the custom div-based dropdowns most applications use. This makes the tool's purpose clear and separable from siblings like ui_click.
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 clearly frames when to use the tool: whenever a dropdown selection is needed, and it explains how native vs custom dropdowns are handled. It does not explicitly name sibling alternatives or state when not to use it, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_typeA
Type into a field one character at a time, with real key events for each. Slower than ui_fill and necessary exactly when the field reacts per keystroke — search-as-you-type, autocomplete, input masks, and fields that reformat while you type. If ui_fill left the field looking right but the application unaware, use this.
| Name | Required | Description | Default |
|---|---|---|---|
| nth | No | Which match to use when several qualify, 0-based. | |
| role | No | Narrow the matches to this ARIA role. | |
| text | No | Visible text on the control. Matches the innermost element that carries it, and follows a <label> to its input. | |
| exact | No | Require the whole text to match rather than a substring. | |
| frame | No | 'main' (default) or a substring of a frame's origin/name. Single-page apps often render the screen you want in a child frame. | main |
| submit | No | Press Enter afterwards. | |
| testid | No | Value of a test attribute (data-testid and friends — see the testAttributes setting). | |
| delay_ms | No | Pause between keystrokes. Raise it if the field drops characters. | |
| selector | No | CSS selector. Descends into open shadow roots. | |
| timeout_ms | No | How long to wait for the element to become actionable before giving up. | |
| clear_first | No | Select all and delete before typing. | |
| text_to_type | Yes | Characters to type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and it does well by explaining that input is sent one character at a time with real key events and that this is slower. It also implies side effects like autocomplete/input mask reactions, though it doesn't mention return behavior or failure modes.
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 sentences, all front-loaded and purposeful: the core behavior, the key distinguishing trade-off, and a practical pointer for when to switch from ui_fill. No filler or repetition.
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?
Given 12 parameters and no output schema or annotations, the description is largely complete for selection and invocation: it explains what the tool does, when to choose it, and how it differs from the closest sibling. It could add more about return/error behavior, but that is not critical for the core use case.
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 input schema covers 100% of parameters, so the baseline is 3. The description does not add much about individual parameters, though the per-keystroke emphasis helps justify delay_ms indirectly.
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 action and resource: typing into a field one character at a time with real key events. It clearly differentiates from ui_fill by emphasizing per-keystroke behavior and gives concrete matching scenarios like search-as-you-type and input masks.
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 provides explicit when-to-use guidance: use it exactly when the field reacts per keystroke, and use ui_fill otherwise. It also names the alternative tool directly and covers the fallback case where ui_fill appears successful but the app doesn't register the input.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_uploadA
Attach one or more local files to a file input, without opening the operating system's file picker — which automation cannot drive at all. Give the absolute paths of files on the machine running Chrome.
| Name | Required | Description | Default |
|---|---|---|---|
| nth | No | Which match to use when several qualify, 0-based. | |
| role | No | Narrow the matches to this ARIA role. | |
| text | No | Visible text on the control. Matches the innermost element that carries it, and follows a <label> to its input. | |
| exact | No | Require the whole text to match rather than a substring. | |
| files | Yes | Absolute paths to the files to attach. | |
| frame | No | 'main' (default) or a substring of a frame's origin/name. Single-page apps often render the screen you want in a child frame. | main |
| testid | No | Value of a test attribute (data-testid and friends — see the testAttributes setting). | |
| selector | No | CSS selector. Descends into open shadow roots. | |
| timeout_ms | No | How long to wait for the element to become actionable before giving up. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It reveals the key behavior: attaching files without opening the native picker, and requires absolute paths on the machine running Chrome. It does not detail error cases or side effects, but the core behavior is transparent.
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 concise, front-loaded sentences with no wasted words. The primary purpose and critical operational detail (absolute paths, no picker) are immediately clear.
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 nine parameters, and the description supplies the essential context about file location and why the OS picker is avoided. There is no output schema, but the attach action is simple enough that this does not create a meaningful 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?
Schema coverage is 100%, so the baseline is 3. The description reinforces that 'files' requires absolute paths, but this is also already present in the schema. It adds no meaningful semantics for the other eight parameters 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 action ('attach one or more local files to a file input') and a clear resource, distinguishing it from sibling UI interaction tools like ui_fill or ui_type. It also explains the mechanism (bypassing the OS file picker), which is unique to this tool.
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 describes when to use the tool: for file inputs, since the OS file picker cannot be driven by automation. It does not explicitly name sibling alternatives, but the purpose and context make the appropriate use case evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_wait_forA
Block until the page reaches a state: an element appears, disappears, becomes enabled, or some text shows up. This is the honest alternative to guessing a sleep — it returns as soon as the condition holds, and when it does not, it says what the page looked like instead of just timing out.
| Name | Required | Description | Default |
|---|---|---|---|
| nth | No | Which match to use when several qualify, 0-based. | |
| role | No | Narrow the matches to this ARIA role. | |
| text | No | Visible text on the control. Matches the innermost element that carries it, and follows a <label> to its input. | |
| exact | No | Require the whole text to match rather than a substring. | |
| frame | No | 'main' (default) or a substring of a frame's origin/name. Single-page apps often render the screen you want in a child frame. | main |
| state | No | What to wait for: 'visible' (default), 'hidden', 'enabled', 'detached', or 'stable' (present and no longer moving). | visible |
| testid | No | Value of a test attribute (data-testid and friends — see the testAttributes setting). | |
| selector | No | CSS selector. Descends into open shadow roots. | |
| timeout_ms | No | How long to wait for the element to become actionable before giving up. | |
| contains_text | No | Also require the element to contain this text. |
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 so well. It discloses that the tool blocks, resolves as soon as the condition holds, and reports what the page looked like on failure rather than silently timing out. This gives the agent an accurate model of runtime behavior without needing an output 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?
Two sentences accomplish a lot: the first states the core behavior and the conditions, the second adds the key value proposition and failure-mode transparency. Every sentence earns its place, and the most important information is front-loaded.
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?
Despite having 10 parameters, the schema thoroughly documents each one, including defaults, enums, and semantic descriptions. The prose description adds the behavioral context that is missing from the schema: blocking semantics, immediate return on success, and informative failure behavior. Nothing essential is left 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?
Schema description coverage is 100%, so the input schema already documents every parameter in detail. The description adds high-level intent but no parameter-specific meaning beyond what the schema provides, so the baseline score of 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 names a specific action ('Block until the page reaches a state') and spells out the conditions it waits for: appearing, disappearing, becoming enabled, or text showing up. It clearly differentiates this from sibling tools like ui_click or network_wait_for_request by grounding it in UI element state.
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 explicitly positions itself as the 'honest alternative to guessing a sleep', which tells the agent when to use it. It stops short of naming sibling alternatives such as network_wait_for_request for network conditions or dom_query for one-shot checks, so exclusions are 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.
workflow_guideA
How to use DevCDP effectively: the observe/act division of labour, the fastest path from a bug report to an exact line, and the traps worth knowing. Call it once at the start of a debugging session.
| 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 burden of behavioral disclosure. It conveys that this is a one-time, likely read-only guide call, but it does not state what the tool returns, whether it has side effects, or how its output should be used. The 'Call it once' note is useful but leaves the agent guessing about the actual response.
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 two concise sentences with no filler. It front-loads the purpose, gives useful content highlights, and ends with an actionable usage directive. 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?
For a zero-parameter informational tool, the description adequately covers what the guide is about and when to invoke it. It does not describe the output format or explicitly link to sibling documentation tools, but the simplicity of the tool means this is not a critical 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 has zero parameters, and the schema coverage is complete, so parameter-level semantics are not needed. The description adds no parameter detail, but none is required. This matches the baseline expected score for a parameterless tool.
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 clearly identifies the tool as a guide for using DevCDP effectively, covering the observe/act division, debugging workflow, and known pitfalls. It is not a tautology and its role as an orientation/guide tool is distinct from the more granular debugger, DOM, and session tools among the 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?
The description gives explicit when-to-use guidance: 'Call it once at the start of a debugging session.' This tells the agent the tool is an initial orientation step rather than a per-action utility. It does not explicitly mention when not to use it or compare it with docs_search/docs_outline, but the usage context is clear.
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.
73 tool updates
v5.0.0- First observed
api_discover - First observed
app_discover - First observed
console_clear - First observed
console_evaluate - First observed
console_get_logs - First observed
debugger_evaluate_at_frame - First observed
debugger_get_capture - First observed
debugger_get_scope - First observed
debugger_get_state - First observed
debugger_list_breakpoints - First observed
debugger_pause - First observed
debugger_remove_all_breakpoints - First observed
debugger_remove_breakpoint - First observed
debugger_resume - First observed
debugger_set_breakpoint - First observed
debugger_set_breakpoint_at_function - First observed
debugger_step_into - First observed
debugger_step_out - First observed
debugger_step_over - First observed
devcdp_settings - First observed
devcdp_settings_init - First observed
devtools_connect - First observed
devtools_disconnect - First observed
devtools_status - First observed
dialog_detect - First observed
docs_outline - First observed
docs_search - First observed
dom_get_html - First observed
dom_get_mutations - First observed
dom_list_frames - First observed
dom_query - First observed
list_tabs - First observed
memory_get - First observed
memory_import_legacy - First observed
memory_record - First observed
network_clear - First observed
network_get_requests - First observed
network_get_response_body - First observed
network_wait_for_request - First observed
notify_user - First observed
page_interrupt - First observed
page_navigate - First observed
page_reload - First observed
runtime_evaluate_many - First observed
session_ask_user - First observed
session_end - First observed
session_get_activity - First observed
session_get_state - First observed
session_get_status - First observed
session_get_user_actions - First observed
session_poll_user_action - First observed
session_start - First observed
session_step_done - First observed
session_step_failed - First observed
sessions_list - First observed
source_get_file - First observed
source_get_script - First observed
source_list_files - First observed
source_list_scripts - First observed
source_search - First observed
ui_check - First observed
ui_click - First observed
ui_drag - First observed
ui_fill - First observed
ui_hover - First observed
ui_inspect - First observed
ui_press - First observed
ui_scroll - First observed
ui_select - First observed
ui_type - First observed
ui_upload - First observed
ui_wait_for - First observed
workflow_guide
TDQS
Scored across 73 tools
The descriptions are careful and cross-reference each other, but the sheer number of getter/snapshot tools (debugger_get_capture/state/scope, session_get_state/activity/status, devtools_status) and pairs like list_tabs/sessions_list and app_discover/ui_inspect create real selection ambiguity. Most tools are distinguishable, but an agent could easily pick the wrong one when several seem to return similar state.
The dominant pattern is domain_verb_noun in snake_case (network_get_requests, debugger_set_breakpoint, session_get_status), which is quite consistent across 73 tools. A few outliers like list_tabs, notify_user, and workflow_guide break the prefix convention, so it is not perfect.
73 tools is far beyond a workable MCP tool surface and exceeds the 50+ extreme ceiling. Even though the tools are organized into coherent domains, this count will dominate agent context and make tool selection expensive.
The set covers an unusually broad workflow: attach/detach, console, network, DOM, interaction, source/debugger, sessions, memory, discovery, docs, and settings. It only misses peripheral browser operations such as screenshots, storage/cookies, or performance tracing, which agents can work around.
Maintenance
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
Browser-based QA for AI-built software. Test pages with real browsers via agents.
AI-powered browser automation — navigate, click, fill forms, and extract data from any website.
Run multi-step tasks in a real Chrome browser: persistent environments, live view, human takeover.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to debug frontend applications by providing direct access to browser DevTools, React state, DOM inspection, and runtime debugging capabilities. Bridges the gap between AI and complex web applications for autonomous debugging and issue resolution.MIT
- 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.1,516,489 npm51,699Apache 2.0
- AlicenseBqualityBmaintenanceEnables AI agents to debug code and automate browsers using Chrome DevTools Protocol, supporting breakpoints, variable inspection, and replayable interaction recording.35339 npm16MIT
- AlicenseCqualityDmaintenanceEnables AI assistants to connect to browser DevTools and backend debuggers for full-stack debugging, including frontend console, network, performance, and backend log analysis.1612 npm7MIT