Fetch, inspect, crawl, and capture live, JavaScript-rendered websites with Moli. Use when Codex needs current web content, web research, fact lookup, link following, a bounded crawl, client-rendered or response-gated content, network diagnostics, or a standalone HTML, Markdown, JSON, semantic-tree,
Browser
Moli CDP Server
Try itStart Moli and connect CDP automation clients
What it does
Start Moli's CDP server and connect Playwright, Puppeteer, or raw CDP clients. Use to run a headless-browser CDP endpoint, replace a Chromium process, attach over CDP, enable real layout and screenshot surfaces, or diagnose CDP discovery, connection, and target startup—even when Moli is not named.
The skill document
Run Moli's CDP Server
Run one Moli CDP server and connect the requested CDP client to its endpoint. Preserve the client's existing API where Moli supports it.
Workflow
-
Resolve
molifromPATH. If it is unavailable, install the latest prebuilt release for the current platform:Linux or macOS:
curl --proto '=https' --tlsv1.2 -fsSL \ https://github.com/lexmount/moli/releases/latest/download/moli-installer.sh | shOn Windows, use PowerShell:
irm https://github.com/lexmount/moli/releases/latest/download/moli-installer.ps1 | iexResolve the installed binary again and run
moli --version. The default location is~/.local/bin/molion Linux/macOS and%LOCALAPPDATA%\Moli\bin\moli.exeon Windows when it is not yet onPATH. -
Start
moli serveon the default loopback endpointhttp://127.0.0.1:9222. -
Add
--layoutwhen the workflow needs real element geometry, coordinate input, screenshots, PDFs, or screencasts. Add--resourceonly when all optional visual/media resources are required. -
Probe
/json/versionbefore connecting the client. -
Connect with the client's remote/attach API; do not launch a second bundled browser.
-
Close CDP clients cleanly, then stop the Moli server if this workflow owns it.
Playwright over CDP
import { chromium } from "playwright";
const browser = await chromium.connectOverCDP("http://127.0.0.1:9222");
const context = browser.contexts()[0];
const page = context.pages()[0] ?? await context.newPage();
await page.goto("https://example.com");
console.log(await page.locator("body").innerText());
await browser.close();
Integration rules
- Bind to
127.0.0.1by default. Expose another host only when the user explicitly needs remote access and has addressed network access controls. - Treat Moli as a remote endpoint. Avoid Chrome launch flags and assumptions that require a local Chromium executable.
- Expect selected CDP coverage, not complete Chrome protocol parity. Preserve explicit unsupported errors.
- Use a unique port for parallel isolated runs.
- Persist state intentionally with
--profile-dir; otherwise keep runs disposable. - Pass proxy, cookie, resource, user-agent, and private-network policy to the Moli server, not to a nonexistent child browser process.
Read references/protocols.md for CDP discovery URLs, server options, client selection, and connection troubleshooting.
Related skills
windows-friendly chrome automation through an existing Chrome profile via CDP, with human-like mouse and keyboard input, browser attachment checks, page navi...
Use Chrome DevTools MCP for safe, configurable browser automation, page inspection, debugging, screenshots, network inspection, and performance analysis.
Use Chrome DevTools MCP through UXC over local stdio for page navigation, DOM/a11y snapshots, network inspection, console inspection, and performance tooling...
Attach to the user's OWN already-logged-in system browser over the Chrome DevTools Protocol (CDP) with Playwright, so automation reuses their existing sessio...
Run browser automation through @playwright/mcp over UXC stdio MCP, with daemon-friendly session reuse and safe action guardrails. Use when tasks need determi...