Skip to main content
Glama
0pen1
by 0pen1

scrapingdog-mcp

A Model Context Protocol server that exposes the Scrapingdog scraping APIs as tools for MCP-compatible clients (Claude Desktop, Claude Code, and others).

Communicates over stdio. Built with TypeScript and the official MCP SDK.

What it does

Nine tools, each wrapping one Scrapingdog endpoint:

Tool

Endpoint

What it returns

scrape

/scrape

Raw HTML of any URL (JS rendering, premium proxies, geotargeting, sessions, stealth, wait)

screenshot

/screenshot

Page screenshot metadata (png/jpg/webp, full-page, viewport, quality)

google_search

/google

Google organic results, ads, knowledge graph, SERP features (JSON or HTML)

bing_search

/bing/search

Bing search results (market/geo/pagination/safe-search)

duckduckgo_search

/duckduckgo/search

DuckDuckGo results (region, date filter, pagination token)

baidu_search

/baidu/search

Baidu results (Chinese-language restriction, pagination)

x_profile

/x/profile

X (Twitter) profile data (name, handle, follower counts, bio)

x_post

/x/post

X (Twitter) post (tweet) data

datacenter_proxy

(forward proxy)

Connection details + ready-to-paste curl/Python for proxy.scrapingdog.com:8081

Every tool accepts an optional api_key argument to override the configured key for that call.

Related MCP server: spider-cloud-mcp

Prerequisites

  • Node.js ≥ 18.17 (tested on 20.x).

  • A Scrapingdog API key — get one from your Scrapingdog dashboard after signing up.

Install & build

npm install
npm run build      # outputs to dist/

Provide your API key

The key is resolved in this order (first wins):

  1. The api_key argument on an individual tool call.

  2. The SCRAPINGDOG_API_KEY environment variable.

  3. A .env file containing SCRAPINGDOG_API_KEY=... in the working directory, ~/.scrapingdog.env, or ~/.env.

Option 2 (env var) is recommended — the key never touches disk beyond your MCP client config, and nothing ends up in tool-call logs.

Configure your MCP client

Claude Desktop / Claude Code (claude_desktop_config.json)

{
  "mcpServers": {
    "scrapingdog": {
      "command": "node",
      "args": ["/absolute/path/to/scrcpy/dist/index.js"],
      "env": {
        "SCRAPINGDOG_API_KEY": "your-key-here"
      }
    }
  }
}

Install from npm (no clone needed)

Published as @0pen1/scrapingdog-mcp. Run directly with npx (no install):

npx @0pen1/scrapingdog-mcp

The server reads SCRAPINGDOG_API_KEY from the environment. Pick your CLI below for a one-line setup.

Claude Code

claude mcp add scrapingdog --scope user \
  --env SCRAPINGDOG_API_KEY=your-key-here \
  -- npx -y @0pen1/scrapingdog-mcp

--scope user makes it available in all your projects (use local or project to scope it tighter).

OpenAI Codex CLI

codex mcp add scrapingdog \
  --env SCRAPINGDOG_API_KEY=your-key-here \
  -- npx -y @0pen1/scrapingdog-mcp

This writes to ~/.codex/config.toml. The equivalent TOML block is:

[mcp_servers.scrapingdog]
command = "npx"
args = ["-y", "@0pen1/scrapingdog-mcp"]

[mcp_servers.scrapingdog.env]
SCRAPINGDOG_API_KEY = "your-key-here"

Gemini CLI

gemini mcp add scrapingdog \
  --env SCRAPINGDOG_API_KEY=your-key-here \
  -- npx -y @0pen1/scrapingdog-mcp

Cursor / Windsurf / Claude Desktop (JSON config)

For clients that use a JSON config file, add this block. Typical locations:

  • Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json (macOS)

  • Cursor~/.cursor/mcp.json (or .cursor/mcp.json per-project)

  • Windsurf~/.codeium/windsurf/mcp_config.json

