A side-by-side look at the Brightdata MCP and Eeg MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Brightdata MCP for developer tools work as a local process; choose Eeg MCP for developer tools as a local process. You can also run both side by side in one mcpServers block.
API_TOKEN.search_engine, scrape_as_markdown, search_engine_batch.list_boards, start_stream, stop_stream.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Developer Tools | Developer Tools |
| Quality signal | 71/100 · Great | 56/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | API_TOKEN | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 2,677 | 2 |
| Directory activity | 2 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 11 | 47 |
| Full listing | View Brightdata MCP | View Eeg MCP |
search_engineScrape search results from Google, Bing or Yandex. Returns SERP results in JSON or Markdown (URL, title, description),Ideal forgathering current information, news, and detailed search results.scrape_as_markdownScrape a single webpage URL with advanced options for content extraction and get back the results in MarkDown language. This tool can unlock any webpage even if it uses bot detection or CAPTCHA.search_engine_batchRun multiple search queries simultaneously. Returns JSON for Google, Markdown for Bing/Yandex.scrape_batchScrape multiple webpages URLs with advanced options for content extraction and get back the results in MarkDown language. This tool can unlock any webpage even if it uses bot detection or CAPTCHA.discoverSearch the web and rank results by AI-driven relevance. Returns scored results with title, description, and URL. Supports intent-based ranking, geo-targeting, date filtering, and keyword filtering.search_scrapersFind a Bright Data pre-built scraper (Web Scraper API, 1,200+ sites) for a site or data type, e.g. "amazon reviews" or "linkedin.com". Returns dataset_id, name, domain and collection_methods. Next: call get_scraper_details with a dataset_id and one method.get_scraper_detailsShow the scraper description, input fields, example input and main output fields for one method. Call before run_scraper and build the input from sample_input or input_fields. Records may contain more fields than output_fields lists.run_scraperRun a scraper method. input is a list of objects shaped like sample_input from get_scraper_details, one per URL or query. collect_by_url returns one record per input; discover_by_* methods return up to limit_per_input records per input, and every record is billed. Waits up to 45 seconds; if still running it returns snapshot_id with status "running": then poll get_scraper_progress and call get_scraper_results when ready. Records with an "error" field explain failed inputs.get_scraper_progressStatus of a run: starting, running, ready, failed or canceled.get_scraper_resultsRecords of a finished run. Returns status "running" if not ready yet.refresh_scrapersReload the scraper list now instead of waiting for the daily refresh.list_boardsList every board BrainFlow can acquire from, with ids and sampling rates.
Start here when you do not know what hardware is available. Two entries need
no hardware at all: ``SYNTHETIC_BOARD`` generates a signal for development,
and ``PLAYBACK_FILE_BOARD`` replays a BrainFlow CSV.start_streamOpen a board and begin buffering EEG in the background.
Data flows into a ring buffer from a background thread as soon as this
returns, so a subsequent read_window will have samples waiting. The session
keeps running until stop_stream is called.stop_streamStop a stream and release the board, serial ports, and LSL outlets.
Always call this when finished. A board left prepared can block the next
process from acquiring the device.list_sessionsList all active stream and replay sessions with a one-line summary each.stream_statusHealth and timing report for a session.
The fields that matter for closed-loop work:
``throughput_ratio`` below 1.0 means the producer is not keeping up and
samples are being dropped; ``filters.group_delay_sec`` is how far behind
real time a filtered feature is; ``last_error`` explains a stopped producer.read_windowRead the most recent samples from the buffer.
Returns filtered signal when a filter chain is set (see set_filters),
otherwise raw. Long windows are decimated to ``max_samples`` per channel so
the response stays readable -- for numeric work prefer get_band_power or
get_psd, which compute on the full-resolution data.get_channelsList the channels a session is producing, with their buffer index.inspect_recordingOpen a recording and describe it without starting playback.
Use this before start_replay to see how long the file is, what channels it
has, and which annotations will be re-emitted as events during replay.start_replayReplay a recording against a wall clock, re-emitting its events.
This is the safe way to build a real-time pipeline: the session behaves
exactly like a live stream -- same buffering, same chunked delivery, same
tools -- so code developed here runs unchanged against hardware. The
recording's annotations arrive in the event log at their original timings.replay_controlPause, resume, seek, or change the speed of a replay session.list_recording_eventsList all events present in a replay session's source file.
Distinct from get_events: this is the *complete* event list from the file,
including events that have not been reached yet. get_events returns only
what has actually been emitted so far.set_filtersInstall a stateful online filter chain on a running stream.
The chain filters continuously in the background as samples arrive, carrying
filter state across chunk boundaries. This matters: filtering each query
window independently would inject a transient at every boundary and corrupt
any phase-sensitive measure. Filtered output goes to a second buffer, so raw
signal remains available via read_window(filtered=False).
These are causal filters -- there is no zero-phase option, because that needs
future samples. Check ``group_delay_sec`` in the response to know how far
behind real time your filtered features are.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"brightdata-mcp": {
"command": "npx",
"args": [
"-y",
"@brightdata/mcp"
],
"env": {
"API_TOKEN": "YOUR_API_TOKEN_HERE"
}
}
}
}
{
"mcpServers": {
"eeg-mcp": {
"command": "uvx",
"args": [
"eeg-mcp"
]
}
}
}