Skip to main content
Glama
ScrapeUnblocker

ScrapeUnblocker MCP Server

Official

Fetch page HTML

fetch_html
Read-only

Fetch the fully rendered HTML of any web page through ScrapeUnblocker, bypassing anti-bot protection (Cloudflare, DataDome, PerimeterX, Akamai, Shape).

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.

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. 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"
      -}
  2. 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"
      +}
  3. Addedv0.1.4
  4. Removedv0.1.3
  5. 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, openWorld, and non-destructive behavior. The description adds meaningful context beyond that: anti-bot bypass, real browser rendering, and raw HTML output. It does not contradict the annotations, though it omits rate-limit or failure-mode details.

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 front-loaded with the main action and return format, then gives concise routing guidance for alternatives. Every sentence has a clear purpose with no wasted prose.

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?

The tool is open-world and has six parameters, but the schema fully documents them and annotations cover safety. The description supplies the missing high-level behavior and return type, making it complete enough to call correctly.

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 all six parameters thoroughly. The description does not add parameter-specific meaning beyond what is already in the schema, which is acceptable at baseline 3.

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 gives a specific verb and resource: fetching fully rendered HTML of any web page via ScrapeUnblocker. It explicitly states the return format and distinguishes sibling tools like fetch_markdown and browse_page.

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?

It names concrete conditions for use: normal fetch blocked by 403/429, captcha, access denied, or when a real browser is needed to render. It also routes users away to fetch_markdown for reading/summarising and browse_page for interactions.

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