dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Real Chrome browser control for DeepSeek Harness agents, powered by Chrome DevTools MCP
中文 | English
Give DeepSeek Harness agents control over a real Chrome browser via chrome-devtools-mcp: navigation, clicking, typing, screenshots, DOM snapshots, console, network requests, performance traces, and cookies.
The only install path is the official dsh plugin one-command install
(GitHub source; no clone required). This repository root is itself an
official bundle plugin (package.json declares dsh.bundle,
cordis.patch.yml is the patch layer): the MCP server row is built into the
plugin, so it is ready to use right after install — no extra components to
install, no MCP configuration to write.
dsh plugin add github:...; the package is reconciled
into the profile's patch-layer stack automatically, zero manual config.npx -y chrome-devtools-mcp@latest —
the same convention Claude Code / Claude Desktop / Cursor use for
chrome-devtools-mcp. First use downloads it automatically (30-60s); afterwards
the npx cache starts it in about a second. No global install, no prerequisites.mcp__chrome-devtools__* tools.dsh-mcp-client supervisor restarts a crashed server
with exponential backoff and a failure budget that prevents infinite restarts.| Dependency | Notes |
|---|---|
| DeepSeek Harness | ships @deepseek-ai/dsh-mcp-client, the bridge plugin |
| Node.js ≥ 20 | npx on PATH (ships with Node) |
| pnpm | package manager behind dsh plugin (npm i -g pnpm or corepack enable) |
| Chrome / Chromium / Edge | installed locally; pick one via --channel in the plugin args |
dsh plugin --profile web add github:yuzi-ska/DSH-Chrome-devtools
(Replace web with your profile name — tui, headless, etc.)
Then restart the host (dsh web / however you launch it). After the restart
every session sees tools such as mcp__chrome-devtools__navigate_page,
take_snapshot, take_screenshot, list_console_messages,
get_network_request, performance_start_trace (exact set per the
server's declaration). No further configuration is needed.
First use downloads the server via npx (~30-60s) and launches Chrome; afterwards it stays resident and starts in about a second.
Uninstall:
dsh plugin --profile web remove dsh-chrome-devtools
git clone https://github.com/yuzi-ska/DSH-Chrome-devtools.git
cd DSH-Chrome-devtools
node scripts/install.mjs # installs into the web profile (local link; edits take effect after restart)
node scripts/install.mjs --check # environment check (read-only)
node scripts/install.mjs --uninstall
node scripts/install.mjs [options]
--check environment check: node/pnpm/dsh/browser/DSH_HOME; writes nothing
--uninstall uninstall (dsh plugin remove)
--profile <name> target profile (default web)
--dsh-home <path> override DSH_HOME (default $DSH_HOME or ~/.dsh)
--harness <path> harness repo/install path (runs the CLI via node when dsh is not on PATH)
--plugin-spec <s> plugin source (default this repo root; npm name, git source, or local path)
--package-name <n> package name used by uninstall (default dsh-chrome-devtools)
Harness (profile composition)
│
│ bundle plugin patch layer (this repo's cordis.patch.yml)
▼
@deepseek-ai/dsh-mcp-client row (stdio, shipped with Harness; config built into the plugin)
│
▼
chrome-devtools-mcp server (npx -y chrome-devtools-mcp@latest, spawned by the host; first-run auto download, then cache hit)
│
│ Chrome DevTools Protocol
▼
One shared Chrome instance (auto-launches the locally installed Chrome/Chromium/Edge)
ctx.tools as mcp__chrome-devtools__<tool> and
called like a native tool by the model.dsh-mcp-client supervisor reconnects with
exponential backoff; after 10 consecutive failures the tools are unregistered
(recover by restarting the host).Per the server's actual declaration (28 tools in the current version):
| Family | Tools (mcp__chrome-devtools__ prefix) |
|---|---|
| Pages | navigate_page / new_page / close_page / select_page / list_pages / resize_page |
| Snapshots | take_snapshot (DOM/accessibility tree) / take_screenshot |
| Interaction | click / fill / fill_form / type_text / press_key / hover / drag |
| Scripting | evaluate_script (run JS in the page, returns JSON) |
| Emulation | emulate (viewport/network/UA/geolocation/color scheme) |
| Console | list_console_messages / get_console_message |
| Network | list_network_requests / get_network_request (with request/response bodies) |
| Performance | performance_start_trace / performance_stop_trace / performance_analyze_insight |
| Auditing | lighthouse_audit |
| Other | handle_dialog / upload_file / wait_for |
The defaults work out of the box; the following are optional (restart the host
after editing cordis.patch.yml).
- id: mcp-chrome-devtools
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: chrome-devtools # tool namespace: mcp__chrome-devtools__*
transport: stdio
command: npx
args: ['-y', 'chrome-devtools-mcp@latest']
toolCallTimeoutMs: 120000
failOnStartupError: false
| Field | Default | Meaning |
|---|---|---|
serverName | chrome-devtools | [A-Za-z0-9_-]{1,32}, unique across live mcp-client instances |
command / args | npx -y ... | stdio launch command; the same convention as the Claude Code ecosystem; npx resolves correctly on Windows via the SDK's cross-spawn |
toolCallTimeoutMs | 120000 | per-tool-call timeout; loosen for page loads / traces |
failOnStartupError | false | true rejects the composition on first-connect failure; false logs and retries with backoff |
env / cwd | empty | extra env vars / working directory (defaults to the host's) |
reconnect.* | see docs | backoff budget: initialDelayMs 500 / maxDelayMs 30000 / maxAttempts 10 |
args)| Option | Effect |
|---|---|
--headless | headless mode, no visible window |
--channel <name> | pick the browser: chrome (default) / stable / beta / dev / canary / msedge / executable path |
--browserUrl <url> | attach to an already-running Chrome (e.g. http://localhost:9222) |
--isolated | a fresh isolated Chrome profile per server process |
--viewport <WxH> | fixed window/viewport size, e.g. 1280x720 |
--proxy-server <url> | route the browser through a proxy |
--user-data-dir <path> | custom Chrome user-data directory |
--keepAlive | keep the server alive when all MCP connections close (default on) |
See the official docs/cli.md for the full list.
serverName and args (e.g. --isolated
or a separate --user-data-dir) in another instance.failOnStartupError: false, a server in a crash loop burns the reconnect
budget and the tools are unregistered — deliberate failure visibility, no
infinite restarts.| Symptom | Fix |
|---|---|
| First call is slow (30-60s+) | npx first download + Chrome first launch; one-time cost, then cache hit and resident |
| No browser tools appear | Check host logs for mcp-client(chrome-devtools): reconnecting (warn), recovered (info), disabled-loss (error) |
| Tools missing after install | Bundle plugins load at startup — restart the host; the profile-layer config hot-reload does not apply new rows |
| Chrome missing/not found | Add --channel to args (e.g. msedge), or confirm default Chrome exists |
| npx download fails | Check npm registry connectivity; pin a version in args: ['-y', 'chrome-devtools-mcp@<version>'] to reduce drift |
| Attach an already-open Chrome | Start Chrome with --remote-debugging-port=9222, add --browserUrl http://localhost:9222 to args |
dsh plugin reports missing pnpm | Install pnpm (npm i -g pnpm or corepack enable) |
| Tool call times out | 120s per call; raise toolCallTimeoutMs for slow networks or stuck pages |
| EPERM when switching from a local link to a GitHub source | Windows junctions cannot be renamed over by pnpm: dsh plugin remove first, then add the new source |
Marketplace install fails with entry file missing (dsh-plugin.org) | The marketplace installer requires a resolvable entry in the distributed package; since v0.1.1 the package ships one (index.js, packaging-only, carries no capability) — refresh to the latest version and reinstall |
git clone https://github.com/yuzi-ska/DSH-Chrome-devtools.git
cd DSH-Chrome-devtools
# local link install (edits to cordis.patch.yml take effect after restart; no push needed)
node scripts/install.mjs --harness <harness-repo-path>
# verify the composed tree without booting (boot-free)
node <harness>/apps/cli/lib/bin.js --profile web --dump-config | grep -A8 mcp-chrome-devtools
dsh plugin --profile web add github:yuzi-ska/DSH-Chrome-devtools.docs/development.md and are excluded from
the remote repository (see .gitignore).dsh plugin command)