FineData MCP Server
The FineData MCP Server enables AI agents to scrape websites with advanced antibot bypass, JavaScript rendering, captcha solving, and proxy rotation.
Core Features:
Scrape protected websites using antibot bypass for Cloudflare, DataDome, PerimeterX with TLS fingerprinting and Undetected Chrome mode
Render JavaScript pages with Playwright for SPAs (React, Vue, Angular) using configurable wait strategies (networkidle, load, domcontentloaded, CSS selectors)
Automatically solve captchas including reCAPTCHA, hCaptcha, Cloudflare Turnstile, and Yandex SmartCaptcha
Rotate through 87K+ proxies (datacenter, residential, mobile) with sticky sessions for authentication flows
Batch scrape up to 100 URLs simultaneously with parallel processing
Submit async scraping jobs for long-running requests (>60 seconds) with status tracking and webhook callbacks
Management:
Monitor API usage and token consumption
Configure timeouts (5-300 seconds) and custom wait strategies
Track job status for async operations with smart retry logic and block detection
Integrate with AI tools like Claude Desktop, Cursor IDE, and GPT through MCP protocol
Enables bypassing Cloudflare antibot protections and solving Cloudflare Turnstile captchas to facilitate seamless web scraping of protected websites.
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., "@FineData MCP Serverscrape https://example.com with javascript rendering and antibot bypass"
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.
FineData MCP Server
MCP (Model Context Protocol) server for FineData web scraping API.
Enables AI agents (Claude, Cursor, GPT, …) to fetch pages that need a full browser and return clean data:
JavaScript rendering and browser actions
Captcha solving
Datacenter / ISP / residential / mobile proxies
Markdown or JSON output (markdown by default)
AI structured extraction
Local stdio or remote Streamable HTTP (+ OAuth 2.1)
Version: 0.3.1
Modes
Start with a plain request. Stealth and proxy modes are available when a page
needs a full browser; they consume more tokens than a plain request. Exact
rates are in the documentation and via get_usage. Gateway may apply a domain
strategy that overrides the requested engine or proxy; trust tokens_used in
the response.
Related MCP server: Thordata MCP Server
Installation
uvx (recommended)
curl -LsSf https://astral.sh/uv/install.sh | sh
FINEDATA_API_KEY=fd_xxx uvx finedata-mcppip
pip install finedata-mcp
FINEDATA_API_KEY=fd_xxx finedata-mcpnpx
npx -y @finedata/mcp-serverCursor
~/.cursor/mcp.json (Windows: %USERPROFILE%\.cursor\mcp.json):
{
"mcpServers": {
"finedata": {
"command": "uvx",
"args": ["finedata-mcp"],
"env": {
"FINEDATA_API_KEY": "fd_your_api_key_here"
}
}
}
}Cursor deeplink (after publishing): install via MCP directory / “Add to Cursor”.
Remote (Streamable HTTP)
{
"mcpServers": {
"finedata": {
"url": "https://mcp.finedata.ai/mcp",
"headers": {
"Authorization": "Bearer fd_your_api_key_here"
}
}
}
}OAuth 2.1 (Claude.ai / ChatGPT connectors): register via AS at https://api.finedata.ai, consent in the cabinet, then use the access token as Bearer.
Environment
Variable | Required | Default | Description |
| stdio: yes | — | API key |
| no |
| API base |
| no |
| HTTP client timeout (seconds) |
| HTTP |
| Bind host |
| HTTP |
| Bind port |
| remote OAuth | — | AS URL (gateway) |
| remote OAuth | — | Public MCP URL |
| remote OAuth | — | Verify |
Tools
Tool | Purpose |
| Sync scrape with GET, read-only (markdown default) |
| Sync POST / PUT / PATCH / DELETE through the same pipeline |
| Async job, GET ( |
| Poll job (markdown, not raw HTML) |
| Cancel job |
| List jobs |
| Up to 100 URLs (string or |
| Batch progress |
| Period usage via |
Notable parameters: use_antibot, proxy_country, proxy_sticky, proxy_profile_id, auto_retry, stealth modes, formats, only_main_content, extract_*.
Async/batch: no csv/xlsx formats (sync only).
HTTP transport
finedata-mcp --transport http --host 0.0.0.0 --port 8080Health: GET /health. Protected resource metadata is served at the path-scoped
URL for the endpoint — GET /.well-known/oauth-protected-resource/mcp — because
FINEDATA_MCP_RESOURCE_URL carries the /mcp path. Clients normally find it
from the WWW-Authenticate header on a 401 rather than guessing.
Support
License
MIT
Available Tools
5 toolsbatch_scrapeAInspect
Scrape multiple URLs in a single batch request.
Benefits:
Submit up to 100 URLs at once
Parallel processing for speed
Single webhook notification when all complete
Returns a batch_id and list of job_ids for tracking.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | List of URLs to scrape (max 100) | |
| use_js_render | No | Enable JS rendering for all URLs | |
| use_residential | No | Use residential proxy for all URLs | |
| callback_url | No | Webhook URL for batch completion |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It effectively discloses key behavioral traits: batch processing capability (up to 100 URLs), parallel execution for speed, and webhook notification upon completion. It also mentions return values (batch_id and job_ids), though it lacks details on error handling, rate limits, or authentication needs.
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 well-structured and front-loaded with the core purpose, followed by a bulleted list of benefits and return details. Every sentence adds value without redundancy, making it efficient and easy to parse.
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 no annotations and no output schema, the description does a good job covering the tool's behavior and parameters. However, it lacks details on error cases, rate limits, or authentication requirements, which are important for a batch processing tool with potential 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 description coverage is 100%, so the baseline is 3. The description adds value by explaining the benefits related to parameters: 'Submit up to 100 URLs at once' clarifies the urls parameter limit, 'Parallel processing for speed' implies performance aspects, and 'Single webhook notification when all complete' relates to callback_url usage, enhancing understanding beyond the schema.
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 purpose: 'Scrape multiple URLs in a single batch request.' It specifies the verb ('scrape'), resource ('URLs'), and scope ('multiple'/'batch'), distinguishing it from sibling tools like scrape_url (single URL) and scrape_async (asynchronous single).
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 context for when to use this tool: for batch processing of up to 100 URLs with parallel speed and single notification. However, it does not explicitly state when NOT to use it or name alternatives (e.g., use scrape_url for single URLs), though the sibling tool names imply differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_job_statusAInspect
Get the status of an async scraping job.
Statuses:
pending: Job is queued
processing: Worker is scraping
completed: Success, result available
failed: Error occurred
cancelled: Job was cancelled
Poll this endpoint until status is 'completed' or 'failed'.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job ID returned from scrape_async |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by documenting the possible status values and their meanings (pending, processing, completed, failed, cancelled). It also specifies the polling behavior requirement. However, it doesn't mention rate limits, authentication needs, or error handling specifics that would be valuable for a polling 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 perfectly structured: a clear purpose statement, a well-organized status enumeration, and a specific usage instruction. Every sentence earns its place, with no redundant information. The status list uses bullet points for readability without being verbose.
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 single-parameter tool with no output schema, the description provides excellent context about what the tool returns (status values with explanations) and how to use it (polling guidance). The only minor gap is lack of information about the return format/structure when status is 'completed' (though this is partially mitigated by referencing scrape_async as the job source).
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% with the job_id parameter fully documented as 'Job ID returned from scrape_async'. The description doesn't add any additional parameter information beyond what the schema provides, so it meets the baseline expectation when 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 specific action ('Get the status') and resource ('async scraping job'), distinguishing it from sibling tools like scrape_async (which creates jobs) and scrape_url (which performs immediate scraping). It explicitly identifies the tool's role in checking job progress rather than initiating or performing scraping.
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 explicit usage guidance: 'Poll this endpoint until status is 'completed' or 'failed''. This tells the agent when to use this tool (for monitoring async jobs) and when to stop (when job reaches terminal states). It also implicitly distinguishes from batch_scrape and scrape_url which are for different workflows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageBInspect
Get current API usage and token statistics.
Returns:
Tokens used this billing period
Token limit for your plan
Usage breakdown by feature
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns usage statistics, which implies it's a read-only operation, but doesn't specify behavioral traits like authentication needs, rate limits, or whether it's real-time data. The description adds basic context but lacks details on how the tool behaves in practice, such as update frequency or error handling.
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 appropriately sized and front-loaded, starting with the core purpose in the first sentence. The bullet points for returns are structured and add clarity without redundancy. However, the second part could be slightly more integrated into the flow, but overall, it's efficient with minimal waste.
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's low complexity (0 parameters, no output schema, no annotations), the description is somewhat complete but has gaps. It explains what the tool does and what it returns, which is adequate for a simple read operation. However, without annotations or output schema, it could benefit from more context on usage scenarios or limitations, making it just minimally viable.
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 input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details beyond the schema, but since there are no parameters, it appropriately focuses on the output. This meets the baseline for tools with no parameters, as it doesn't mislead or omit necessary information.
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 purpose: 'Get current API usage and token statistics.' It specifies the verb ('Get') and resource ('API usage and token statistics'), making the function immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_job_status' or 'batch_scrape,' which prevents a perfect score.
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. It doesn't mention context, prerequisites, or exclusions, such as whether it's for monitoring usage limits or checking after API calls. With sibling tools like 'scrape_url' or 'get_job_status,' there's no indication of how this tool fits into the workflow, leaving usage unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrape_asyncAInspect
Submit an async scraping job for long-running requests.
Use this for:
Pages that take > 60 seconds to load
Heavy JS rendering tasks
When you don't need immediate results
Batch processing workflows
Returns a job_id that you can poll with get_job_status.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Target URL to scrape | |
| use_js_render | No | Enable JavaScript rendering | |
| use_residential | No | Use residential proxy | |
| use_undetected | No | Use Undetected Chrome | |
| solve_captcha | No | Auto-solve captchas | |
| timeout | No | Timeout in seconds | |
| callback_url | No | Webhook URL to receive result when job completes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: the async/long-running nature, the need to poll for results via 'get_job_status', and the return of a 'job_id'. It doesn't mention rate limits, authentication needs, or error handling, but covers the core operational behavior well.
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 well-structured and front-loaded with the core purpose, followed by clear usage guidelines and a note on the return value. Every sentence earns its place with no wasted words, making it highly efficient and easy to parse.
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's complexity (async scraping with multiple parameters) and no annotations or output schema, the description does a good job of covering the essential context: purpose, usage scenarios, and result handling. It could benefit from mentioning error cases or prerequisites, but it's largely complete for agent use.
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 7 parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema, but it doesn't need to since the schema is comprehensive. Baseline 3 is appropriate when 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's purpose: 'Submit an async scraping job for long-running requests.' It specifies the verb ('submit'), resource ('async scraping job'), and scope ('long-running requests'), and distinguishes it from immediate scraping alternatives like 'scrape_url'.
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 explicit usage guidelines with a bulleted list: 'Use this for: - Pages that take > 60 seconds to load - Heavy JS rendering tasks - When you don't need immediate results - Batch processing workflows.' It clearly indicates when to use this tool versus alternatives like 'scrape_url' for immediate results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrape_urlAInspect
Scrape content from any web page with advanced antibot bypass.
Features:
TLS fingerprinting (Chrome, Firefox, Safari profiles)
JavaScript rendering for SPAs (React, Vue, Angular)
Captcha solving (reCAPTCHA, hCaptcha, Cloudflare Turnstile)
Residential and mobile proxy support
Automatic retry with smart detection
Use cases:
Extract text/HTML from any website
Scrape JavaScript-rendered content
Access pages behind Cloudflare or other protections
Get data from pages with captchas
Token costs:
Base request: 1 token
Antibot bypass: +2 tokens
JS rendering: +5 tokens
Residential proxy: +3 tokens
Captcha solving: +10 tokens
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Target URL to scrape (required) | |
| use_js_render | No | Enable JavaScript rendering with Playwright. Use for SPAs, React, Vue sites. Default: false | |
| use_residential | No | Use residential proxy instead of datacenter. Better for protected sites. Default: false | |
| use_undetected | No | Use Undetected Chrome for maximum antibot bypass (Cloudflare, PerimeterX). Default: false | |
| solve_captcha | No | Automatically detect and solve captchas. Default: false | |
| timeout | No | Timeout in seconds (5-300). Default: 60 | |
| js_wait_for | No | Wait strategy for JS rendering: 'networkidle', 'load', 'domcontentloaded', or 'selector:.css-selector'. Default: networkidle | networkidle |
| session_id | No | Sticky session ID - all requests with same ID use same proxy IP. Good for auth flows. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and excels. It details advanced features like antibot bypass, JavaScript rendering, captcha solving, and proxy support, and includes critical cost information (token costs) that isn't in the schema. This provides rich context on performance, capabilities, and resource implications beyond basic scraping.
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 well-structured with sections (Features, Use cases, Token costs) and front-loaded with the core purpose. However, the token costs section is lengthy and could be more concise, and some details (like specific browser profiles) might be excessive. Overall, it's efficient but has minor verbosity.
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 complexity of the tool (8 parameters, advanced features) and no output schema, the description is largely complete: it covers purpose, usage, behavioral traits, and costs. The main gap is the lack of output details (e.g., what content is returned), but this is partially mitigated by the clear purpose. It's robust but not fully exhaustive.
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 8 parameters thoroughly. The description doesn't add specific parameter semantics beyond what's in the schema (e.g., it mentions features like JS rendering but doesn't explain parameters like 'js_wait_for'). This meets the baseline of 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's purpose as 'Scrape content from any web page with advanced antibot bypass,' which is a specific verb+resource combination. It distinguishes itself from siblings like 'batch_scrape' and 'scrape_async' by emphasizing advanced features, but doesn't explicitly contrast with them. The title is null, so the description carries the full burden of clarity effectively.
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 'Use cases' section provides clear context for when to use this tool (e.g., for JavaScript-rendered content, pages behind protections, or with captchas), which helps guide selection. However, it doesn't explicitly mention when NOT to use it or name alternatives like 'batch_scrape' for bulk operations or 'scrape_async' for asynchronous tasks, missing explicit sibling differentiation.
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.
5 tool updates
v0.1.0- First observed
batch_scrape - First observed
get_job_status - First observed
get_usage - First observed
scrape_async - First observed
scrape_url
TDQS
Each tool has a clearly distinct purpose with no ambiguity: batch_scrape handles multiple URLs in parallel, scrape_async is for long-running single jobs, scrape_url is for immediate single requests with advanced features, get_job_status tracks async/batch jobs, and get_usage monitors API consumption. The descriptions explicitly differentiate use cases and workflows.
The naming follows a consistent snake_case pattern with clear verb_noun structures (e.g., batch_scrape, get_job_status, scrape_async). However, scrape_url deviates slightly by using a noun_verb format instead of a verb_noun pattern, which is a minor inconsistency in an otherwise predictable set.
With 5 tools, this server is well-scoped for web scraping operations. Each tool earns its place by covering distinct aspects of the workflow: submission (batch, async, immediate), status tracking, and usage monitoring. This count is neither too sparse nor bloated for the domain.
The tool surface provides complete coverage for the web scraping domain. It supports all key operations: multiple submission methods (batch, async, immediate), job lifecycle management (status tracking), and administrative functions (usage monitoring). There are no obvious gaps that would hinder agent workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Direct access to 40+ scraping and search tools. Extract structured data from Google (Search, Maps, Trends), Amazon, Airbnb, Social Media, and any web page directly into your AI agent.
Enable language models to perform advanced AI-powered web scraping with enterprise-grade reliabili…
Web scraping for AI agents. Extract text and metadata from any URL worldwide. $0.005/page.
Reliable web access for AI agents: smart HTTP, rotating proxies, and full-browser rendering.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to perform undetectable browser automation that bypasses Cloudflare, antibots, and social media blocks. Provides 105 tools for element extraction, network debugging, and real-world web scraping with a 98.7% success rate on protected sites.1,883MIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI models to scrape and extract structured data from any website globally using a 195+ country proxy network with JavaScript rendering, anti-bot bypass, and output in Markdown, HTML, or Links format.-
- AlicenseAqualityFmaintenanceEnables AI agents to crawl, scrape, search, and automate browsers with anti-bot bypass, providing fast web access via 22 tools.22503MIT
- FlicenseBqualityBmaintenanceEnables AI agents to browse and extract data from any public website via Bright Data's cloud infrastructure, handling proxy rotation, CAPTCHA solving, and JavaScript rendering.57-
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/quality-network/finedata-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server