browser-ipc-cdpBLOCK
browser-ipc-cdp — Control remoto de navegadores Chromium (Brave, Chrome, Edge) via IPC con CDP dinámico. Abre tu navegador real con todas tus sesiones, detecta o asigna puerto automáticamente, configura portproxy/firewall para WSL, y actualiza el MCP de Claude Code. Sin puertos fijos, sin hacks
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](#) [](#) [](#) [](#) [](https://www.npmjs.com/package/browser-ipc-cdp) [](LICENSE)
Control remoto de navegadores Chromium (Brave, Chrome, Edge) via IPC con CDP dinamico. Abre tu navegador real con todas tus sesiones, detecta o asigna puerto automaticamente, configura portproxy/firewall para WSL, y actualiza el MCP de Claude Code. Sin puertos fijos, sin hacks de registry, sin configuracion manual.
npm i browser-ipc-cdp npx browser-ipc-cdp
Despues /mcp en Claude Code y listo. El wrapper resuelve el puerto dinamico solo, no hay que reescribir .mcp.json cuando cambia.
Novedades
v3.15.0 — el navegador ya no se queda "sin internet"
Si alguna vez, usando el MCP, una pestaña se quedaba a medio cargar (sin error en consola, sin nada en el log) y parecia que Brave habia perdido internet: eso era un bug, y esta arreglado. Actualiza con:
npx -y browser-ipc-cdp@latest # y reconecta con /mcp
Eran dos causas, las dos en la intercepcion de requests (setup_request_interception, mock_api, block_resources, capture_payloads, add_auth_header, redirect_to_local, throttle_api):
- Requests pausadas que nadie reanudaba. Al activar la intercepcion, el navegador puede mandar la confirmacion y la primera rafaga de requests pausadas juntas; el manejador todavia no estaba escuchando y esas requests se quedaban esperando para siempre. Era intermitente porque dependia del timing de la red local. → El manejador ahora se registra antes de activar la inte
3577593b4a17OBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add browser-ipc-cdp -- npx -y [email protected]
{
"mcpServers": {
"browser-ipc-cdp": {
"command": "npx",
"args": [
"-y",
"[email protected]"
]
}
}
}Exposed tools (103)
72 read · 22 write · 9 destructive. Blast radius: 9 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
add_auth_header | write | Inject an Authorization (or any) header into matching requests in flight. Authenticate without touching code. |
analyze_network_waterfall | read | Analyze the page resource waterfall using PerformanceResourceTiming API. Detects mixed content (HTTP on HTTPS pages), slow resources, cross-origin requests and connection protocol breakdown. No monitoring session needed. |
block_resources | destructive | Block resource categories to speed up pages or remove noise. Categories: images, fonts, analytics, ads, scripts, styles, media. |
block_urls | read | Block requests matching URL patterns. Pass empty array to unblock all. |
bypass_csp | write | Enable or disable Chrome\ |
capture_payloads | write | Capture request payloads (POST body, headers) for matching URLs without altering them. Call get_intercepted_requests to read captured data. |
clear_browser_cache | destructive | Clear the browser HTTP cache. Useful before performance tests or to force fresh resource loads. |
clear_request_interception | destructive | Stop request interception and remove all active rules. |
clear_storage | destructive | Clears localStorage, sessionStorage, or both on the current page. |
click | read | Clicks on the provided element |
click_at | read | Clicks at the provided coordinates |
click_by_text | read | Encuentra un elemento por su texto VISIBLE y hace click en UNA sola llamada (sin snapshot ni uid). Hace scroll al elemento y dibuja el overlay del cursor de la IA. Ideal para ahorrar tokens y round-trips. |
close_heapsnapshot | read | Closes a previously loaded memory heapsnapshot, freeing its memory. |
close_page | read | Closes the page by its index. The last open page cannot be closed. |
compare_heapsnapshots | read | Loads two memory heapsnapshots and returns the comparison. If classIndex is provided, returns detailed diff for that class, otherwise returns summary diff. |
delete_cookies | destructive | Deletes cookies by name (optionally filtered by url/domain/path). |
detect_third_party_scripts | read | Identify all third-party scripts, iframes and stylesheets on the current page. Classifies known services (Analytics, CDN, Ads, Tracking) and flags unknown third parties — useful for supply chain attack surface mapping. |
drag | read | Drag an element onto another element |
emulate | read | Emulates various features on the selected page. |
emulate_network | read | Throttle or simulate network conditions (offline, 3G, etc.) for the current page. |
evaluate | read | Evaluates a JavaScript script |
evaluate_in_frame | read | Evaluates a JavaScript expression inside a specific iframe. Get frameId with get_frames first. |
evaluate_script | read | Evaluate a JavaScript function inside the currently selected page${cliArgs?.categoryExtensions ? |
execute_3p_developer_tool | write | Executes a tool exposed by the page. |
execute_webmcp_tool | write | Executes a WebMCP tool exposed by the page. |
fill | read | Type text into an input, text area or select an option from a <select> element. |
fill_by_label | read | Rellena campos de formulario por su ETIQUETA visible (o placeholder/aria-label/name), sin snapshot ni uid. Acepta un campo ( |
fill_form | read | Fill out multiple form elements (inputs, selects, checkboxes, radios) at once. ALWAYS prefer this tool over multiple individual |
find_by_text | read | Localiza elementos por su texto VISIBLE sin un snapshot completo. Barato en tokens: devuelve solo las coincidencias (texto, tag, coordenadas de click). Prefiérelo a take_snapshot para ubicar un elemento concreto. |
get_accessibility_tree | read | Returns the accessibility tree of the current page. Useful for understanding page structure and finding interactive elements. |
get_console_entry | read | Get a specific console message by index from the monitor_console buffer. |
get_console_message | read | Gets a console message by its ID. You can get all messages by calling ${LIST_CONSOLE_MESSAGES_TOOL_NAME}. |
get_cookies | read | Returns cookies for the current page or filtered by URLs. Uses CDP Network.getCookies which operates BELOW the JS sandbox — returns ALL cookies including HttpOnly (inaccessible to document.cookie). Useful for session token extraction in security audits. |
get_dom_element | read | Query DOM elements by CSS selector. Returns attributes, text content, and outer HTML. |
get_frames | read | Returns the frame tree of the current page (main frame + all iframes) with id, url, name and depth. |
get_heapsnapshot_class_nodes | read | Loads a memory heapsnapshot and returns instances of a specific class with their IDs. |
get_heapsnapshot_details | read | Loads a memory heapsnapshot and returns all available information including statistics, static data, and aggregated node information. Supports pagination for aggregates. |
get_heapsnapshot_dominators | read | Loads a memory heapsnapshot and returns the dominator chain for a specific node ID. This helps to identify which objects are keeping the target node alive. |
get_heapsnapshot_duplicate_strings | read | Loads a memory heapsnapshot and returns duplicate strings grouped by their value. |
get_heapsnapshot_edges | read | Loads a memory heapsnapshot and returns outgoing edges (references) for a specific node ID. |
get_heapsnapshot_retainers | read | Loads a memory heapsnapshot and returns retainers for a specific node ID. |
get_heapsnapshot_retaining_paths | read | Loads a memory heapsnapshot and returns retaining paths for a specific node ID. This helps to understand why a node is not being garbage collected. |
get_heapsnapshot_summary | read | Loads a memory heapsnapshot and returns snapshot summary stats. |
get_indexed_db_data | read | Read records from an IndexedDB object store. |
get_intercepted_requests | read | Returns all requests captured since interception was last started. |
get_local_storage | read | Returns localStorage entries of the current page. Get all or a specific key. |
get_network_request | read | Gets a network request by an optional reqid, if omitted returns the currently selected request in the DevTools Network panel. |
get_request_body | read | Get full details of a specific network request including request/response headers, POST body and response body. Pass a URL substring or the requestId from monitor_network. |
get_session_storage | read | Returns sessionStorage entries of the current page. Get all or a specific key. |
get_tab_id | read | Get the tab ID of the page |
grant_permissions | destructive | Grant or reset browser permissions for an origin (geolocation, camera, microphone, notifications, etc.). |
handle_dialog | read | If a browser dialog was opened, use this command to handle it |
hover | read | Hover over the provided element |
ignore_cert_errors | read | Ignore or restore HTTPS certificate errors (useful for testing self-signed certs). |
inject_error | destructive | Force an HTTP error response on matching requests. Ideal for chaos/resilience testing. |
install_extension | write | Installs a Chrome extension from the given path. |
lighthouse_audit | read | Get Lighthouse score and reports for accessibility, SEO, best practices, and agentic browsing. This excludes performance. For performance audits, run ${startTrace.name} |
list_3p_developer_tools | read | Lists all third-party developer tools the page exposes for providing runtime information. Third-party developer tools can be called via the |
list_extensions | read | Lists all the Chrome extensions installed in the browser. This includes their name, ID, version, and enabled status. |
list_indexed_db | read | List all IndexedDB databases and their object stores for the current page origin. |
list_network_requests | read | List all requests for the currently selected page since the last navigation. |
list_pages | read | Get a list of pages${args?.categoryExtensions ? |
list_webmcp_tools | read | Lists all WebMCP tools the page exposes. |
mock_api | read | Return a synthetic JSON response for a URL pattern. Test UI without a real backend. |
monitor_console | read | List browser console messages captured via persistent CDP session (log, warn, error, info, debug). Distinct from list_console_messages — this uses a live WebSocket session and accumulates across navigations. Auto-starts on first call. |
monitor_network | read | List all captured network requests via persistent CDP session (passive, no interception). Distinct from list_network_requests — accumulates across navigations. Shows URL, method, status, type, size, duration. Auto-starts on first call. |
navigate | read | Loads a URL |
navigate_page | read | Go to a URL, or back, forward, or reload. Use project URL if not specified otherwise. |
new_page | read | Open a new tab and load a URL. Use project URL if not specified otherwise. |
performance_analyze_insight | read | Provides more detailed information on a specific Performance Insight of an insight set that was highlighted in the results of a trace recording. |
performance_start_trace | write | Start a performance trace on the selected webpage. Use to find frontend performance issues, Core Web Vitals (LCP, INP, CLS), and improve page load speed. |
performance_stop_trace | write | Stop the active performance trace recording on the selected webpage. |
press_key | read | Press a key or key combination. Use this when other input methods like fill() cannot be used (e.g., keyboard shortcuts, navigation keys, or special key combinations). |
print_to_pdf | read | Exports the current page as a PDF file and saves it to disk. |
redirect_to_local | read | Redirect API calls from a production domain to a local dev server. Test prod frontend against local backend. |
reload_extension | read | Reloads an unpacked Chrome extension by its ID. |
resize_page | read | Resizes the selected page |
screencast_start | write | Starts recording a screencast (video) of the selected page in specified format. |
screencast_stop | write | Stops the active screencast recording on the selected page. |
screenshot | read | Takes a screenshot |
scroll_to | read | Scroll the page to a position or element. Supports smooth and instant behavior. |
security_audit_headers | read | Audit HTTP security headers of the current page (CSP, HSTS, X-Frame-Options, CORS, etc.). Grades each header A-F and lists misconfigurations. Useful for defensive audits and demonstrating header-based vulnerabilities. |
select_page | read | Select a page as a context for future tool calls. |
set_cookie | write | Sets a cookie on the current page. |
set_download_path | write | Control file download behavior: allow (with path), deny, or default. |
set_extra_headers | write | Add extra HTTP headers to every request made by the page. Pass empty object to clear. Simpler alternative to add_auth_header when you need persistent headers without interception. |
set_geolocation | destructive | Override geolocation for the current page. Omit params to clear override. |
set_local_storage | write | Sets a localStorage entry on the current page. |
set_session_storage | write | Sets a sessionStorage entry on the current page. |
spoof_fingerprint | read | Multi-layer browser fingerprint spoofing: patches navigator.userAgent (HTTP headers + JS), platform, vendor, language, screen dimensions, devicePixelRatio and WebGL renderer. Presets: mobile-android, mobile-ios, desktop-windows, desktop-mac, desktop-linux. Use restore=true to reset all overrides. |
start_css_coverage | write | Start collecting CSS rule usage. Run actions on the page, then call stop_css_coverage to get unused rules. |
start_js_coverage | write | Start collecting JavaScript code coverage. Run actions on the page, then call stop_js_coverage to get results. |
stealth_check | read | Detect browser automation fingerprints that anti-bot systems use to identify CDP/Playwright/Puppeteer/Selenium sessions. Reports exposed signals and rates overall detectability risk. |
stop_css_coverage | write | Stop CSS coverage and return unused rules. Shows which CSS selectors were never matched. |
stop_js_coverage | write | Stop JS coverage and return results showing which scripts and functions were executed. |
take_heapsnapshot | read | Capture a heap snapshot of the currently selected page. Use to analyze the memory distribution of JavaScript objects and debug memory leaks. |
take_screenshot | read | Take a screenshot of the page or element. |
throttle_api | write | Add artificial latency to specific API requests. Test loading states, skeleton screens, and timeout handling. |
trigger_extension_action | write | Triggers the default action of an extension by its ID. |
type_text | read | Type text using keyboard into a previously focused input |
uninstall_extension | destructive | Uninstalls a Chrome extension by its ID. |
upload_file | write | Upload a file through a provided element. |
wait_for | read | Wait for the specified text to appear on the selected page. |
Trust audit
BLOCKgrade F · trust 46/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (13 observation(s))
- Network
- declared (4 observation(s))
- Shell
- declared (11 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (25)
atob( ... 'eval(
eval(val) {eval(val) {description: 'Enable or disable Chrome\'s CSP enforcement for the current page via Page.setBypassCSP. When enabled, all Content-Security-Policy directives (script-src, connect-src, etc.) are ignored —
description: 'After toggling, inject a canary eval() to confirm bypass is active. Default: true.',
{ rx: /eval\s*\(/g, label: 'eval()', weight: 3 },block_resources, clear_browser_cache, clear_request_interception, clear_storage, delete_cookies, grant_permissions, inject_error, set_geolocation, uninstall_extension
.mcpbignore
const accept = crypto.createHash('sha1')const accept = crypto.createHash('sha1')import { logger } from '../../utils/logger.js';import { logger, flushLogs, saveLogsToFile } from '../../utils/logger.js';{ mod(require("../../lib/codemirror")); }{ define(["../../lib/codemirror"], mod); }mod(require("../../lib/codemirror"));chrome-devtools-mcp ──> http://127.0.0.1:9333 (proxy, puerto FIJO)
CDP URL: http://127.0.0.1:58553
http://127.0.0.1:{PUERTO}/json/version → Info del navegadorhttp://127.0.0.1:{PUERTO}/json/list → Pestanas abiertas| MCP "brave" no conecta | Verificar el proxy: `curl http://127.0.0.1:9333/json/version`. Si responde 502, el navegador no tiene CDP activo: relanzar con `npx browser-ipc-cdp` o dejar que el auto-laun
static fromHex(hex, text) {static fromHex(hex, text) {{ rx: /atob\s*\(/g, label: 'atob()', weight: 3 },@eslint/js, @google/genai, @rollup/plugin-commonjs, @rollup/plugin-json, @rollup/plugin-node-resolve, @stylistic/eslint-plugin, @blackwell-systems/gcf, @toon-format/toon
chrome-devtools-mcp
Gates applied: critical_finding, no_behavioural_pass.
3577593b4a17full audit observations/trust-audit/mcp-server/alexis14kl__browser-ipc-cdp.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | 3577593b4a17 | BLOCK | F | 46 | first audit |
Questions
What is the browser-ipc-cdp MCP server?
browser-ipc-cdp — Control remoto de navegadores Chromium (Brave, Chrome, Edge) via IPC con CDP dinámico. Abre tu navegador real con todas tus sesiones, detecta o asigna puerto automáticamente, configura portproxy/firewall para WSL, y actualiza el MCP de Claude Code. Sin puertos fijos, sin hacks
What tools does browser-ipc-cdp expose?
103 in total: 72 read-only, 22 that write, and 9 that can delete or overwrite (block_resources, clear_browser_cache, clear_request_interception, clear_storage, delete_cookies). Every one is listed on this page with its risk.
Is browser-ipc-cdp safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (46/100) and found 6 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 9 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does browser-ipc-cdp need?
No credential environment variables were found in its source, so it appears to need none.
How does browser-ipc-cdp run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as browser-ipc-cdp at 3.15.0.
How current is this page?
The grade is for one exact copy of the source (3577593b4a17), read on 2026-10-11. The repository is watched and re-audited when it changes.