Oxylabs MCP Server
OfficialThe Oxylabs MCP Server enables AI models to interact with web content by scraping and processing data from any URL. Key capabilities include:
Scrape content from any site, including JavaScript-heavy single-page applications
Process data into AI-ready formats by cleaning HTML and converting to Markdown
Extract structured data using automated parsers for popular sites like Google and Amazon
Bypass protection systems and access geo-restricted content using proxies from 195+ countries
Configure rendering options with flexible setup for headless browsing or direct scraping
Integrate across platforms with macOS, Windows, and Linux support
Handle errors intelligently with built-in error reporting and smart rate limiting
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Oxylabs MCP Serverscrape the latest iPhone reviews from Amazon and summarize them"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π Overview
The Oxylabs MCP server provides a bridge between AI models and the web. It enables them to scrape any URL, render JavaScript-heavy pages, extract and format content for AI use, manage CAPTCHA, and access geo-restricted web data from 195+ countries.
It is built on the Model Context Protocol (MCP), the open standard for connecting AI assistants to external tools and data.
Related MCP server: FreeCrawl MCP Server
π οΈ MCP Tools
Oxylabs MCP provides two sets of tools that can be used together or independently:
Oxylabs Web Scraper API tools
universal_scraper: scrapes any URL, with optional JavaScript rendering, geo-targeting, and Markdown/HTML/links output;
google_search_scraper: extracts results from Google Search, with optional parsing into structured JSON;
amazon_search_scraper: scrapes Amazon search result pages, with optional parsing into structured JSON;
amazon_product_scraper: extracts data from individual Amazon product pages.
Oxylabs AI Studio tools
ai_scraper: scrapes content from any URL with AI-powered extraction, in JSON, CSV, Markdown, or TOON format;
ai_crawler: crawls a website from a starting URL based on a prompt and collects data across multiple pages;
ai_browser_agent: controls a real browser based on a prompt β navigates, clicks, fills forms β and returns the result;
ai_search: searches the web and optionally returns Markdown content of each result;
ai_map: maps a website's URLs, filtered by keywords or a prompt;
generate_schema: generates an OpenAPI-format JSON schema for structured extraction with the AI tools above.
β Prerequisites
Before you begin, make sure you have at least one of the following:
Oxylabs Web Scraper API account: obtain your username and password from Oxylabs (1-week free trial available);
Oxylabs AI Studio API key: obtain your API key from Oxylabs AI Studio (1000 credits free).
To run the server locally (Option 2 below) you will also need the uv package manager:
# macOS and Linux
curl -LsSf https://astral.sh/uv/install.sh | sh# Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"π¦ Configuration
There are two ways to use the server: connect to the hosted instance (no installation) or run it locally with credentials in environment variables.
Option 1: Hosted server (no installation)
Oxylabs runs a hosted MCP server at:
https://mcp.oxylabs.io/mcpCredentials are passed with request headers:
Credential | Header |
Web Scraper API |
|
Web Scraper API (alternative) |
|
AI Studio |
|
Setup with Claude Code:
claude mcp add --transport http oxylabs https://mcp.oxylabs.io/mcp \
--header "Authorization: Basic $(echo -n 'YOUR_USERNAME:YOUR_PASSWORD' | base64)" \
--header "X-Oxylabs-AI-Studio-Api-Key: YOUR_API_KEY"Setup with Cursor or any client that supports remote MCP servers with custom headers:
{
"mcpServers": {
"oxylabs": {
"url": "https://mcp.oxylabs.io/mcp",
"headers": {
"Authorization": "Basic <base64 of username:password>",
"X-Oxylabs-AI-Studio-Api-Key": "YOUR_API_KEY"
}
}
}
}The server is also listed on Smithery.
Note: clients that only support OAuth for remote servers (for example, adding a custom connector in the claude.ai web UI) cannot pass headers yet β OAuth sign-in is on our roadmap. Use the local setup below with those clients in the meantime.
Option 2: Run locally
Environment variables
Oxylabs MCP server supports the following environment variables:
Name | Description | Default |
| Your Oxylabs Web Scraper API username | |
| Your Oxylabs Web Scraper API password | |
| Your Oxylabs AI Studio API key | |
| Log level for the logs returned to the client |
|
Based on the provided credentials, the server automatically exposes the corresponding tools:
If only
OXYLABS_USERNAMEandOXYLABS_PASSWORDare provided, the server exposes the Web Scraper API tools;If only
OXYLABS_AI_STUDIO_API_KEYis provided, the server exposes the AI Studio tools;If all three are provided, the server exposes all tools.
β Important: only set the environment variables you have real credentials for. Leaving placeholder values will result in exposed tools that do not work.
Configure with uvx
Installs the package from PyPI and runs it automatically:
{
"mcpServers": {
"oxylabs": {
"command": "uvx",
"args": ["oxylabs-mcp"],
"env": {
"OXYLABS_USERNAME": "YOUR_USERNAME",
"OXYLABS_PASSWORD": "YOUR_PASSWORD",
"OXYLABS_AI_STUDIO_API_KEY": "YOUR_API_KEY"
}
}
}
}Configure with a local checkout
Useful for development β runs the server from a local clone of this repository:
{
"mcpServers": {
"oxylabs": {
"command": "uv",
"args": [
"--directory",
"/<absolute-path-to-folder>/oxylabs-mcp",
"run",
"oxylabs-mcp"
],
"env": {
"OXYLABS_USERNAME": "YOUR_USERNAME",
"OXYLABS_PASSWORD": "YOUR_PASSWORD",
"OXYLABS_AI_STUDIO_API_KEY": "YOUR_API_KEY"
}
}
}
}Running as a remote HTTP server (self-hosting)
The server also supports the MCP streamable-HTTP transport. Start it with:
MCP_TRANSPORT=streamable-http MCP_HOST=0.0.0.0 MCP_PORT=8000 uvx oxylabs-mcpWith the HTTP transport, credentials are passed per request instead of environment variables:
Credential | How to pass it |
Web Scraper API |
|
Web Scraper API (alternative) |
|
AI Studio |
|
Example client configuration:
{
"mcpServers": {
"oxylabs": {
"url": "https://your-host:8000/mcp",
"headers": {
"Authorization": "Basic <base64 of username:password>",
"X-Oxylabs-AI-Studio-Api-Key": "YOUR_API_KEY"
}
}
}
}All tools are always listed regardless of provided credentials; calling a tool without the credentials it needs returns an error message explaining exactly what to configure.
Setup with Claude Desktop
Navigate to Claude β Settings β Developer β Edit Config and add one of the configurations above to the claude_desktop_config.json file.
Setup with Cursor AI
Navigate to Cursor β Settings β Cursor Settings β MCP. Click Add new global MCP server and add one of the configurations above.
π Logging
The server provides additional information about the tool calls in notification/message events:
{
"method": "notifications/message",
"params": {
"level": "info",
"data": "Create job with params: {\"url\": \"https://ip.oxylabs.io\"}"
}
}{
"method": "notifications/message",
"params": {
"level": "info",
"data": "Job info: job_id=7333113830223918081 job_status=done"
}
}{
"method": "notifications/message",
"params": {
"level": "error",
"data": "Error: request to Oxylabs API failed"
}
}β¨ Key Features
Extract data from any URL, including complex single-page applications
Fully render dynamic websites using headless browser support
Choose full JavaScript rendering, HTML-only, or none
Emulate Mobile and Desktop viewports for realistic rendering
Automatically clean and convert HTML to Markdown for improved readability
Use automated parsers for popular targets like Google, Amazon, and more
Navigate sophisticated automated request management systems with high success rate
Reliably scrape even the most complex websites
Get automatically rotating IPs from a proxy pool covering 195+ countries
Set rendering and parsing options if needed
Feed data directly into AI models or analytics tools
Works on macOS, Windows, and Linux
Comprehensive error handling and reporting
Smart rate limiting and request management
Why Oxylabs MCP? πΈοΈ β π¦ β π€
Imagine telling your LLM "Summarise the latest Hacker News discussion about GPTβ5" β and it simply answers. The Oxylabs MCP server makes that happen by doing the boring parts for you:
What Oxylabs MCP does | Why it matters to you |
Manages automated request walls with the Oxylabs global proxy network | Enables website access and anonymity |
Renders JavaScript in headless Chrome | Singleβpage apps, sorted |
Cleans HTML β Markdown | Drop straight into vector DBs or prompts |
Optional structured parsers (Google, Amazon, etc.) | Oneβline access to popular targets |
π‘οΈ License
Distributed under the MIT License β see LICENSE for details.
About Oxylabs
Established in 2015, Oxylabs is a market-leading web intelligence collection platform, driven by the highest business, ethics, and compliance standards, enabling companies worldwide to unlock data-driven insights.

