A side-by-side look at the Chrome MCP and Leapfrog MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Chrome MCP for browser automation work as a local process; choose Leapfrog for browser automation as a local process. You can also run both side by side in one mcpServers block.
CHROME_MCP_TOKEN, CHROME_MCP_EXTENSION_DIR.tabs_list, screenshot, get_text.session_create, session_create_batch, session_list.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Browser Automation | Browser Automation |
| Quality signal | 64/100 · Good | 57/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | CHROME_MCP_TOKENCHROME_MCP_EXTENSION_DIR | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 6 | 5 |
| Directory activity | 2 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 22 | 37 |
| Full listing | View Chrome MCP | View Leapfrog |
tabs_listList open browser tabs.screenshotCapture a screenshot (page or element). Default is JPEG (quality 70) at CSS-pixel size, which is several times smaller than PNG and reads fine. Pass format:"png" for lossless, quality 1-100 for JPEG, scale 2 for device pixels on a Retina display or 0.5 to shrink.get_textGet visible text of the page or an element.get_htmlGet HTML of the page or an element. Output is capped (see maxBytes) and cut at a tag boundary; narrow it with `selector` rather than raising the cap when you can. Password field values are always blanked.snapshotAccessibility snapshot: interactive elements with refs to target by `ref` (more reliable than guessing CSS selectors). Pass diff:true to get only what changed since the last snapshot of this tab - far cheaper in a click/read loop. Password fields appear as secret:true with no value.page_watchSave a local page checkpoint and compare it later. Actions: create (name), compare (watchId), list, delete. Stores accessibility labels and state, never form values. Site allowlist still applies.get_cookiesCookies for the tab's URL (or url); values need --enable-cookie-values.storageRead/write localStorage (or sessionStorage). op: get|set|remove|clear.wait_forWait for a selector or text to appear/disappear.extract_linksExtract anchors from the page or a subtree. dedupe=true collapses links sharing an href (nav/footer noise); limit caps the count.read_as_markdownRead the page (or subtree) as readable markdown.frames_listList the tab's frames (the top document plus every iframe the extension can reach), with each frame's id and URL. Use it when a selector that should match does not: the element is probably in one of these frames, and you can then pass frameId (or allFrames:true) to act inside it.session_createCreate a new isolated browser session with its own cookies and state. Returns a short session ID (e.g. s_k3m7x1) to pass to all other tools. Each session is a separate BrowserContext — no cookie leakage between sessions. Pool limit: 15 concurrent sessions. Sessions auto-expire after 30 minutes of inactivity. Use keep-alive pattern (periodic navigate or snapshot) for long-running sessions.session_create_batchCreate multiple isolated browser sessions concurrently — 5-10x faster than sequential session_create calls. Optionally navigate each to a URL. Returns all session IDs. A single reflow positions all windows into a unified grid after all sessions are created.session_listList all active browser sessions with their URLs and idle times.session_destroyClose and clean up a browser session. Frees a pool slot.session_save_profileSave a session's cookies and auth state to disk. Use this after logging in to a site so future sessions can restore that login. Pass the returned profile path to session_create's profilePath to reuse it.session_list_profilesList all saved authentication profiles.navigateNavigate to a URL and return a compact accessibility snapshot with @eN refs. Refs like @e1, @e2 can be passed directly to the 'act' tool — no CSS selectors needed. Snapshots are ~200-500 tokens (vs 15,000 with Playwright MCP).snapshotRe-snapshot the current page for fresh @eN refs. Use after 'act' when you need to re-orient, or scope to a region with 'selector'. Use 'selector' to dramatically reduce tokens (e.g. 'form', '#results').diffCompare the current page state against the last snapshot for this session. Returns only what changed (additions, removals, changes) — massive token savings vs a full re-snapshot. Use after 'act' instead of 'snapshot' when you just need to see what changed. On first call (no previous snapshot), returns the full snapshot with a note. Use 'selector' to scope the diff to a page region.actPerform a browser interaction: click, fill, type, check, select, press key, scroll, hover, mousemove, drag, upload, resize, back, forward. Use @eN refs from navigate/snapshot as the target (e.g. '@e2'). CSS selectors also work. drag: requires target (source) and target2 (destination). upload: requires target (file input) and filePaths. resize: requires width and height (no target needed). holdDuration: for click, holds mouse down for N ms (long-press). Returns a fresh snapshot if the page navigated, or just the action result if it didn't.screenshotCapture a screenshot of the current page. Returns the image inline as base64. Optionally save to disk with savePath.extractExtract data from the page without a full snapshot. Types: text (visible text), html (markup), title, url, js (evaluate JavaScript). Use target with @eN or CSS selector for element-specific extraction.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.
{
"mcpServers": {
"chrome-mcp": {
"command": "npx",
"args": [
"-y",
"mcp-browser-extension@latest"
],
"env": {
"CHROME_MCP_TOKEN": "YOUR_CHROME_MCP_TOKEN_HERE",
"CHROME_MCP_EXTENSION_DIR": "YOUR_CHROME_MCP_EXTENSION_DIR_HERE"
}
}
}
}
{
"mcpServers": {
"leapfrog": {
"command": "npx",
"args": [
"-y",
"leapfrog-mcp"
]
}
}
}