scrapeunblocker-mcp
LocalAbout scrapeunblocker-mcp
scrapeunblocker-mcp wraps the ScrapeUnblocker web-scraping API as an MCP server for Claude and other MCP clients. It supports browser interactions, search, and structured JSON from site plugins; users provide their own API key.
Key features
- 01Fetch fully rendered page HTML
- 02Parse pages into structured JSON
- 03Extract page content as Markdown
- 04Interact with pages in a real browser
- 05Run more than 100 site plugins
- 06Search Google and read result pages
Use cases
- 01Retrieve web content for analysis
- 02Use a page search box and read results
- 03Collect product or review data from sites
- 04Compare search results and information across pages
MCP support
The MCP server exposes web fetching, page interaction, Google search, and site-plugin tools to MCP clients, making requests through the ScrapeUnblocker API. It requires a user-provided SCRAPEUNBLOCKER_KEY.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y scrapeunblocker-mcpSCRAPEUNBLOCKER_KEYSecretYour ScrapeUnblocker API key (get one at https://app.scrapeunblocker.com).Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
4Saved tool list · updated 3d ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | The absolute URL to fetch (http/https). |
| steps | array | No | Optional ordered browser actions to run in a real browser after the page loads, before the HTML is captured. Use `list_elements` first to find selectors. Runs once (not idempotent). |
| wait_value | string | No | The CSS selector or JS expression paired with wait_method (e.g. '#price' or 'document.readyState==="complete"'). |
| wait_method | enum | No | Optional render-wait strategy: 'css' waits for a selector, 'js' waits for a JS expression to be truthy.css | js |
| proxy_country | string | No | Optional ISO 3166-1 alpha-2 country code to route through, e.g. 'US', 'GB', 'DE'. |
| sleep_seconds | number | No | Extra seconds to wait after load before capturing the HTML. |
| method_timeout_seconds | integer | No | Cap in seconds for the render-wait method. |
Details
From the project READMEScrapeUnblocker MCP server
A Model Context Protocol server that lets Claude (and any other MCP client) fetch any web page's HTML - or run one of 100+ ready-made site plugins that return structured JSON - 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. |
browse_page | Run interactive browser steps on a page (click, type, select, scroll, wait), then return the resulting HTML. Not read-only: it acts on the website. |
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. |
fetch_markdown | Fetch a page and return it as clean Markdown: the main content with absolute links, without scripts, styles, navigation or footer. Usually 2-25% the size of the HTML, so it is the cheap way for a model to read a page. |
search_and_read | Search Google and read the top results in one call: Google's AI Overview (when there is one), the first 1-5 result pages as Markdown, and the other results as title, URL and snippet. Billed as one search plus one request per page read. |
list_plugins | List the ready-made site plugins (100+: Amazon, Walmart, Zillow, Booking.com, Indeed, Google Trends, YouTube, App Store, Ahrefs, ...) with their parameters. Free - it calls nothing. |
run_plugin | Run one site plugin and return its structured JSON. |
amazon_search, amazon_product, amazon_reviews, walmart_search, ebay_search, google_shopping, google_local, maps_place_details, google_images, youtube_search, youtube_transcript, zillow_search, indeed_jobs, trustpilot_reviews, booking_hotels | The most-used site plugins as tools of their own, each with its parameters in the tool schema - one call, no list_plugins lookup. Same JSON as run_plugin. |
Site plugins (structured JSON for known sites)
For many popular sites there is a plugin that returns the data already
parsed - a Target search, a Zillow listing search, an app's App Store reviews,
Google Trends for a few keywords. The model calls list_plugins (optionally
with search: "zillow" or a category) to find the plugin and its
parameters, then run_plugin with name and params (the most-used plugins, listed in
the table above, can also be called directly as their own tools):
{ "name": "target_search", "params": { "query": "coffee maker", "max_results": 20 } }
Every plugin and parameter is documented on the plugin pages. Each run is billed like an API request.
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 a steps array to browse_page 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 - and they act on the
website, so browse_page is the one tool not marked read-only. If a step fails,
browse_page 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 browse_page 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 browse_page 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."
- "Read https://en.wikipedia.org/wiki/Web_scraping as Markdown and summarise it in five bullets."
- "Search the web for the current population of Vilnius and cite the pages you read."
- "Find coffee makers on Target under $50 and compare them with Walmart's."
- "Show Google Trends for 'coffee' vs 'tea' in the US over the last year."
- "What are the newest App Store reviews of WhatsApp saying?"
Development
npm install
npm run build # bundles to dist/ with tsup
npm run typecheck
npm test # builds, then runs the tools against a local stand-in API
SCRAPEUNBLOCKER_KEY=... node dist/index.js # run the server
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.