ScrapeUnblocker MCP server
A Model Context Protocol server that lets Claude (and any other MCP client) fetch any web page's HTML through the ScrapeUnblocker scraping API, bypassing anti-bot protection (Cloudflare, DataDome, PerimeterX, Akamai, Shape).
You bring your own API key. Nothing is shared or proxied through us.
Tools
| Tool | What it does |
|---|---|
fetch_html | Fetch the fully rendered HTML of a URL (optionally after running interactive browser steps). |
list_elements | List a page's notable elements with a ready-to-use selector for each (selector discovery). |
fetch_parsed | Fetch a page and return AI-parsed structured JSON. |
google_search | Run a Google search and return organic results as JSON. |
Browser steps (interact, then capture)
Some pages only reveal what you need after you interact with them - accept a
cookie banner, click a tab, type into a search box and submit, or scroll to
trigger lazy loading. Pass an optional steps array to fetch_html and those
actions run in a real browser, in order, after the page loads; the resulting
HTML is then returned.
Available actions:
| Action | Fields |
|---|---|
wait_for | selector, selector_type? (css/xPath/className/tagName), timeout_ms? |
wait_for_text | value, timeout_ms? |
wait | value (ms) |
click | selector, selector_type?, timeout_ms? |
type | selector, selector_type?, value, clear?, timeout_ms? (typed human-like) |
select | selector, selector_type?, value, timeout_ms? |
press_key | value (Enter, Tab, Escape, Backspace, Delete, Space, Arrow*, Home, End, PageUp, PageDown) |
scroll | value ("bottom" or a pixel offset) |
Steps are not idempotent - they run once per call. If a step fails,
fetch_html returns which step failed, why, and the page HTML at that moment so
you can fix the selector and retry.
List elements (discover selectors first)
list_elements loads a page and returns a JSON list of its notable elements
(links, inputs, buttons, selects, ...), each with a ready-to-use selector plus
tag, text and useful attributes (name, id, type, placeholder,
aria_label, href, ...):
{ "url": "https://example.com", "count": 42, "elements": [ { "tag": "input", "selector": "#search", "type": "text", "placeholder": "Search", "aria_label": "Search" } ] }
The natural workflow is discover, then act: call list_elements to find the
selectors you need, then pass matching steps to fetch_html to click/type/
select and capture the resulting HTML.
Get an API key
Sign up and grab your key at app.scrapeunblocker.com. The server
reads it from the SCRAPEUNBLOCKER_KEY environment variable.
Install
Claude Code
The easiest route is the official plugin, which installs this server for you,
prompts for your API key (stored in your OS keychain rather than an environment
variable), and adds a /scrape-url command plus reference skills:
/plugin marketplace add ScrapeUnblocker/claude-code-plugin
/plugin install scrapeunblocker@scrapeunblocker
See ScrapeUnblocker/claude-code-plugin.
To add the bare server instead:
claude mcp add scrapeunblocker \
--env SCRAPEUNBLOCKER_KEY=your_api_key_here \
-- npx -y scrapeunblocker-mcp
Claude Desktop
Add this to your claude_desktop_config.json
(Settings → Developer → Edit Config):
{
"mcpServers": {
"scrapeunblocker": {
"command": "npx",
"args": ["-y", "scrapeunblocker-mcp"],
"env": {
"SCRAPEUNBLOCKER_KEY": "your_api_key_here"
}
}
}
}
Restart Claude Desktop and the ScrapeUnblocker tools appear.
Any other MCP client
Run the server over stdio:
SCRAPEUNBLOCKER_KEY=your_api_key_here npx -y scrapeunblocker-mcp
Example prompts
- "Fetch the HTML of https://www.example-shop.com/product/123 and list the price."
- "This page keeps blocking me: . Use fetch_html to get it."
- "List the elements on , then use fetch_html steps to type 'laptop' into the search box, press Enter, wait for the results, and give me the HTML."
- "Search Google for 'best running shoes 2026' and give me the top 5 links."
Development
npm install
npm run build # bundles to dist/ with tsup
npm run typecheck
SCRAPEUNBLOCKER_KEY=... node dist/index.js # run the server
License
MIT