io.github.IGELHARINE/cdpm
NPM · CDPM-MCP
Lets many Claude Code sessions and subagents share numbered, logged-in Chrome instances over CDP
Available components
Last scanned (21 hours ago)
Scores higher than 36% of npm servers
Category Browser Automation
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. How we score → Why this is hard to score →
Supply Chain Security81
- No malware found by supply-chain analysis.Pass
- CVE check failed: a known high-severity CVE affects zod 4.6.5, a direct dependency. A fixed version is available. View diagnostics → Fail
- No install/post-install scripts declared.Pass
- 30 of 114 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 17 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability58
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 11607 tokens (~322/item across 36 items; 36 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management60
- Stability observed for 18 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
- 97% of tools have a non-trivial description (not blank, and not just the tool's name).Partial
- 99% of tool parameters carry a description.Partial
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "browser_eval" implies "eval" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 37 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 2 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Oct 26 +1
- Security disclosure: unverified → fail ▼ functional
- 29 Oct 26 +1
- Security disclosure: fail → unverified ▼ functional
- 27 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.
- 25 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 24 Oct 26 −5
- CVE-2023-54404 affects this package: high ▼ security
- Known CVEs: pass → fail ▼ security
- 22 Oct 26 +3
- Stability: unverified → 0.17 ▲ functional
- 18 Oct 26 +15
- Malware scan: unverified → pass ▲ security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 4 Nov 2026 · Analysed npm/cdpm-mcp@0.1.9
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Vulnerabilities 1 finding
| ID | CVE | Severity | Vector | Fix available |
|---|---|---|---|---|
| GHSA-mrhx-c7xc-m3w5 | CVE-2023-54404 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H | yes |
Background: What a vulnerability scan can and cannot prove →
Dependencies 114 packages
| Packages resolved | 114 |
|---|---|
| Stale | 30 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
browser_back Back ~269
Go back.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| read | string | – | Append the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the… |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_block Block requests ~356
Blocks 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.
| Name | Type | Req | Description |
|---|---|---|---|
| add | array | – | URL patterns to block |
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| clear | boolean | – | Remove all rules set by this session |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| remove | array | – | Patterns to unblock |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_click Click ~375
Clicks 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| double | boolean | – | Double-click |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| read | string | – | Append the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the… |
| ref | string | yes | ref from browser_snapshot (e.g. "e12") |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_close Close slot ~114
Closes slot Chrome cleanly (session and cookies saved). The profile (logins) is kept. Reports if another agent used it recently.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
No output schema declared.
No examples provided.
browser_dialog Handle dialog ~407
Accepts (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.
| Name | Type | Req | Description |
|---|---|---|---|
| accept | boolean | yes | true = OK, false = cancel |
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| read | string | – | Append the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the… |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
| text | string | – | Text for a prompt dialog (used only when accepting) |
No output schema declared.
No examples provided.
browser_download_wait Wait for download ~138
Waits 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| timeout | number | – | Max wait in seconds (default 120) |
No output schema declared.
No examples provided.
browser_drag Drag ~414
Drags 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| dx | number | – | Horizontal pixels (right +) |
| dy | number | – | Vertical pixels (down +) |
| from | string | yes | ref of the element to drag (including ones marked draggable) |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| read | string | – | Append the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the… |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
| to | string | – | ref of the drop target |
| to_text | string | – | Text shown at the drop spot (when it has no ref, e.g. "Drop here") |
No output schema declared.
No examples provided.
browser_eval Run JS ~280
Evaluates 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| expression | string | yes | JS expression (Promises are awaited) |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_fill Fill form ~366
Fills 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| fields | array | yes | Fields to fill (top to bottom) |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| read | string | – | Append the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the… |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| submit | string | – | After filling: "Enter" or a button ref to click |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_forward Forward ~273
Go forward (after going back).
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| read | string | – | Append the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the… |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_hover Hover ~308
Moves the real mouse over a ref element (no click). For hover menus and tooltips. Use read=changes to see the opened menu.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| read | string | – | Append the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the… |
| ref | string | yes | ref of the element to hover |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_launch Launch slot ~520
Starts 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| count | integer | – | When the user gives only a count ("start 3"): starts that many free slots, lowest first |
| headless | boolean | – | false = windowed (visible), true = headless (hidden). true only if the user says "headless/hidden/no window", false for "visible/headful". If unstated, omit and ask first (no guessing). Applies only… |
| proxies | array | – | Per-slot proxies, paired in slots order (count: launch order) |
| proxy | string | – | Only when the user asks for a proxy (never otherwise). As given: "1.2.3.4:8080", "http://user:pass@host:port", "socks5://host:port", "host:port:user:pass", etc. Applies to all launched slots, first l… |
| slot | integer | – | One slot to start (1-30). Omit if the user gave no number → lowest free slot |
| slots | array | – | Slot numbers to start at once (e.g. [1,2,3]), lowest first |
| url | string | – | Same start URL for every launched slot (e.g. "https://mail.google.com"). For per-slot or partial URLs use urls instead. Pass it when the start page is known so subagents need no separate navigation |
| urls | array | – | Per-slot start URLs, paired in slots order (count: launch order). "" = blank tab. E.g. slots [1,2], urls ["https://www.wehago.com", "https://test.igel.kr"] → 1 opens wehago, 2 opens test.igel.kr |
No output schema declared.
No examples provided.
browser_navigate Navigate ~293
Navigates the tab to a URL and waits for the body to load.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| read | string | – | Append the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the… |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
| url | string | yes | URL to go to |
No output schema declared.
No examples provided.
browser_network Network requests ~293
Tab 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| failed | boolean | – | Failed requests only |
| filter | string | – | Only requests whose URL contains this |
| limit | integer | – | Max count (default 40, newest first) |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
| type | string | – | Request type (e.g. XHR, Fetch, Document, Script, Image) |
No output schema declared.
No examples provided.
browser_network_detail Network request detail ~226
Shows one request's headers, sent data and response body (start of it, if text). id is the n-number from browser_network.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| body | boolean | – | Include response body (default true) |
| id | string | yes | Request number (e.g. "n12") |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_pdf Save as PDF ~229
Saves 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| path | string | – | File path to save (e.g. C:\Users\me\Desktop\receipt.pdf) |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_permission Answer permission bubble ~292
Lists 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| button | string | – | Exact button name to press, as listed in the header or by calling without button |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| site | string | – | Only when several bubbles are open: part of the bubble title (e.g. the site host) to pick one |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
No output schema declared.
No examples provided.
browser_press_key Press key ~316
Presses a key on the focused element. E.g. Enter, Tab, Escape, ArrowDown, PageDown, Control+A, Shift+Tab.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| key | string | yes | Key name or combo (e.g. "Control+A") |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| read | string | – | Append the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the… |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_reload Reload ~311
Reloads the page (same as Chrome reload). ignore_cache=true bypasses the cache. Careful: unsaved user input on the page is lost.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| ignore_cache | boolean | – | Bypass cache (hard reload) |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| read | string | – | Append the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the… |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_screenshot Screenshot ~210
Captures 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).
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_scroll Scroll ~311
Scrolls a ref element into view, or by dy pixels (positive = down, negative = up, default 600). Reports the actual resulting position.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| dy | number | – | – |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| read | string | – | Append the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the… |
| ref | string | – | – |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_select Select option ~355
Picks 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| option | string | yes | Option value or text |
| read | string | – | Append the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the… |
| ref | string | yes | ref of the dropdown (combobox) |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_snapshot Snapshot ~360
Reads 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| find | string | – | Only lines containing this text, with parent context (ignores case and spaces). If unsure of site language, use | for alternatives, e.g. "제목|subject" |
| interactive | boolean | – | Only actionable elements (lines with refs): inputs, buttons, links. Use first to find inputs on big pages like Gmail |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| page | integer | – | Page number for long output (default 1) |
| ref | string | – | Only this ref element and its subtree |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_status Slot status ~114
Shows running Chrome slots (1-30) with their tabs, opener, last action and one-line summary. Pass slot for just that slot.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| slot | integer | – | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
No output schema declared.
No examples provided.
browser_tab_close Close tab ~114
Closes a tab. tab is required.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| tab | string|number | yes | Tab to close: number or ID ("t7") |
No output schema declared.
No examples provided.
browser_tab_new New tab ~176
Opens 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| url | string | – | URL to open (omit for blank tab) |
No output schema declared.
No examples provided.
browser_tab_select Bring tab to front ~150
Brings 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.)
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| tab | string|number | yes | Tab to bring forward: number or ID |
No output schema declared.
No examples provided.
browser_tabs List tabs ~131
Slot 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).
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
No output schema declared.
No examples provided.
browser_text Read text ~234
Reads 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| page | integer | – | Page number for long output (default 1) |
| ref | string | – | Only this element's text |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_type Type ~421
Types 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).
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| clear | boolean | – | Clear existing content |
| fast | boolean | – | Very long text: insert at once without key events |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| read | string | – | Append the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the… |
| ref | string | yes | ref of the element to type into |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| submit | boolean | – | Press Enter after |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
| text | string | yes | Text to type |
No output schema declared.
No examples provided.
browser_upload Upload file ~377
Puts 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| files | array | yes | File paths on this PC (absolute recommended) |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| read | string | – | Append the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the… |
| ref | string | – | File input ref. Omit to use the file picker just opened by a click |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| summary | string | – | One-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
No output schema declared.
No examples provided.
browser_wait Wait ~581
Waits 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 lost (use it to detect login: url, gone="Password" or text="Inbox"). Returns as soon as the condition is met or another agent's message arrives. Keep waits minimal: long waits only for humans (login, etc.); to wait for other agents use slot_inbox wait.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| enabled | string | – | Until this ref element (button/input) becomes enabled |
| gone | string | – | Until this text disappears from the page (e.g. login form's "Password" gone = logged in) |
| multiSlot | boolean | – | true only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest) |
| network_idle | boolean | – | Until no network requests for 0.5s (before capture/read) |
| response | string | – | Until a network response whose URL contains this completes (e.g. "/api/search"). * ? wildcards work (matched against the full URL, e.g. "*api.example.com/v1/items*"). Returns the response body |
| seconds | number | – | Plain wait in seconds. Avoid: wait on a condition (text/gone/url) or slot_inbox wait instead |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| tab | string|number | – | Target tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs. |
| text | string | – | Text to wait for |
| timeout | number | – | Max wait in seconds for text/gone/url/enabled/response/network_idle. 300-600 when waiting for a human login, etc. |
| url | string | – | Until the URL contains this (e.g. "mail.google.com/mail"). "" = until it differs from the current URL |
No output schema declared.
No examples provided.
slot_inbox Check messages ~174
Shows 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| wait | number | – | Max seconds to wait for a new message; returns as soon as one arrives (use this instead of repeatedly checking the page while waiting for another agent) |
No output schema declared.
No examples provided.
slot_pause Pause slot ~186
Use 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| all | boolean | – | All running slots |
| slot | integer | – | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| slots | array | – | Multiple slots (e.g. [1,2,3]) |
No output schema declared.
No examples provided.
slot_resume Resume slot ~173
Use 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| all | boolean | – | All paused slots |
| slot | integer | – | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| slots | array | – | Multiple slots (e.g. [1,2,3]) |
No output schema declared.
No examples provided.
slot_send Send message ~185
Sends 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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | – | Your display name, shown to other agents. Subagents must always set it. Default "claude-84f3". |
| slot | integer | yes | Browser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049. |
| text | string | yes | – |
| to | string | – | Recipient agent name |
No output schema declared.
No examples provided.
How do I install the io.github.IGELHARINE/cdpm MCP server?
io.github.IGELHARINE/cdpm runs locally as an npm package, launched with npx -y cdpm-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · cdpm-mcp
claude mcp add igelharine-cdpm -- npx -y cdpm-mcp
What is the io.github.IGELHARINE/cdpm MCP server?
io.github.IGELHARINE/cdpm is an MCP server listed in the public MCP registry as io.github.IGELHARINE/cdpm. Lets many Claude Code sessions and subagents share numbered, logged-in Chrome instances over CDP. This page covers its npm package (cdpm-mcp).
Is the io.github.IGELHARINE/cdpm MCP server safe to use?
io.github.IGELHARINE/cdpm scores 68 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 4 November 2026. It declares no install or post-install scripts. 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.IGELHARINE/cdpm MCP server expose?
io.github.IGELHARINE/cdpm exposes 36 tools: browser_status, browser_launch, browser_close, browser_tabs, browser_tab_new, and 31 more. Their descriptions and schemas cost roughly 10,032 tokens of context every time the server is loaded.
Is the io.github.IGELHARINE/cdpm MCP server still maintained?
io.github.IGELHARINE/cdpm is still listed as active in the MCP registry. We last reached this channel on 4 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.IGELHARINE/cdpm MCP server under?
io.github.IGELHARINE/cdpm declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.