mcp-name: io.oxylabs/oxylabs-mcp
Solutions made based on this MCP:
Available Tools
10 toolsai_browser_agentCRead-onlyInspect
Run the browser agent and return the data in the specified format.
This tool is useful if you need navigate around the website and do some actions. It allows navigating to any url, clicking on links, filling forms, scrolling, etc. Finally it returns the data in the specified format. Schema is required only if output_format is json, csv or toon. 'task_prompt' describes what browser agent should achieve
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to start the browser agent navigation from. | |
| schema | No | The schema to use for the scrape. Only required if output_format is json, csv or toon. | |
| task_prompt | Yes | What browser agent should do. | |
| geo_location | No | Two letter ISO country code to use for the browser proxy. | |
| output_format | No | The output format. Markdown returns full text of the page including links. Toon(Token-Oriented Object Notation) returns data in Toon format, which is optimized for AI agents. If json, csv or toon, the schema is required. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the agent can click links, fill forms, and perform actions, which implies potentially mutating state or submitting data. This contradicts the annotations readOnlyHint set to true. Because the description directly conflicts with the annotation and also provides no safety/auth/side-effect context, this dimension scores minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is not excessively long, but it repeats the core idea: the first sentence and the 'Finally it returns...' sentence both say the tool returns data in a specified format. Some sentences are redundant rather than adding new operational guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema and detailed input-schema provide substantial structure, so this is not a sparse definition. However, the description misses important behavioral context around a browser automation tool, such as side effects from form submission, authentication state, and session behavior; this is made worse by the annotation contradiction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all parameters with descriptions at 100% coverage, so the baseline is 3. The description repeats the conditional schema requirement for json/csv/toon and explains task_prompt, but it adds no new information beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly says 'Run the browser agent and return the data' and then lists concrete actions like clicking, filling forms, scrolling, and navigating to URLs. This gives a specific verb/resource and conveys an interactive browser tool, though it does not explicitly name or contrast sibling scraper/crawler tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says the tool is 'useful if you need navigate around the website and do some actions,' which implies an interactive task. However, it provides no explicit guidance on when not to use it or which sibling tool (e.g., ai_scraper, ai_crawler) should be used for static extraction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_crawlerCRead-onlyInspect
Tool useful for crawling a website from starting url and returning data in a specified format.
Schema is required only if output_format is json, csv or toon. 'render_javascript' is used to render javascript heavy websites. 'return_sources_limit' is used to limit the number of sources to return, for example if you expect results from single source, you can set it to 1.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL from which crawling will be started. | |
| schema | No | The JSON schema to use for structured data extraction from the crawled pages. Only required if output_format is json, csv or toon. | |
| user_prompt | Yes | What information user wants to extract from the domain. | |
| geo_location | No | Two letter ISO country code to use for the crawl proxy. | |
| output_format | No | The format of the output. If json, csv or toon, the schema is required. Markdown returns full text of the page. CSV returns data in CSV format. Toon(Token-Oriented Object Notation) returns data in Toon format, which is optimized for AI agents. | markdown |
| render_javascript | No | Whether to render the HTML of the page using javascript. Much slower, therefore use it only for websites that require javascript to render the page. Unless user asks to use it, first try to crawl the page without it. If results are unsatisfactory, try to use it. | |
| return_sources_limit | No | The maximum number of sources to return. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=true, which the description respects. The description does not add further behavioral details (e.g., no side effects, rate limits, or data retention), but it does not contradict the annotation either. Given the read-only nature is already indicated, the description adds little beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose and redundant, repeating parameter details that are already in the schema. For example, the URL and render_javascript explanations are duplicated verbatim. This wastes tokens and reduces clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema is present but the description does not explain the structure or any exceptional behaviors. It briefly mentions returning data in a specified format, but does not elaborate on how the crawl is scoped or what happens with large sites. Given the completeness of the input schema and presence of output schema, the description is adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the tool description adds no new parameter information. The prose repeats the schema definitions without clarifying edge cases or relationships, so it meets the baseline but provides no added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool crawls a website starting from a URL and returns data in a specified format. However, it does not differentiate from sibling tools like ai_scraper or universal_scraper, which might also crawl pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool over alternatives. It implies output format flexibility but lacks guidance on scenarios favoring ai_crawler over other scrapers or search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_mapDRead-onlyInspect
Tool useful for mapping website's URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL from which URLs mapping will be started. | |
| limit | No | The maximum number of URLs to return. | |
| user_prompt | No | What kind of URLs user wants to find. Can be used together with 'search_keywords'. | |
| geo_location | No | Two letter ISO country code to use for the mapping proxy. | |
| max_crawl_depth | No | The maximum depth of the crawl. | |
| search_keywords | No | The keywords to use for URLs paths filtering. Keywords are matched as OR condition. Meaning, one keyword is enough to match the url path. | |
| allow_subdomains | No | Whether to map subdomains URLs as well. | |
| render_javascript | No | Whether to render the HTML of the page using javascript. Much slower, therefore use it only for websites that require javascript to render the page. Unless user asks to use it, first try to crawl the page without it. If results are unsatisfactory, try to use it. | |
| allow_external_domains | No | Whether to include external domains URLs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint: true, indicating a safe read operation, but the description fails to add behavioral context. It doesn't disclose that the tool performs crawling, respects depth limits, or requires JavaScript rendering for some sites. No mention of performance characteristics, rate limits, or edge cases beyond what the schema's parameter descriptions already provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single-sentence description is concise but under-specifies the tool's behavior. It's not powerful or informative enough to earn credit for conciseness; rather, it reads as an under-developed placeholder. A good description would front-load the tool's purpose in a way that adds value, but this wastes the opportunity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters, a required URL, and complex behaviors like crawl depth, subdomain handling, and JavaScript rendering, a one-sentence description is grossly inadequate. Even though an output schema exists, the description fails to convey the tool's inputs' intent or the meaning of its output. The behavioral nuances (e.g., proxy usage, OR-matching for keywords) are left entirely to the schema, making this incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 9 parameters are documented in the input schema itself. The description adds no parameter semantics; it merely repeats the tool name. Per rubric, with high schema coverage, the baseline is 3, which is appropriate here since the description doesn't need to compensate but also doesn't add value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Tool useful for mapping website's URLs' uses the vague verb 'mapping' and a possessive phrasing that doesn't define the action clearly. While it names the resource (website URLs), it fails to articulate the core function of discovering or crawling links, leaving the tool's true purpose ambiguous. Sibling tools like 'ai_crawler' and 'ai_scraper' further blur the line, making this description insufficiently specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus any of the nine sibling tools. There is no mention of when ai_map is preferred over ai_crawler or ai_browser_agent, nor any exclusions or prerequisites. Users are left to guess which tool fits their use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_scraperARead-onlyInspect
Scrape the contents of the web page and return the data in the specified format.
Schema is required only if output_format is json or csv. 'render_javascript' is used to render javascript heavy websites.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to scrape | |
| schema | No | The JSON schema to use for structured data extraction from the scraped page. Only required if output_format is json, csv or toon. | |
| geo_location | No | Two letter ISO country code to use for the scrape proxy. | |
| output_format | No | The format of the output. If json, csv or toon, the schema is required. Markdown returns full text of the page. CSV returns data in CSV format, tabular like data. Toon(Token-Oriented Object Notation) returns data in Toon format, which is optimized for AI agents. | markdown |
| render_javascript | No | Whether to render the HTML of the page using javascript. Much slower, therefore use it only for websites that require javascript to render the page.Unless user asks to use it, first try to scrape the page without it. If results are unsatisfactory, try to use it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description aligns with that (scraping is read-only). The description adds useful behavioral context about render_javascript being slower and the recommendation to try without it first. However, it doesn't disclose potential rate limits, auth requirements, or what happens on failure, which would be valuable for a 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences) and front-loaded with the core purpose. It avoids redundancy with the schema. However, it could be slightly more structured by separating the conditional requirements more clearly, but overall it's efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema and 100% parameter coverage, the description is fairly complete. It covers the key conditional logic (schema requirement, render_javascript usage) and the tool's scope. It doesn't explain return values, but the output schema handles that. Minor gaps: no mention of error handling or edge cases, but acceptable for a scraping tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameters well. The description adds minimal extra meaning beyond what the schema provides, but it does clarify the conditional requirement for schema and the performance trade-off of render_javascript. This is a baseline 3 since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool scrapes web page contents and returns data in a specified format. It distinguishes itself from siblings like ai_crawler (which likely crawls multiple pages) and google_search_scraper (which targets search results) by focusing on a single page scrape with format options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when schema is required (for json/csv/toon formats) and when to use render_javascript (for JS-heavy sites, with a recommendation to try without it first). It doesn't explicitly mention alternatives among siblings, but the usage context is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_searchARead-onlyInspect
Search the web based on a provided query.
'return_content' is used to return markdown content for each search result. If 'return_content' is set to True, you don't need to use ai_scraper to get the content of the search results urls, because it is already included in the search results. if 'return_content' is set to True, prefer lower 'limit' to reduce payload size.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. | |
| query | Yes | The query to search for. | |
| geo_location | No | Two letter ISO country code to use for the search proxy. | |
| return_content | No | Whether to return markdown content of the search results. | |
| render_javascript | No | Whether to render the HTML of the page using javascript. Much slower, therefore use it only if user asks to use it.First try to search with setting it to False. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, which the description doesn't contradict (no annotation_contradiction). The description adds meaningful behavioral context beyond the structurual annotation: markdown content inclusion, payload size implications, and render_javascript's performance trade-off. This goes beyond the minimal safety profile annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences covering tool purpose, a direct workflow tip (ai_scraper avoidance), and a size/performance caution. It's appropriately sized for a tool with this many parameters. Minor redundancy ('if return_content is set to True' appears twice) and a slightly repetitive structure prevent a 5, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with an output schema, the description covers the meaningful decision points: when to use return_content, how to set limit, and when render_javascript is warranted. The geo_location parameter is self-explanatory from the schema, and the output schema exists, so return-format explanation isn't needed. Complete without being bloated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds significant value on top: it explains the functional consequence of return_content (avoiding an ai_scraper round-trip), warns about limit's effect on payload, and gives operational guidance on render_javascript's default-off usage. This exceeds the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb+resource: 'Search the web based on a provided query.' This is unambiguous and immediately identifiable as the search-tool counterpart among siblings. However, it doesn't proactively distinguish itself from the closely-related google_search_scraper sibling, leaving the differentiation implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While not a formal 'when to use' statement, the description provides clear conditional guidance: it explains that when return_content=True, ai_scraper becomes unnecessary, and it recommends lowering 'limit' to reduce payload. The render_javascript guidance ('use it only if user asks to use it') is effectively a when-not-to-use instruction. Exclusions aren't exhaustive, but context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
amazon_product_scraperBRead-onlyInspect
Scrape Amazon products.
Supports content parsing, different user agent types, domain, geolocation, locale parameters and different output formats. Supports Amazon specific parameters such as currency and getting more accurate pricing data with auto select variant.
| Name | Required | Description | Default |
|---|---|---|---|
| parse | No | Should result be parsed. If the result is not parsed, the output_format parameter is applied. | |
| query | Yes | Keyword to search for. | |
| domain | No | Domain localization for Google. Use country top level domains. For example: - 'co.uk' for United Kingdom - 'us' for United States - 'fr' for France | |
| locale | No | Set 'Accept-Language' header value which changes your Google search page web interface language. Examples: - 'en-US' for English, United States - 'de-AT' for German, Austria - 'fr-FR' for French, France | |
| render | No | Whether a headless browser should be used to render the page. For example: - 'html' when browser is required to render the page. | |
| currency | No | Currency that will be used to display the prices. | |
| geo_location | No | The geographical location that the result should be adapted for. Use ISO-3166 country codes. Examples: - 'California, United States' - 'Mexico' - 'US' for United States - 'DE' for Germany - 'FR' for France | |
| output_format | No | The format of the output. Works only when parse parameter is false. - links - Most efficient when the goal is navigation or finding specific URLs. Use this first when you need to locate a specific page within a website. - md - Best for extracting and reading visible content once you've found the right page. Use this to get structured content that's easy to read and process. - html - Should be used sparingly only when you need the raw HTML structure, JavaScript code, or styling information. | |
| user_agent_type | No | Device type and browser that will be used to determine User-Agent header value. | |
| autoselect_variant | No | To get accurate pricing/buybox data, set this parameter to true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's mention of scraping is consistent. The description adds some behavioral context (e.g., auto select variant) but does not disclose any additional traits beyond what annotations provide. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences covering key features without excessive verbosity. However, it could be slightly more structured and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters with full schema coverage and an existing output schema, the description provides a decent overview. However, it lacks information on output format, error handling, or limitations, which is only partially compensated by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameters. The description merely summarizes features without adding new semantic meaning beyond what is in the schema. No extra value added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it scrapes Amazon products and lists supported features. However, it does not differentiate from sibling tools like amazon_search_scraper or universal_scraper, leaving some ambiguity about the specific use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as amazon_search_scraper or universal_scraper. The description lists capabilities but lacks context on appropriate scenarios or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
amazon_search_scraperARead-onlyInspect
Scrape Amazon search results.
Supports content parsing, different user agent types, pagination, domain, geolocation, locale parameters and different output formats. Supports Amazon specific parameters such as category id, merchant id, currency.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | Number of pages to retrieve. | |
| parse | No | Should result be parsed. If the result is not parsed, the output_format parameter is applied. | |
| query | Yes | Keyword to search for. | |
| domain | No | Domain localization for Google. Use country top level domains. For example: - 'co.uk' for United Kingdom - 'us' for United States - 'fr' for France | |
| locale | No | Set 'Accept-Language' header value which changes your Google search page web interface language. Examples: - 'en-US' for English, United States - 'de-AT' for German, Austria - 'fr-FR' for French, France | |
| render | No | Whether a headless browser should be used to render the page. For example: - 'html' when browser is required to render the page. | |
| currency | No | Currency that will be used to display the prices. | |
| start_page | No | Starting page number. | |
| category_id | No | Search for items in a particular browse node (product category). | |
| merchant_id | No | Search for items sold by a particular seller. | |
| geo_location | No | The geographical location that the result should be adapted for. Use ISO-3166 country codes. Examples: - 'California, United States' - 'Mexico' - 'US' for United States - 'DE' for Germany - 'FR' for France | |
| output_format | No | The format of the output. Works only when parse parameter is false. - links - Most efficient when the goal is navigation or finding specific URLs. Use this first when you need to locate a specific page within a website. - md - Best for extracting and reading visible content once you've found the right page. Use this to get structured content that's easy to read and process. - html - Should be used sparingly only when you need the raw HTML structure, JavaScript code, or styling information. | |
| user_agent_type | No | Device type and browser that will be used to determine User-Agent header value. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds some context about supported features (parsing, pagination) but does not disclose other behavioral traits like rate limits or response structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with front-loaded purpose. No wasted words, but could be more structured with explicit parameter list or usage hints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 13 parameters, output schema, and siblings, the description covers main features but misses usage guidelines and behavioral details. Adequate but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are fully described. The description groups features (e.g., 'pagination, domain, geolocation') but adds little meaning beyond the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Scrape Amazon search results' with a specific verb and resource. It distinguishes from siblings like 'amazon_product_scraper' and 'google_search_scraper' by targeting Amazon search specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for Amazon search but does not explicitly state when to use or avoid this tool vs alternatives. No guidance on prerequisites or boundary conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_schemaCRead-onlyInspect
Generate a json schema in openapi format.
| Name | Required | Description | Default |
|---|---|---|---|
| app_name | Yes | ||
| user_prompt | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not contradict the readOnly annotation, but it adds no context about side effects, limitations, or special behaviors. With the annotation present, the bar is lower, but the description still offers minimal insight beyond the tool's name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no fluff, but it is too brief to be informative. It is appropriately sized in terms of length, but the lack of content reduces its effectiveness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has two parameters and an output schema, the description is severely incomplete. It does not explain expected inputs, outputs, or any relevant context, making it insufficient for a user to understand the tool's full capabilities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description gives no explanation of the parameters user_prompt and app_name. Schema coverage is 0%, and the description fails to compensate with any param-level detail, leaving the user to guess their meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates a JSON schema in OpenAPI format, which is a specific action and outcome. It differentiates from sibling tools focused on search and scraping, but could be more specific about the schema's intended use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor any conditions or prerequisites. It lacks explicit when-to-use or when-not-to-use information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_search_scraperARead-onlyInspect
Scrape Google Search results.
Supports content parsing, different user agent types, pagination, domain, geolocation, locale parameters and different output formats.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to retrieve in each page. | |
| pages | No | Number of pages to retrieve. | |
| parse | No | Should result be parsed. If the result is not parsed, the output_format parameter is applied. | |
| query | Yes | URL-encoded keyword to search for. | |
| domain | No | Domain localization for Google. Use country top level domains. For example: - 'co.uk' for United Kingdom - 'us' for United States - 'fr' for France | |
| locale | No | Set 'Accept-Language' header value which changes your Google search page web interface language. Examples: - 'en-US' for English, United States - 'de-AT' for German, Austria - 'fr-FR' for French, France | |
| render | No | Whether a headless browser should be used to render the page. For example: - 'html' when browser is required to render the page. | |
| ad_mode | No | If true will use the Google Ads source optimized for the paid ads. | |
| start_page | No | Starting page number. | |
| geo_location | No | The geographical location that the result should be adapted for. Use ISO-3166 country codes. Examples: - 'California, United States' - 'Mexico' - 'US' for United States - 'DE' for Germany - 'FR' for France | |
| output_format | No | The format of the output. Works only when parse parameter is false. - links - Most efficient when the goal is navigation or finding specific URLs. Use this first when you need to locate a specific page within a website. - md - Best for extracting and reading visible content once you've found the right page. Use this to get structured content that's easy to read and process. - html - Should be used sparingly only when you need the raw HTML structure, JavaScript code, or styling information. | |
| user_agent_type | No | Device type and browser that will be used to determine User-Agent header value. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, so the description is consistent. It adds no additional behavioral traits (e.g., rate limits, permissions, side effects) beyond listing parameters. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: purpose first, then feature list. No wasted words, efficient and front-loaded. Ideal for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 12 parameters and output schema, the description provides a high-level overview covering major capabilities. It could mention interaction between parameters or typical usage flow, but the schema and output schema fill details. Adequate for complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, meaning all parameters are documented in the input schema. The tool description lists parameter categories but adds no new meaning beyond the schema descriptions. Baseline met.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Scrape Google Search results' with a specific verb and resource. It lists supported features (parsing, pagination, domain, etc.) that differentiate it from siblings like amazon_product_scraper and universal_scraper. No confusion about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool or when to avoid it. It only lists features, implying usage for Google Search. Sibling names hint at different sources, but no direct comparison or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
universal_scraperARead-onlyInspect
Get a content of any webpage.
Supports browser rendering, parsing of certain webpages and different output formats.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Website url to scrape. | |
| render | No | Whether a headless browser should be used to render the page. For example: - 'html' when browser is required to render the page. | |
| geo_location | No | The geographical location that the result should be adapted for. Use ISO-3166 country codes. Examples: - 'California, United States' - 'Mexico' - 'US' for United States - 'DE' for Germany - 'FR' for France | |
| output_format | No | The format of the output. Works only when parse parameter is false. - links - Most efficient when the goal is navigation or finding specific URLs. Use this first when you need to locate a specific page within a website. - md - Best for extracting and reading visible content once you've found the right page. Use this to get structured content that's easy to read and process. - html - Should be used sparingly only when you need the raw HTML structure, JavaScript code, or styling information. | |
| user_agent_type | No | Device type and browser that will be used to determine User-Agent header value. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the tool is read-only. The description adds behavioral details: supports browser rendering, parsing, and multiple output formats, which enriches understanding beyond the annotation alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences with no fluff. It front-loads the core purpose and then adds key capabilities. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not provided) and comprehensive parameter documentation, the description is adequately complete. It covers the main functionality but could briefly mention the return format or limitations on 'certain webpages'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for each parameter. The description does not add significant new meaning beyond what the schema provides. The baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get a content of any webpage.' It distinguishes from sibling tools (specific scrapers for Amazon and Google) by being universal. The mention of 'browser rendering' and 'different output formats' adds specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for general web scraping but lacks explicit when-to-use vs alternatives. It mentions capabilities like browser rendering and parsing, which hint at complex pages, but no clear exclusions or prerequisites.
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. Dates show when Glama detected each change.
6 tool updates
v0.9.2- Added
ai_browser_agent - Added
ai_crawler - Added
ai_map - Added
ai_scraper - Added
ai_search - Added
generate_schema
6 tool updates
v0.8.1- Added
amazon_product_scraper - Added
amazon_search_scraper - Added
google_search_scraper - Removed
oxylabs_scraper - Removed
oxylabs_web_unblocker - Added
universal_scraper
2 tool updates
v1.0.0- First observed
oxylabs_scraper - First observed
oxylabs_web_unblocker
TDQS
Several tools have heavily overlapping purposes: ai_scraper and universal_scraper both claim to scrape any webpage content, while ai_crawler and ai_browser_agent both navigate websites and extract data. ai_search and google_search_scraper also cover similar territory, making selection ambiguous without very careful reading.
Names are descriptive and readable, but they follow two different conventions: an ai_ prefix group (ai_crawler, ai_scraper, ai_search, ai_map, ai_browser_agent) and a target_suffix group (google_search_scraper, amazon_search_scraper, amazon_product_scraper, universal_scraper). Only generate_schema stands apart with a clear verb_noun pattern.
Ten tools is well-scoped for a web scraping and search server covering generic scraping, search, browser automation, URL mapping, schema generation, and Amazon-specific extraction. Each tool represents a distinct product capability, even if some overlap exists.
The tool surface covers the core needs of the domain: general search, Google-specific search, generic page scraping, crawling, browser-driven interaction, site mapping, and Amazon search/product scraping. There are no obvious dead ends for common web data acquisition workflows.
Maintenance
Related MCP Connectors
Extract data from any website with this web scraper tool.
Oxylabs MCP β Oxylabs Web Scraper API (oxylabs.io)
Crawl, scrape, search the web, and automate browsers at scale with anti-bot bypass.
ScrapeUnblocker: ScrapeUnblocker allows to bypass anti-bot services and scrape the full page source.
Related MCP Servers
- AlicenseCqualityDmaintenanceA powerful tool for fetching and extracting text content from web pages and APIs, supporting web scraping, REST API requests, and Google Custom Search integration.510MIT
- AlicenseNot gradedqualityDmaintenanceEnables web scraping and document processing with JavaScript execution, anti-detection measures, batch processing, and structured data extraction. Supports multiple formats including markdown, HTML, screenshots, and handles PDFs with OCR capabilities.4MIT
- AlicenseBqualityCmaintenanceEnables web scraping and data extraction from websites with geographic flexibility, privacy features, and anti-detection capabilities. Supports scraping general websites, Google Search, Amazon Search, and Reddit with customizable parameters for rendering, geolocation, and locale.3016536ISC
- AlicenseAqualityBmaintenanceEnables AI agents to scrape any website by providing tools for JavaScript rendering, antibot bypass, and automatic captcha solving. It supports synchronous, asynchronous, and batch scraping operations with built-in proxy rotation.5207MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/oxylabs/oxylabs-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server