# io.github.dynamicupgrade/chromedebug (npm · @dynamicu/chromedebug-mcp)

Record browser bugs - frames, clicks and console logs - and hand them to your AI over MCP.

- Trust score: 65/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- npm · `@dynamicu/chromedebug-mcp`: 65/100 (this document), [markdown](https://verifymcp.io/servers/dynamicupgrade-chromedebug/dynamicu-chromedebug-mcp.md), [page](https://verifymcp.io/servers/dynamicupgrade-chromedebug/dynamicu-chromedebug-mcp)

## Channel facts

- Registry: `npm`
- Package: `@dynamicu/chromedebug-mcp`
- Version: `2.9.6`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 74/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known high-severity CVE affects adm-zip 0.5.18, a direct dependency. A fixed version is available.
  - Declares code that runs automatically (postinstall) and that we could not recognise. It may be perfectly ordinary, but we have not established what it does.
  - 97 of 303 dependencies flagged as unhealthy (2 deprecated).
- **Provenance & Transparency**: 19/100
  - Repository check failed: no source repository is declared.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 23 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 69/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 2948 tokens (~70/item across 42 items; 42 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 73/100
  - Stability observed for 22 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "execute_js_on_selected" implies "execute" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 42 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the io.github.dynamicupgrade/chromedebug MCP server?

io.github.dynamicupgrade/chromedebug runs locally as an npm package, launched with npx -y @dynamicu/chromedebug-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add dynamicupgrade-chromedebug -- npx -y @dynamicu/chromedebug-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "dynamicupgrade-chromedebug": {
      "command": "npx",
      "args": [
        "-y",
        "@dynamicu/chromedebug-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "dynamicupgrade-chromedebug": {
      "command": "npx",
      "args": [
        "-y",
        "@dynamicu/chromedebug-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add dynamicupgrade-chromedebug -- npx -y @dynamicu/chromedebug-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dynamicupgrade-chromedebug": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@dynamicu/chromedebug-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add dynamicupgrade-chromedebug --command npx --arg -y --arg @dynamicu/chromedebug-mcp
```

### Hermes

```yaml
mcp_servers:
  dynamicupgrade-chromedebug:
    command: "npx"
    args: ["-y", "@dynamicu/chromedebug-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "dynamicupgrade-chromedebug": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@dynamicu/chromedebug-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add dynamicupgrade-chromedebug -t stdio -c npx -a -y @dynamicu/chromedebug-mcp
```

### Other

```json
{
  "mcpServers": {
    "dynamicupgrade-chromedebug": {
      "command": "npx",
      "args": [
        "-y",
        "@dynamicu/chromedebug-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 64, +1)

No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-31 (score 63, +1)

- [security regression] CVE-2026-118773 affects this package: high
- [security regression] CVE-2026-118764 affects this package: high

### 2026-10-28 (score 62, +1)

No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-26 (score 61, +1)

No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-24 (score 60, +1)

- [security regression] CVE-2023-54404 affects this package: high

### 2026-10-22 (score 59, +4)

- [security regression] CVE-2026-114104 affects this package: high
- [security regression] CVE-2026-114102 affects this package: high
- [security regression] CVE-2026-114103 affects this package: high
- [security improvement] GHSA-8238-w5pm-2374 no longer affects this package
- [security improvement] GHSA-c6fg-446q-cg94 no longer affects this package
- [security improvement] GHSA-p634-w6r4-rjp2 no longer affects this package
- [functional improvement] Stability: unverified → 0.27

### 2026-10-14 (score 55, +29)

- [security improvement] Injection markers: unverified → pass
- [security] First check of Judged manipulation: pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional] First check of Schema quality: fail
- [functional] First check of Destructive annotations: 0
- [functional] First check of Schema quality: pass
- [functional] First check of Schema quality: good
- [functional] First check of Tool coverage: 100

## MCP tools (42)

### `launch_chrome` (~19 tokens)

Launch a Chrome browser instance for this MCP server

### `connect_to_existing_chrome` (~41 tokens)

Connect to an existing Chrome instance with debugging enabled

Input parameters:

- `port` (number): Debugging port Chrome is running on (default: 9222)

### `navigate_to` (~24 tokens)

Navigate to a URL

Input parameters:

- `url` (string, required): URL to navigate to

### `pause_execution` (~12 tokens)

Pause Chrome execution

### `resume_execution` (~12 tokens)

Resume Chrome execution

### `step_over` (~14 tokens)

Step over in Chrome debugger

### `evaluate_expression` (~28 tokens)

Evaluate a JavaScript expression in Chrome

Input parameters:

- `expression` (string, required): JavaScript expression to evaluate

### `get_scopes` (~18 tokens)

Get scope variables from the top call frame

### `set_breakpoint` (~43 tokens)

Set a breakpoint at a specific URL and line

Input parameters:

- `lineNumber` (number, required): Line number for the breakpoint
- `url` (string, required): URL of the script

### `get_logs` (~13 tokens)

Get recent console logs

### `check_connection` (~14 tokens)

Check if Chrome is connected

### `force_reset` (~19 tokens)

Force reset Chrome by killing all processes and clearing state

### `take_screenshot` (~102 tokens)

Take a screenshot optimized for AI processing

Input parameters:

- `fullPage` (boolean): Capture full page (default: true, but limited to 600px height for AI)
- `lowRes` (boolean): Low-resolution mode for AI (default: true)
- `path` (string): Save screenshot to file path
- `quality` (number): JPEG quality (1-100, default: 30)
- `type` (string): Image type (default: jpeg)

### `get_page_content` (~93 tokens)

Get the content of the current page including text, HTML, and DOM structure. Useful for checking if specific content exists without taking a screenshot.

Input parameters:

- `includeHtml` (boolean): Include full HTML source (default: false, can be large)
- `includeStructure` (boolean): Include DOM structure with important elements and attributes (default: true)
- `includeText` (boolean): Include extracted text content (default: true)

### `get_selected_element` (~20 tokens)

Get information about the currently selected element from Chrome extension

### `apply_css_to_selected` (~30 tokens)

Apply CSS styles to the currently selected element

Input parameters:

- `css` (string, required): CSS rules to apply

### `execute_js_on_selected` (~43 tokens)

Execute JavaScript code on the currently selected element

Input parameters:

- `code` (string, required): JavaScript code to execute. The element is available as the "element" variable.

### `select_element` (~135 tokens)

Select a DOM element by CSS selector so the apply_css_to_selected, execute_js_on_selected and get_selected_element tools have a target. Requires Chrome: call launch_chrome or connect_to_existing_chrome first. Note the two mutating tools differ in reach - apply_css_to_selected injects a stylesheet rule, so it affects EVERY element matching the selector, while execute_js_on_selected runs against the FIRST match only. A selector that does not match clears the selection rather than leaving the previous one in place.

Input parameters:

- `selector` (string, required): CSS selector for the element to select, e.g. "#submit" or ".row .qty".

### `clear_selected_element` (~15 tokens)

Clear the currently selected element

### `get_workflow_recording` (~66 tokens)

Get a complete workflow recording including actions and optional logs. WARNING: can be very large. Screenshot bytes are replaced by hasScreenshot/actionIndex; pass that actionIndex to get_workflow_screenshot to view one image.

Input parameters:

- `sessionId` (string, required): The workflow session ID

### `list_workflow_recordings` (~97 tokens)

List all workflow recordings stored in the database. Reports dbPath and dbFile (ok|missing|replaced|unknown), the file this server actually holds. A query on a deleted handle succeeds and returns nothing, so when dbFile is missing/replaced this THROWS rather than returning an empty list, and returns rows with a warning when it has some. Screen and video recordings are a separate table - see list_frame_sessions.

### `get_workflow_function_traces` (~136 tokens)

NOT AVAILABLE: function tracing does not ship, so this always returns an empty list - it is not a finding about the page. Kept only so an older recording that contains traces can still be read. Use get_workflow_summary, get_workflow_errors or chromedebug_show_frames instead. Screenshot bytes are replaced by hasScreenshot/actionIndex; pass that actionIndex to get_workflow_screenshot to view one image.

Input parameters:

- `includeStack` (boolean): Include stack traces (default: false)
- `limit` (number): Maximum number of traces to return
- `sessionId` (string, required): The workflow session ID

### `get_workflow_errors` (~74 tokens)

Get only error logs and error-related actions from a workflow. Screenshot bytes are replaced by hasScreenshot/actionIndex; pass that actionIndex to get_workflow_screenshot to view one image.

Input parameters:

- `includeWarnings` (boolean): Include warning logs (default: false)
- `sessionId` (string, required): The workflow session ID

### `get_workflow_summary` (~31 tokens)

Get a concise summary of a workflow recording

Input parameters:

- `sessionId` (string, required): The workflow session ID

### `get_workflow_screenshot` (~99 tokens)

Get the screenshot image data for a single workflow action as base64. The workflow tools return hasScreenshot/actionIndex instead of the bytes; call this with that actionIndex to view one image.

Input parameters:

- `actionIndex` (number, required): The action index to retrieve the screenshot from (0-based)
- `includeMetadata` (boolean): Include image metadata like size and format (default: false)
- `sessionId` (string, required): The workflow session ID

### `get_workflow_actions_filtered` (~126 tokens)

Get filtered workflow actions by action type, with pagination. Screenshot bytes are replaced by hasScreenshot/actionIndex; pass that actionIndex to get_workflow_screenshot to view one image.

Input parameters:

- `actionTypes` (array): Filter by action types (e.g., ["click", "input", "function-trace"])
- `includeDetails` (boolean): Include full action details (default: false)
- `limit` (number): Maximum number of actions to return
- `sessionId` (string, required): The workflow session ID
- `startIndex` (number): Start index for pagination

### `save_restore_point` (~78 tokens)

Save a restore point for the current browser state including DOM, form values, storage, and cookies

Input parameters:

- `actionIndex` (number): The action index in the workflow where this restore point was created
- `description` (string): Optional description of this restore point
- `workflowId` (string, required): The workflow ID this restore point belongs to

### `restore_from_point` (~37 tokens)

Restore the browser to a previously saved restore point

Input parameters:

- `restorePointId` (string, required): The ID of the restore point to restore from

### `list_restore_points` (~33 tokens)

List all restore points for a workflow

Input parameters:

- `workflowId` (string, required): The workflow ID to get restore points for

### `chromedebug_show_frames` (~208 tokens)

Display frame recording information in a compact format optimized for MCP tools. Shows frame metadata, console logs, and timestamps without including large image data. If the session is absent AND this server holds a stale database file, it fails with that reason instead of reporting a plain not-found, which would describe this process rather than your data.

Input parameters:

- `logLevel` (string): Filter logs by level: error, warn, info, debug, log, or all (default: all)
- `maxFrames` (number): Maximum number of frames to display (default: 10)
- `maxLogsPerFrame` (number): Maximum number of logs to show per frame (default: 10). Use 0 for no limit.
- `sessionId` (string, required): The frame session ID to display
- `showInteractions` (boolean): Whether to show user interactions for each frame (default: true)
- `showLogs` (boolean): Whether to show console logs for each frame (default: true)

### `get_frame_session_info` (~134 tokens)

Get information about a frame capture session including total frames and timestamps, and `annotatedFrames` - the frames a user drew on or left a note about, which is where to look first. Reports dbPath and dbFile (ok|missing|replaced|unknown) and warns when the session was read out of a stale handle: replaced means frames recorded since the swap are elsewhere, missing means these rows are freed when this process exits. If the session is absent AND the handle is stale it fails rather than saying not found.

Input parameters:

- `sessionId` (string, required): The frame session ID returned when recording was saved

### `list_frame_sessions` (~205 tokens)

List saved screen/video recordings (frame capture sessions), newest first, with their session IDs. Use this FIRST when you do not already have a session ID - the IDs it returns are what chromedebug_show_frames, get_frame_session_info, get_frame, get_frame_screenshot and search_frame_logs all take. Workflow and click-to-capture screenshot recordings are stored separately; list those with list_workflow_recordings. The response carries dbPath and dbFile, which describe THIS server's own database handle (ok | missing | replaced | unknown) and say nothing about other servers - an empty list with dbFile 'ok' can still mean another server holds your recordings. This tool fails rather than returning an empty list when its handle is stale.

Input parameters:

- `limit` (number): Maximum sessions to return (default: 50). Use 0 for no limit.
- `offset` (number): Number of sessions to skip, for paging through a long list (default: 0).

### `get_screen_interactions` (~47 tokens)

Get all user interactions (clicks, inputs, keypresses, scrolls) recorded during a screen recording session

Input parameters:

- `sessionId` (string, required): The screen recording session ID

### `get_frame` (~119 tokens)

Get a specific frame from a frame capture session

Input parameters:

- `frameIndex` (number, required): The frame index to retrieve (0-based)
- `logLevel` (string): Filter logs by level: error, warn, info, debug, log, or all (default: all)
- `maxLogs` (number): Maximum number of logs to show (default: 20). Use 0 for no limit.
- `searchLogs` (string): Search for specific text in log messages (case insensitive)
- `sessionId` (string, required): The frame session ID

### `search_frame_logs` (~102 tokens)

Search for specific logs across all frames in a recording session

Input parameters:

- `logLevel` (string): Filter by log level: error, warn, info, debug, log, or all (default: all)
- `maxResults` (number): Maximum number of matching logs to return (default: 50)
- `searchText` (string, required): Text to search for in log messages (case insensitive)
- `sessionId` (string, required): The frame session ID to search

### `get_frame_logs_paginated` (~140 tokens)

Get logs for a specific frame with pagination to handle large log volumes

Input parameters:

- `frameIndex` (number, required): The frame index to retrieve logs from (0-based)
- `limit` (number): Maximum number of logs to return (default: 100)
- `logLevel` (string): Filter by log level: error, warn, info, debug, log, or all (default: all)
- `offset` (number): Number of logs to skip (for pagination, default: 0)
- `searchText` (string): Search for specific text in log messages (case insensitive)
- `sessionId` (string, required): The frame session ID

### `get_frame_screenshot` (~166 tokens)

Get the screenshot image data for a specific frame as base64 encoded string. If the user drew on the frame, this returns the MARKED-UP image, with each shape numbered, and returns their notes as text in `notes` ([{shape, type, note}]) keyed to those numbers - the drawing says where, the note says what. Pass original: true for the clean frame underneath.

Input parameters:

- `frameIndex` (number, required): The frame index to retrieve screenshot from (0-based)
- `includeMetadata` (boolean): Include image metadata like size and format (default: false)
- `original` (boolean): Return the CLEAN frame instead of the marked-up one, for looking under a drawing (default: false)
- `sessionId` (string, required): The frame session ID

### `play_workflow_recording` (~65 tokens)

Play a workflow recording by executing all recorded actions

Input parameters:

- `sessionId` (string, required): The workflow session ID to play
- `speed` (number): Playback speed multiplier (1 = normal, 2 = 2x faster, 0.5 = half speed)

### `play_workflow_by_name` (~64 tokens)

Play a workflow recording by its name

Input parameters:

- `name` (string, required): The name of the workflow recording to play
- `speed` (number): Playback speed multiplier (1 = normal, 2 = 2x faster, 0.5 = half speed)

### `capture_screenshot` (~130 tokens)

Capture a screenshot of the current page via Puppeteer. Supports current viewport, full page, or a specific CSS selector section. Higher quality than the AI-optimized take_screenshot tool. mode:'section' REQUIRES a selector and errors without one.

Input parameters:

- `mode` (string): Capture mode: current_view (viewport only), full_page (entire scrollable page), section (specific element)
- `quality` (number): JPEG quality 1-100 (default: 90)
- `selector` (string): CSS selector for section mode (e.g., "#main-content", ".hero-section")

### `get_screenshot_capture` (~43 tokens)

Retrieve a previously saved screenshot capture by its ID. Returns the base64 image data.

Input parameters:

- `captureId` (string, required): The ID of the screenshot capture to retrieve

### `list_screenshot_captures` (~53 tokens)

List all saved screenshot captures. Returns metadata (ID, mode, URL, timestamp) without image data for efficiency.

Input parameters:

- `limit` (number): Maximum number of captures to return (default: 20)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/dynamicupgrade-chromedebug/dynamicu-chromedebug-mcp#diagnostics

## Score history

- 2026-11-05: 65
- 2026-11-04: 65
- 2026-11-03: 64
- 2026-11-02: 64
- 2026-11-01: 63
- 2026-10-31: 63
- 2026-10-30: 62
- 2026-10-29: 62
- 2026-10-28: 62
- 2026-10-27: 61
- 2026-10-26: 61
- 2026-10-25: 60
- 2026-10-24: 60
- 2026-10-23: 59
- 2026-10-22: 59
- 2026-10-21: 55
- 2026-10-20: 55
- 2026-10-19: 55
- 2026-10-18: 55
- 2026-10-17: 55
- 2026-10-16: 55
- 2026-10-15: 55
- 2026-10-14: 55
- 2026-10-13: 26
- 2026-10-12: 26

## Common questions

### What is the io.github.dynamicupgrade/chromedebug MCP server?

io.github.dynamicupgrade/chromedebug is an MCP server listed in the public MCP registry as io.github.dynamicupgrade/chromedebug. Record browser bugs - frames, clicks and console logs - and hand them to your AI over MCP. This page covers its npm package (@dynamicu/chromedebug-mcp).

### Is the io.github.dynamicupgrade/chromedebug MCP server safe to use?

io.github.dynamicupgrade/chromedebug scores 65 out of 100 on VerifyMCP. We recorded 14 known advisories against it as of 5 November 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.dynamicupgrade/chromedebug MCP server expose?

io.github.dynamicupgrade/chromedebug exposes 42 tools: launch_chrome, connect_to_existing_chrome, navigate_to, pause_execution, resume_execution, and 37 more. Their descriptions and schemas cost roughly 2,948 tokens of context every time the server is loaded.

### Is the io.github.dynamicupgrade/chromedebug MCP server still maintained?

io.github.dynamicupgrade/chromedebug is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the io.github.dynamicupgrade/chromedebug MCP server under?

io.github.dynamicupgrade/chromedebug declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/@dynamicu/chromedebug-mcp
- Socket report: https://socket.dev/npm/package/@dynamicu/chromedebug-mcp
- Changelog RSS feed: https://verifymcp.io/servers/dynamicupgrade-chromedebug/dynamicu-chromedebug-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/dynamicupgrade-chromedebug/dynamicu-chromedebug-mcp.json
- HTML version of this page: https://verifymcp.io/servers/dynamicupgrade-chromedebug/dynamicu-chromedebug-mcp
