MCP server for browser automation with anti-detection. Scout pages, find elements, interact with websites, and monitor network traffic.
Project description
scout-mcp-server
MCP server for browser automation with anti-detection. Scout pages, find elements, interact with websites, and monitor network traffic — from any AI client that supports the Model Context Protocol.
Built on botasaurus-driver for automatic fingerprint evasion and stealth browsing. Sites that block Playwright and Selenium see a normal browser session.
How It Works
Scout reads the page structure, then acts — the same way you'd inspect a page in DevTools before clicking anything:
- Scout — compact structural overview (~200 tokens, not a raw DOM dump)
- Find — search for elements by text, type, or selector
- Act — click, type, select, navigate
- Scout again — see what changed
Most browser-automation tools for AI take full-page screenshots and have the model interpret pixels. A single Playwright MCP screenshot costs ~124,000 tokens and the model still has to guess at selectors from what it sees. Scout reads the DOM directly and returns a compact report (~200 tokens) with exact CSS selectors — 98% less than a screenshot.
See It In Action
Real-world scenarios demonstrating Claude Code + Scout working together on live websites — checking docs, researching errors, filling forms, downloading files, and more.
Credential Safety
fill_secret reads credentials from .env server-side and types them directly into form fields. The AI client only sees "chars_typed": 22 — never the actual value. Exported scripts use ${ENV_VAR} references. Authorization and Cookie headers are scrubbed from network logs before they reach the conversation.
2FA Support
get_2fa_code polls Twilio's SMS API for OTP codes — the AI clicks "Send Code" in the browser, the tool watches for the SMS, extracts the code, and types it in. Requires a Twilio account with an SMS number set as the 2FA recipient.
Anti-Detection
Scout uses Botasaurus under the hood, which handles browser fingerprinting and detection evasion automatically. Sites that block Selenium and Playwright see a normal browser session.
Chrome Extension Mode
By default, Scout launches its own browser. Extension mode connects to your existing Chrome instead — preserving your logged-in sessions, cookies, and browser state.
launch_session(connection_mode="extension")
Quick setup:
- Open
chrome://extensions, enable Developer mode, click "Load unpacked", select theextension/directory from the Scout repo - Click the Scout MCP Bridge toolbar icon and toggle it Active
- Call
launch_session(connection_mode="extension")from your AI client
| Scenario | Recommended Mode |
|---|---|
| Sites where you're already logged in | extension |
| Anti-detection scraping or CI/CD | launch (default) |
| Sites requiring 2FA/SSO you've already passed | extension |
| Parallel sessions or headless automation | launch (default) |
Extension mode sets no automation flags — your browser fingerprint stays identical to normal browsing. All 17 Scout tools work the same in both modes.
Full setup guide and troubleshooting: docs/chrome-extension.md
Comparison
| Scout | Playwright MCP | Chrome Extension MCP | Selenium / scripts | |
|---|---|---|---|---|
| Works on sites you don't control | Yes | Limited — your own app | Limited — your active session | Blocked by detection |
| Page discovery | Compact scout (~200 tokens) | Full screenshot (~124,000 tokens) | You provide selectors | You provide selectors |
| Credential safety | Never in conversation | Plaintext in context | Plaintext in context | In your script |
| Anti-detection | Built-in | None | None | None |
| 2FA | Built-in | No | No | You build it |
| Export to script | One command | No | No | You write it |
| Cross-platform scheduling | One command | No | No | You configure it |
Benchmarks
| Task | Scout tokens | Playwright MCP tokens | Reduction | Wall-clock | Success |
|---|---|---|---|---|---|
| Fact lookup (Wikipedia) | ~1,264 | ~124,000 | 98% fewer | 11.0s | 3/3 |
| Form fill + verify (httpbin) | ~3,799 | ~124,000 | 97% fewer | 25.2s | 3/3 |
Claude Sonnet 4.6, 3 runs each, wall-clock = browser time only (excludes model reasoning). Playwright MCP baseline is a single full-page screenshot. Full results: v0.2
Install
Prerequisites: Python 3.11+, Google Chrome
Via PyPI (recommended)
pip install scout-mcp-server
Or run without installing:
uvx scout-mcp-server
Via npm
npx -y @stemado/scout-mcp
Configure Your AI Client
You configure Scout once. After that, your AI client starts and stops the server automatically — you never run it manually.
Claude Code
claude mcp add scout -- npx -y @stemado/scout-mcp
Restart Claude Code. Scout's 17 tools are now available in every session.
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"scout": {
"command": "npx",
"args": ["-y", "@stemado/scout-mcp"],
"cwd": "C:\\Users\\YourUsername"
}
}
}
Important: The
cwdfield sets the working directory for the Scout server. Without it, Claude Desktop may launch Scout from a system directory (e.g.C:\Windows\System32on Windows), causing downloads and file operations to fail with permission errors. Set it to your home directory or any folder where Scout should have write access.
Cursor
In Cursor Settings > MCP Servers, add:
{
"mcpServers": {
"scout": {
"command": "npx",
"args": ["-y", "@stemado/scout-mcp"]
}
}
}
Windsurf / Continue / Other MCP Clients
Use the same JSON configuration above — it works with any MCP-compatible client.
Environment Variables
Scout loads variables from a .env file using this search order:
- Explicit
env_filepath passed tofill_secret SCOUT_ENV_FILEenvironment variable.envin the current working directory
| Variable | Description |
|---|---|
SCOUT_ALLOW_LOCALHOST |
Set to 1, true, or yes to allow navigating to localhost URLs (disabled by default) |
TWILIO_ACCOUNT_SID |
Twilio account SID for 2FA code retrieval |
TWILIO_AUTH_TOKEN |
Twilio auth token |
TWILIO_PHONE_NUMBER |
Twilio phone number receiving 2FA SMS codes |
SCOUT_EXTENSION_ID |
Override the default Chrome extension ID for Native Messaging auth (only needed for custom extension builds) |
SCOUT_CHROME_NM_PATH |
Override NM host manifest directory for non-Chrome browsers (Brave, Chromium, Edge) |
Security
- Credential isolation —
fill_secretreads from.envserver-side; passwords never enter the conversation - Header redaction — Authorization, Cookie, and API key headers scrubbed from network logs
- Export scrubbing — credentials parameterized as environment variable references
- URL scheme allowlist — only
httpandhttpsschemes permitted; all others rejected - SSRF protection — IP addresses normalized via
ipaddressmodule to catch IPv6-mapped IPv4 bypasses; blocks cloud metadata endpoints (AWS, GCP, Alibaba), loopback, and link-local addresses - Safe XML parsing — uses
defusedxmlto prevent XXE attacks when processing SpreadsheetML files - JS execution timeout — 2-minute cap on
execute_javascriptwith graceful error response - Scheduler name validation — regex pattern prevents path traversal in task scheduler namespaces
- Path traversal protection — validates all file paths
- Invisible character stripping — removes zero-width Unicode that could hide prompt injection
- Content boundary markers — wraps web-sourced data to distinguish data from instructions
Localhost navigation is blocked by default. Set SCOUT_ALLOW_LOCALHOST=1 to enable it for local development.
Tools
| Tool | Description |
|---|---|
launch_session |
Open a browser (headed or headless, optional proxy) or connect to an existing Chrome via extension mode |
check_extension |
Check Chrome extension connection status |
scout_page_tool |
Structural page overview: iframes, shadow DOM, element counts |
find_elements |
Search for elements by text, type, or CSS selector |
execute_action_tool |
Click, type, select, navigate, scroll, hover, wait |
fill_secret |
Type credentials from .env without exposing them in conversation |
get_2fa_code |
Retrieve a 2FA OTP code from Twilio SMS |
execute_javascript |
Run arbitrary JS in the page context |
take_screenshot_tool |
Capture the page as PNG or JPEG |
inspect_element_tool |
Deep-inspect visibility, overlays, shadow DOM, ARIA |
process_download |
Convert and move downloaded files |
get_session_history |
Export the full session as a structured workflow log |
monitor_network |
Watch HTTP traffic to discover API endpoints under the UI |
record_video |
Record the browser session as MP4 |
close_session |
Close the browser and release resources |
schedule_create |
Create an OS-level scheduled task |
schedule_list |
List scheduled tasks |
schedule_delete |
Remove a scheduled task |
Workflow Export
Walk through a workflow conversationally, then export it as a standalone Python script:
workflows/<name>/
├── <name>.py # Standalone replay script
├── <name>.json # Portable workflow definition
├── requirements.txt
└── .env.example # Credential template
Schedule exported workflows with the schedule_create tool — works on Windows (Task Scheduler), macOS (launchd), and Linux (cron).
Development
# Clone and install
git clone https://github.com/stemado/scout-mcp.git
cd scout
uv sync
# Run tests (no browser needed)
uv run pytest tests/ -m "not integration" -v
# Run integration tests (needs Chrome)
uv run pytest tests/ -v
# Run the MCP server locally
uv run scout-mcp-server
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file scout_mcp_server-1.6.0.tar.gz.
File metadata
- Download URL: scout_mcp_server-1.6.0.tar.gz
- Upload date:
- Size: 13.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa790aeb2e67700d658b9597575971403a3ee44ecae104712adb9578bb8e5866
|
|
| MD5 |
e141b733e2ada1b235816b3888cfcc37
|
|
| BLAKE2b-256 |
d15521886339eea304b026ff6f64e9d7de99ef8d8c51d1eebdf2ab12de178410
|
Provenance
The following attestation bundles were made for scout_mcp_server-1.6.0.tar.gz:
Publisher:
release.yml on stemado/scout-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scout_mcp_server-1.6.0.tar.gz -
Subject digest:
aa790aeb2e67700d658b9597575971403a3ee44ecae104712adb9578bb8e5866 - Sigstore transparency entry: 1128611969
- Sigstore integration time:
-
Permalink:
stemado/scout-mcp@f2d3f7b27c5fc1600ab787203a723bc529f282c9 -
Branch / Tag:
refs/tags/v1.6.0 - Owner: https://github.com/stemado
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f2d3f7b27c5fc1600ab787203a723bc529f282c9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file scout_mcp_server-1.6.0-py3-none-any.whl.
File metadata
- Download URL: scout_mcp_server-1.6.0-py3-none-any.whl
- Upload date:
- Size: 100.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
effbc9f8db1e05bf673cce581eb42e85e74e8b041fbd48659d04bed63c28dc6a
|
|
| MD5 |
35787438389c907d5140f7ae46376f9d
|
|
| BLAKE2b-256 |
1c09f2f6a8de4984261868da8805641853998e1a13aa1273e42b6b1c41ec66f7
|
Provenance
The following attestation bundles were made for scout_mcp_server-1.6.0-py3-none-any.whl:
Publisher:
release.yml on stemado/scout-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scout_mcp_server-1.6.0-py3-none-any.whl -
Subject digest:
effbc9f8db1e05bf673cce581eb42e85e74e8b041fbd48659d04bed63c28dc6a - Sigstore transparency entry: 1128612097
- Sigstore integration time:
-
Permalink:
stemado/scout-mcp@f2d3f7b27c5fc1600ab787203a723bc529f282c9 -
Branch / Tag:
refs/tags/v1.6.0 - Owner: https://github.com/stemado
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f2d3f7b27c5fc1600ab787203a723bc529f282c9 -
Trigger Event:
push
-
Statement type: