Bright Data MCP

Web search, unblocked page scraping, pre-built scrapers and a remote browser, run through Bright Data

Official · Bright Data JavaScript Remote (hosted) · Streamable HTTPLocal · stdio Web searchBrowser automation

93 popularity score ★ 2.7k ↓ 23k/wk

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

Claude (desktop and web)Settings → Connectors → Add custom connector, URL field
https://mcp.brightdata.com/mcp?token=<API_TOKEN>
Claude Codeterminal
claude mcp add --transport http brightdata "https://mcp.brightdata.com/mcp?token=<API_TOKEN>"
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "brightdata": {
      "url": "https://mcp.brightdata.com/mcp?token=<API_TOKEN>"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "brightdata": {
      "type": "http",
      "url": "https://mcp.brightdata.com/mcp?token=<API_TOKEN>"
    }
  }
}
windsurf~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "brightdata": {
      "serverUrl": "https://mcp.brightdata.com/mcp?token=<API_TOKEN>"
    }
  }
}
Gemini CLI~/.gemini/settings.json
{
  "mcpServers": {
    "brightdata": {
      "httpUrl": "https://mcp.brightdata.com/mcp?token=<API_TOKEN>"
    }
  }
}
zedZed settings
{
  "context_servers": {
    "brightdata": {
      "url": "https://mcp.brightdata.com/mcp?token=<API_TOKEN>"
    }
  }
}
warpSettings > MCP Servers > Add MCP Server
{
  "brightdata": {
    "url": "https://mcp.brightdata.com/mcp?token=<API_TOKEN>"
  }
}
Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs API_TOKEN. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add bright-data -e API_TOKEN=<API_TOKEN> -- npx @brightdata/mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "bright-data": {
      "command": "npx",
      "args": [
        "@brightdata/mcp"
      ],
      "env": {
        "API_TOKEN": "<API_TOKEN>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "bright-data": {
      "command": "npx",
      "args": [
        "@brightdata/mcp"
      ],
      "env": {
        "API_TOKEN": "<API_TOKEN>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "bright-data": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "@brightdata/mcp"
      ],
      "env": {
        "API_TOKEN": "<API_TOKEN>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.bright-data]
command = "npx"
args = ["@brightdata/mcp"]

[mcp_servers.bright-data.env]
API_TOKEN = "<API_TOKEN>"
Gemini CLITerminal
gemini mcp add --scope user -e API_TOKEN=<API_TOKEN> bright-data npx -- @brightdata/mcp

Settings 11

API_TOKEN secret Required: Bright Data API token; the server will not start without it.
RATE_LIMIT Optional: Call cap such as 100/1h or 50/30m; a bad format stops the server starting. Default unlimited.
SERP_ZONE Optional: SERP zone used by the search tools, created on the account at start if missing. Default mcp_serp.
BROWSER_ZONE Optional: Browser zone used by the browser tools, created at start if missing. Default mcp_browser. For scraping_browser_* tools.
BROWSER_FILTERED_SNAPSHOT Optional: Set to on so snapshots list only buttons, links and fields. Default off. For scraping_browser_snapshot.
BASE_TIMEOUT Optional: Request timeout in seconds for the search tools. Default no limit.
BASE_MAX_RETRIES Optional: Retries on transient errors for the search tools, capped at 3. Default 0.
Set together: tool selection
GROUPS Optional: Comma-separated groups (scrapers, browser, geo, advanced_scraping) to limit the server to. Default all tools.
TOOLS Optional: Comma-separated tool names; adds to GROUPS, or on its own enables only these. Default all tools.
Set together: content gate
CONTENT_GATE Optional: Set to off to stop asking before returning pages that read like MCP configuration instructions. Default on.
CONTENT_GATE_TIMEOUT Optional: Seconds to wait for the user's answer before withholding gated content. Default 120.

What it does

Bright Data MCP is Bright Data's own server for giving an assistant live access to public web pages. Requests go out through Bright Data's proxy and unblocking network, which handles bot checks, CAPTCHAs and geo-restrictions, so sites that turn away a plain HTTP fetch can still be read.

There are 30 tools, and all of them are on unless GROUPS or TOOLS is set. Search runs on Bing by default or on Google, ten results a page, with a country and a time range. Page fetches now go through Bright Data's Fetch API, and the one scrape tool returns Markdown, plain text, raw HTML or schema.org data depending on its format argument. The old scrape_as_html and extract tools are gone, and pages are not rendered with JavaScript. Six tools search and run the catalogue of over 1,200 pre-built scrapers, which hand back JSON records for sites like Amazon, LinkedIn, TikTok, npm and PyPI. Fourteen drive a remote browser. Two send a prompt to ChatGPT or Perplexity, two filter stored LinkedIn datasets, and ask_brightdata_assistant asks Bright Data's support assistant. Two prompts walk an assistant through picking a tool.

Every group keeps search_engine, scrape_as_markdown and ask_brightdata_assistant. The hosted endpoint takes the same choice as query parameters, with the token in the URL and nothing installed. Locally it is a Node process started with npx.

Two things you only see in the code (fetch_api.js, server.js): a fetched page is cut to 200,000 characters, or 100,000 per page in scrape_batch, with a note saying so. And on start the local server checks the account for its SERP and browser zones and creates any that are missing.

It is a paid service with 5,000 free requests a month, after which requests stop unless funds have been deposited. Pay-as-you-go is listed at $1.50 per 1,000 search or scrape results and $8 per GB of browser traffic. Scraper runs are billed per record.

What it needs

To run it yourselfNode.js
Runs onmacOS, Windows, Linux
Bright DataFree tier5,000 requests a month free; beyond that pay-as-you-go once funds are deposited

Create the API token in Bright Data's account settings (brightdata.com/cp/setting/users). The hosted endpoint needs only an MCP client that connects to a remote HTTP server; running locally needs Node.js with npx.

Limits

  • Cost Free allowance is 5,000 requests a month; after that requests stop unless the account holds funds
  • Cost Scraper runs are billed per record; discover_by_* methods return up to limit_per_input records per input (default 10, max 1000)
  • Size cap search_engine_batch and scrape_batch take at most 5 items per call
  • Size cap Fetched pages are cut to 200,000 characters, or 100,000 per page in scrape_batch (fetch_api.js)
  • Not covered Page fetches do not run JavaScript; pages that need it call for the browser tools. A fetch times out after 45 seconds
  • Not covered Search covers Bing and Google only; Bing takes only the day, week, year and any time ranges
  • Rate limit run_scraper waits up to 45 seconds, then returns a snapshot_id to poll with get_scraper_progress
  • Size cap search_dataset returns up to 10 records per call and covers stored LinkedIn datasets only
  • Limit The content gate does not cover browser tools; clients without MCP elicitation get gated pages withheld
  • Limit The MCP registry entry lags the npm package (newest registry version 2.12.0) and still lists WEB_UNLOCKER_ZONE and other removed settings

The free allowance is 5,000 requests a month and requests stop when it runs out unless the account holds funds. Batch tools take at most 5 queries or 5 URLs per call. Page fetches do not render JavaScript and pages are cut at 200,000 characters. run_scraper waits up to 45 seconds and then hands back a snapshot ID to poll. Scraper results can be large and are billed per record. The content gate that holds back pages carrying MCP configuration instructions does not cover the browser tools, and clients without MCP elicitation get such pages withheld.

Who it suits

Suits developers and agents that need pages from sites that block ordinary fetchers, or structured JSON from large platforms such as Amazon, LinkedIn or TikTok without writing parsers, and who accept paying Bright Data past the free tier. The hosted endpoint suits anyone who wants nothing installed. Look elsewhere for a free, keyless fetch tool, for requests that leave from your own machine rather than a vendor network, or for a browser that runs locally with your own logged-in sessions.

Tools 30

27 only read, 3 change things. A ? marks an optional parameter.

search_engine
Search Bing or Google and get 10 organic results per page as JSONquery: stringengine?: enumcountry?: stringpage?: integertime_range?: enum
search_engine_batch
Run up to 5 searches in one callqueries: array
scrape_as_markdown
Fetch one page through the Fetch API as Markdown, plain text, HTML or schema.org dataurl: stringformat?: enum
scrape_batch
Fetch up to 5 pages at once in one chosen formaturls: arrayformat?: enum
session_stats
Count how often each tool was called this session
ask_brightdata_assistant
Put a question about Bright Data products, zones or errors to its support assistantquestion: stringdialog_id?: string
search_scrapers
Find pre-built scrapers by site or data typequery: stringlimit?: integer
get_scraper_details
Show one scraper method's inputs, sample input and output fieldsdataset_id: stringmethod: string
run_scraper
Start a billed scraper run and wait up to 45 seconds for its recordsdataset_id: stringmethod: stringinput: arraylimit_per_input?: integer
get_scraper_progress
Check the status of a scraper runsnapshot_id: string
get_scraper_results
Fetch the records of a finished scraper runsnapshot_id: string
refresh_scrapers
Reload the scraper catalogue now instead of waiting a day
scraping_browser_navigate
Open or reuse a remote browser session and go to a URLurl: stringcountry?: string
scraping_browser_go_back
Go back one page
scraping_browser_go_forward
Go forward one page
scraping_browser_snapshot
List the page's elements with refs for later actionsfiltered?: boolean
scraping_browser_click_ref changes
Click an element by its snapshot refref: stringelement: string
scraping_browser_type_ref changes
Type text into an element by ref, optionally submittingref: stringelement: stringtext: stringsubmit?: boolean
scraping_browser_fill_form changes
Fill several form fields by ref in one callfields: array
scraping_browser_screenshot
Capture the current page, optionally wholefull_page?: boolean
scraping_browser_get_text
Return the text of the page body
scraping_browser_get_html
Return the current page's HTMLfull_page?: boolean
scraping_browser_scroll
Scroll to the bottom of the page
scraping_browser_scroll_to_ref
Scroll one element into viewref: stringelement: string
scraping_browser_wait_for_ref
Wait for an element to be visible, 30 seconds by defaultref: stringelement: stringtimeout?: number
scraping_browser_network_requests
List requests made since the page loaded, with status
chatgpt_ai_insights
Send a prompt to ChatGPT and return its answer as Markdownprompt: string
perplexity_ai_insights
Send a prompt to Perplexity and return its answer as Markdownprompt: string
list_dataset_fields
List the fields a stored dataset can be filtered ondataset_id: string
search_dataset
Filter a stored LinkedIn dataset and return up to 10 recordsdataset_id: stringfilter: objectsize?: integersort?: anysearch_after?: array

Prompts 2

web_scraping_strategy
Decision tree for picking the right Bright Data tool for a task
diagnose_scraping_approach
Try the Fetch API, then the remote browser, on a new site and report which works

Similar servers