# CDPM [Health: Active]

**Category:** 📂 Browser Automation  
**Repository:** https://github.com/IGELHARINE/CDPM  
**GitHub Stars:** 2  
**npm Downloads (last month):** 1757  
**Views:** 1  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/igelharine-cdpm

## Description
Shares numbered, logged-in Chrome instances over CDP across multiple Claude Code sessions, with per-tab command queues. Local stdio server.

## Tools
Capabilities this server exposes over MCP:

- **browser_status** — Live slots, tabs, openers, last actions, summaries, dialogs
- **browser_launch** — Start a slot — only when the user asks; no `slot` = lowest free; `slots` (list) or `count` start several at once, lowest first; `url` / `urls` open a start page right away. Window or headless is the user's choice: if they didn't say, Claude asks first (without `headless`, a closed slot is not start…
- **browser_close** — Close gracefully (profile kept)
- **browser_tabs** — List / open in background (returns ID) / close / bring to front (only when the user wants)
- **browser_snapshot** — Accessibility text with refs; `page`, `find`, `ref
- **browser_text** — Readable text (main/article first, or one `ref`), paginated
- **browser_screenshot** — Visible area as PNG, background tabs included; no full-page capture
- **browser_navigate** — Waits for load; slow servers are reported as "still loading", not as errors
- **browser_click** — Real mouse click; reports covering elements, new tabs, form-validation failures
- **browser_type** — Real key events per character (`clear`, `submit`, `fast`); verifies the value and does not press Enter for `submit` if the value differs (the site rejected or reformatted the input); date/time inputs are set after format validation
- **browser_fill** — Fill several inputs on one page in order, then optionally `submit` ("Enter" or a button ref); stops at the first failure, page change, dialog or a field whose value differs from what was typed (nothing is submitted then)
- **browser_dialog** — Accept or dismiss an open alert/confirm/prompt/beforeunload (`text` for prompt). Claude decides from the message
- **browser_permission** — List or answer Chrome permission bubbles ("site wants to access other apps and services on this device", notifications, location…) by exact button name. Windows, windowed slots
- **browser_forward** — Forward / reload (Chrome's own reload, `ignore_cache`)
- **browser_hover** — Real mouse over an element (hover-only menus)
- **browser_drag** — Real mouse drag: drag-and-drop, sliders, reordering. Drop on `to` (ref), `to_text` (text) or `dx`/`dy`. HTML5 drags are handled without an OS drag; `draggable` elements get refs
- **browser_download_wait** — Wait for a download to finish and return the saved file path (Chrome's download folder setting is kept)
- **browser_pdf** — Save the page as PDF (default: Downloads folder, named after the title)
- **browser_upload** — Upload files: into a file input by ref, or after clicking an "attach" button (CDPM intercepts the OS file dialog so it never appears) without a ref
- **browser_select** — <select>`: focus + keys (arrow keys on Windows, option prefix on macOS; trusted events, no popup)
- **browser_press_key** — Enter`, `Tab`, `Control+A` (`Meta+A` on macOS), … (clipboard keys refused)
- **browser_scroll** — To a ref, or exactly `dy` pixels (reports position A → B)
- **browser_wait** — Text in body or title / `gone` (text disappears) / `url` change / `enabled` (a button or input stops being disabled) / `response` (a network response whose URL matches finishes; returns its body, e.g. the JSON behind an SPA list — responses that arrived while you clicked are caught too; nothing ext…
- **browser_eval** — JavaScript in an isolated world (DOM visible, page globals not)
- **browser_network** — Requests (last 500, 30 min) / headers, post data, body
- **browser_block** — Block/unblock URL patterns on a tab, including its cross-site iframes (already open or created later, blocked before their first request); while the session lives; visible to other agents
- **slot_send** — Message an agent (use the receiver's slot number, works across slots) / receive (`wait` returns within ~0.1 s of a message, up to 600 s). A message also interrupts `browser_wait` immediately
- **slot_pause** — Pause a slot when the user says so ("stop slot 3"): every action is refused at once, an action already running stops before its next key or mouse event, and waits return. Reading the screen still works. Resume wakes the agents with a message so they re-read the page and continue. Applies to every C…

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "cdpm": {
    "command": "npx",
    "args": ["-y","cdpm-mcp"]
  }
}
```

## Documentation

## What CDPM does

The CDPM MCP server exposes up to 30 numbered Chrome slots to MCP clients. Each slot runs an ordinary Chrome instance with its own profile and fixed CDP port, allowing logins and browser state to persist between runs. Multiple Claude Code sessions or subagents can address the same slot by number, while commands for an individual tab are queued to prevent concurrent actions from interleaving.

The server is intended for the 📂 Browser Automation category. It can operate visible or headless Chrome, but a slot is started only through `browser_launch`. Closing the MCP client does not close running slots; slots remain available until explicitly closed or the Chrome window is ended.

## How it works

CDPM communicates directly with Chrome through CDP rather than Playwright or Puppeteer. Mouse and keyboard actions are sent as browser input events. Page inspection uses accessibility snapshots, readable text extraction, screenshots, isolated-world JavaScript evaluation, and network inspection. Snapshot references can be passed to interaction tools such as clicking, typing, selecting, hovering, dragging, or uploading.

Slots use ports beginning at 14050 for slot 1 and increasing by slot number. The server records which agent opened or last used a tab, reports relevant status, and warns when another agent recently used the same tab. `slot_send` and `slot_inbox` provide disk-backed messages between agents assigned to different slots. `slot_pause` can stop actions for a slot while still allowing its screen to be read.

## Setup and configuration

The CDPM MCP server requires Node.js 22 or newer and Google Chrome. Install the package globally, then run its setup command:

```sh
npm install -g cdpm-mcp
cdpm install
```

After restarting the MCP client, a user can request a slot, such as opening slot 1 and navigating to a site. Chrome is located automatically on supported Windows and macOS installations; Linux support is experimental and has not been tested on a Linux machine. Set `CDPM_PORT_BASE` when the default CDP port range conflicts with another service.

## Tools and capabilities

Available tool groups cover:

- Slot lifecycle: launch, close, inspect status, and pause or resume slots.
- Tabs and navigation: list, open, close, focus, navigate, reload, and move forward.
- Page interaction: click, type, fill, press keys, scroll, hover, drag, select, and wait for page conditions or responses.
- Inspection: accessibility snapshots, readable text, screenshots, isolated-world evaluation, and recent network requests.
- Browser UI and files: handle dialogs and permission prompts, wait for downloads, save PDFs, and upload files without exposing an OS file picker.
- Multi-agent coordination: send and receive messages between slots.

## Limitations and notes

The CDPM MCP server supports Chrome only. Firefox, WebKit, and other browsers are not supported. Screenshots cover the visible area and do not provide full-page capture. Linux support is experimental.

Slot CDP ports listen on `127.0.0.1`, but any process on the same machine may connect to them and use the logged-in browser sessions. Treat an active slot like an unlocked browser. Closing a slot preserves its profile on disk; deleting that profile requires the separate `cdpm purge` command.

CDPM does not bypass CAPTCHAs, rate limits, or IP reputation controls. Browser automation can still trigger those protections, even when several slots are available.

_Full upstream README: https://allmcps.com/mcp/igelharine-cdpm/readme_

