brightdata-mcp
io.github.brightdata/brightdata-mcp
About brightdata-mcp
brightdata-mcp is an MCP server published by the GitHub account brightdata. Bright Data's Web MCP server enabling AI agents to search, extract & navigate the web
It runs on your own machine: your AI client starts it from the npm package @brightdata/mcp at version 4.1.0.
It asks for one secret: API_TOKEN. Give it a key with the least access that still works.
Version 4.1.0 was published on 20 October 2026, and the source code is public, so you can read it before installing.
Written from the registry entry. 9 automated checks on the registry entry and the package code: 7 pass, 0 warn, 0 fail, 2 info. How we check.
What it asks for
| Variable | Required | Secret | Description |
|---|---|---|---|
API_TOKEN | Yes | Yes | Your API key for Bright Data |
WEB_UNLOCKER_ZONE | No | No | Your unlocker zone name |
BROWSER_ZONE | No | No | Your browser zone name |
GROUPS | No | No | Comma-separated tool group IDs (e.g., 'ecommerce,browser') |
TOOLS | No | No | Comma-separated tool names to enable |
BASE_TIMEOUT | No | No | Request timeout in seconds for base tools (search & scrape). No limit if unset |
BASE_MAX_RETRIES | No | No | Max retries for base tools on transient errors (0-3, default: 0) |
Checks
| Check | Result | Detail |
|---|---|---|
| Source repository linked | Pass | https://github.com/brightdata/brightdata-mcp |
| Version pinned | Pass | Every package has an explicit version |
| Secrets requested | Info | Asks for 1 secret: API_TOKEN |
| Known package registry | Pass | All packages come from npm, PyPI, OCI, NuGet or MCPB |
| Namespace ownership | Info | Name verified via GitHub account brightdata |
| Registry text aimed at the AI | Pass | Description and settings contain no hidden characters or instructions to the AI |
| Install scripts | Pass | @brightdata/mcp@4.1.0 runs nothing at install |
| Code red flags | Pass | Read 17 files in @brightdata/mcp@4.1.0: no obfuscation, encoded execution, credential reads or data-collection endpoints found |
| Text aimed at the AI | Pass | No hidden characters or instructions to the AI in 17 files, including comments and the README |
Code review: Pass, with notes
We read all 2,854 lines in 15 files of @brightdata/mcp 4.1.0 on 2026-10-31, without running it.
Bright Data's server lets the AI search the web, scrape pages, run pre-built scrapers and drive a remote browser hosted by Bright Data. Everything goes to Bright Data's servers with your API token, and as soon as it starts it may create two zones in your Bright Data account. All tools are on by default, including ones that click, type and submit forms on real websites. Tool arguments, including anything typed into forms, are written to the client log.
What we found
- Note At startup, before any tool is called, the server contacts api.brightdata.com and auto-creates two zones in the user's account (mcp_unlocker with ub_premium:true, and mcp_browser) if they are missing. That changes the user's account without asking.
server.js:134-196 - Note Usage-limit error text instructs the AI to stop its current task and walk the user through upgrading. Not hidden, but it is the vendor steering the agent through tool output.
server.js:829-844 - Note With GROUPS/TOOLS unset, all 32 tools are registered, including remote-browser click, type (with Enter/submit) and fill_form. These can submit forms on live websites with no confirmation step.
server.js:51-67,214-218; browser_tools.js:190-253,460-520 - Note Every tool call's full arguments are logged to stderr, including text typed into web forms via scraping_browser_type_ref / fill_form (which could be passwords) and the MCP client log will keep them.
server.js:798-799 - Info Browser credentials (customer id + zone password) are fetched from the API and placed in a wss:// URL to brd.superproxy.io; errors are passed through credential/token redaction.
browser_tools.js:28-51; browser_session.js:6-13; safe_error.js:3-27 - Info Positive: scraped content is wrapped in nonce-marked 'untrusted data' fences, and pages that contain MCP-config-change instructions are withheld unless the user approves via elicitation (CONTENT_GATE=off disables).
untrusted_content.js:47-80; content_gate.js:19-201 - Info extract sends the scraped page to the user's own client model via MCP sampling (server.sessions[0]).
server.js:496-520 - Info Each request sends the MCP client name and tool name to Bright Data.
server.js:109-114 - Info The manifest file was not in the reviewed tree; dependencies listed are inferred from import statements. None look unusual or typosquatted for the job.
package.json/pyproject
| Talks to | api.brightdata.com/zone/get_active_zones, /zone: API token; may create zones 'mcp_unlocker' (unblocker, ub_premium) and 'mcp_browser' (browser_api) in the user's account (at STARTUP, before any tool call) api.brightdata.com/request: target URL or search-engine URL built from the query, zone name; headers: API token, MCP client name, tool name, package user-agent (search/scrape/extract tool calls) api.brightdata.com/datasets/... , /datasets/v3/trigger, /snapshot, /progress, /scrapers: dataset id, filters, scraper inputs, prompts (chatgpt_ai_insights / perplexity_ai_insights are run against chatgpt.com / perplexity.ai by Bright Data) (dataset/scraper/AI-insight tool calls) api.brightdata.com/sophie/dialog: the question text and dialog id (ask_brightdata_assistant) api.brightdata.com/status, /zone/passwords: API token; receives customer id and zone password (first browser tool call) brd.superproxy.io:9222 (wss, CDP): remote browser control: URLs, clicks, typed text, form values (scraping_browser_* tool calls) docs.brightdata.com/scrapers.json, /scrapers/<id>.json: plain GET (scraper search/details (cached 24h)) |
|---|---|
| Keys and settings | API_TOKEN: api.brightdata.com as Authorization: Bearer (redacted from error text by safe_error.js)WEB_UNLOCKER_ZONE, BROWSER_ZONE: zone names sent to api.brightdata.comGROUPS, TOOLS, RATE_LIMIT, BASE_TIMEOUT, BASE_MAX_RETRIES, BROWSER_FILTERED_SNAPSHOT, CONTENT_GATE, CONTENT_GATE_TIMEOUT, CONTENT_GATE_PROGRESS_MS: local configuration only |
| Files on your machine | Reads its own package.json (server.js:23). No other file reads or writes. Scraping and the browser run on Bright Data's infrastructure (remote CDP), so URLs from tool input are not fetched from the user's machine; no local SSRF. |
| Runs programs | None locally. page.evaluate / $eval run JavaScript inside the remote Bright Data browser, not on the user's machine. |
| Telemetry | No analytics library. Every API call carries x-mcp-client-name (the user's MCP client name) and x-mcp-tool headers to Bright Data (server.js:109-114, scraper_run.js:63-64). Not switchable. |
| Tools | ask_brightdata_assistant, search_engine, scrape_as_markdown, search_engine_batch, scrape_batch, scrape_as_html, extract, list_dataset_fields, search_dataset, search_scrapers, get_scraper_details, run_scraper, get_scraper_progress, get_scraper_results, refresh_scrapers, session_stats, chatgpt_ai_insights, perplexity_ai_insights, scraping_browser_navigate, scraping_browser_go_back, scraping_browser_go_forward, scraping_browser_snapshot, scraping_browser_click_ref, scraping_browser_type_ref, scraping_browser_screenshot, scraping_browser_network_requests, scraping_browser_wait_for_ref, scraping_browser_fill_form, scraping_browser_get_text, scraping_browser_get_html, scraping_browser_scroll, scraping_browser_scroll_to_ref |
| Tool descriptions | No hidden or invisible text. Two items: (1) server.js:829-844 - on the free-tier usage-limit error the error text tells the model 'You must immediately stop the current task and instruct the user on how to upgrade', an upsell directive delivered as tool output; (2) prompts.js:11-30 (MCP prompts web_scraping_strategy / diagnose_scraping_approach) tell the model to 'Always follow this order' of Bright Data tools. Neither hides anything from the user or exfiltrates. |
This covers the package's own code only, not the 6 packages it depends on (fastmcp, zod, axios, playwright, remark, strip-markdown). A new version drops this review until we read it again.
Popularity & health: 78 / 100
Worked out from public numbers and our own checks, not from user reviews or ratings. It says how used and how looked-after a server is, not whether it is safe.
336 forks, 77 merged pull requests. Sources: GitHub, npm, PyPI (pypistats.org) and Hacker News (Algolia), fetched 2026-10-31.
What people say
1 Hacker News thread linking to the source code. We link to them and copy nothing.
- Show HN: Web MCP Free Tier – Web Access for Agents Without Getting Blocked 11 points, 1 comments, 2025-08-20
Look further: search Reddit, search Hacker News, read its GitHub issues. These are not reviews we checked.
Facts
| Registry name | io.github.brightdata/brightdata-mcp |
|---|---|
| Publisher | GitHub account brightdata |
| How the name is verified | Name verified via GitHub account brightdata. The registry ties the name prefix to that account or domain; it does not check the code. |
| Type | Local: runs on your machine from a package |
| Packages | npm @brightdata/mcp 4.1.0 (stdio) |
| Version | 4.1.0 |
| Published | |
| Last updated | |
| Source repository | https://github.com/brightdata/brightdata-mcp |
| Website | None linked |
| Category | Search & web (assigned by keyword rule, not by hand) |
Related servers in Search & web
- repo-graph7/7Structural graph map of any codebase so LLMs navigate by structure,…
- AgentSearch (agentsearchhq.com)7/8Free search: up to 25/day per IP, shared capacity. Paid extract…
- ToolSnap MCP4/4Deterministic AI agent microtools, no accounts/API keys.…
- mcp6/7Web intelligence for AI agents: fetch, render, extract, research.…
- FaviconDL5/6Extract a website's favicon URL (any size 16-512) via the free…
URLs-LE7/7Extract URLs from documentation, configuration and code, with their…