hermes-brightdata
Bright Data web data tools for NousResearch Hermes Agent — search, scrape, structured datasets, residential proxy, and browser automation.
한국어 문서: README.ko.md
This plugin exposes Bright Data's web data platform as ten native Hermes tools. Unlike an MCP server, these tools are also available inside delegate_task subagents, which do not inherit the parent's MCP toolsets. It is pure Python (requests + optional playwright) with no Node runtime.
Bright Data handles the hard parts of web data collection — proxy rotation, header management, bot/CAPTCHA bypass, JavaScript rendering, and structured parsing. The plugin keeps handlers thin over focused domain modules, so each tool is a small, testable surface.
Why this plugin
- Search & scrape — real-time SERP search, and single/batch URL scraping to clean markdown via Web Unlocker.
- Structured datasets — one
web_datatool covers 23 platforms (Amazon, LinkedIn, Instagram, TikTok, Facebook, YouTube, X, Crunchbase) through a singleplatformargument. - Residential proxy — geo-targeted fetching through real residential IPs.
- Browser automation — a persistent CDP Scraping Browser session for interactive flows.
Requirements
- Python 3.10+
- A Bright Data account and API token (
BRIGHTDATA_API_TOKEN) - For
brightdata_browser_*tools: the[browser]extra (Playwright) andBRIGHTDATA_BROWSER_AUTH. The core five tools run onrequestsalone.
Install
Option A — Hermes Git install (recommended)
Install directly into Hermes' plugin directory. This avoids having to locate the Python environment used by your Hermes installation:
hermes plugins install dandacompany/hermes-brightdata-plugin --enable
Option B — PyPI
Install the package in the same Python environment that runs hermes, then
enable it:
python -m pip install hermes-brightdata
hermes plugins enable brightdata --no-allow-tool-override
For browser automation, install hermes-brightdata[browser] instead.
Option C — from source
git clone https://github.com/dandacompany/hermes-brightdata-plugin ~/src/hermes-brightdata-plugin
cd ~/src/hermes-brightdata-plugin
pip install -e ".[browser]"
Verify
hermes plugins list # brightdata appears, not enabled (opt-in by default)
hermes plugins enable brightdata
Answer no to any tool-override prompt. Restart the gateway (hermes gateway restart) or /reset a session if the tools do not appear immediately.
Set up Bright Data in Hermes
Install the plugin directly through Hermes, then enable it:
hermes plugins install dandacompany/hermes-brightdata-plugin --enable
The plugin adds standalone Bright Data tools on every supported Hermes release.
Hermes versions with the Web Search Provider API also register brightdata as a
native web_search backend; it never replaces Hermes' built-in tools.
Configure through the setup wizard
This is the easiest way to persist the token in Hermes' environment file and select Bright Data from the provider picker.
hermes setup tools
In the interactive UI, choose:
- Reconfigure an existing tool's provider or API key
- Web Search & Scraping
- Bright Data [paid]
- Paste the Bright Data API token when prompted.
The wizard configures Bright Data as the shared web backend. Bright Data's
provider implementation is search-only, so use the per-capability
web.search_backend override in the next section when another provider should
handle native extraction.
Configure manually
For a one-off terminal session, export the token and select the native search backend explicitly:
export BRIGHTDATA_API_TOKEN="your-api-token-here"
hermes config set web.search_backend brightdata
hermes config check
To persist the token, run hermes config env-path, open the reported file, and
add BRIGHTDATA_API_TOKEN=... there. Keep tokens out of shell history, source
control, prompts, and README examples. The plugin also accepts
BRIGHTDATA_API_KEY, or one unambiguous secret-manager label such as
BRIGHTDATA_TEAM_TOKEN.
web.search_backend is the recommended setting for this plugin. It takes
precedence over the shared web.backend value for native search, while leaving
the extraction backend under your existing configuration. Check the resulting
configuration at any time with hermes config show.
Use it in a Hermes session
Start a fresh session after enabling the plugin or changing its backend:
hermes
Ask Hermes to use the native search capability, for example:
Use native
web_searchto find the official OpenAI API documentation. Return the first three results with titles and URLs.
For script-friendly verification, run:
hermes -z "Use native web_search exactly once to search for OpenAI API documentation. Return the first result title and URL."
In an already-running interactive session, run /reset after the configuration
change. For gateway-based sessions, run hermes gateway restart. The standalone
tools remain available for Bright Data-specific work; ask Hermes to use one by
name when needed:
scrape→{"url": "https://example.com"}search_engine→{"query": "bright data", "engine": "google"}web_data→{"platform": "amazon_product", "url": "https://www.amazon.com/dp/..."}proxy_scrape→{"url": "https://...", "country": "us"}
Every tool returns a JSON string; failures come back as {"error": ..., "hint": ...} rather than raising.
Tools
| Tool | What it does | Notes |
|---|---|---|
search_engine |
Web search via Bright Data SERP API, returning parsed results | Bypasses bot detection; more reliable than a built-in web search |
scrape |
Fetch a single URL as clean markdown or html | Web Unlocker — handles JS, CAPTCHAs, bot detection |
scrape_batch |
Scrape multiple URLs in one call (max 20) | Per-URL content or error; individual failures are isolated |
web_data |
Structured JSON from a supported platform | Web Scraper API — clean fields, not raw HTML; may take up to a minute |
proxy_scrape |
Fetch a URL through a residential proxy, optionally by country | Requires BRIGHTDATA_PROXY_AUTH |
session_stats |
Report Bright Data tool call counts for this session | — |
brightdata_browser_navigate |
Open a URL in a Scraping Browser (persistent CDP session) | Requires the [browser] extra and BRIGHTDATA_BROWSER_AUTH |
brightdata_browser_snapshot |
ARIA snapshot (accessibility tree) of the current page | For reading page structure and content |
brightdata_browser_act |
click, type, scroll, or wait on the current page |
Target click/type with a CSS or text selector (#submit, text=Login) |
brightdata_browser_get |
Read the current page: html, text, or base64 screenshot |
— |
The Scraping Browser session is created lazily on the first brightdata_browser_navigate and closed automatically on session end. The brightdata_ prefix prevents collisions with Hermes' built-in browser tools.
Supported web_data platforms
Pass one as the platform argument (all take a URL); an unknown value returns an error listing the available ones.
| Group | Platforms |
|---|---|
| Amazon | amazon_product, amazon_product_reviews, amazon_product_search, amazon_seller_info |
linkedin_person, linkedin_company, linkedin_job_listings, linkedin_posts |
|
instagram_profile, instagram_posts, instagram_reels, instagram_comments |
|
| TikTok | tiktok_profiles, tiktok_posts, tiktok_comments |
facebook_posts, facebook_profiles |
|
| YouTube | youtube_videos, youtube_profiles, youtube_comments |
| X (Twitter) | x_posts, x_profile_posts |
| Business | crunchbase_company |
Configuration
Credentials are read from environment variables.
Required
| Variable | Notes |
|---|---|
BRIGHTDATA_API_TOKEN |
Bright Data API token (Account Settings → API keys). BRIGHTDATA_API_KEY, or one unambiguous secret-manager label such as BRIGHTDATA_TEAM_TOKEN, is accepted as an alias. |
Optional
| Variable | Purpose | Default |
|---|---|---|
BRIGHTDATA_WEB_UNLOCKER_ZONE |
Web Unlocker zone (alias: WEB_UNLOCKER_ZONE) |
web_unlocker1 |
BRIGHTDATA_SERP_ZONE |
SERP API zone | serp_api1 |
BRIGHTDATA_BROWSER_AUTH |
Scraping Browser auth brd-customer-<id>-zone-<zone>:<password> |
— |
BRIGHTDATA_PROXY_AUTH |
Residential proxy auth brd-customer-<id>-zone-<residential-zone>:<password> |
— |
BRIGHTDATA_PROXY_CA |
Path to the Bright Data proxy CA cert (HTTPS via proxy, port 33335) | — |
BRIGHTDATA_PROXY_HOST |
Proxy host:port |
brd.superproxy.io:33335 |
Development
git clone https://github.com/dandacompany/hermes-brightdata-plugin
cd hermes-brightdata-plugin
pip install -e ".[dev]"
pytest
CI runs the suite across Python 3.10–3.13 on every push. The plugin is organized as thin handlers (tools.py) over focused domain modules (api.py, browser.py, datasets.py, config.py, counter.py). Every handler follows the same contract: it always returns a JSON string, accepts **kwargs, and never propagates exceptions.
Security
The plugin talks to Bright Data over HTTPS and, in browser/proxy modes, drives a remote browser and a residential proxy. Handling of that surface:
- Credentials never leak into output. API errors carry only status codes and hints; response bodies and the token are never serialized. On a browser connection failure the raw exception (which can embed the CDP URL, including the proxy password) is replaced with a scrubbed message.
- Proxy
countryis validated. Thecountryargument is LLM-supplied and is inserted into the proxy URL's userinfo section, so it is strictly validated as a 2-letter ISO code and the userinfo is URL-encoded — a value likeus:pw@evilcannot break out and redirect credentials. - HTTPS through the proxy is verified against the Bright Data CA. OpenSSL 3's strict Authority-Key-Identifier check (which the Bright Data proxy CA cert lacks) is relaxed, but the certificate chain is still validated against the provided CA — not disabled.
License
MIT © Dante Labs
Dante Labs · YouTube @dante-labs · Email dante@dante-labs.com · Discord Dante Labs Community · Support Buy Me a Coffee
Metadata
Release files for hermes-brightdata 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hermes_brightdata-0.3.1.tar.gz | 30.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hermes_brightdata-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 51.8 kB
Release files / hermes_brightdata-0.3.1.tar.gz
| Download URL | hermes_brightdata-0.3.1.tar.gz |
|---|---|
| Size | 30.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3486a92db4f2bdf157ff6c6b8de5f27d4403f1e432c483255432dffc3611738b
|
|
BLAKE2b-256 checksum How to use checksums |
42e54d1ade52b0831b91d58b7ab075defafa4e69dbec4e56be117e2f11fb7549
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 13, 2026.
Transparency logRelease files / hermes_brightdata-0.3.1-py3-none-any.whl
| Download URL | hermes_brightdata-0.3.1-py3-none-any.whl |
|---|---|
| Size | 21.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0263f1eb74f8d6ec8e3e8ba3d7994f3e1d64c84afa95a3ec325e1585ca2eac45
|
|
BLAKE2b-256 checksum How to use checksums |
092b68901d6d5ba546eb5d1b75082499622f2138d7899d906b2318078279aa44
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 13, 2026.
Transparency log