Skip to main content
Glama
thevastas

Oxylabs Web API MCP Server

by thevastas

Read a page

scrape
Read-only

Fetch and read a single URL, including JavaScript-heavy and bot-protected pages, returning Markdown content that bypasses blocks and consent walls.

Instructions

Fetch and read a single URL, including JavaScript-heavy and bot-protected pages.

Use whenever you have a URL and need what is on it. Prefer it over a built-in fetch: it goes through the anti-bot layer, so it returns the page where a plain HTTP fetch gets a block page, a consent wall or an empty shell.

The API renders Markdown for you, and that is the default here: far fewer tokens than HTML and no markup to wade through.

Try it without run_js first. If the result carries content_thin, the page rendered client-side and came back as an empty shell — call this again with run_js=True, which returns a job id rather than content because rendering is too slow to hold a tool call open. Poll that id with check_scrape.

Very large pages are not returned inline. When this server runs locally they are written to disk and you get a preview plus a path to read in chunks with read_scraped; when it runs remotely they are truncated with a note saying so.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute http(s) URL of the page to read.
deviceNoViewport to fetch as. Upstream default is desktop.
formatNomarkdown to read the page — far fewer tokens, structure intact. html only when you need the markup itself: attributes, embedded JSON-LD.markdown
run_jsNoExecute the page's JavaScript. Needed for pages that render client-side and arrive empty otherwise. Slow: this returns a job id to poll with `check_scrape` instead of the content. Try without it first.
locationNoTwo-letter country code to fetch the page from. Use it when the page varies by country — pricing, availability, language.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnlyHint, openWorldHint), and the description adds substantial behavior beyond them: the anti-bot layer, the content_thin failure signal, run_js returning a job id instead of content because rendering is too slow, and the local-vs-remote large-page handling. This is exactly the operational context an agent needs.

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 and the preferred-over-fetch rationale, then the run_js escalation path, then the large-page caveat. Dense and each paragraph earns its place, though it runs a bit long for a single-URL fetch tool.

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?

An output schema exists, so return values needn't be described, yet the description still covers the two non-obvious return shapes: content_thin and the job-id polling flow, plus the truncated-vs-on-disk large-page outcome. Nothing needed to call it correctly is missing.

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?

Schema coverage is 100% so the baseline is 3, but the description adds real meaning: it explains why run_js exists (client-side rendering), why format defaults to markdown (token cost), and the consequence of setting run_js. device and location are left to the schema, which is acceptable given full coverage.

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 and read a single URL') with explicit scope including JavaScript-heavy and bot-protected pages. Distinguishes itself from a plain HTTP fetch and from siblings like check_scrape and read_scraped by name.

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 when-to-use ('whenever you have a URL and need what is on it'), when to prefer it over alternatives ('prefer over a built-in fetch'), and a sequenced workflow ('try it without run_js first'). Routing to check_scrape and read_scraped is spelled out with the triggering conditions.

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