{
  "mcpServers": {
    "scrapingdog": {
      "command": "npx",
      "args": ["-y", "@0pen1/scrapingdog-mcp"],
      "env": { "SCRAPINGDOG_API_KEY": "your-key-here" }
    }
  }
}

Replace your-key-here with your Scrapingdog API key from the dashboard. After editing a JSON config, restart the client so it picks up the server.

Run standalone (for testing)

SCRAPINGDOG_API_KEY=your-key node dist/index.js

It speaks JSON-RPC over stdio, so you can pipe messages to it directly.

Example tool calls

scrape          { "url": "https://example.com", "dynamic": true, "country": "us" }
google_search   { "query": "best espresso machines 2026", "results": "10", "country": "us" }
bing_search     { "query": "site:github.com mcp server", "count": "20" }
duckduckgo_search { "query": "rust async runtime", "df": "m" }
baidu_search    { "query": "人工智能", "ct": 2 }
x_profile       { "profileId": "elonmusk" }
x_post          { "tweetId": "1655608985058267139" }
screenshot      { "url": "https://example.com", "fullPage": true, "format": "png" }
datacenter_proxy { "target_url": "https://httpbin.org/ip" }

How responses are handled

  • JSON endpoints (search, social, etc.): the parsed JSON is returned as text so the host can reason about it directly.

  • /scrape: raw HTML is returned as text.

  • /screenshot: the endpoint returns binary image bytes, which can't be carried as text cleanly. The tool reports the content type and byte length, and notes how to fetch the image directly. (If you need true image delivery, extend the handler to base64-encode into an image content block.)

  • Non-2xx responses: returned as MCP error results (isError: true) with the upstream status, content type, and body. Note Scrapingdog reports invalid keys as HTTP 400 with a JSON "Unauthorized request" message — the body makes this clear.

Credit costs (per request)

Scrape: 1 (rotating proxy) → 25 (JS render + premium). Google/Bing/DDG/Baidu search: ~5. Screenshot: 5. Profile/Post scrapers: 5–10. See the pricing/credit table for the full breakdown. Requests time out after 60s upstream.

Project layout

src/
  index.ts          # entry point — creates McpServer, connects stdio transport
  scrapingdog.ts    # API key resolution + shared HTTP request helper
  result.ts         # response → MCP tool-result formatting (ok / error / fromResponse)
  tools.ts          # the 9 tool definitions (schema + handler) and registration

License

MIT

Available Tools

9 tools
datacenter_proxyA

Return Scrapingdog Datacenter Proxy connection details (host, port, username, password) and a ready-to-paste curl/Python example. This is a forward proxy (proxy.scrapingdog.com:8081), not an HTTP API — point your own HTTP client at it. Optionally pass target_url for a ready-to-run curl.

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOverride the configured Scrapingdog API key for this call. If omitted, the key is read from SCRAPINGDOG_API_KEY or a local .env file.
target_urlNoOptional target URL to test the proxy against. If provided, a ready-to-use curl command is returned.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool doesn't make requests itself ('point your own HTTP client'), reveals the proxy endpoint, and mentions the output includes examples. It doesn't discuss auth or rate limits, but for a simple info-return tool this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core function, then the proxy context, then optional behavior. No filler, every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two optional parameters and no output schema, the description gives purpose, output type, proxy nature, and optional parameter behavior. It lacks an explicit return structure but that is not essential for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully documents both parameters (100% coverage). The description adds some value by explaining target_url yields a ready-to-run curl, but does not mention api_key override. Baseline 3 applies since the schema already conveys parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns Scrapingdog Datacenter Proxy connection details (host, port, username, password) and ready-to-paste examples, with a specific proxy address. It explicitly contrasts with an HTTP API, distinguishing it from sibling scraping tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains this is a forward proxy, not an HTTP API, which implies when to use it (to get proxy connection info) vs sibling tools (for direct scraping). It also notes the optional target_url behavior for a ready-to-run curl, but doesn't explicitly name alternatives or state when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scrapeA

