Skip to main content
Glama

Chrome DevTools

Give your DeepSeek Harness Agent a real Chrome browser to drive and inspect.

This plugin installs Chrome DevTools MCP as the Harness browser provider, so the Agent works a Chrome window you can watch. It opens pages, reads them, clicks and types, takes screenshots, reads console messages and network requests, runs scripts, records performance traces, and runs Lighthouse audits.

Chrome belongs to the chat that opened it. Close the chat and its browser goes with it, so one conversation can never drive another one's pages.

What you can ask for

  • "Open example.com, screenshot it, and tell me the console errors."

  • "Go to my app on localhost:3000, sign up with a test account, and tell me whether the confirmation step works."

  • "Record a performance trace on localhost:3000 and explain the largest contentful paint."

  • "Run a Lighthouse audit on localhost:3000 and tell me what fails accessibility."

  • "Screenshot that page at 375 pixels wide so I can check the mobile layout."

  • "Click the thing that is broken and tell me exactly what the network request returns."

Related MCP server: browspark-mcp

Install

  1. In the Harness, open Plugins in the left sidebar.

  2. Press Install.

  3. Paste this repository's address:

    https://github.com/DevTarlow/dsh-chrome-devtools
  4. Install it, then refresh the page.

  5. Start a new chat. The Agent connects a browser when a chat begins, so a chat that was already open when you installed keeps running without one.

The install dialog accepts a GitHub address, a package name, or a local folder. To pin the release this README describes, paste github:DevTarlow/dsh-chrome-devtools#v0.1.0 instead. If you would rather ask your Agent, say: "Install the bundle github:DevTarlow/dsh-chrome-devtools."

You need Google Chrome (or Chrome for Testing) at its current stable version. The plugin finds it by itself, so a normal installation needs no configuration. You also need a desktop session, because the browser opens a real window.

Check it works

In a new chat, ask:

Open example.com and tell me its title and any console errors.

A Chrome window opens, loads the page, and the Agent answers from what it read. If you would rather not open a window, see headless under Settings.

Settings

The plugin's defaults are set in cordis.patch.yml. To change one, put the same override in your own Harness profile's cordis.patch.yml — for example ~/.dsh/profiles/web/cordis.patch.yml — then start a new chat.

- id: browser-use-chrome-devtools
  name: '@deepseek-ai/dsh-experimental-browser-use-chrome-devtools-mcp'
  config:
    mode: launch
    headless: true

Any setting you leave out falls back to the plugin's own default rather than this bundle's, so restate every value you still want whenever you edit that block.

Setting

Default

What it does

mode

launch

launch starts a fresh Chrome for each chat. Use attach to drive a browser you started yourself.

headless

false

false opens a window you can watch. Set true on a server or in CI, where there is no display.

executablePath

unset

Which Chrome to launch. Left unset, the plugin finds it. Set it for an unusual install, or for the wrapper in Common questions.

endpoint

—

Required by attach: the debugging address of the browser you started, such as http://127.0.0.1:9222.

toolCallTimeoutMs

the client's own

How long one tool call may take, in milliseconds.

Drive your own browser instead

launch gives every chat a fresh profile, which means it starts logged out. To keep the tabs, cookies and logins you already have, start Chrome yourself and point the plugin at it.

google-chrome --remote-debugging-port=9222 --user-data-dir="$HOME/.dsh-chrome"
- id: browser-use-chrome-devtools
  name: '@deepseek-ai/dsh-experimental-browser-use-chrome-devtools-mcp'
  config:
    mode: attach
    endpoint: http://127.0.0.1:9222

One chat holds that browser at a time. When the chat ends, the plugin disconnects and leaves your browser running.

Start that browser before you open a chat. The plugin connects when a chat is created, so a chat started while the browser is unreachable has no browser tools.

Chrome extensions

The browser this plugin launches is a clean, isolated profile with extensions disabled, so it cannot load or test an unpacked extension. To test one, attach the plugin to a Chrome you start yourself, with the extension already loaded:

