selkies/skills/chrome-devtools-mcp/SKILL.md
Chrome DevTools MCP server via mcp-proxy (Streamable HTTP on port 9224). Use when working with the chrome-devtools-mcp candy, MCP-based browser automation, or the mcp-proxy stdio-to-HTTP bridge pattern.
npx skillsauth add overthinkos/overthink-plugins chrome-devtools-mcpInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Property | Value |
|----------|-------|
| Dependencies | nodejs, supervisord |
| Ports | 9224 (Streamable HTTP MCP endpoint) |
| Services | chrome-devtools-mcp (supervisord, autostart) |
| Install files | charly.yml, pixi.toml, package.json |
| Name | URL Template | Transport |
|------|-------------|-----------|
| chrome-devtools | http://{{.ContainerName}}:9224/mcp | http |
Pod-aware: same-container consumers receive http://localhost:9224/mcp, cross-container consumers receive http://charly-<image>:9224/mcp. Consumed by hermes (mcp_accept: chrome-devtools) for MCP-based browser inspection and automation.
MCP Client (hermes, Claude Code)
↓ Streamable HTTP (POST /mcp)
mcp-proxy (Python, pixi) — 0.0.0.0:9224
↓ stdio
chrome-devtools-mcp (Node.js, npm)
↓ Chrome DevTools Protocol
cdp-proxy (port 9222) → Chrome (port 9223)
package.json) connects to Chrome at http://127.0.0.1:9222 via the cdp-proxyautorestart=true (handles startup ordering — retries until Chrome is ready)| Category | Tools |
|----------|-------|
| Input | click, drag, fill, fill_form, hover, type_text, press_key, upload_file, handle_dialog |
| Navigation | navigate_page, list_pages, select_page, new_page, close_page, wait_for |
| Inspection | take_screenshot, take_snapshot, evaluate_script, get_console_message, list_console_messages |
| Network | list_network_requests, get_network_request |
| Performance | performance_start_trace, performance_stop_trace, performance_analyze_insight, take_memory_snapshot, lighthouse_audit |
| Emulation | emulate, resize_page |
mcp-proxychrome-devtools-mcpHermes config.yaml is guarded by a # charly:auto-configured sentinel — it only generates on first start, never overwrites. When chrome-devtools-mcp is added to a running deployment, hermes won't automatically pick it up.
Fix: Delete config.yaml and restart hermes:
charly shell <image> -c "rm /opt/data/config.yaml"
charly service restart <image> hermes
After restart, hermes mcp list should show chrome-devtools as enabled with all 29 tools.
This candy is auto-included by the chrome base layer via candy: [chrome-devtools-mcp]. Any box that includes chrome, chrome-sway, or any desktop metalayer gets this automatically — zero explicit configuration needed.
/charly-selkies:chrome — includes via candy: [chrome-devtools-mcp]/charly-selkies:selkies-labwc/charly-selkies:selkies-labwc-nvidia/charly-selkies:sway-browser-vnc/charly-selkies:chrome — parent candy, provides Chrome + CDP on port 9222/charly-jupyter:jupyter-mcp — analogous MCP server pattern (Tier 1, different domain)/charly-hermes:hermes — consumes via mcp_accept: chrome-devtools/charly-tools:mcporter — MCP server CLI (npm-based, similar npm install pattern)/charly-check:cdp — direct Chrome DevTools Protocol commands (lower-level than MCP)/charly-build:charly-mcp-cmd — test-side reference for this candy's MCP endpoint — the mcp: check verb, exercised via charly check live <image> --filter mcp. The candy ships 2 deploy-scope mcp: declarative checks (mcp-chrome-devtools-ping, mcp-chrome-devtools-list-tools asserting navigate_page / take_screenshot). Port-publishing gotcha: when this candy is added to a box that already has a charly.yml port: override (e.g. sway-browser-vnc), port 9224 may not be published until the override is updated. The mcp: check verb surfaces this with the exact ports: [9224:9224] remediation message — see /charly-build:charly-mcp-cmd for the full fix.Use when the user asks about:
/charly-image:layer — candy authoring reference (charly.yml schema, task verbs, service declarations)/charly-check:check — declarative testing (check: block, charly check box, charly check live)tools
Use when authoring or modifying a charly PLUGIN — a candy with a `plugin:` block that contributes Providers (verbs/kinds/deploy-targets/steps/builders/commands), its own CUE schema, builtin (compiled-in) or external (out-of-tree git repo). Covers the unified Provider model, the per-plugin CUE-schema contract (single source → Go params for dev + schema-over-Describe RPC for runtime), the SDK, and the loader.
tools
The CUE data-validation / configuration CLI (cue), pinned to v0.16.1. Use when working with the cue candy, installing the cue binary into a box or onto a target:local dev host, or running the offline schema-vendoring pipeline that feeds charly's egress validation.
tools
CUE EGRESS validation — validating (and, where it adds value, generating) the config files charly WRITES to a system BEFORE the bytes hit disk. MUST be invoked before working on charly/egress.go, the vendored schemas under candy/plugin-egress/egress-schemas/vendor/, the ValidateEgress / registerVendoredEgressKind path, the offline `task cue:vendor` pipeline, or adding an egress schema for any written artifact (cloud-init, k8s manifests, traefik routes, runtime config, install ledger, systemd/quadlet units, ssh_config, libvirt XML).
tools
Kubernetes cluster-probe declarative check verb — the `kube:` check verb (nodes, pods, ingress, storage class, addon health, apply/delete, and arbitrary resource GETs) served out-of-process by the candy/plugin-kube plugin (vendored client-go; no external kubectl required).