Skip to main content
Glama
ScrapeUnblocker MCP Server

ScrapeUnblocker MCP Server

Official

Interact with a page, then capture it

browse_page
Destructive

Load a web page in a real browser, run ordered actions like clicking a cookie banner, typing, or scrolling, then return the resulting HTML for scraping.

Instructions

Load a web page in a real browser through ScrapeUnblocker, run an ordered list of browser actions on it (accept a cookie banner, click a tab, type into a search box, choose an option, press a key, scroll to trigger lazy loading, wait), then return the resulting HTML. Workflow: first call the list_elements tool to discover the real selectors on the page, then build steps against them. Steps act on the website and are NOT idempotent - they run once per call; never use them to buy, post, delete or change anything unless the user asked for exactly that. If a step fails, this tool returns which step failed, why, and the page HTML at that moment so you can fix the selector and retry. Billed as one request.

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>",
      "steps": "<steps>"
    },
    "name": "browse_page"
  }
}

Input Schema

NameRequiredDescriptionDefault
urlYesThe absolute URL to open (http/https).
stepsYesOrdered 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_valueNoThe CSS selector or JS expression paired with wait_method.
wait_methodNoOptional render-wait before the steps run: '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.
method_timeout_secondsNoCap in seconds for the render-wait method.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv0.12.5
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / method_timeout_seconds / maximum
      Added value: +9007199254740991
    • removedInput schema / properties / steps / items / anyOf
      Removed value: -[
      -  {
      -    "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"
      -  }
      -]
    • addedInput schema / properties / steps / items / oneOf
      Added value: +[
      +  {
      +    "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,
      +        "maximum": 9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "description": "Wait until the given text appears on the page.",
      +    "properties": {
      +      "action": {
      +        "const": "wait_for_text",
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "exclusiveMinimum": 0,
      +        "maximum": 9007199254740991,
      +        "type": "integer"
      +      },
      +      "value": {
      +        "description": "Text to wait for anywhere on the page.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "value"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "description": "Pause for a fixed number of milliseconds.",
      +    "properties": {
      +      "action": {
      +        "const": "wait",
      +        "type": "string"
      +      },
      +      "value": {
      +        "description": "Fixed pause in milliseconds.",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "value"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "description": "Click the element matching `selector`.",
      +    "properties": {
      +      "action": {
      +        "const": "click",
      +        "type": "string"
      +      },
      +      "selector": {
      +        "description": "Selector of the element to click.",
      +        "type": "string"
      +      },
      +      "selector_type": {
      +        "description": "How `selector` is interpreted. Defaults to 'css'.",
      +        "enum": [
      +          "css",
      +          "xPath",
      +          "className",
      +          "tagName"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "exclusiveMinimum": 0,
      +        "maximum": 9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "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": {
      +        "description": "How `selector` is interpreted. Defaults to 'css'.",
      +        "enum": [
      +          "css",
      +          "xPath",
      +          "className",
      +          "tagName"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "exclusiveMinimum": 0,
      +        "maximum": 9007199254740991,
      +        "type": "integer"
      +      },
      +      "value": {
      +        "description": "Text to type (entered human-like).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector",
      +      "value"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "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": {
      +        "description": "How `selector` is interpreted. Defaults to 'css'.",
      +        "enum": [
      +          "css",
      +          "xPath",
      +          "className",
      +          "tagName"
      +        ],
      +        "type": "string"
      +      },
      +      "timeout_ms": {
      +        "exclusiveMinimum": 0,
      +        "maximum": 9007199254740991,
      +        "type": "integer"
      +      },
      +      "value": {
      +        "description": "The option value to select.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "selector",
      +      "value"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "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"
      +  },
      +  {
      +    "description": "Scroll the page to the bottom or by a pixel amount.",
      +    "properties": {
      +      "action": {
      +        "const": "scroll",
      +        "type": "string"
      +      },
      +      "value": {
      +        "anyOf": [
      +          {
      +            "const": "bottom",
      +            "type": "string"
      +          },
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          }
      +        ],
      +        "description": "'bottom' to scroll to the end, or a pixel offset."
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "value"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Addedv0.6.0

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already flag readOnlyHint=false, destructiveHint=true and idempotentHint=false, but the description adds real context beyond them: steps run once per call, mutation use is restricted to explicit user intent, failures return the failing step, the reason, and the page HTML at that moment, and the call is billed as one request. It stops short of disclosing rate limits, timeouts defaults, or what the HTML capture contains beyond the raw document.

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?

Front-loaded with purpose, then a labeled 'Workflow:' clause, then safety and failure behavior, then billing. Dense but every sentence carries information; the only mild cost is that the middle sentences are long and pack multiple constraints together.

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 7-parameter, open-world, destructive-capable tool with no output schema, the description covers purpose, workflow, mutation risk, failure return shape and billing. Remaining gaps are minor: no mention of timeout behavior, proxy_country implications, or what happens to sessions/cookies between calls.

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

Parameters4/5

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

With schema coverage at 100%, the baseline would be 3, but the description adds usage meaning for the `steps` array: the actions are ordered, run after load and before capture, and selectors should come from `list_elements`. Action examples (cookie banner, tab click, search box, select option, key press, lazy-load scroll, wait) map semantics onto the schema's oneOf branches, though the ancillary params like wait_method, proxy_country and sleep_seconds are left entirely to the schema.

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 chain: load a page in a real browser via ScrapeUnblocker, run ordered actions, return the resulting HTML. That distinguishes it clearly from siblings like fetch_html and fetch_markdown, which do not interact with the page before capture.

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 an explicit workflow (call `list_elements` first to discover real selectors, then build `steps` against them) and explicit when-not-to guidance (steps are not idempotent; never use them to buy, post, delete or change anything unless the user asked for exactly that). It also names the handler for the failure path.

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