Scrape any URL via the Scrapingdog Web Scraping API (/scrape). Returns the page's HTML. Supports JS rendering (dynamic), premium residential proxies, geotargeting (country), sessions, stealth/captcha bypass, and a render wait. Costs 1–25 credits depending on options.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL of the page to scrape.
waitNoMilliseconds to wait after JS rendering before capturing HTML (0–35000). Use with dynamic=true.
imageNoScrape image URLs found on the page.
api_keyNoOverride the configured Scrapingdog API key for this call. If omitted, the key is read from SCRAPINGDOG_API_KEY or a local .env file.
countryNoISO country code for geotargeting (e.g. 'us', 'gb', 'in'). Sends the request from that location. Costs 10 credits.
dynamicNoEnable JavaScript rendering with a headless browser. Costs 5 credits (25 with premium proxy).
premiumNoUse premium residential proxies instead of the rotating datacenter proxy. Costs 10 credits (25 with JS rendering).
stealth_modeNoEnable stealth mode to bypass bot detection / captchas.
custom_headersNoSet to true to forward your own request headers (passed via the headers parameter).
session_numberNoReuse the same proxy/IP across multiple requests by passing a stable session string.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility. It discloses the return type (HTML), core capabilities, and credit costs, which is useful behavioral context. However, it omits potential failure modes, rate limits, or whether the operation has side effects on the target site, leaving some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with the core purpose in the first sentence and capability/cost summary in the second. It is front-loaded and every sentence contributes, though the second sentence is a bit of a list and could be more structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complex tool with 10 parameters and no output schema, the description adequately states the primary output (HTML), key features, and credit costs. It does not explain error handling or response structure beyond HTML, but the rich schema covers parameter details, making this reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every parameter's meaning, including credit costs for country and dynamic. The description provides only a high-level summary of supported features, adding no meaningful details beyond what the schema already offers. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it scrapes any URL via the Scrapingdog API and returns the page's HTML, using the specific verb 'Scrape' and resource. It inherently distinguishes itself from sibling tools like screenshot (captures images) and search tools (return search results).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies general-purpose scraping for any URL and lists key capabilities (JS rendering, proxies, geotargeting) that indicate when to use specific options, but it does not explicitly contrast with sibling tools or state when not to use this tool. No alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screenshotB

Capture a screenshot of a URL via the Scrapingdog Screenshot API (/screenshot). Supports full-page capture, viewport size, wait-until, format (png/jpg/webp), and quality. Costs 5 credits. Note: this tool reports image metadata; binary bytes aren't returned as text.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL of the page to screenshot.
widthNoBrowser viewport width in pixels (e.g. '1920').
formatNoOutput image format. Default: png.
heightNoBrowser viewport height in pixels (e.g. '1080').
api_keyNoOverride the configured Scrapingdog API key for this call. If omitted, the key is read from SCRAPINGDOG_API_KEY or a local .env file.
qualityNoImage quality 0–100 (jpg/webp). Default: 80.
fullPageNoCapture the full scrollable page rather than just the visible viewport.
wait_untilNoWhen navigation is considered complete before screenshotting. Default: domcontentloaded.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It adds useful behavioral context: a 5-credit cost and a note that binary bytes aren't returned as text (only image metadata). However, it doesn't disclose error handling, rate limits, or the exact return structure, leaving gaps for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences: purpose, cost, and a critical behavioral caveat. Every sentence earns its place, and the most important information (what the tool does) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This tool has 8 parameters and no output schema, yet the description only vaguely mentions 'reports image metadata'. It does not describe the returned data structure (e.g., base64, URL, JSON fields), error scenarios, or how to handle the result, leaving an agent under-informed for a complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all 8 parameters with descriptions (100% coverage). The tool description only recaps some parameter capabilities in prose, adding minimal value beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Capture a screenshot of a URL via the Scrapingdog Screenshot API (/screenshot)', using a specific verb and resource. It lists supported features (full-page, viewport, wait-until, format, quality) which clearly distinguishes it from sibling tools like scrape or search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives such as scrape or search. The use case is implied by the tool's name, but there are no stated context cues, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