- id: browser-use-chrome-devtools
  name: '@deepseek-ai/dsh-experimental-browser-use-chrome-devtools-mcp'
  config:
    mode: attach
    endpoint: http://127.0.0.1:9222

The plugin then drives the pages with its normal browser tools. It does not pass Chrome DevTools MCP's --category-extensions flag, so the extension-specific tools (install_extension, reload_extension, list_extensions, trigger_extension_action) and chrome-extension:// pages are not available through the plugin. Use the chrome-devtools CLI from the same pinned chrome-devtools-mcp release for those:

chrome-devtools start --browser-url http://127.0.0.1:9222 --categoryExtensions=true
chrome-devtools list_extensions
chrome-devtools install_extension /absolute/path/to/unpacked-extension
chrome-devtools reload_extension <extension-id>
chrome-devtools new_page "chrome-extension://<extension-id>/popup.html"

Loading an extension over a browser URL needs Chrome 149 or newer. Stop the CLI daemon with chrome-devtools stop when you are done.

Use a dedicated profile for that browser. The debugging port gives anything on the machine full control of it, so keep it bound to localhost and stop the browser when you finish testing.

Use your existing logged-in Chrome

Chrome 136+ does not allow --remote-debugging-port against the default profile, but you can let the CLI attach to the Chrome you are already using. Enable Chrome's remote debugging bridge (Chrome 144+):

  1. Open chrome://inspect/#remote-debugging in that Chrome.

  2. Turn on Enable remote debugging and leave the browser running.

  3. Click Allow when Chrome asks to allow the session.

The CLI finds that browser itself:

chrome-devtools start --auto-connect --channel=stable --categoryExtensions=true
chrome-devtools list_extensions

For the plugin, read the browser's websocket endpoint and use it as the attach endpoint:

PORT=$(head -1 ~/.config/google-chrome/DevToolsActivePort)
WSPATH=$(sed -n 2p ~/.config/google-chrome/DevToolsActivePort | tr -d '\r')
- id: browser-use-chrome-devtools
  name: '@deepseek-ai/dsh-experimental-browser-use-chrome-devtools-mcp'
  config:
    mode: attach
    endpoint: ws://127.0.0.1:<port><path>

The port and browser ID change when Chrome restarts or the toggle is turned off and on; update the endpoint and start a new chat. While remote debugging is on, the agent can read every tab, cookie, and login in that profile. Turn it off at chrome://inspect/#remote-debugging when you finish testing.

Common questions

The browser tools are missing. Start a new chat. The plugin connects a browser when a chat is created, so chats that were already open do not have one.

Chrome exits immediately, or the Agent reports No usable sandbox!. Chrome cannot start with its own sandbox on your machine. This is common in containers and WSL, on Ubuntu 23.10+ where AppArmor restricts unprivileged user namespaces, and wherever /opt/google/chrome/chrome-sandbox is not owned by root with mode 4755. Repairing that needs root. Otherwise launch Chrome through a wrapper that adds --no-sandbox and point executablePath at it:

printf '#!/bin/sh\nexec /usr/bin/google-chrome --no-sandbox "$@"\n' > ~/chrome-no-sandbox
chmod +x ~/chrome-no-sandbox
        executablePath: /home/you/chrome-no-sandbox

That runs untrusted page content without the operating system's sandbox. Fix the sandbox if you can, and treat the wrapper as a last resort.

Missing X server to start the headful browser. Your machine has no display. Set headless: true.

The page shows a login wall, or the browser starts empty. That is what a fresh profile looks like. Use attach above to bring your own logged-in browser.

A screenshot arrives as text instead of a picture. Your model route has to accept images, and your profile needs an attachment store, for the image to reach the model.

Saving a screenshot to a file is refused. The browser tools may only write under your operating system's temp directory — a path inside your project is answered with Access denied: path … is not within any of the configured workspace roots. Ask for the screenshot as an image instead; it reaches the model without touching the filesystem.

