Skip to main content
Glama
ScrapeUnblocker MCP Server

ScrapeUnblocker MCP Server

Official

Fetch page HTML

fetch_html
Read-only

Retrieve fully rendered HTML from web pages blocked by anti-bot protection, CAPTCHAs, or 403/429 errors, using a real browser when normal fetches fail.

Instructions

Fetch the fully rendered HTML of any web page through ScrapeUnblocker, bypassing anti-bot protection (Cloudflare, DataDome, PerimeterX, Akamai, Shape). Use this when a normal fetch is blocked (403/429, captcha, 'access denied') or when the page needs a real browser to render. Returns the raw HTML as text. To read or summarise a page, fetch_markdown is much smaller. To click, type or scroll before capturing, use browse_page.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "url": "<url>"
    },
    "name": "fetch_html"
  }
}

Input Schema

NameRequiredDescriptionDefault
urlYesThe absolute URL to fetch (http/https).
wait_valueNoThe CSS selector or JS expression paired with wait_method (e.g. '#price' or 'document.readyState==="complete"').
wait_methodNoOptional render-wait strategy: 'css' waits for a selector, 'js' waits for a JS expression to be truthy.
proxy_countryNoOptional ISO 3166-1 alpha-2 country code to route through, e.g. 'US', 'GB', 'DE'.
sleep_secondsNoExtra seconds to wait after load before capturing the HTML.
method_timeout_secondsNoCap in seconds for the render-wait method.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv0.12.5
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / method_timeout_seconds / maximum
      Added value: +9007199254740991
  2. Changed1 schema field changedv0.6.0
    • removedInput schema / properties / steps
      Removed value: -{
      -  "description": "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).",
      -  "items": {
      -    "anyOf": [
      -      {
      -        "additionalProperties": false,
      -        "description": "Wait until an element matching `selector` exists.",
      -        "properties": {
      -          "action": {
      -            "const": "wait_for",
      -            "type": "string"
      -          },
      -          "selector": {
      -            "description": "Selector to wait for (until present).",
      -            "type": "string"
      -          },
      -          "selector_type": {
      -            "description": "How `selector` is interpreted. Defaults to 'css'.",
      -            "enum": [
      -              "css",
      -              "xPath",
      -              "className",
      -              "tagName"
      -            ],
      -            "type": "string"
      -          },
      -          "timeout_ms": {
      -            "exclusiveMinimum": 0,
      -            "type": "integer"
      -          }
      -        },
      -        "required": [
      -          "action",
      -          "selector"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "additionalProperties": false,
      -        "description": "Wait until the given text appears on the page.",
      -        "properties": {
      -          "action": {
      -            "const": "wait_for_text",
      -            "type": "string"
      -          },
      -          "timeout_ms": {
      -            "exclusiveMinimum": 0,
      -            "type": "integer"
      -          },
      -          "value": {
      -            "description": "Text to wait for anywhere on the page.",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "action",
      -          "value"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "additionalProperties": false,
      -        "description": "Pause for a fixed number of milliseconds.",
      -        "properties": {
      -          "action": {
      -            "const": "wait",
      -            "type": "string"
      -          },
      -          "value": {
      -            "description": "Fixed pause in milliseconds.",
      -            "minimum": 0,
      -            "type": "integer"
      -          }
      -        },
      -        "required": [
      -          "action",
      -          "value"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "additionalProperties": false,
      -        "description": "Click the element matching `selector`.",
      -        "properties": {
      -          "action": {
      -            "const": "click",
      -            "type": "string"
      -          },
      -          "selector": {
      -            "description": "Selector of the element to click.",
      -            "type": "string"
      -          },
      -          "selector_type": {
      -            "$ref": "#/properties/steps/items/anyOf/0/properties/selector_type",
      -            "description": "How `selector` is interpreted. Defaults to 'css'."
      -          },
      -          "timeout_ms": {
      -            "exclusiveMinimum": 0,
      -            "type": "integer"
      -          }
      -        },
      -        "required": [
      -          "action",
      -          "selector"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "additionalProperties": false,
      -        "description": "Type text into an input, character by character.",
      -        "properties": {
      -          "action": {
      -            "const": "type",
      -            "type": "string"
      -          },
      -          "clear": {
      -            "description": "Clear the field before typing.",
      -            "type": "boolean"
      -          },
      -          "selector": {
      -            "description": "Selector of the field to type into.",
      -            "type": "string"
      -          },
      -          "selector_type": {
      -            "$ref": "#/properties/steps/items/anyOf/0/properties/selector_type",
      -            "description": "How `selector` is interpreted. Defaults to 'css'."
      -          },
      -          "timeout_ms": {
      -            "exclusiveMinimum": 0,
      -            "type": "integer"
      -          },
      -          "value": {
      -            "description": "Text to type (entered human-like).",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "action",
      -          "selector",
      -          "value"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "additionalProperties": false,
      -        "description": "Choose an option in a <select> dropdown by value.",
      -        "properties": {
      -          "action": {
      -            "const": "select",
      -            "type": "string"
      -          },
      -          "selector": {
      -            "description": "Selector of the <select> element.",
      -            "type": "string"
      -          },
      -          "selector_type": {
      -            "$ref": "#/properties/steps/items/anyOf/0/properties/selector_type",
      -            "description": "How `selector` is interpreted. Defaults to 'css'."
      -          },
      -          "timeout_ms": {
      -            "exclusiveMinimum": 0,
      -            "type": "integer"
      -          },
      -          "value": {
      -            "description": "The option value to select.",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "action",
      -          "selector",
      -          "value"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "additionalProperties": false,
      -        "description": "Press a single keyboard key.",
      -        "properties": {
      -          "action": {
      -            "const": "press_key",
      -            "type": "string"
      -          },
      -          "value": {
      -            "description": "The key to press.",
      -            "enum": [
      -              "Enter",
      -              "Tab",
      -              "Escape",
      -              "Backspace",
      -              "Delete",
      -              "Space",
      -              "ArrowUp",
      -              "ArrowDown",
      -              "ArrowLeft",
      -              "ArrowRight",
      -              "Home",
      -              "End",
      -              "PageUp",
      -              "PageDown"
      -            ],
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "action",
      -          "value"
      -        ],
      -        "type": "object"
      -      },
      -      {
      -        "additionalProperties": false,
      -        "description": "Scroll the page to the bottom or by a pixel amount.",
      -        "properties": {
      -          "action": {
      -            "const": "scroll",
      -            "type": "string"
      -          },
      -          "value": {
      -            "anyOf": [
      -              {
      -                "const": "bottom",
      -                "type": "string"
      -              },
      -              {
      -                "type": "integer"
      -              }
      -            ],
      -            "description": "'bottom' to scroll to the end, or a pixel offset."
      -          }
      -        },
      -        "required": [
      -          "action",
      -          "value"
      -        ],
      -        "type": "object"
      -      }
      -    ]
      -  },
      -  "type": "array"
      -}
  3. Changed1 schema field changedv0.2.0
    • addedInput schema / properties / steps
      Added value: +{
      +  "description": "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).",
      +  "items": {
      +    "anyOf": [
      +      {
      +        "additionalProperties": false,
      +        "description": "Wait until an element matching `selector` exists.",
      +        "properties": {
      +          "action": {
      +            "const": "wait_for",
      +            "type": "string"
      +          },
      +          "selector": {
      +            "description": "Selector to wait for (until present).",
      +            "type": "string"
      +          },
      +          "selector_type": {
      +            "description": "How `selector` is interpreted. Defaults to 'css'.",
      +            "enum": [
      +              "css",
      +              "xPath",
      +              "className",
      +              "tagName"
      +            ],
      +            "type": "string"
      +          },
      +          "timeout_ms": {
      +            "exclusiveMinimum": 0,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "action",
      +          "selector"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": false,
      +        "description": "Wait until the given text appears on the page.",
      +        "properties": {
      +          "action": {
      +            "const": "wait_for_text",
      +            "type": "string"
      +          },
      +          "timeout_ms": {
      +            "exclusiveMinimum": 0,
      +            "type": "integer"
      +          },
      +          "value": {
      +            "description": "Text to wait for anywhere on the page.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "action",
      +          "value"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": false,
      +        "description": "Pause for a fixed number of milliseconds.",
      +        "properties": {
      +          "action": {
      +            "const": "wait",
      +            "type": "string"
      +          },
      +          "value": {
      +            "description": "Fixed pause in milliseconds.",
      +            "minimum": 0,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "action",
      +          "value"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": false,
      +        "description": "Click the element matching `selector`.",
      +        "properties": {
      +          "action": {
      +            "const": "click",
      +            "type": "string"
      +          },
      +          "selector": {
      +            "description": "Selector of the element to click.",
      +            "type": "string"
      +          },
      +          "selector_type": {
      +            "$ref": "#/properties/steps/items/anyOf/0/properties/selector_type",
      +            "description": "How `selector` is interpreted. Defaults to 'css'."
      +          },
      +          "timeout_ms": {
      +            "exclusiveMinimum": 0,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "action",
      +          "selector"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": false,
      +        "description": "Type text into an input, character by character.",
      +        "properties": {
      +          "action": {
      +            "const": "type",
      +            "type": "string"
      +          },
      +          "clear": {
      +            "description": "Clear the field before typing.",
      +            "type": "boolean"
      +          },
      +          "selector": {
      +            "description": "Selector of the field to type into.",
      +            "type": "string"
      +          },
      +          "selector_type": {
      +            "$ref": "#/properties/steps/items/anyOf/0/properties/selector_type",
      +            "description": "How `selector` is interpreted. Defaults to 'css'."
      +          },
      +          "timeout_ms": {
      +            "exclusiveMinimum": 0,
      +            "type": "integer"
      +          },
      +          "value": {
      +            "description": "Text to type (entered human-like).",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "action",
      +          "selector",
      +          "value"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": false,
      +        "description": "Choose an option in a <select> dropdown by value.",
      +        "properties": {
      +          "action": {
      +            "const": "select",
      +            "type": "string"
      +          },
      +          "selector": {
      +            "description": "Selector of the <select> element.",
      +            "type": "string"
      +          },
      +          "selector_type": {
      +            "$ref": "#/properties/steps/items/anyOf/0/properties/selector_type",
      +            "description": "How `selector` is interpreted. Defaults to 'css'."
      +          },
      +          "timeout_ms": {
      +            "exclusiveMinimum": 0,
      +            "type": "integer"
      +          },
      +          "value": {
      +            "description": "The option value to select.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "action",
      +          "selector",
      +          "value"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": false,
      +        "description": "Press a single keyboard key.",
      +        "properties": {
      +          "action": {
      +            "const": "press_key",
      +            "type": "string"
      +          },
      +          "value": {
      +            "description": "The key to press.",
      +            "enum": [
      +              "Enter",
      +              "Tab",
      +              "Escape",
      +              "Backspace",
      +              "Delete",
      +              "Space",
      +              "ArrowUp",
      +              "ArrowDown",
      +              "ArrowLeft",
      +              "ArrowRight",
      +              "Home",
      +              "End",
      +              "PageUp",
      +              "PageDown"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "action",
      +          "value"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": false,
      +        "description": "Scroll the page to the bottom or by a pixel amount.",
      +        "properties": {
      +          "action": {
      +            "const": "scroll",
      +            "type": "string"
      +          },
      +          "value": {
      +            "anyOf": [
      +              {
      +                "const": "bottom",
      +                "type": "string"
      +              },
      +              {
      +                "type": "integer"
      +              }
      +            ],
      +            "description": "'bottom' to scroll to the end, or a pixel offset."
      +          }
      +        },
      +        "required": [
      +          "action",
      +          "value"
      +        ],
      +        "type": "object"
      +      }
      +    ]
      +  },
      +  "type": "array"
      +}
  4. Addedv0.1.4
  5. Removedv0.1.3
  6. First observedv0.1.2

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly=true, destructive=false, openWorld=true, so the description's added value is in disclosing the anti-bot vendors it defeats (Cloudflare, DataDome, PerimeterX, Akamai, Shape) and the return form ('raw HTML as text'). It does not mention latency, per-request cost, or what happens on a persistent block, which are relevant for a headless-browser proxy call.

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?

Four tight sentences ordered purpose → when-to-use → return shape → alternatives, with zero filler. The routing information is packed into the same block without diluting the opening statement.

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

Completeness5/5

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

With six fully documented parameters, no output schema, and safety already covered by annotations, the description supplies the two remaining things an agent needs: the blocking/render trigger and the return format. Nothing required to select or invoke this tool correctly is missing.

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 every one of the six parameters documented including the css/js enum pairing of wait_method and wait_value. The description adds no meaning beyond the schema for these parameters, so the baseline 3 applies; 'raw HTML as text' describes the output, not the inputs.

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?

States a specific verb and resource ('Fetch the fully rendered HTML of any web page') plus the mechanism (ScrapeUnblocker) and the capability it adds (bypassing anti-bot protection). It is immediately distinguishable from fetch_markdown and browse_page, which are named in the same description.

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

Usage Guidelines5/5

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

Gives explicit triggering conditions: when a normal fetch is blocked (403/429, captcha, 'access denied') or when a page needs a real browser to render. It also names two alternatives with the exact condition that selects each — fetch_markdown for reading/summarising, browse_page for interaction before capture.

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