# Scrapling MCP: an MCP server we run in production

Canonical: https://scalably.io/mcp/scrapling-mcp
Source: https://github.com/D4Vinci/Scrapling
Registry: not published to the MCP registry
Provenance: third-party server, pinned at 0.4.15, verified 2026-10-02.
Integrity: no independent hash is published for this third-party listing; the raw endpoint at https://scalably.io/mcp/scrapling-mcp.md mirrors this representation byte for byte
This is the machine-readable representation of the page at the canonical URL. Same facts, denser format.

## Direct answer
Stealth fetching and Cloudflare-aware scraping behind our browser-scrape skill; we run it under a fail-closed guard.

## Install
- Claude Code: `uvx --from "scrapling[ai]==0.4.15" scrapling mcp`
- Codex: `uvx --from "scrapling[ai]==0.4.15" scrapling mcp`
- Claude Desktop: not available for this server.

## Environment
No environment variables.

## Tools
| Tool | Description |
|---|---|
| `make_request` | Fast HTTP request with any method and browser fingerprint impersonation (replaced get in 0.4.15). |
| `bulk_get` | Async GET for several URLs at once. |
| `fetch` | Fetches dynamic content with a Chromium or Chrome browser. |
| `bulk_fetch` | Async fetch of several URLs, each in its own tab. |
| `stealthy_fetch` | Fetches through the stealthy browser built to get past Cloudflare Turnstile and similar anti-bot checks. |
| `bulk_stealthy_fetch` | Async stealthy fetch of several URLs. |
| `open_session` | Opens a persistent dynamic or stealthy browser session. |
| `open_request_session` | Opens a persistent HTTP session with no browser. |
| `session_fetch` | Fetches one URL through an open browser session. |
| `session_make_request` | Makes an HTTP request through an open request session. |
| `screenshot` | Captures a PNG or JPEG of a page through an open browser session. |
| `list_sessions` | Lists active sessions. |
| `close_session` | Closes a session and frees its resources. |

## Setup
- `pip install "scrapling[ai]==0.4.15"`, then `scrapling install` for the browser dependencies. Needs Python 3.10 or newer.
- Run `scrapling-mcp` (stdio). No API key.
- Optional: a custom Chromium via `--executable-path` or `SCRAPLING_EXECUTABLE_PATH`.
- HTTP mode: `scrapling-mcp --http` with `--auth-token` or `SCRAPLING_MCP_AUTH_TOKEN`; it binds to 127.0.0.1 by default.
- Docker images: `pyd4vinci/scrapling` and `ghcr.io/d4vinci/scrapling`.

One-shot tools open and close their own browser or client per call; session tools keep a browser or HTTP session open across calls.


## Limits
- In HTTP mode anyone who can reach the port can call every tool, including fetching any URL from the host. 0.4.15 made the HTTP transport require a token and bind to localhost; don't opt out with `--no-auth` on a reachable interface.
- One-shot tools no longer accept `session_id` (0.4.15); use the session tools.
- No rate limits are documented. Respect each target site's terms. We run it under a fail-closed guard.

Sources: D4Vinci/Scrapling v0.4.15 `docs/ai/mcp-server.md`; PyPI metadata for scrapling 0.4.15.


## Reliability
- CI: not applicable, this is a third-party project we do not control.
- Pinned at 0.4.15
- Verified 2026-10-02
- We run this server in production, pinned at the exact version, with the install command derived mechanically from that pin so it can be re-verified against the published package.

## Related
- Also in browser: [Playwright MCP](https://scalably.io/mcp/playwright-mcp)
- Read more: [Claude Code MCP: how to add an MCP server](https://scalably.io/blog/claude-code-mcp)
