# io.github.anthonybono21-cloud/leapfrog (npm · leapfrog-mcp)

Multi-session browser MCP — 15 parallel isolated browsers, 37 tools, stealth, self-improvement.

- Trust score: 65/100 (medium)
- Change this week: +19
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `leapfrog-mcp`: 65/100 (this document), [markdown](https://verifymcp.io/servers/anthonybono21-cloud-leapfrog/leapfrog-mcp.md), [page](https://verifymcp.io/servers/anthonybono21-cloud-leapfrog/leapfrog-mcp)

## Channel facts

- Registry: `npm`
- Package: `leapfrog-mcp`
- Version: `0.7.4`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (98 of 102), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (98 of 102), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 116 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 76/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3957 tokens (~106/item across 37 items; 37 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 99/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 96% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add anthonybono21-cloud-leapfrog -- npx -y leapfrog-mcp
```

### Codex

```bash
codex mcp add anthonybono21-cloud-leapfrog -- npx -y leapfrog-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "anthonybono21-cloud-leapfrog": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "leapfrog-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add anthonybono21-cloud-leapfrog --command npx --arg -y --arg leapfrog-mcp
```

### Hermes

```yaml
mcp_servers:
  anthonybono21-cloud-leapfrog:
    command: "npx"
    args: ["-y", "leapfrog-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "anthonybono21-cloud-leapfrog": {
      "command": "npx",
      "args": [
        "-y",
        "leapfrog-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 65, +60)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] Tool coverage: unverified → 100
- [functional] Licence: MIT

### 2026-08-01 (score 5, −23)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 28, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-30 (score 46, +18)

- [functional regression] Dependency health: partial → unverified
- [functional improvement] Tool coverage: unverified → 100

### 2026-07-28 (score 28, −18)

- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Dependency health: unverified → partial
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 46)

First indexed and scored.

## MCP tools (37)

### `session_create` (~440 tokens)

Create Browser Session

Create 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.

Input parameters:

- `acceptDownloads` (boolean): Whether to accept downloads. Default: true.
- `cdp` (string): CDP endpoint URL to connect to a running Chrome instance (e.g. 'http://localhost:9222').
- `clientId` (string): Client identifier for per-client pool partitioning. Used with LEAP_MAX_SESSIONS_PER_CLIENT.
- `colorScheme` (string): Preferred color scheme.
- `extensions` (array): Paths to unpacked Chrome extensions to load.
- `geolocation` (object): Geolocation to emulate.
- `headed` (boolean): Run browser with visible UI for this session. Overrides LEAP_HEADED env var.
- `locale` (string): Browser locale (e.g. 'en-US', 'fr-FR').
- `permissions` (array): Permissions to grant (e.g. ['geolocation', 'notifications']).
- `pinned` (boolean): Pin this session to prevent idle timeout cleanup.
- `profile` (string): Profile shorthand name (e.g. 'github', 'gmail'). Uses persistent Chrome profile at ~/.leapfrog/chrome-profiles/{name}/.
- `profilePath` (string): Path to a Playwright storageState JSON file for pre-authenticated sessions.
- `proxy` (object): Per-session proxy configuration. Each session can use a different proxy.
- `stealth` (boolean): Enable/disable stealth mode for this session. Default: true (uses global setting).
- `timezoneId` (string): Timezone ID (e.g. 'America/New_York', 'Europe/London').
- `userAgent` (string): Custom user agent string.
- `viewport` (object): Custom viewport. Default: 1280x720.

### `session_create_batch` (~70 tokens)

Create Multiple Browser Sessions

Create 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.

Input parameters:

- `sessions` (array, required): Array of sessions to create.

### `session_list` (~20 tokens)

List Browser Sessions

List all active browser sessions with their URLs and idle times.

### `session_destroy` (~34 tokens)

Destroy Browser Session

Close and clean up a browser session. Frees a pool slot.

Input parameters:

- `sessionId` (string, required): Session ID to destroy.

### `session_save_profile` (~86 tokens)

Save Session Profile

Save 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.

Input parameters:

- `name` (string, required): Profile name (e.g. 'google', 'github'). Overwrites if exists.
- `sessionId` (string, required): Session ID to save.

### `session_list_profiles` (~15 tokens)

List Saved Profiles

List all saved authentication profiles.

### `navigate` (~155 tokens)

Navigate & Snapshot

Navigate 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).

Input parameters:

- `autoRetry` (boolean): Auto-retry with stealth escalation when blocked. Default: true.
- `maxRetryLevel` (integer): Max escalation level (0-5). Level 3+ rotates session. Default: 3.
- `sessionId` (string, required): Session ID.
- `url` (string, required): Full URL including https://
- `waitUntil` (string): Wait strategy. Use networkidle for SPAs.

### `snapshot` (~97 tokens)

Page Snapshot

Re-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').

Input parameters:

- `maxChars` (integer): Max output chars.
- `selector` (string): CSS selector to scope snapshot to a page region.
- `sessionId` (string, required): Session ID.

### `diff` (~118 tokens)

Snapshot Diff

Compare 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.

Input parameters:

- `selector` (string): CSS selector to scope snapshot to a page region.
- `sessionId` (string, required): Session ID.

### `act` (~404 tokens)

Browser Action

Perform 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.

Input parameters:

- `action` (string, required): Interaction to perform.
- `filePaths`: File path(s) for upload action. Single string or array of strings.
- `height` (integer): Viewport height for resize action.
- `holdDuration` (integer): Hold duration in ms for click action (long-press). Uses mouse.down() + wait + mouse.up().
- `key` (string): Key name for press (e.g. 'Enter', 'Tab', 'Control+a').
- `scrollAmount` (integer): Pixels to scroll. Default: 300.
- `scrollDirection` (string): Scroll direction. Default: down.
- `sessionId` (string, required): Session ID.
- `target` (string): @eN ref or CSS selector. Required for click, fill, type, check, select, hover.
- `target2` (string): Drop destination for drag action. @eN ref or CSS selector.
- `typeDelay` (number): Delay in ms between keystrokes for action='type'. Enables human-like typing speed.
- `value` (string): Text for fill/type, option value for select.
- `width` (integer): Viewport width for resize action.
- `x` (number): X coordinate for mousemove action.
- `y` (number): Y coordinate for mousemove action.

### `screenshot` (~95 tokens)

Screenshot

Capture a screenshot of the current page. Returns the image inline as base64. Optionally save to disk with savePath.

Input parameters:

- `fullPage` (boolean): Capture full scrollable page.
- `savePath` (string): Optional file path to save the screenshot to disk. If omitted, image is returned inline only.
- `selector` (string): CSS selector to capture a specific element.
- `sessionId` (string, required): Session ID.

### `extract` (~117 tokens)

Extract Data

Extract 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.

Input parameters:

- `js` (string): JavaScript expression for type='js'.
- `maxChars` (integer): Max output characters.
- `sessionId` (string, required): Session ID.
- `target` (string): @eN ref or CSS selector. Omit for page-level.
- `type` (string): What to extract.

### `pool_status` (~44 tokens)

Pool Status & Resources

Show pool stats, resource usage (memory, uptime), and all active session summaries. Shows per-session idle time. Sessions approaching 30-minute idle timeout should be refreshed or saved.

### `network_log` (~141 tokens)

Network Log

View captured HTTP requests/responses for a session. Shows method, status, URL, size, and timing. Filter by URL pattern, method, status range, or content-type. Network capture starts automatically when a session is created.

Input parameters:

- `contentType` (string): Content-type filter (e.g. 'json').
- `method` (string): HTTP method filter (GET, POST, etc).
- `sessionId` (string, required): Session ID.
- `statusMax` (integer): Maximum status code.
- `statusMin` (integer): Minimum status code (e.g. 400 for errors).
- `urlPattern` (string): Regex or substring to filter URLs.

### `console_log` (~74 tokens)

Console Log

View captured browser console messages (log, warn, error, info, debug). Console capture starts automatically when a session is created. Use level filter to focus on errors or warnings.

Input parameters:

- `level` (string): Filter by level: error, warn, log, info, debug.
- `sessionId` (string, required): Session ID.

### `network_intercept` (~156 tokens)

Network Intercept

Add or remove network intercept rules. Block requests (ads, trackers), mock API responses, or log specific traffic. Use action='remove' with ruleId to remove an existing rule.

Input parameters:

- `action` (string, required): Intercept action.
- `mockBody` (string): Response body for mock responses.
- `mockContentType` (string): Content-type for mock responses. Default: application/json.
- `mockStatus` (integer): HTTP status for mock responses.
- `ruleId` (string, required): Unique rule ID. Use for adding and removing rules.
- `sessionId` (string, required): Session ID.
- `urlPattern` (string): URL glob pattern to match (e.g. '**/analytics/**'). Required for block/log/mock.

### `wait_for` (~144 tokens)

Smart Wait

Wait for a condition before proceeding. Supports: element visible, text appears, network idle, URL navigation, JS expression truthy. Returns a fresh snapshot after the wait completes.

Input parameters:

- `condition` (string, required): What to wait for.
- `js` (string): JS expression that should return truthy (for js condition).
- `sessionId` (string, required): Session ID.
- `target` (string): @eN ref or CSS selector (for element/text conditions).
- `text` (string): Text to find (for text condition) or URL pattern (for navigation).
- `timeout` (integer): Max wait time in ms. Default 10000, max 30000.

### `tabs_list` (~52 tokens)

List Tabs

List all open tabs in a session. Shows index, URL, title, and which tab is active. New tabs (popups, OAuth windows) are automatically tracked.

Input parameters:

- `sessionId` (string, required): Session ID.

### `tab_switch` (~76 tokens)

Switch Tab

Switch to a different tab by index. Use -1 to switch to the most recently opened tab (useful for popups). Returns a snapshot of the newly active tab.

Input parameters:

- `sessionId` (string, required): Session ID.
- `tabIndex` (integer, required): Tab index to switch to. -1 for last (most recent) tab.

### `tab_close` (~66 tokens)

Close Tab

Close a tab by index. Defaults to the active tab. Cannot close the last remaining tab. Returns a snapshot of the new active tab.

Input parameters:

- `sessionId` (string, required): Session ID.
- `tabIndex` (integer): Tab index to close. Omit to close the active tab.

### `session_health` (~51 tokens)

Session Health Check

Check if a session is healthy (browser connected, page responsive). Omit sessionId to check all sessions. Quick diagnostic for debugging.

Input parameters:

- `sessionId` (string): Session ID. Omit to check all.

### `add_init_script` (~78 tokens)

Add Init Script

Inject JavaScript that runs before every page load in a session. Persists across navigations (Playwright built-in behavior). Use for fingerprint overrides, custom stealth patches, or page instrumentation.

Input parameters:

- `script` (string, required): JavaScript code to inject. Runs in page context before any page scripts.
- `sessionId` (string, required): Session ID.

### `batch_actions` (~94 tokens)

Batch Actions

Execute multiple browser actions sequentially in a single MCP call. Eliminates round-trip overhead for humanization sequences (e.g. Bezier mouse paths, typed text with delays). Each action can have an optional delayAfter (ms) to pause between steps. Returns a single result with the outcome of each action.

Input parameters:

- `actions` (array, required): Array of actions to execute sequentially.
- `sessionId` (string, required): Session ID.

### `execute` (~135 tokens)

Execute Script

Run a Playwright script with access to { page, context }. One tool call replaces 5-20 sequential MCP round trips. Use for complex flows with conditional logic, loops, error handling. NOTE: Scripts run in the Node.js process — equivalent to arbitrary code execution. Disable with LEAP_ALLOW_EXECUTE=false.

Input parameters:

- `script` (string, required): JavaScript async function body with access to { page, context }. Example: 'await page.goto("..."); return await page.title();'
- `sessionId` (string, required)
- `timeout` (number): Timeout in ms. Default: 60000, max: 300000.

### `api_discover` (~77 tokens)

Discover Page APIs

List JSON APIs the page has called. Captured automatically from XHR/fetch traffic. Classifies into: data, tracking, auth, cdn, ads.

Input parameters:

- `category` (string)
- `minConfidence` (number): Minimum classification confidence (0-1). Default: 0.
- `sessionId` (string, required)

### `api_export` (~65 tokens)

Export OpenAPI Spec

Generate an OpenAPI v3 spec from observed API traffic. Navigate pages first to capture traffic, then export.

Input parameters:

- `includeTracking` (boolean): Include tracking/analytics endpoints. Default: false.
- `sessionId` (string, required)
- `title` (string): API spec title.

### `session_memory` (~53 tokens)

Session Action History

Recall what actions were performed in this session. Useful after context window compression to recover lost context.

Input parameters:

- `limit` (number): Number of recent actions to return. Default: 20.
- `sessionId` (string, required)

### `profile_list` (~18 tokens)

List Auth Profiles

List saved persistent browser profiles with their auth status.

### `profile_delete` (~30 tokens)

Delete Auth Profile

Delete a saved persistent browser profile and all its data.

Input parameters:

- `name` (string, required): Profile name to delete.

### `paginate` (~278 tokens)

Pagination Extraction

Extract data across multiple pages in a single call. Handles click-next, infinite scroll, and URL-pattern pagination. Auto-detects 'next' buttons when nextSelector='auto'. Returns extracted content from each page plus metadata. Replaces 3-4 tool calls per page with one invocation. Cap: 50 pages, 100K total chars.

Input parameters:

- `delayMs` (integer): Delay between pages in ms. Default: 1000.
- `extractJs` (string): JavaScript expression for extractType='js'.
- `extractTarget` (string): CSS selector to scope extraction to a specific container.
- `extractType` (string): What to extract from each page.
- `maxCharsPerPage` (integer): Max characters per page extraction. Default: 5000.
- `maxPages` (integer): Maximum pages to extract. Default: 10.
- `nextSelector` (string): CSS selector for the next button, or 'auto' to detect automatically.
- `paginationType` (string): Pagination strategy: click (next button), scroll (infinite scroll), url (URL pattern).
- `sessionId` (string, required): Session ID.
- `stopWhen` (string): Stop condition. Default: auto (all heuristics).
- `urlPattern` (string): URL pattern with {page} placeholder for paginationType='url'.

### `session_export` (~112 tokens)

Export Session Recording

Export session action history as a replayable recording. Creates a JSON script from all mutating actions with @eN refs resolved to stable selectors. Use format='playwright' to get a Playwright JS script compatible with the execute tool.

Input parameters:

- `format` (string): Output format. Default: json.
- `keepExtracts` (boolean): Include extract steps in the recording. Default: false.
- `name` (string): Recording name. Default: auto-generated.
- `sessionId` (string, required): Session ID.

### `session_replay` (~101 tokens)

Replay Session Recording

Replay a recording in the current session. Executes each step directly against the browser. Override {{placeholder}} params with the params object. Set onError='skip' to continue past failures.

Input parameters:

- `onError` (string): Error handling: stop (default) or skip.
- `params` (object): Parameter overrides for {{placeholder}} values.
- `recording` (string, required): Recording JSON string (from session_export).
- `sessionId` (string, required): Session ID.

### `wait_for_human` (~96 tokens)

Wait for Human

Pause and request human intervention. Shows the @..@ overlay with your reason. Use when you encounter a CAPTCHA, login wall, or any situation requiring human action. The tool blocks until the user clicks 'Done' on the overlay. Returns success when resolved.

Input parameters:

- `reason` (string, required): Why human help is needed (e.g. 'CAPTCHA detected', 'Login required').
- `sessionId` (string, required): Session ID.

### `profile_warm` (~97 tokens)

Warm Browser Profile

Warm up a browser profile by browsing trusted sites (Google, Wikipedia, YouTube). Fresh profiles with zero history score near 0 on reCAPTCHA v3. A 60-90 second warm-up dramatically improves trust scores. Stores warm-up state in domain knowledge so it doesn't repeat. Must pass a sessionId of an existing session with a profile.

Input parameters:

- `sessionId` (string, required): Session ID (must be a profile-based session).

### `profile_import_from_chrome` (~144 tokens)

Import Profile from Chrome

Connect to your real Chrome browser via CDP, capture its auth cookies, and save them as a Leapfrog profile. This gives you real Google auth, reCAPTCHA trust, and all your logged-in sessions — but in an isolated Leapfrog session, not your real browser. Start Chrome with: chrome --remote-debugging-port=9222

Input parameters:

- `cdp` (string): CDP endpoint. Default: http://localhost:9222
- `domains` (array): Only capture cookies from these domains. Omit for all cookies.
- `name` (string, required): Profile name to save as (e.g. 'google-auth', 'my-chrome').

### `domain_knowledge` (~74 tokens)

Domain Knowledge

Inspect what Leapfrog has learned about a website from previous visits. Shows stealth tier, wait strategy, block history, consent selector, API endpoints, and visit count. Pass no domain to list all known domains.

Input parameters:

- `domain` (string): Domain to inspect (e.g. 'github.com'). Omit to list all.

### `session_export_trace` (~50 tokens)

Export Session Trace

Export a Playwright trace file for a session. Requires LEAP_TRACE=true. The trace can be viewed at trace.playwright.dev for detailed action timeline.

Input parameters:

- `sessionId` (string, required): Session ID.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/anthonybono21-cloud-leapfrog/leapfrog-mcp#diagnostics

## Score history

- 2026-08-03: 65
- 2026-08-02: 65
- 2026-08-01: 5
- 2026-07-31: 28
- 2026-07-30: 46
- 2026-07-28: 28
- 2026-07-27: 46

## Links

- npm package: https://www.npmjs.com/package/leapfrog-mcp
- Socket report: https://socket.dev/npm/package/leapfrog-mcp
- Repository: https://github.com/anthonybono21-cloud/leapfrog
- Changelog RSS feed: https://verifymcp.io/servers/anthonybono21-cloud-leapfrog/leapfrog-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/anthonybono21-cloud-leapfrog/leapfrog-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/anthonybono21-cloud-leapfrog/leapfrog-mcp
