Skip to main content
Glama

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

curl -LsSf https://astral.sh/uv/install.sh | sh
FINEDATA_API_KEY=fd_xxx uvx finedata-mcp

pip

pip install finedata-mcp
FINEDATA_API_KEY=fd_xxx finedata-mcp

npx

npx -y @finedata/mcp-server

Cursor

~/.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

FINEDATA_API_KEY

stdio: yes

API key

FINEDATA_API_URL

no

https://api.finedata.ai

API base

FINEDATA_TIMEOUT

no

180

HTTP client timeout (seconds)

FINEDATA_MCP_HOST

HTTP

0.0.0.0

Bind host

FINEDATA_MCP_PORT

HTTP

8080

Bind port

FINEDATA_OAUTH_ISSUER

remote OAuth

AS URL (gateway)

FINEDATA_MCP_RESOURCE_URL

remote OAuth

Public MCP URL

FINEDATA_JWT_SECRET

remote OAuth

Verify aud=mcp JWTs

Tools

Tool

Purpose

scrape_url

Sync scrape with GET, read-only (markdown default)

send_http_request

Sync POST / PUT / PATCH / DELETE through the same pipeline

scrape_async

Async job, GET (formats=['markdown'] default)

get_job_status

Poll job (markdown, not raw HTML)

cancel_job

Cancel job

list_jobs

List jobs

batch_scrape

Up to 100 URLs (string or {url,...} objects)

get_batch_status

Batch progress

get_usage

Period usage via api_tokens_used

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 8080

Health: 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 tools
batch_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYesList of URLs to scrape (max 100)
use_js_renderNoEnable JS rendering for all URLs
use_residentialNoUse residential proxy for all URLs
callback_urlNoWebhook URL for batch completion

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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'.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesJob ID returned from scrape_async

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesTarget URL to scrape
use_js_renderNoEnable JavaScript rendering
use_residentialNoUse residential proxy
use_undetectedNoUse Undetected Chrome
solve_captchaNoAuto-solve captchas
timeoutNoTimeout in seconds
callback_urlNoWebhook URL to receive result when job completes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesTarget URL to scrape (required)
use_js_renderNoEnable JavaScript rendering with Playwright. Use for SPAs, React, Vue sites. Default: false
use_residentialNoUse residential proxy instead of datacenter. Better for protected sites. Default: false
use_undetectedNoUse Undetected Chrome for maximum antibot bypass (Cloudflare, PerimeterX). Default: false
solve_captchaNoAutomatically detect and solve captchas. Default: false
timeoutNoTimeout in seconds (5-300). Default: 60
js_wait_forNoWait strategy for JS rendering: 'networkidle', 'load', 'domcontentloaded', or 'selector:.css-selector'. Default: networkidlenetworkidle
session_idNoSticky session ID - all requests with same ID use same proxy IP. Good for auth flows.

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose4/5

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.

Usage Guidelines4/5

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.

  1. 5 tool updatesv0.1.0
    • First observedbatch_scrape
    • First observedget_job_status
    • First observedget_usage
    • First observedscrape_async
    • First observedscrape_url

TDQS

A4.1/5.0
Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

Latest Blog Posts

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