Cdpm
Lets many Claude Code sessions and subagents share numbered, logged-in Chrome instances over CDP
Connector by IGELHARINE · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/igelharine-cdpm
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.
Runs code on install
Its package runs an install script (such as npm postinstall or setup.py code) as soon as you install it, before any tool is called. Read the script first.
- Tools
- 7 read · 19 write · 1 delete · 9 not yet classified
- Secrets
- None asked for
- Install scripts
- Runs code on install
- Runs as
- Node.js package
Tools by what they do 36
Read from the source code; the running server may list different tools.
Read 7 · Look things up without changing anything.
browser_evalbrowser_network_detailbrowser_permissionbrowser_screenshotbrowser_snapshotbrowser_statusslot_inbox
Write 19 · Create, change, send or run things.
browser_clickbrowser_closebrowser_dialogbrowser_download_waitbrowser_fillbrowser_forwardbrowser_hoverbrowser_launchbrowser_navigatebrowser_pdfbrowser_press_keybrowser_scroll
Show 7 more tools
browser_selectbrowser_tab_closebrowser_tab_selectbrowser_textbrowser_typebrowser_uploadslot_send
Delete 1 · Delete, drop, revoke or wipe things.
browser_drag
Not yet classified 9 · We could not tell from the name and description.
browser_backbrowser_blockbrowser_networkbrowser_reloadbrowser_tab_newbrowser_tabsbrowser_waitslot_pauseslot_resume
Network hosts it talks to 4
github.com· found in codemail.google.com· found in codetest.igel.kr· found in codewehago.com· found in code
Files it touches
/opt/google/chrome/chrome- Your home directory (~)
- Any path the agent passes to its tools
Tools (36)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
browser_backBackGo back.
browser_blockBlock requestsBlocks tab network requests matching URL patterns (they fail). add adds, remove removes, clear removes all rules you set. Patterns: * any chars, ? one char. A bare domain matches every request containing it ("ads.example.com" → "*ads.example.com*"). A trailing * is added automatically so query strings still match ("*.png" → "*.png*"). The tab skips the cache while rules exist. Rules last only while this Claude session is alive and are shown to other agents in the header. With no args, shows current rules.
browser_clickClickClicks a ref element with real mouse events. If another element covers it, doesn't click and reports it. Waits for loading if the click navigates; reports new tabs. Clicking a file input or "attach" button intercepts the OS file picker (not shown); then use browser_upload. Doesn't click <select> dropdowns (they open a list popup on the user's screen); use browser_select.
browser_closeClose slotCloses slot Chrome cleanly (session and cookies saved). The profile (logins) is kept. Reports if another agent used it recently.
browser_dialogHandle dialogAccepts (accept: true) or dismisses (accept: false) an open dialog (alert/confirm/prompt/beforeunload). The tab is frozen while a dialog is open. Usually judge from its content and handle it yourself (accept if it is part of the requested task; close unneeded notices/ads). Ask the user only when it confirms an irreversible action they didn't request (payment, deletion, etc.). beforeunload: accept = leave page (input lost), dismiss = stay. For prompt, text is the input.
browser_download_waitWait for downloadWaits for the most recently started download to finish and returns the saved file path (user's Chrome download folder). Call after clicking the download button. Returns as soon as it finishes.
browser_dragDragDrags with the real mouse (press → move in steps → release): drag and drop, sliders, reordering, drag CAPTCHAs, etc. Target: to (element ref), to_text (text at the drop spot), or dx/dy (pixels from from). HTML drag is handled without starting an OS drag.
browser_evalRun JSEvaluates a JavaScript expression in the tab and returns the result as JSON. Escape hatch only when other tools can't do it. Runs in an isolated world: DOM can be read and modified, but globals created by page scripts (window.appVar, etc.) are not visible.
browser_fillFill formFills several inputs on the same page in order (each cleared, typed with real key events, value verified). Stops on page change, dialog, or any failed field, and reports how far it got. submit="Enter" presses Enter in the last field; a button ref clicks that button. For dropdowns use browser_select.
browser_forwardForwardGo forward (after going back).
browser_hoverHoverMoves the real mouse over a ref element (no click). For hover menus and tooltips. Use read=changes to see the opened menu.
browser_launchLaunch slotStarts slot Chrome. Call only when the user explicitly asks (other tools never start a closed slot). Without slot, uses the lowest free slot. If already running, just attaches. The user decides windowed (visible) vs headless (hidden): headless: true only if they say "headless/hidden". If unstated, don't guess; ask first, then call with headless. Starting a closed slot without headless only returns a confirmation request. Start several slots at once with slots (list) or count (lowest first). For different jobs per slot, after launching give each slot its own subagent in parallel.
browser_navigateNavigateNavigates the tab to a URL and waits for the body to load.
browser_networkNetwork requestsTab network request list (newest at bottom). Records the latest 500 since CDPM first attached to the tab. Filter with filter (URL part), type (Document, XHR, Fetch, Script, Image, etc.), failed (failures only). For details pass the n-number to browser_network_detail.
browser_network_detailNetwork request detailShows one request's headers, sent data and response body (start of it, if text). id is the n-number from browser_network.
Show 21 more tools
browser_pdfSave as PDFSaves the page as a PDF (receipts, articles, etc.). Without path, saves to the user's Downloads folder named after the page title. Doesn't change the screen or window.
browser_permissionAnswer permission bubbleLists or answers Chrome permission bubbles ("site wants to: access other apps and services on this device / show notifications / know your location…"). They are browser UI: not in snapshot/screenshot, page tools can't click them, and the page often waits until they are answered. The header warns when one is open. Without button: shows the open bubbles with their exact button names. With button: presses that button (exact name as listed, e.g. "허용", "Allow", "Block", "Allow while visiting the site"). Windows, windowed slots only.
browser_press_keyPress keyDescription is built at runtime.
browser_reloadReloadReloads the page (same as Chrome reload). ignore_cache=true bypasses the cache. Careful: unsaved user input on the page is lost.
browser_screenshotScreenshotCaptures the visible area of the tab as PNG, even background tabs (without switching). Never changes window size or viewport, so full-page capture is unsupported (scroll then capture, or use snapshot/text).
browser_scrollScrollScrolls a ref element into view, or by dy pixels (positive = down, negative = up, default 600). Reports the actual resulting position.
browser_selectSelect optionPicks an option in a <select> dropdown (by value or visible text; partial match OK). Focuses the dropdown and moves with keys (arrow keys on Windows/Linux, typing the first letters on macOS), so the page gets real events and no list popup opens. If nothing matches, lists the available options.
browser_snapshotSnapshotReads the tab as accessibility-tree text. Clickable/typable elements get refs like [e12]. Long pages are split; only page 1 (top) is shown (page=2 to continue; refs stay the same across pages). find="text" shows only matching elements with their parent context; ref="e40" shows only that element's subtree. Refs change when the page changes, so re-snapshot before acting.
browser_statusSlot statusShows running Chrome slots (1-30) with their tabs, opener, last action and one-line summary. Pass slot for just that slot.
browser_tab_closeClose tabCloses a tab. tab is required.
browser_tab_newNew tabOpens a new tab in the slot and returns its ID. When agents share a slot, open your own tab and work only by its ID to avoid mixing.
browser_tab_selectBring tab to frontBrings a tab to the front of its Chrome window. Changes what the user sees, so use only when the user wants it. (Background tabs can be read, operated and captured; no need to bring them forward to work.)
browser_tabsList tabsSlot tab list: number, ID, title, URL, opener, last action, per-tab summary (updated only by actions with summary). "·front" marks the tab currently in front in its window (one per window).
browser_textRead textReads the page body text (main/article if present). With ref, only that element's text. Shorter and easier than a snapshot for articles/documents. Use page for long text.
browser_typeTypeTypes text into a ref element, sending real key events (keydown/keypress/input/keyup) per character like a human. clear=true clears existing content; submit=true presses Enter after. Verifies the resulting value and reports a mismatch. fast=true inserts very long text at once without key events. Date/time inputs get the value set directly in their format (time "19:30", date "2026-10-08"; change event then has isTrusted=false).
browser_uploadUpload filePuts files into a file input (no OS file picker shown to the user). Give ref of the file input (<input type=file> or its label), or for a site's custom "attach" button, click it first with browser_click (CDPM intercepts the picker) and call without ref. The site gets the same events as a human file pick.
browser_waitWaitWaits until text appears; gone: that text disappears; url: the URL changes; enabled: that button/input becomes enabled; response: a network response for that URL completes (returns its body); network_idle: the network goes quiet; otherwise for seconds. For SPAs (search results, lists, etc.), instead of reading the page, getting the data response (JSON) with response="/api/search" after a click is faster and more accurate (it searches from this agent's last action on that tab, so responses that arrived during the click are caught). Only reads, never touches the page, so the user's input is not …
slot_inboxCheck messagesShows your unread messages. With wait (seconds), waits up to that long for a new message (for real-time conversation). Messages already delivered in another tool's header are not unread; when there are no new ones, recently received ones are noted for reference.
slot_pausePause slotUse only when the user says to pause (e.g. "pause 3"); agents never call it on their own. All action tools on the slot are refused and any browser_wait in progress stops at once. An action already sent to Chrome finishes. Reading still works. Applies immediately to agents in other Claude sessions too. all=true pauses every running slot.
slot_resumeResume slotUse only when the user says to resume (e.g. "continue 3"); the agent owning a paused slot never calls it on its own. Unpauses and messages every agent on the slot to wake it (agents re-read the page and continue). all=true resumes every paused slot.
slot_sendSend messageSends a message to other agents (real-time collaboration). slot = the slot the recipient owns (to reach another slot's agent, use that slot number). Omit to to send to everyone on that slot. Recipients get it instantly if waiting in slot_inbox wait, otherwise in their next tool result header (a running browser_wait stops at once). When you finish a step, notify waiting agents right away.
Signals
- Stars
- 2
- Forks
- 0
- Open issues
- 0
- Last commit
- Oct 19, 2026 (10 days ago)
- Last release
- Oct 19, 2026 (10 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
io.github.IGELHARINE/cdpm- Version
- 0.1.9
- Auth
- No auth
- Packages
- npm cdpm-mcp
- License
- MIT
- Repository
- github.com/IGELHARINE/CDPM
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Cite this page
Cdpm MCP server. Agent Mart. https://agentmart.dev/connectors/igelharine-cdpm (last updated 2026-10-24)