x_postA

Scrape an X (Twitter) post (tweet) via Scrapingdog (/x/post). Pass the numeric tweet ID from the post URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOverride the configured Scrapingdog API key for this call. If omitted, the key is read from SCRAPINGDOG_API_KEY or a local .env file.
tweetIdYesThe tweet ID, found in the post URL (e.g. for .../status/1655608985058267139 the ID is 1655608985058267139).

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the transparency burden. It adds the endpoint path and that the ID comes from the post URL, but it does not describe the return format, error behavior, rate limits, or side effects. For a scraping tool, the read-only nature is implied but not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loads the primary purpose, and wastes no words. Every sentence contributes useful information for selecting and invoking the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one required parameter and clear schema coverage, but there is no output schema and the description does not mention what the response contains. Since the tool's purpose is scraping, the agent can infer it returns post data, but error and output behavior are unspecified. The description is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both api_key and tweetId already well described in the input schema. The description's instruction to pass the numeric tweet ID merely echoes the schema example and adds no new parameter semantics beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Scrape') and resource ('X (Twitter) post (tweet)') and names the exact endpoint (/x/post). It clearly distinguishes from siblings like x_profile, which targets profiles, and generic scrape.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates that the tool is for scraping a single post and instructs the user to pass the numeric tweet ID from the URL. It does not explicitly mention alternatives or exclusions, but the context is clear enough for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

x_profileA

Scrape an X (Twitter) profile via Scrapingdog (/x/profile). Returns the profile's name, handle, follower counts, bio, and other public metadata as JSON. Pass a username or user ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNoOverride the configured Scrapingdog API key for this call. If omitted, the key is read from SCRAPINGDOG_API_KEY or a local .env file.
profileIdYesThe user ID or username of the X profile to scrape, e.g. 'elonmusk' or 'nasa'.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It states that it returns JSON with specific fields, but it does not mention the dependency on Scrapingdog API key, rate limits, caching behavior, or whether it performs a live scrape. These are significant omissions for an external scraping tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action and endpoint, and contains no filler. Every word contributes to understanding the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only scrape with only two parameters, the description adequately covers purpose, input format, and return fields. However, it omits mention of API key requirements or error conditions, and with no output schema, it relies on the listed fields to convey the response shape. Still, it provides enough context for an agent to select and invoke the tool correctly in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline 3 applies. The description restates that the tool accepts a username or user ID, which is already in the schema's profileId description. It adds no new semantic detail beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Scrape' with a clear resource 'X (Twitter) profile' and even names the endpoint '/x/profile'. It distinguishes the tool from siblings like x_post and search tools by focusing on profile metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a parameter-level instruction ('Pass a username or user ID') but gives no explicit guidance on when to use this tool versus alternatives. The use case is implied by the resource, but no exclusions or comparisons with sibling tools are offered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv0.1.1
    • First observedbaidu_search
    • First observedbing_search
    • First observeddatacenter_proxy
    • First observedduckduckgo_search
    • First observedgoogle_search
    • First observedscrape
    • First observedscreenshot
    • First observedx_post
    • First observedx_profile

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct resource or action: raw HTML scraping, screenshots, four search engines, X profile/post, and proxy details. The search tools are differentiated by the named engine, and the X tools by profile vs post, leaving no ambiguous overlaps.

Naming Consistency3/5

Tool names use a mix of verb forms and noun compounds, such as scrape, screenshot, google_search, x_profile, and datacenter_proxy. While the snake_case style is consistent, there is no uniform verb_noun pattern, making the naming somewhat mixed.

Tool Count5/5

With 9 tools covering scraping, screenshots, search, social media, and proxy access, the count is well within the ideal 3-15 range and each tool earns its place.

Completeness4/5

The set covers core Scrapingdog features (scrape, screenshot, search engines, X data, proxy) with only minor gaps such as missing X search or timeline and other less-used Scrapingdog endpoints. Agents can work around these gaps by using the scrape tool.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers