Ghostlight vs CDPM
A side-by-side look at the Ghostlight and CDPM MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Ghostlight for browser automation work as a local process; choose CDPM for browser automation as a local process. You can also run both side by side in one mcpServers block.
Which MCP server should you choose?
Choose Ghostlight when
- You need dedicated capabilities in the Browser Automation domain.
- You prefer a local stdio subprocess transport.
- You want tools like
browser_tabs, browser_navigate, browser_history.
Choose CDPM when
- You need dedicated capabilities in the Browser Automation domain.
- You prefer a local stdio subprocess transport.
- Its auth model fits you: No auth required.
- You want tools like
browser_status, browser_launch, browser_close.
Feature & specification comparison
Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Browser Automation | Browser Automation |
| Quality signal | 63/100 · Good | 64/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | No auth required |
| Pricing | Not declared | Free |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 1 | 2 |
| Directory activity | 1 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 23 | 36 |
| Full listing | View Ghostlight | View CDPM |
Tools & capabilities
Ghostlight tools 23
browser_tabsList, focus, or close this session's tabs. List gives fresh handles from the live browser; with no tab yet it needs none and names those connected.browser_navigateGo to an HTTP(S) URL. Reuses the obvious tab; new_tab true opens a new one.browser_historyGo back or forward, or reload. A new document invalidates target_ and view_ handles, so collect fresh ones.browser_windowSet a tab's zoom or resize its browser window. Either invalidates view_ handles, so take a fresh screenshot before coordinate work.browser_readRead visible page text, including open shadow roots and frames, or one target. To act, get handles from browser_inspect or browser_find.browser_inspectInspect controls or page structure for fresh target_ handles. Scope document returns the outline as a bounded tree, without handles. Form controls also carry their value and what they accept: options, type, limits, hint and group.browser_findFind targets by visible or accessible text and get fresh target_ handles. Fastest when you know the label. Option text finds its dropdown.browser_screenshotCapture the viewport, full page, one target, or a magnified region; returns a view_ handle for coordinate calls.browser_clickClick a target_ handle, a control found by selector, or a point in a view_ screenshot. Needs action; a selector lookup or expect check also needs read. Prefer a target.browser_scrollScroll the page (default down, medium), reveal a target_, or wheel-scroll at a point in a view_ screenshot.browser_hoverHover a target_ handle or a point in a view_ screenshot.browser_fill_formFill 1 to 30 fields in one call; needs write even for unsent drafts. Nothing submits unless submit_target names the control. A value a control cannot take is refused before any field changes, with what it accepts. For credentials, set user_authorized_credentials only on the user's explicit instruction.- +11 more on the listing page
CDPM tools 36
browser_statusShows running Chrome slots (1-30) with their tabs, opener, last action and one-line summary. Pass slot for just that slot.browser_launchStarts 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_closeCloses slot Chrome cleanly (session and cookies saved). The profile (logins) is kept. Reports if another agent used it recently.browser_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_tab_newOpens 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_closeCloses a tab. tab is required.browser_tab_selectBrings 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_snapshotReads 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_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_screenshotCaptures 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_navigateNavigates the tab to a URL and waits for the body to load.browser_backGo back.- +24 more on the listing page
Ready-to-paste client configs
Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
Ghostlight
{
"mcpServers": {
"ghostlight": {
"command": "npx",
"args": [
"-y",
"ghostlight"
]
}
}
}
CDPM
{
"mcpServers": {
"igelharine-cdpm": {
"command": "npx",
"args": [
"-y",
"cdpm-mcp"
]
}
}
}
Frequently asked questions
Ghostlight is categorized under Browser Automation and uses a local stdio subprocess. CDPM belongs to Browser Automation and uses a local stdio subprocess. Pick Ghostlight for browser automation work and CDPM for browser automation.
Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.
Ghostlight has no declared pricing — check the project's own site. CDPM is listed as free. Auth: no auth required. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.
Yes. MCP clients support multiple servers: add ghostlight and igelharine-cdpm as separate keys in the same mcpServers object, and your assistant will call tools from either one.
On AllMCPs, Ghostlight has a quality signal of 63/100 (Good) with 1 views, 0 installs and 1 GitHub stars. CDPM has 64/100 (Good) with 1 views, 0 installs and 2 GitHub stars.