chrome-debugger-mcp
Provides runtime debugging capabilities for Google Chrome by attaching to a Chrome tab, pausing at breakpoints, inspecting scope variables, evaluating JavaScript in the current call frame, and stepping through execution.
Click on "Install 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., "@chrome-debugger-mcpUse chrome-debugger to step through the code and find the bug."
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.
chrome-debugger-mcp
English
An MCP server for breakpoint-driven Chrome debugging.
chrome-debugger-mcp exposes Chrome DevTools Protocol primitives as MCP tools so an AI agent can attach to a real Chrome tab, pause execution, inspect scope values, evaluate expressions inside the current call frame, and step through code with runtime facts instead of guessing from static source.
It is not a general browser automation server. The focus is runtime debugging.
Core Capabilities
Attach to a real Chrome tab over CDP after explicit user confirmation
Pause at breakpoints or
debugger;statements and wait for the exact pause you expectRead local, closure, and module scope values from the paused frame
Evaluate JavaScript in the current call frame and step execution forward
Resume cleanly so the agent can continue with actual runtime values
Demo

Demo: the agent launches Chrome, waits for a breakpoint, inspects real scope variables, and resumes with runtime facts instead of guessing.
MCP Client Configuration
Use the published package
{
"mcpServers": {
"chrome-debugger": {
"command": "npx",
"args": ["-y", "chrome-debugger-mcp"]
}
}
}Installation
From npm
npx -y chrome-debugger-mcpOr install it globally:
npm install -g chrome-debugger-mcpFrom source
pnpm install
pnpm build
node dist/index.jsOther Highlights
Launch a dedicated Chrome instance with remote debugging enabled
Set and remove DevTools breakpoints without editing source code
Reload the page through CDP so breakpoints reliably bind after navigation
Poll debugger state when the MCP client has short request timeouts
Emit
_uipayloads and logging messages that clients can surface to the user
Why It Helps
Many browser-focused MCP tools are strong at DOM interaction and network inspection, but weak at runtime debugging. This server gives an MCP client the missing loop you would normally use in Chrome DevTools: attach to the right tab, pause at the right time, inspect real values, step if needed, and resume cleanly.
It also adds guardrails that prevent common agent mistakes:
guessing which tab to attach to
concluding behavior without inspecting runtime values
ending the turn between
reloadPage()andwaitForSpecificPause()
Requirements
Google Chrome installed locally
An MCP client that supports stdio servers and tool calling
Access to the application you want to debug
Local source access if you plan to insert temporary
debugger;statements
Tooling Model
The server runs over stdio and exposes MCP tools. The most important tools are:
startDebuggingSession: returns the recommended debugging workflow and critical rules for agent behaviorlaunchChrome: launches a dedicated Chrome instance with remote debugging enabledlistTargets: lists available Chrome tabs and requires the user to pick oneconnect: attaches to the confirmed tabsetBreakpoint: creates a CDP breakpoint without modifying source filesremoveBreakpoint: removes a breakpoint created bysetBreakpointreloadPage: reloads the current page through CDPwaitForSpecificPause: waits for the next pause and checks whether it matches a target file and linewaitForPause: waits for any pause without location matchinggetScopeVariables: reads local, closure, and module scope values from the paused frameevaluate: executes JavaScript in the paused call framestepInto,stepOver,stepOut: standard execution controlresume: resumes execution after inspectiongetStatus: non-blocking polling for connected or paused stateforcePause: requests a pause at the next JavaScript statement
Recommended Workflow
For AI clients, the intended flow is:
Call
startDebuggingSession().Call
launchChrome()or use an already-running Chrome instance with a CDP port.Call
listTargets()and show the full tab list to the user.Wait for the user to confirm the exact page URL.
Call
connect({ targetUrl }).Insert a temporary
debugger;statement in local source code, or callsetBreakpoint().Call
reloadPage().Immediately call
waitForSpecificPause()in the same turn.Call
getScopeVariables()andevaluate()to inspect runtime values.Step if necessary with
stepInto(),stepOver(), orstepOut().Call
resume().Remove any temporary
debugger;statements from source code.
Important Rules For Agent Authors
This server is designed for tool-using agents, not only for humans. If you are integrating it into an MCP client, keep these rules:
Never skip
listTargets().Never guess the target URL, even if only one tab is open.
Always wait for explicit user confirmation before
connect().After
reloadPage(), immediately callwaitForSpecificPause()orwaitForPause()in the same turn.Do not explain behavior from static code when runtime values can be inspected directly.
Always
resume()after inspection.If you added temporary
debugger;statements to source code, remove them before finishing.
How waitForSpecificPause Matches
waitForSpecificPause is the preferred waiting primitive because it is more reliable than waiting for an arbitrary pause.
It matches a pause using two strategies:
URL fragment plus line tolerance
URL fragment plus
debugger-statementpause reason
The second path matters when source maps, transpilation, or bundling shift compiled line numbers away from editor line numbers.
Example Tool Sequence
An agent debugging a local Vite app might do something like this:
launchChrome({ dryRun: true })launchChrome()listTargets()Wait for the user to confirm
http://127.0.0.1:5173connect({ targetUrl: "127.0.0.1:5173" })Insert
debugger;inApp.jsxreloadPage()waitForSpecificPause({ urlFragment: "App.jsx", line: 62, actionHint: "click the Refetch payloads button" })getScopeVariables()evaluate({ expression: "payload.modules" })resume()
Chrome Launch Behavior
launchChrome() uses a dedicated profile so it does not interfere with the user's normal browser session.
Defaults:
remote debugging port:
9222profile directory:
~/.chrome-debug-profile
Expected Chrome binary locations:
macOS:
/Applications/Google Chrome.app/Contents/MacOS/Google ChromeLinux:
google-chromeWindows:
C:\Program Files\Google\Chrome\Application\chrome.exe
If automatic launch fails, the tool returns a command the user can run manually.
Local Playground
This repository includes a disposable test app under test/ so you can exercise the debugger server against a realistic browser workflow.
Start the mock service
cd test/service
node src/server.jsThe service listens on http://127.0.0.1:3030.
Start the web app
cd test/web
pnpm install
pnpm devThe web app runs on http://127.0.0.1:5173.
Useful places to pause:
test/web/src/App.jsxinsideloadWorkbenchtest/web/src/App.jsxinsideloadModuleDetailtest/web/src/App.jsxaround the unfinished detail sections
Runtime payload areas worth inspecting:
summaryCardsmodulesapiContractsnextActionsresponseShape
Troubleshooting
No targets found
Make sure Chrome is running with --remote-debugging-port=9222 and the target page is open.
More than one tab matches targetUrl
Pass a more specific substring so the match becomes unique.
waitForPause or waitForSpecificPause times out
This can happen when:
the page action was never triggered
the wrong breakpoint was set
the MCP client itself has a shorter request timeout than the tool call
If your client times out quickly, use getStatus() to poll or increase the client timeout.
The paused line number does not match the editor line
Bundlers and transpilers can shift compiled line numbers. Use waitForSpecificPause() and rely on URL fragment matching plus debugger-statement semantics.
Chrome does not launch automatically
The machine may use a non-default Chrome install path. Run the returned launch command manually or adjust the implementation to match your environment.
Development
pnpm install
pnpm build
node dist/index.jsThe implementation lives in:
src/index.ts: MCP tool definitions and user-facing workflow hintssrc/chrome-manager.ts: Chrome DevTools Protocol integration and debugger state management
License
MIT
Related MCP server: Chrome DevTools MCP
中文
一个面向 Chrome 断点调试的 MCP Server。
chrome-debugger-mcp 把 Chrome DevTools Protocol 的核心调试能力暴露为 MCP 工具,让 AI agent 可以连接真实的 Chrome 标签页,在运行时暂停执行、读取作用域变量、在当前调用帧中执行表达式、单步跟踪代码,并基于真实值继续任务,而不是只靠静态源码猜测行为。
它不是通用浏览器自动化工具。它的重点是运行时调试。
核心能力
在用户明确确认后,通过 CDP 连接真实的 Chrome 标签页
在断点或
debugger;命中时暂停,并等待指定文件和行附近的 pause读取当前暂停帧中的 local、closure、module 作用域变量
在当前调用帧里执行 JavaScript,并继续单步跟踪
检查完成后恢复执行,让 agent 基于真实运行时值继续工作
功能演示

