webscout-mcp
Provides web search capabilities using DuckDuckGo's HTML interface as a fallback backend, returning structured results with titles, URLs, snippets, and backend metadata.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@webscout-mcpsearch for the latest news on artificial intelligence"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
webscout-mcp
Web search and fetch tools for AI agents, as an MCP server. Search, fetch, crawl, and extract structured data from the web - no API keys, no per-request billing, everything stays on your machine.
Install
pip install webscout-mcpRequires Python 3.10+.
Related MCP server: Crawl4AI RAG MCP Server
Quick start
Add to your MCP client config (Claude Code, Cursor, Codex, etc.):
{
"mcpServers": {
"webscout": {
"command": "webscout-mcp",
"args": []
}
}
}That's it. Your agent gets six tools:
web_search- search via Bing with automatic DuckDuckGo HTML fallback, no key neededweb_fetch- fetch a page and extract the main article (markdown/text/html)web_crawl- concurrent BFS crawl with depth/page limits, respects robots.txtweb_extract- pull structured data with CSS selectors, attributes, regexcache_stats- inspect the local cachecache_clear- wipe the cache
CLI usage
In addition to running as an MCP server, you can use webscout-mcp directly from the command line:
# Search the web (outputs JSON)
webscout-mcp search "python async libraries" --max-results 5
# Fetch a page (raw content)
webscout-mcp fetch https://example.com --extract --format markdown --raw
# Crawl a site
webscout-mcp crawl https://example.com --depth 2 --pages 10
# Start MCP server (default if no command given)
webscout-mcp serve --transport stdioUsage examples
Search
web_search(query="best python async libraries", max_results=5)Returns structured results with title, URL, snippet, and which backend served the request (bing or duckduckgo). If Bing fails or changes its markup, the engine automatically falls back to DuckDuckGo's HTML version - no configuration needed.
Fetch a page
web_fetch(url="https://example.com", extract=true, output_format="markdown")extract=true runs trafilatura (with readability-lxml fallback) to strip nav, ads, and sidebars - you get clean article content, not raw HTML.
Extract structured data
web_extract(
url="https://example.com/products",
rules='[
{"name": "titles", "selector": ".product h2", "multiple": true},
{"name": "prices", "selector": ".price", "regex": "\\$([\\d.]+)", "multiple": true},
{"name": "links", "selector": "a.product", "attribute": "href", "multiple": true}
]'
)Each rule supports selector, attribute, multiple, regex, and default.
Crawl a site
web_crawl(seed_url="https://example.com", max_depth=2, max_pages=10, concurrency=5)Pages at each depth level are fetched concurrently (controlled by concurrency, default 5). The crawler respects robots.txt by default - disallowed URLs are skipped and counted in skipped_robots. Same-domain restriction is on by default.
Use as a Python library
import asyncio
from webscout_mcp import Config, Fetcher, SearchEngine
async def main():
config = Config.from_env()
config.ensure_dirs()
fetcher = Fetcher(config)
result = await fetcher.fetch("https://example.com", extract=True)
print(result.title)
print(result.content[:500])
await fetcher.close()
search = SearchEngine(config)
results = await search.search("python async", max_results=5)
for r in results:
print(f"{r.position}. {r.title} - {r.url} ({r.backend})")
await search.close()
asyncio.run(main())How it works
Search tries Bing first, then DuckDuckGo HTML - both via direct HTTP scraping, no API key. Results are cached by query.
Fetching uses httpx with exponential-backoff retries (all httpx errors + HTTP 5xx), per-domain token-bucket rate limiting, and a 5 MB content cap.
Content extraction uses trafilatura primary, readability-lxml automatic fallback - the same libraries behind many read-it-later services.
Caching is SQLite with TTL and a size cap; old entries are evicted automatically. Repeat fetches and searches cost nothing.
Crawling is concurrent BFS with configurable depth, page count, concurrency, same-domain restriction, and robots.txt compliance. Uses raw HTML from the initial fetch to avoid double-fetching each page.
Proxy support route all HTTP/HTTPS requests through a proxy via config or env vars.
Logging is structured and configurable via
WEBSCOUT_LOG_LEVEL(DEBUG/INFO/WARNING/ERROR) andWEBSCOUT_LOG_JSON=1for JSON output.
Everything runs locally. No data leaves your machine.
Configuration
All settings have sensible defaults. Override via environment variables (WEBSCOUT_ prefix), a TOML config file, or CLI flags.
Config file
Create ~/.config/webscout/config.toml (or $XDG_CONFIG_HOME/webscout/config.toml):
[cache]
ttl = 7200
max_size_mb = 512
[fetch]
timeout = 15.0
max_retries = 3
[proxy]
http = "http://proxy:8080"
https = "http://proxy:8080"
[search]
max_results = 10
backends = ["bing", "duckduckgo"]
[crawler]
max_depth = 2
max_pages = 20
concurrency = 5
respect_robots = true
[logging]
level = "WARNING"
json = falseEnvironment variables override config file values.
Environment variables
Variable | Default | What it does |
|
| Where the SQLite cache lives |
|
| Cache entry lifetime in seconds |
|
| Max cache size before eviction |
|
| HTTP timeout in seconds |
|
| Retry attempts per request |
|
| Max requests per second per domain |
|
| Default search result count |
|
| Comma-separated backend order |
|
| Default crawl depth |
|
| Default max pages per crawl |
|
| Concurrent fetches per depth level |
|
| Whether crawler respects robots.txt |
|
| Default extraction output format |
| (empty) | HTTP proxy URL |
| (empty) | HTTPS proxy URL |
|
| Log verbosity |
|
| Set to |
CLI flags override env vars:
webscout-mcp --cache-ttl 3600 --cache-dir /tmp/webscout serveTransports
# stdio (default - works with Claude Code, Cursor, etc.)
webscout-mcp
# SSE (for remote or browser-based clients)
webscout-mcp serve --transport sse --host 0.0.0.0 --port 8000Changelog
0.3.0
TOML config file support: configure via
~/.config/webscout/config.tomlin addition to env varsHTTP/HTTPS proxy support: route all requests through a proxy
Dual content extraction: trafilatura primary, readability-lxml automatic fallback
Search result deduplication: duplicate URLs removed, positions renumbered
Region-aware search:
regionparameter now actually passed to Bing and DuckDuckGoCrawler performance: eliminated double-fetch per page - ~2x faster crawls
Better retry logic: retries on all httpx errors and HTTP 5xx
Fixed content-type detection: proper HTML/XML detection
0.2.0
Multi-backend search: Bing + DuckDuckGo HTML with automatic failover
Concurrent crawler with configurable parallelism
robots.txt compliance (configurable, on by default)
CLI subcommands:
search,fetch,crawl,serveStructured logging with console and JSON formatters
Custom exception hierarchy for better error handling
New config:
WEBSCOUT_SEARCH_BACKENDS,WEBSCOUT_CRAWLER_CONCURRENCY,WEBSCOUT_RESPECT_ROBOTS
0.1.0
Initial release: web_search, web_fetch, web_crawl, web_extract, cache_stats, cache_clear
SQLite cache with TTL and size-based eviction
Per-domain token-bucket rate limiting
Exponential backoff retries
trafilatura content extraction
Development
git clone https://github.com/wxs-lang/webscout-mcp.git
cd webscout-mcp
pip install -e ".[dev]"
pytestLicense
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables LLMs and AI agents to access real-time web data, search websites, and navigate the web without getting blocked. Includes 5,000 free monthly requests and supports web scraping, browser automation, and bypassing geo-restrictions.606,1031MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI agents and assistants with advanced web crawling and RAG capabilities, enabling them to scrape websites and perform semantic search over crawled content.1MIT
- AlicenseAqualityFmaintenanceEnables AI agents to crawl, scrape, search, and automate browsers with anti-bot bypass, providing fast web access via 22 tools.22433MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI agents with reliable web fetching capabilities, handling retries, caching, and anti-bot bypass automatically.MIT
Related MCP Connectors
Reliable web access for AI agents: smart HTTP, rotating proxies, and full-browser rendering.
Web search for AI agents — one tool across 6 engines, routed to the cheapest + cached.
Live web search for AI agents. $0.001/call, x402 on Base, no API key.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/wxs-lang/webscout-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server