Installing was rejected for incompatible peers. The browser packages this plugin builds on are pre-stable and pin the Harness version exactly. Update the two dependencies in package.json to the versions that match your Harness release.

The console prints Update available: 1.9.0 -> 1.10.1. That notice comes from the Chrome DevTools MCP server this plugin mounts, not from the plugin itself, and the version it offers is chosen by DeepSeek Harness. The npm install it suggests does nothing here: the plugin starts its own pinned copy, so running that command only adds a stray dependency wherever you ran it. Ignore the notice, or start the Harness with CHROME_DEVTOOLS_MCP_NO_UPDATE_CHECKS=1 to silence it.

Limits

  • One browser plugin per Harness. Do not also install the Playwright or Stagehand browser providers.

  • Chromium only. Firefox and WebKit are not offered.

  • A launched browser belongs to one chat. Reloading or resuming a chat starts fresh browser state; the conversation does not restore cookies or pages.

  • Cancelling a call cannot undo a navigation or click that already happened.

  • Tool definitions come from the pinned chrome-devtools-mcp release, not from the Harness, so they carry no stability promise.

  • Usage statistics are off. Performance tools otherwise behave as upstream documents them, including sending trace URLs to the Google CrUX API.

Removing it

Open Plugins, find dsh-chrome-devtools, and uninstall it. Chats you start afterwards have no browser tools. If you added a cordis.patch.yml override, delete that block too.

For developers

This repository is a configuration-only bundle: two files, no build step.

File

Owns

cordis.patch.yml

the two rows this bundle inserts and their defaults

verify-live.mjs

a check that drives the MCP server without a Harness

verify-live.mjs lists the tool catalog, opens a URL, reads the page title, and writes a screenshot. Run it from a DeepSeek Harness source checkout:

cd packages/experimental/browser-use-chrome-devtools-mcp
export DSH_MCP_CLI=$(node --input-type=module -e "import {fileURLToPath} from 'node:url'; console.log(fileURLToPath(import.meta.resolve('chrome-devtools-mcp/build/src/bin/chrome-devtools-mcp.js')))")
cd ../../..
export DSH_MCP_SDK=$PWD/packages/mcp/mcp-client/node_modules/@modelcontextprotocol/client/dist
DSH_MCP_HEADLESS=true node dsh-chrome-devtools/verify-live.mjs https://example.com dsh-chrome-devtools/live-check.png

Set DSH_MCP_HEADLESS=true only in a shell that cannot reach the X server; the bundle itself opens a window. Set DSH_MCP_EXECUTABLE to test a particular Chrome or a wrapper.

The two dependencies in package.json are the whole reason this plugin works on a released Harness: the browser packages are not part of a published dsh, so they install with the bundle. A profile that installs this repository from a git spec installs them. A profile that links this directory as a local bundle does not, and the rows then resolve from whatever the Harness installation carries.

License

MIT

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to control and inspect a live Chrome browser for automated web debugging, performance analysis, and Lighthouse audits. It allows agents to capture screenshots, monitor network requests, and measure Core Web Vitals using plain-English prompts.
      2,099,626 npm
      Apache 2.0
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI agents to browse, click, and debug real websites in the user's own signed-in browser or a dedicated Chrome instance, with only explicitly shared tabs reachable and revocable at any time. Exposes the full developer toolbox — console, network, sources, debugger, elements, performance and CPU/memory profiling, storage, service workers, coverage, emulation, accessibility, security, Lighthouse, and Playwright-test recording — as first-class tools callable in one step.
      27 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables an agent to run live mobile and desktop browser sessions of a web page and receive measured, selector-attached findings as text — contrast ratios, touch-target sizes, clipping, overflow, and theme drift — instead of guessing from screenshots, while a human shares the same live view and can pin notes for the agent to read.
      95 npm
      MIT