H5 Devtools Mcp

io.github.xianguoGou由 GitHub 账号 xianguoGou 发布v0.1.2更新于 Nov 4, 2026

Debug H5 pages inside Android app WebViews: console logs, exceptions, run JS.

已验证STDIO仅桌面浏览器自动化开发者工具

概览

AI 生成的概览

让编程助手调试真实 Android 设备上 WebView 内的 H5 页面:列出页面、读取控制台日志与异常,并执行 JavaScript。

可以做什么
  • 列出已连接设备上 Android WebView(及 Chrome)中可调试的 H5 页面,含应用包名、标题、URL 与可见性
  • 附加到某个页面并开始缓冲其控制台输出与未捕获异常
  • 读取缓冲的控制台与异常条目,可按级别或关键词过滤,并支持增量获取
  • 在已附加的页面中执行 JavaScript 表达式并返回结果,Promise 会被等待
  • 从页面分离,停止捕获并清空缓冲
适用场景
适合调试嵌入 Android 应用中的网页,希望由助手查看日志、异常或页面状态而不必打开 chrome://inspect。主要用于开发阶段在真机上进行移动端网页调试。
运行要求
通过 npx 以 stdio 在本地运行。需要 Node.js 18+、PATH 中的 adb(或设置 ADB_PATH)、开启 USB 调试的 Android 设备,以及启用 WebView 调试的应用。需在设备上接受 USB 调试授权。
安装前请注意
evaluate_js 以页面完整权限运行,可读取 cookie、存储与令牌,并改变页面状态,应置于助手的工具权限确认之后。通常同一页面只能附加一个调试器,需关闭已打开的 DevTools 窗口。v0.1 早期版本,仅支持 Android。

安装

在 SourceWeft 中

  1. 打开 控制台中的 H5 Devtools Mcp,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

h5-devtools-mcp

[npm version] [npm downloads] [license]

English | 简体中文

An MCP server that lets coding agents (Claude Code, Codex, Cursor…) debug H5 pages running inside Android WebViews on real devices — read console output and uncaught exceptions, and run JavaScript in the page, without opening chrome://inspect.

Status: v0.1, early. Android only.

How it works

Coding agent ──MCP (stdio)──▶ h5-devtools-mcp ──adb forward──▶ webview_devtools_remote_<pid> ──CDP──▶ WebView page

Every debuggable WebView exposes a Chrome DevTools Protocol endpoint on an abstract unix socket. The server discovers those sockets over adb (the same way chrome://inspect does), forwards them to local ports, and connects with CDP.

Requirements

  • Node.js 18+
  • adb on your PATH (or set ADB_PATH)
  • An Android device with USB debugging enabled
  • The app must enable WebView debugging (debug builds usually do):
java
WebView.setWebContentsDebuggingEnabled(true);

Setup

bash
# Claude Codeclaude mcp add h5-devtools -- npx -y h5-devtools-mcp

Other MCP clients (Cursor, Codex…) take the same command: npx -y h5-devtools-mcp.

From source

bash
git clone https://github.com/xianguoGou/h5-devtools-mcp.gitcd h5-devtools-mcpnpm install && npm run buildclaude mcp add h5-devtools -- node /absolute/path/to/h5-devtools-mcp/dist/index.js

Tools

ToolWhat it does
list_targetsList debuggable pages: app package, title, URL, visibility
attachConnect to a page and start buffering console output
get_consoleRead buffered entries, filtered by level / keyword / exclude_keywords, incrementally via since_seq
evaluate_jsRun a JavaScript expression in the page and return the result (promises are awaited)
detachDisconnect from a page

Output is designed to be token-cheap: compact one-line entries, long messages truncated, and since_seq so an agent only reads what's new instead of re-reading the whole buffer on every turn.

Example

> list_targets- id: R5CT1234/webview_devtools_remote_8812/3A1F…  app: com.example.app (pid 8812) on SM-S9180  title: "Order"  url: https://m.example.com/order
> get_console { "levels": ["error"] }#41 10:32:01.123 [error exception] TypeError: Cannot read properties of undefined (reading 'price')    at https://m.example.com/assets/index-8f2a.js:1:48213next since_seq: 57

Troubleshooting

  • "no debuggable WebView found" — the app hasn't enabled WebView debugging, or no WebView is alive yet. Open the H5 page first.
  • "debugger in use" — only one debugger can attach to a page. Close the chrome://inspect DevTools window.
  • "unauthorized" — accept the USB debugging prompt on the device.

Known limitations

  • Debugger-in-use detection is best-effort. It relies on /json/list omitting webSocketDebuggerUrl. Recent Chromium accepts several CDP clients per page, so attach may succeed alongside an open DevTools window; older WebViews may still refuse.
  • list_targets can take ~3s per unresponsive app. Sockets are queried one by one with a 3s timeout, and Android freezes background apps, so their WebView sockets stop answering. attach only re-checks the target's own socket and stays fast.
  • evaluate_js runs with the page's full privileges — it can read cookies, storage and tokens, and change page state. Keep it behind your agent's tool-permission prompt.
  • The e2e script expects port 9333 to be free. If a previous run left a headless Chromium behind, it attaches to that one; kill it first.

Development

The e2e test uses a fake adb and headless Chromium in place of a phone:

bash
npm run buildCHROME=/path/to/chrome npm run test:e2e

Roadmap

  • Discover devices and WebView pages
  • Console messages, uncaught exceptions, browser log entries
  • Network requests and responses
  • JSBridge call logging (configurable bridge shapes)
  • evaluate_js
  • screenshot
  • JSBridge mocking
  • iOS (WKWebView via WebKit Inspector Protocol)

License

MIT

来源:README.md,提交 ce0e832

工具

5

list_targets

List WebView pages

List debuggable H5 pages running inside Android WebViews (and Chrome) on connected devices. Returns a target id for each page to pass to attach.

无需输入参数。

attach

Attach to a page

Connect to a WebView page and start buffering its console output and uncaught exceptions (the last 1000 entries). Recent messages the engine still holds are replayed on attach, but attach before reproducing an issue to be sure nothing is missed. Only observes the page: it is not reloaded or modified. May be refused while Chrome DevTools (chrome://inspect) is attached to the same page; close it and retry. Calling it again for an attached page reuses the existing session.

输入参数target_id必填

get_console

Read console output

Read buffered console messages, uncaught exceptions and browser log entries from an attached page. Requires attach first; only entries captured since attach (plus what attach replayed) are available. Returns the most recent matching entries. Pass since_seq from a previous call to get only new entries.

输入参数limitlevelskeywordsince_seqtarget_idexclude_keywords

evaluate_js

Evaluate JavaScript in a page

Run a JavaScript expression in an attached page and return its result. Plain objects/arrays come back as JSON (so nested Map/Set/DOM values show as {}); other values (DOM nodes, Map, Set, Error, window) as a short description. Promises are awaited. For multiple statements or await, wrap them: (async () => { ... })(). Runs with the page's full privileges, so it can read cookies/storage and change page state.

输入参数target_idexpression必填

detach

Detach from a page

Disconnect from a page and discard its buffered console entries. The page itself keeps running and is not closed; call attach again to resume capturing. Use it to stop capturing or to start over with an empty buffer.

输入参数target_id

版本历史

2
  1. v0.1.2最新Oct 21, 2026
  2. v0.1.1Oct 21, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分