演示流程:agent 拉起 Chrome,等待断点命中,读取真实作用域变量,再基于运行时事实继续执行,而不是靠猜测推进。
MCP 客户端配置
使用已发布包
{
"mcpServers": {
"chrome-debugger": {
"command": "npx",
"args": ["-y", "chrome-debugger-mcp"]
}
}
}安装方式
从 npm 使用
npx -y chrome-debugger-mcp也可以全局安装:
npm install -g chrome-debugger-mcp从源码运行
pnpm install
pnpm build
node dist/index.js其他特点
启动带远程调试端口的独立 Chrome 实例
无需修改源码即可设置和移除断点
通过 CDP 重载页面,确保跳转后断点可靠绑定
当 MCP 客户端请求超时较短时,可轮询调试器状态
输出
_ui结果和 logging 消息,方便客户端展示给用户
为什么适合这个场景
很多浏览器方向的 MCP 工具更擅长 DOM 操作和网络请求观察,但不擅长回答运行时调试问题。这个服务补上的是 Chrome DevTools 里最关键的那条链路:连接正确标签页、在正确时机暂停、读取真实值、必要时单步跟踪、最后恢复执行。
它也内置了几条 guardrails,避免 agent 出现这些常见错误:
猜测应该连接哪个标签页
没看运行时值就直接下结论
在
reloadPage()和waitForSpecificPause()之间错误地结束当前轮次
运行要求
本机安装了 Google Chrome
使用支持 stdio MCP server 和工具调用的 MCP 客户端
可以访问你要调试的应用
如果要插入临时
debugger;,需要能访问本地源码
工具模型
这个服务通过 stdio 运行,并暴露一组 MCP tools。最核心的工具有:
startDebuggingSession:返回推荐调试流程和 agent 行为约束launchChrome:启动带远程调试能力的独立 Chrome 实例listTargets:列出可调试标签页,并要求用户做选择connect:连接到已确认的目标标签页setBreakpoint:在不改源码的情况下通过 CDP 设置断点removeBreakpoint:移除通过setBreakpoint创建的断点reloadPage:通过 CDP 重载当前页面waitForSpecificPause:等待下一次暂停,并判断是否命中目标文件和行waitForPause:不做位置匹配,等待任意暂停getScopeVariables:读取当前暂停帧中的局部、闭包、模块作用域变量evaluate:在暂停调用帧中执行 JavaScriptstepInto、stepOver、stepOut:标准单步控制resume:检查完毕后恢复执行getStatus:非阻塞方式查询是否已连接、是否已暂停forcePause:请求在下一条 JavaScript 语句处暂停
推荐工作流
对于 AI 客户端,建议流程是:
调用
startDebuggingSession()。调用
launchChrome(),或直接复用已经开启 CDP 端口的 Chrome。调用
listTargets(),并把完整标签页列表展示给用户。等待用户明确确认要调试的页面 URL。
调用
connect({ targetUrl })。在本地源码插入临时
debugger;,或者调用setBreakpoint()。调用
reloadPage()。在同一轮里立刻调用
waitForSpecificPause()。调用
getScopeVariables()和evaluate()检查运行时值。必要时使用
stepInto()、stepOver()、stepOut()继续跟踪。调用
resume()。删除源码里临时加入的
debugger;。
给 Agent 作者的重要规则
这个服务首先是为会调用工具的 agent 设计的,而不仅仅是给人手动点工具用。如果你要把它接入自己的 MCP 客户端,建议遵守这些规则:
不要跳过
listTargets()。即使只看到一个标签页,也不要猜测目标 URL。
一定要等用户明确确认后再调用
connect()。调用
reloadPage()后,必须在同一轮里立刻调用waitForSpecificPause()或waitForPause()。能读取运行时值时,不要只根据静态代码解释行为。
检查完之后一定要
resume()。如果向源码里插入了临时
debugger;,结束前要清理掉。
waitForSpecificPause 如何匹配
waitForSpecificPause 是首选的等待工具,因为它比“等待任意暂停”更可靠。
它有两层匹配策略:
URL 片段加行号容差
URL 片段加
debugger-statement暂停原因
第二层匹配对经过 source map、转译、打包后的代码尤其重要,因为编译后的行号可能和编辑器行号不完全一致。
调用序列示例
一个 agent 调试本地 Vite 应用时,调用顺序大致会像这样:
launchChrome({ dryRun: true })launchChrome()listTargets()等用户确认
http://127.0.0.1:5173connect({ targetUrl: "127.0.0.1:5173" })在
App.jsx插入debugger;reloadPage()waitForSpecificPause({ urlFragment: "App.jsx", line: 62, actionHint: "click the Refetch payloads button" })getScopeVariables()evaluate({ expression: "payload.modules" })resume()
Chrome 启动行为
launchChrome() 会使用独立 profile,不会影响用户平时正在用的浏览器会话。
默认值:
远程调试端口:
9222profile 目录:
~/.chrome-debug-profile
默认 Chrome 可执行文件路径:
macOS:
/Applications/Google Chrome.app/Contents/MacOS/Google ChromeLinux:
google-chromeWindows:
C:\Program Files\Google\Chrome\Application\chrome.exe
如果自动启动失败,工具会返回一条可供用户手动执行的启动命令。
本地 Playground
仓库里带了一个可丢弃的测试应用,目录在 test/。你可以直接用它验证这个调试 MCP 的完整链路。
启动 mock service
cd test/service
node src/server.js服务监听在 http://127.0.0.1:3030。
启动 web app
cd test/web
pnpm install
pnpm devWeb 应用运行在 http://127.0.0.1:5173。
建议下断点的位置:
test/web/src/App.jsx里的loadWorkbenchtest/web/src/App.jsx里的loadModuleDetailtest/web/src/App.jsx里尚未完成的 detail 区域附近
值得在运行时查看的 payload 字段:
summaryCardsmodulesapiContractsnextActionsresponseShape
故障排查
找不到 targets
确认 Chrome 是用 --remote-debugging-port=9222 启动的,并且目标页面已经打开。
targetUrl 匹配到多个标签页
传入更具体的 URL 子串,保证匹配结果唯一。
waitForPause 或 waitForSpecificPause 超时
常见原因包括:
页面操作没有真正触发
断点位置不对
MCP 客户端自身的请求超时时间比工具调用更短
如果客户端超时比较短,可以改用 getStatus() 轮询,或者调大客户端超时。
暂停时的行号和编辑器对不上
打包和转译会导致编译后的行号偏移。优先使用 waitForSpecificPause(),并依赖 URL 片段匹配加 debugger-statement 语义匹配。
Chrome 无法自动启动
机器上的 Chrome 安装路径可能不是默认值。可以直接运行工具返回的启动命令,或者按你的环境调整实现。
开发
pnpm install
pnpm build
node dist/index.js主要实现文件:
src/index.ts:MCP 工具定义和面向用户的工作流提示src/chrome-manager.ts:Chrome DevTools Protocol 集成和调试状态管理
许可证
MIT
Available Tools
18 toolsconnectA
[STEP 3] Connect the debugger to a specific Chrome tab. MANDATORY: call listTargets first, show the list to the user, wait for their explicit URL confirmation, then call this. NEVER guess the URL. NEVER skip user confirmation — even if only one tab is visible. targetUrl must be a unique substring of the tab URL the user confirmed (e.g. "localhost:5173"). Relay the "_ui" field from the response to the user.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | Chrome remote debugging port (default 9222) | |
| targetUrl | Yes | Unique substring of the tab URL confirmed by the user (e.g. 'localhost:5173'). REQUIRED — always obtain from user confirmation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral burden. It discloses the need for prior user confirmation, the requirement for a unique substring, and instructs relaying the '_ui' field. It implies a state change (connecting) but does not cover failure modes or side effects, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a numbered step marker, mandatory instructions, and concise specifications. Every sentence is purposeful—prerequisites, constraints, and output handling—with no 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 there is no output schema, it explains the '_ui' field relay. It covers prerequisites, workflow, input constraints, and output handling. It might benefit from noting error cases (e.g., if targetUrl not found), but for a connection tool it is sufficiently 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 coverage is 100% and both parameters are described in the schema. The description adds critical semantic value: targetUrl must be a unique substring confirmed by the user, and port has a default. It clarifies the usage context beyond the schema, enhancing understanding.
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 explicitly states 'Connect the debugger to a specific Chrome tab', using a specific verb and resource. It clearly differentiates from sibling tools like listTargets (which lists) and startDebuggingSession (which starts a session), and ties into a numbered workflow step.
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 mandatory prerequisites and exclusions: 'MANDATORY: call listTargets first... wait for their explicit URL confirmation', 'NEVER guess the URL. NEVER skip user confirmation'. This gives clear when-to-use and workflow guidance, including how to obtain the targetUrl.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnectA
Disconnect the current Chrome debugging session and clear in-memory pause state. Use this to explicitly end a debug session before connecting again.
| 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 must carry the behavioral disclosure. It clearly states it disconnects the session and clears in-memory pause state, which is beyond just the name. It doesn't mention side effects on breakpoints or reconnection, but for a simple disconnect operation, this is sufficient.
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 that clearly state the action, the effect (clearing pause state), and the recommended usage context ('before connecting again'). 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 simple tool with no parameters and no output schema, the description covers the action, side effects, and usage context. It's complete enough for an agent to decide when to use it, though it doesn't mention any potential errors or whether disconnect is idempotent.
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 secret, so parameter explanation is unnecessary. The description doesn't need to compensate for anything. Per the instructions, 0 params gives a baseline of 4, which 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 tool's function: 'Disconnect the current Chrome debugging session and clear in-memory pause state.' It uses a specific verb ('disconnect') and resource ('Chrome debugging session'), and distinguishes it from siblings like 'connect' and 'resume' by focusing on termination and clearing pause 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?
The instruction to 'use this to explicitly end a debug session before connecting again' gives clear context for when to use the tool. It implicitly contrasts with reconnecting, but doesn't explicitly name alternatives or exclusions, which is acceptable given the simplicity of the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluateA
[STEP 6b] Evaluate any JavaScript expression in the context of the currently paused call frame. Use this to inspect nested objects, call methods, compute derived values, or verify conditions at runtime. Complements getScopeVariables for values not directly visible in scope (e.g. this.state, JSON.stringify(obj)).
| Name | Required | Description | Default |
|---|---|---|---|
| expression | Yes | JavaScript expression to evaluate | |
| frameIndex | No | Call frame index (default 0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the evaluation context and common uses, but does not warn that arbitrary JavaScript evaluation may have side effects on the debuggee state (e.g., calling methods can mutate). This is a notable gap for a potentially unsafe 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?
Three sentences, each earning its place: defines the action and context, enumerates use cases, and positions it relative to getScopeVariables. 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?
The description is adequate for selecting the tool, but lacks important caveats such as side-effect risk and behavior when not paused. Since there is no output schema, the description should clarify what the evaluation returns, but this is partially mitigated by the straightforward nature of evaluating an expression.
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% for both parameters, so baseline is 3. The description adds value beyond the schema by providing concrete expression examples (this.state, JSON.stringify(obj)) and clarifying that frameIndex selects the call frame context, enhancing understanding of the expression 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 uses a specific verb ('Evaluate') and clearly identifies the resource ('any JavaScript expression in the context of the currently paused call frame'). It distinguishes itself from sibling getScopeVariables by noting it complements that tool for values not directly visible in scope.
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 use cases: inspect nested objects, call methods, compute derived values, verify conditions. It also names getScopeVariables as the complementary alternative, giving clear contextual guidance without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forcePauseA
Force the debugger to pause at the very next JavaScript statement. Useful when you cannot modify source code to add debugger; and setBreakpoint is not feasible.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the primary behavior (forcing a pause) but does not mention potential side effects like whether a debugger must be attached or if the pause is persistent. Since annotations are absent, some additional detail could be provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the action stated first and the use case in the second sentence. It is well-organized 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?
The description is adequate for the tool's simplicity, but it omits any mention of error cases or prerequisites (e.g., need for an active debugging session). 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 no parameters, and the description correctly does not attempt to explain any. Schema coverage is complete, so no additional parameter info 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 clearly states the tool forces the debugger to pause at the next JavaScript statement, with a specific verb and resource. It distinguishes itself from setBreakpoint by noting when it is useful.
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 guidance is given: useful when source code cannot be modified and setBreakpoint is not feasible, implying 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.
getScopeVariablesA
[STEP 6a] Read all scope variables (local, closure, module) at the currently paused call frame. Call this immediately after waitForSpecificPause or waitForPause returns. Results are grouped by scope type; global scope is skipped. Use frameIndex=1, 2, ... to inspect variables in parent call frames up the stack.
| Name | Required | Description | Default |
|---|---|---|---|
| frameIndex | No | Call frame index (default 0, the topmost frame) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full transparency. It details the behavior (returns scope variables grouped by type, skips global scope) and the expected context (paused state). No destructive side effects are implied, and the read-only nature is evident.
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 concise and well-structured, covering purpose, timing, result formatting, and parameter usage in a few sentences. Every sentence provides valuable information without 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?
The description is complete given the absence of an output schema. It explains what the tool returns (scope variables grouped by type) and provides necessary context (paused state, frame navigation). No critical gaps are apparent.
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 only parameter, frameIndex, is fully described in both the schema and the tool description. The description adds meaningful detail on how to use it (default 0 for topmost, increment to go up the stack), satisfying the parameter semantics requirement.
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's purpose: reading all scope variables (local, closure, module) at the currently paused call frame. It is distinct from sibling tools, which focus on control (e.g., stepping, pausing) 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 instructs when to call the tool ('immediately after waitForSpecificPause or waitForPause returns') and explains how to use frameIndex for parent frames. This provides clear, actionable usage guidance beyond the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getStatusA
Non-blocking: return current connection and pause state immediately without waiting. Use this to poll for pause instead of waitForPause when the MCP client has a short request timeout (e.g. MCP Inspector ~10s). Returns: connected, paused, targetUrl, pauseReason, hitBreakpoints, callStack.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description notes it is non-blocking and returns current state, implying no side effects, but does not explicitly state read-only behavior. Since no annotations are provided, the description mostly covers transparency but could be more explicit about side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using two clear sentences without unnecessary verbosity, and is well-structured.
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?
It includes a list of return fields (connected, paused, targetUrl, etc.) and provides usage context, making it self-contained for the user.
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 no parameters, and the description does not reference any, so there is no ambiguity or missing 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 clearly states that the tool returns the current connection and pause state immediately, which precisely defines its purpose.
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 recommends using this tool for polling instead of waitForPause when the client has a short request timeout, providing concrete guidance on when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
launchChromeA
[STEP 1] Launch a dedicated Chrome instance with remote debugging enabled (default port 9222). Uses --user-data-dir=~/.chrome-debug-profile so your normal Chrome keeps running (dual-instance). Auto-detects if the debug port is already active and skips launch (alreadyRunning=true). Use dryRun=true to preview the command — show it to the user and ask for confirmation before executing. Set openDevTools=true to automatically open DevTools panel for every new tab. If automatic launch does not succeed, relay the returned command to the user and ask them to run it manually. Relay the "_ui" field from the response to the user.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to open immediately after launch | |
| port | No | Remote debugging port (default 9222) | |
| dryRun | No | If true, return the launch command without executing it | |
| chromePath | No | Chrome executable path. Overrides platform defaults and CHROME_PATH/GOOGLE_CHROME_BIN. | |
| userDataDir | No | Profile directory for the debug instance (default ~/.chrome-debug-profile) | |
| openDevTools | No | If true, adds --auto-open-devtools-for-tabs so DevTools opens automatically for every new tab |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description must fully disclose behavior. It details the dual-instance setup, port auto-detection, dryRun behavior, openDevTools effect, and fallback instructions to relay the command and _ui field. This is exceptionally transparent for a launch 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?
The description is well-structured with step markers and front-loaded purpose. It is longer than a single sentence but every sentence adds value, including dryRun, openDevTools, and fallback. The structure improves readability, though it could be slightly tighter.
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 6 parameters, no output schema, and no annotations, the description covers essential context: default port, dual-instance, auto-detection, dryRun behavior, and fallback action. It even mentions relaying the _ui field, compensating for the lack of output schema. It does not explain all possible return fields but is adequate for a launch 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 coverage is 100%, meaning each parameter already has a description. The tool description reinforces defaults (port, user-data-dir) and adds practical usage context for dryRun and openDevTools, but does not introduce meaning beyond what the schema already provides. 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 it launches a dedicated Chrome instance with remote debugging enabled, specifying the resource (Chrome) and the exact action (launch). It distinguishes from siblings by indicating this is the first step in a debugging workflow and mentions a key differentiator (--user-data-dir for dual-instance).
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 when to use the tool, such as being STEP 1, auto-detecting an active port to skip launch, and suggesting dryRun to preview for user confirmation. It gives concrete usage advice (e.g., relaying the command if automatic launch fails) but does not explicitly contrast with sibling tools like startDebuggingSession or connect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listTargetsA
[STEP 2] List all open Chrome tabs available for debugging. MANDATORY: show the full list to the user and ask "Which URL do you want to debug?" NEVER skip this step, NEVER guess — even if only one tab is open. Wait for the user's explicit reply before proceeding to connect(). Relay the "_ui" field from the response to the user.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | Chrome remote debugging port (default 9222) |
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 discloses workflow constraints (must ask user, must wait), relays the '_ui' field, and implies a blocking behavior. However, it doesn't explain what happens if the port is wrong or if no tabs are available, or whether the operation is read-only (though 'list' implies it). The description adds significant context beyond just 'list tabs'.
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 concise and front-loaded with the primary action, then adds mandatory workflow constraints. Each sentence serves a purpose (step indicator, listing requirement, user interaction requirement, safety instruction, relay instruction). It's slightly longer than strictly necessary but all content is valuable. No 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 simple list operation with one parameter and no output schema, the description is quite complete. It covers the workflow context, mandatory interactions, and what to do with the response ('_ui' field). However, it doesn't describe error handling (e.g., if the port is unreachable) or what happens if no tabs are open, which would make it fully comprehensive. Given the tool's simplicity, this is almost 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 coverage is 100% (the only parameter 'port' is fully described with default and type). The description does not add extra meaning to the parameter, but since the schema already documents it and there's only one simple parameter, the baseline 3 is appropriate. The description correctly doesn't repeat the parameter details.
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 open Chrome tabs for debugging, using a specific verb ('List') and resource ('open Chrome tabs'). It also distinguishes itself from siblings by mentioning it's a distinct step in a workflow, though it doesn't name an alternative. The multiple constraints (show list, ask user, wait) make its purpose unambiguous.
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 explicit when-to-use guidance (STEP 2), mandatory actions (show full list, ask which URL), and prohibitions (never skip, never guess, even with one tab). It also instructs to wait for user reply before proceeding to connect(), effectively telling when not to proceed. This fully satisfies the dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reloadPageA
[STEP 5a] Reload the connected page via Chrome DevTools Protocol. More reliable than manual browser refresh — maintains the CDP connection and ensures debugger; statements and setBreakpoint() calls resolve correctly when scripts reload. Always call this after inserting debugger; in source code or after setBreakpoint(), before waitForSpecificPause/waitForPause.
⚠️ CRITICAL TURN RULE: After this tool returns, you MUST immediately call waitForSpecificPause (or waitForPause) in the SAME AI turn — do NOT end your turn here. waitForSpecificPause is a blocking call that will notify the user to trigger the page action and wait for the breakpoint internally. If you end your turn after reloadPage, the session will break.
| Name | Required | Description | Default |
|---|---|---|---|
| ignoreCache | No | Hard reload ignoring cache (default false) |
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 mentions maintaining CDP connection and ensuring debugger statements resolve, which adds context beyond the schema. However, it doesn't specify what happens to the current page state, potential side effects (e.g., unsaved changes), or whether the operation is synchronous or asynchronous. The description covers critical workflow aspects but not all behavioral nuances.
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 fairly concise and front-loaded with the purpose, followed by usage guidance and the critical turn rule. The critical rule is highlighted with ⚠️ and CAPS, making it prominent. A slight deduction for redundancy (e.g., 'waitForSpecificPause' mentioned twice) but overall efficient.
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 tool's moderate complexity (one optional parameter), the description covers the essential workflow context: when to call, what to do after, and why it's better than manual refresh. While it doesn't explain return values (no output schema), the description compensates with the critical turn rule and sequencing instructions. It's sufficiently complete for an agent to use 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 schema has 100% coverage with one optional parameter (ignoreCache) already described as 'Hard reload ignoring cache (default false)'. The description doesn't add extra parameter semantics but the schema suffices. Baseline 3 is appropriate since the schema handles the parameter explanation.
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 reloads the connected page via CDP, with a specific verb ('reload') and resource ('connected page'). It distinguishes itself from a manual refresh by emphasizing reliability and CDP connection maintenance, which differentiates it from potential sibling operations like launchChrome or 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?
Provides explicit when-to-use instructions: after inserting debugger; or setBreakpoint(), before waitForSpecificPause/waitForPause. It also includes a critical turn rule with clear direction to call waitForSpecificPause in the same turn, and warns against ending the turn after reloadPage. This is comprehensive guidance with specific sequencing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
removeBreakpointA
Remove a previously set CDP breakpoint by its ID (returned by setBreakpoint).
| Name | Required | Description | Default |
|---|---|---|---|
| breakpointId | Yes | The breakpoint ID returned by setBreakpoint |
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 states the tool removes a breakpoint (mutating action) and requires the ID from setBreakpoint. It does not describe effects like whether the breakpoint is removed from the session permanently, any side effects, or errors if the ID is invalid. But given the tool's simplicity, the description adds some context 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?
The description is one concise sentence that clearly states the action and the parameter's origin. It is front-loaded with the verb and resource, and contains no fluff. Every word adds value.
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 tool's low complexity (single parameter, no output schema, no annotations), the description is sufficient. It explains the action and references the prerequisite tool (setBreakpoint). It could mention error cases or that the ID must be valid, but for a simple removal operation, this is adequately 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%: the schema already describes breakpointId as 'The breakpoint ID returned by setBreakpoint'. The description repeats this, adding no new semantic information. The tool description also mentions the ID source, but it's redundant. Baseline 3 is appropriate because the schema fully covers the 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 clearly states the tool's action: removing a previously set CDP breakpoint by its ID. It identifies the resource (breakpoint) and the specific action (remove), and references setBreakpoint as the source of the ID. It is distinct from siblings like setBreakpoint and resume, though it does not explicitly contrast with 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?
The description implies when to use: after setting a breakpoint, and it mentions the ID comes from setBreakpoint, which provides context. However, it does not explicitly state when not to use this tool or mention alternatives (e.g., clearing all breakpoints). It lacks exclusions or alternative tool references beyond the implicit link to setBreakpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resumeA
[STEP 8] Resume script execution after collecting all needed variable data — ends the current pause. After calling resume, remove all temporary debugger; statements added to source code during this session. Relay the "_ui" field from the response to the user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the key behavior ('ends the current pause'), adds a required follow-up action (remove temporary debugger statements), and tells the agent to relay the '_ui' field from the response. Minor gaps like failure behavior remain, but this is solid for a zero-parameter control 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?
The description is three sentences and every sentence earns its place: purpose/timing, post-call cleanup, and user-facing response handling. It is front-loaded with the core action and contains no 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 the tool's low complexity, zero parameters, and lack of output schema, this description is sufficiently complete. It covers when to call it, what it does, what to do afterward, and what to relay from the response.
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 for parameter semantics is 4. The description needs no parameter-level guidance, and it appropriately adds no irrelevant 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 opens with a specific verb and resource: 'Resume script execution' and immediately clarifies it 'ends the current pause.' This distinguishes it from sibling stepping commands and clearly identifies the tool's role in the debugging session.
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 says to use resume 'after collecting all needed variable data,' providing a clear usage condition. It does not explicitly exclude alternatives like stepInto/stepOut, but the sequencing context is strong enough for an agent to know when resume is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setBreakpointA
Set a breakpoint at a specific script URL and line number via CDP — no source code modification needed. Use a full URL (https://...) for exact match, or a partial filename/keyword for regex match. Alternative to inserting debugger; when you cannot modify the source file. After setting, call reloadPage() to ensure the breakpoint resolves correctly.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Script URL or URL pattern to match | |
| line | Yes | 0-based line number | |
| column | No | 0-based column number | |
| condition | No | Conditional breakpoint expression |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral context. It discloses the CDP mechanism, that no source modification is needed, how URL matching works, and the need to reload. It does not state that a debugging session must be active, but the sibling context 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 three sentences long and front-loaded with the core purpose. Each sentence adds necessary information: what it does, how to match URLs, and the required follow-up action. 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?
The tool has four parameters, no output schema, and no annotations, so the description must provide most of the usage context. It covers purpose, URL matching, and reload guidance. A minor gap is that it does not mention the need for an active debugging session, though siblings like connect and startDebuggingSession imply 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 coverage is 100%, so the baseline is 3. The description adds meaningful semantics by explaining that full URLs are exact-matched while partial filenames/keywords are regex-matched, which is not evident from the schema alone.
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 action: setting a breakpoint at a script URL and line number via CDP. It distinguishes itself from siblings like removeBreakpoint and waitForPause by focusing on breakpoint creation and explicitly noting it is an alternative to inserting debugger statements.
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: use this when the source file cannot be modified and as an alternative to inserting debugger. It also provides a concrete follow-up action (call reloadPage) to ensure the breakpoint resolves.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
startDebuggingSessionA
CALL THIS FIRST whenever browser-side debugging is needed — before any other tool.
Auto-trigger when user mentions any of: debug, breakpoint, debugger, inspect, trace, step through, runtime value, variable value, why is this, implement based on API response, bug, error, unexpected behavior, not working, check this, confirm this.
Returns the complete debugging workflow and critical rules. The response contains a "_ui" field — relay it to the user verbatim.
| 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 discloses return behavior (returns workflow + _ui field to relay verbatim) but doesn't clarify whether this tool performs any side effects — it doesn't say if it establishes a connection/launches a browser, or is purely informational. Given the zero-param nature, the omission is moderate.
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?
Front-loaded with the critical 'CALL THIS FIRST' instruction and clear trigger keywords. The keyword list is long but functional. Slightly verbose but well-structured.
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 with no output schema, the description tells the agent when to invoke it, what it returns, and how to handle the response (_ui field). This is 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?
Zero parameters, so baseline of 4 applies. Nothing to document; the schema is empty.
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?
Specific verb+resource: 'start debugging session' entry point. Clearly distinguishes from siblings by being the mandatory first call ("CALL THIS FIRST... before any other tool") that returns the workflow. Purpose is 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?
Extremely explicit when-to-use guidance: 'CALL THIS FIRST whenever browser-side debugging is needed — before any other tool.' Also provides an extensive auto-trigger keyword list and explicit exclusion guidance (before other tools).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stepIntoA
[STEP 7] BLOCKING: step into the next function call, then wait until the debugger pauses again. Follow with getScopeVariables() to observe inner-function state.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in milliseconds to wait for the next pause (default 30000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the transparency burden. It discloses that the tool is blocking and waits for the next pause, which is a core behavioral trait. However, it does not mention error conditions, potential timeouts (despite the timeout parameter existing in schema), or prerequisites like an active debugging 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?
The description is extremely concise, front-loading the action and blocking nature. The additional suggestion to follow with getScopeVariables() adds value without waste. Every word earns its place, and the step label is minor but not intrusive.
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 tool with one optional parameter and no output schema, the description covers the essential behavior and a recommended next step. It lacks mention of edge cases (e.g., what happens if no function call exists), but given the simplicity of the operation, it is reasonably complete for an agent to execute 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 schema covers 100% of parameter descriptions (timeout) with a clear explanation, so the description does not need to elaborate. The description itself does not add any information about parameters, but the high schema coverage justifies a baseline score 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 clearly states 'step into the next function call, then wait until the debugger pauses again' which precisely defines the action. This distinguishes stepInto from stepOver and stepOut by the specific behavior of entering the function and waiting for a pause.
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 usage (e.g., when wanting to inspect inner-function state) and suggests a follow-up with getScopeVariables(), but it does not explicitly state when to use this versus alternatives like stepOver or stepOut. No exclusionary guidance is provided, though the blocking and stepping nature is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stepOutA
[STEP 7] BLOCKING: step out of the current function and wait until the debugger pauses again in the caller. Use to observe the return value and the state of the calling context.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in milliseconds to wait for the next pause (default 30000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden. It discloses that the operation is BLOCKING and that it waits for the next pause, and mentions observing return value/calling context. However, it does not describe timeout behavior, prerequisites (must be paused), or failure cases when no caller exists.
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 redundant content. The '[STEP 7] BLOCKING:' prefix provides context without verbosity.
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 step tool with one optional timeout parameter and no output schema, the description fully explains the action and intended use despite not covering timeout expiry or return format. The lack of an output schema is compensated by the clear purpose statement.
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 only parameter (timeout) is fully described in the input schema with a default value. The description adds no additional parameter information, so it scores baseline 3 for a schema with 100% 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 action ('step out of the current function') and outcome ('wait until the debugger pauses again in the caller'). It clearly differentiates from sibling tools like stepInto and stepOver by specifying the caller 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?
Provides a clear use case: 'Use to observe the return value and the state of the calling context.' However, it does not explicitly contrast with stepInto or stepOver or state when not to use, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stepOverA
[STEP 7] BLOCKING: step over the current statement without entering function calls, then wait until the debugger pauses again. Follow with getScopeVariables() to observe how local variables change.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in milliseconds to wait for the next pause (default 30000) |
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 explicitly discloses 'BLOCKING' behavior and that it waits until the debugger pauses again, which is essential for a control-flow tool. It does not mention timeout failure behavior or return value details, but the schema covers the timeout parameter, and the blocking trait is the key behavioral risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with a step tag and a 'BLOCKING' warning, followed by a direct operational instruction. Every word adds value, with no fluff 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 simple control-flow tool with one parameter and no output schema, the description covers the primary behavior (step over, block, wait) and suggests an immediate next step. It does not describe timeout edge cases or what happens if the pause never occurs, but this is a minor gap given the schema's timeout documentation and the tool's narrow scope.
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% for the single timeout parameter, so the schema already documents the parameter. The description adds no extra parameter semantics beyond implying that the tool waits (which aligns with timeout). This meets the baseline 3 but does not exceed 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 explicitly states the action: 'step over the current statement without entering function calls'. It clearly distinguishes from stepInto by saying 'without entering function calls' and from stepOut by anchoring on 'current statement'. The [STEP 7] context and follow-up instruction reinforce its specific role in the debugging flow.
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 clear usage pattern: it is blocking, waits until the debugger pauses, and should be followed with getScopeVariables() to observe variable changes. It implicitly contrasts with stepping into functions, but it does not explicitly name alternatives or state when not to use this tool. Clear context but no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waitForPauseA
[STEP 5b — FALLBACK] BLOCKING call — waits until ANY debugger pause occurs (breakpoint, debugger; statement, or exception). Before blocking, sends a notification to the user to trigger the page action. Must be called IMMEDIATELY after reloadPage() in the SAME AI turn — do NOT end your turn before calling this. Prefer waitForSpecificPause when you know the exact file and line — it uses smarter two-tier matching. Use this only when the target location is unknown or when setBreakpoint is used without a specific line.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in milliseconds (default 30000) | |
| actionHint | No | Optional hint to tell the user what action to perform on the page (e.g. 'click the button', 'submit the form'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses blocking behavior, user notification before blocking, and the fallback nature. It could mention timeout behavior or error cases, but the critical behavioral traits are 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?
Every sentence serves a purpose: step label, blocking definition, notification behavior, same-turn constraint, and clear alternative. It is front-loaded and no filler is present.
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 covers purpose, usage prerequisites, alternatives, and behavioral alerts. It is complete for an AI agent to decide when and how to invoke 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 mentions a user notification which relates to actionHint, but does not add substantial meaning beyond the schema's own parameter descriptions. No additional param context is provided.
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 blocking call that waits for any debugger pause, listing specific pause types (breakpoint, debugger; statement, exception). It explicitly distinguishes from waitForSpecificPause by noting this is the fallback for unknown locations or non-specific breakpoints.
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 when-to-use and when-not-to-use guidance: must be called immediately after reloadPage() in the same turn, prefer waitForSpecificPause when file/line is known, and use this only when location is unknown or setBreakpoint lacks a specific line. Also warns not to end the turn before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waitForSpecificPauseA
[STEP 5b — PREFERRED] BLOCKING call — waits for the next debugger pause, then checks if it matches the target location.
⚠️ NO AUTO-RESUME: execution stays paused after this returns, regardless of matched value. You decide what to do based on the "matched" field in the response: matched=true → call getScopeVariables() immediately to read variables matched=false → the wrong breakpoint fired; call resume() to continue, then call waitForSpecificPause() again if you need to wait for the next pause.
Must be called IMMEDIATELY after reloadPage() in the SAME AI turn. Before blocking, sends a notification to the user to trigger the page action. Editor line N → pass line=N-1 (CDP uses 0-based line numbers). Relay the "_ui" field from the response to the user once it returns.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | 0-based line number where debugger; was inserted. Editor line N → pass N-1. | |
| timeout | No | Timeout in ms to wait for any pause (default 90000). Increase for slow interactions. | |
| actionHint | No | Describe the page action to trigger the breakpoint (e.g. 'click the Search button'). Shown in the waiting notification to the user. | |
| urlFragment | Yes | Substring of the script URL where debugger; was added (e.g. 'LoginForm.vue', 'utils.ts'). Does NOT need to be the full URL. | |
| lineTolerance | No | ±line tolerance for Tier 1 matching (default 10). Increase to 20+ for heavily bundled code. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of behavioral disclosure. It explicitly states the blocking behavior, that execution stays paused after return (no auto-resume), and the implications for the agent's next actions. It also notes that it sends a user notification and explains the line-numbering offset. The description is transparent about the tool's side effects (pausing execution, notification) and constraints (must be called after reloadPage in same turn). This is exceptionally transparent for a tool without 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 concise yet dense with information. It is well-structured with clear sections: the blocking nature, the no-auto-resume warning, conditional instructions, call timing, notification behavior, line offset, and UI relay. Each sentence serves a purpose, and the use of emojis and bold text highlights critical points. Despite the length, it is front-loaded with the most important behavioral notes and is easy to parse.
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?
Considering the complexity of the tool (blocking, condition-dependent next steps, timing relative to reloadPage), the description is complete enough. It covers the workflow context (step 5b preferred), the return behavior (matched field), the required call sequence, and provides guidance on error handling ('matched=false' case). Since there is no output schema, the description fills the gap by explaining what to expect from the response and how to act on it. It also references related tools (getScopeVariables, resume) to provide a complete picture.
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% (all 5 parameters described in the schema). The description adds value beyond the schema by explaining the purpose of the line parameter (offset for CDP 0-based lines) and emphasizing that urlFragment is a substring, not full URL. It also provides usage context for timeout and actionHint, and suggests values for lineTolerance. The description enriches the parameter semantics with practical guidance that is not present in the schema's short 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?
The description clearly states the purpose: the tool blocks and waits for the next debugger pause, then checks if it matches a target location. It specifies the action (wait for pause, check match) and the resource (debugger pause), distinguishing it from sibling waitForPause (which likely does not filter by location). The use of 'BLOCKING' and 'checks if matches target' differentiates it well.
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 explicit usage guidance: it must be called immediately after reloadPage() in the same AI turn, and it prefaces with '[STEP 5b — PREFERRED]' indicating its place in a sequence. It also clearly states behavioral expectations: no auto-resume, and gives conditional next steps based on the 'matched' field (call getScopeVariables or resume and wait again). It mentions a notification to the user for the page action, and explains the line offset (editor line N → pass N-1). This goes beyond the schema and gives clear context for when and how 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
18 tool updates
v1.0.1- First observed
connect - First observed
disconnect - First observed
evaluate - First observed
forcePause - First observed
getScopeVariables - First observed
getStatus - First observed
launchChrome - First observed
listTargets - First observed
reloadPage - First observed
removeBreakpoint - First observed
resume - First observed
setBreakpoint - First observed
startDebuggingSession - First observed
stepInto - First observed
stepOut - First observed
stepOver - First observed
waitForPause - First observed
waitForSpecificPause
TDQS
Core tools are distinct, but waitForPause vs waitForSpecificPause have heavily overlapping blocking-wait semantics that could easily cause misselection. getScopeVariables vs evaluate also blur boundaries, and startDebuggingSession's auto-trigger instructions create confusion about when the workflow tool is appropriate.
Consistently camelCase with mostly verb-first names, and the stepInto/stepOver/stepOut family is clean. Minor deviations: 'evaluate' and 'resume' are bare verbs without a resource prefix, and the verb vocabulary is somewhat varied (launch, list, connect, set, force, reload), but no convention mixing.
18 tools is in the heavy range, and several could be consolidated (waitForPause/waitForSpecificPause, getStatus overlapping with wait functionality, startDebuggingSession being more of a workflow document than a tool). Not egregiously bloated—each tool does meaningful work—but the set could be trimmed to ~14-15 without losing expressiveness.
Covers the full debug lifecycle: launch, connect, breakpoints, pause, inspect, step, resume, and status. Minor gaps: no way to list active breakpoints, and the workflow skips STEP 4 entirely. Exception handling is only mentioned tangentially in waitForPause. Otherwise, a well-covered surface that achieves its debugging purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
A paid remote MCP for AI agent browser DevTools MCP, built to return verdicts, receipts, usage logs,
Hosted browser for AI agents: screenshots, post-JS DOM, console, WCAG. No install, no API key.
61Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI coding assistants to control and inspect a live Chrome browser for automation, debugging, performance analysis, and screenshot capture through Chrome DevTools.263,288,1653Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI coding assistants to control and inspect a live Chrome browser for automation, debugging, performance analysis, network monitoring, and DOM interaction through Chrome DevTools Protocol.3,288,165Apache 2.0
- AlicenseAqualityCmaintenanceEnables AI assistants to debug JavaScript and TypeScript applications by connecting to Chrome DevTools Protocol-compatible debuggers, allowing them to set breakpoints, step through code, inspect variables, and evaluate expressions with full source map support.18152Apache 2.0
- FlicenseNot gradedqualityDmaintenanceWraps Chrome DevTools Protocol to provide AI agents with low-level browser debugging tools including breakpoints, stack traces, stepping, network interception, and source maps.1-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/BitePro/chrome-debugger-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server