fast-web-search-mcp
Provides web and news search capabilities using DuckDuckGo as the primary search engine, with Bing fallback for resilience.
Supports reference lookup via Wikipedia, integrated into web search results for enhanced context.
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., "@fast-web-search-mcpsearch for the latest developments in AI"
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.
Why fast-web-search-mcp?
Most MCP search servers require paid API keys, Docker containers, or headless browsers. fast-web-search-mcp provides free, fast, local web search with zero external dependencies beyond Node.js.
Capability | fast-web-search-mcp | Paid APIs | Headless Browser |
Free to use | ✅ | ❌ | ✅ |
No API key | ✅ | ❌ | ✅ |
No Docker | ✅ | ✅ | ❌ |
Sub-second response | ✅ | ✅ | ❌ |
SSRF protection | ✅ | N/A | ❌ |
Result caching | ✅ | ❌ | ❌ |
Multiple providers | ✅ | ❌ | ❌ |
Works on Windows | ✅ | ✅ | ⚠️ |
Related MCP server: mcp-ddg-research
Features
Web Search — DuckDuckGo primary with Bing fallback and Wikipedia reference lookup
News Search — Date-sensitive news results with publication metadata
Page Fetching — Readability extraction with Markdown or plain text output
Combined Research — Search, rank, and fetch top results in one call
Intelligent Caching — In-memory LRU cache with configurable TTL
Request Coalescing — Deduplicates concurrent identical searches
Rate Limiting — Per-provider throttling with exponential backoff
Result Deduplication — URL canonicalization and title similarity matching
SSRF Protection — Blocks private IPs, localhost, cloud metadata endpoints
Provider Fallback — Automatic failover when a provider is unavailable
Zero Runtime Dependencies — No Python, no Docker, no browser engine
Quick Start
Install
# Global install (recommended)
npm install -g fast-web-search-mcp
# Or run directly without installing
npx -y fast-web-search-mcpRequirements
Dependency | Version |
Node.js | ≥ 22.0 |
npm | ≥ 10.0 |
Verify Installation
# Confirm the binary is available
fast-web-search-mcp --version
# Or run directly
npx fast-web-search-mcp --versionIntegration
Add fast-web-search-mcp to your AI coding assistant. Select your platform below:
Project scope — add to .claude/settings.json in your project root:
{
"mcpServers": {
"fast-web-search": {
"command": "fast-web-search-mcp",
"env": {
"FWSMCP_LOG_LEVEL": "warn",
"FWSMCP_REDACT_QUERIES": "true"
}
}
}
}User scope — add to ~/.claude/settings.json for global availability:
{
"mcpServers": {
"fast-web-search": {
"command": "fast-web-search-mcp",
"env": {
"FWSMCP_DEFAULT_REGION": "us-en",
"FWSMCP_DEFAULT_LANGUAGE": "en",
"FWSMCP_REDACT_QUERIES": "true"
}
}
}
}Or use the CLI:
claude mcp add fast-web-search -- fast-web-search-mcpWindows users: Wrap the command with
cmd /c:claude mcp add fast-web-search -- cmd /c fast-web-search-mcp
Add to your configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"fast-web-search": {
"command": "fast-web-search-mcp",
"env": {
"FWSMCP_LOG_LEVEL": "warn",
"FWSMCP_DEFAULT_REGION": "us-en",
"FWSMCP_DEFAULT_LANGUAGE": "en"
}
}
}
}Restart Claude Desktop after saving.
Add to ~/.codex/config.toml (global) or .codex/config.toml (project):
[mcp_servers.fast-web-search]
command = "fast-web-search-mcp"
env = { FWSMCP_LOG_LEVEL = "warn", FWSMCP_REDACT_QUERIES = "true" }Or use the CLI:
codex mcp add fast-web-search -- fast-web-search-mcpAdd to ~/.config/opencode/opencode.json:
{
"mcp": {
"fast-web-search": {
"type": "local",
"command": ["fast-web-search-mcp"],
"enabled": true,
"environment": {
"FWSMCP_DEFAULT_REGION": "us-en",
"FWSMCP_DEFAULT_LANGUAGE": "en",
"FWSMCP_REDACT_QUERIES": "true",
"FWSMCP_SAFE_SEARCH": "moderate"
}
}
}
}Antigravity IDE:
Click ... in the agent side panel → MCP Servers → Manage MCP Servers → View raw config
Add the server to the opened
mcp_config.jsonfile
Antigravity CLI:
Type /mcp in the prompt panel to open the interactive MCP Manager.
Configuration file:
Global:
~/.gemini/config/mcp_config.jsonProject:
.agents/mcp_config.json
{
"mcpServers": {
"fast-web-search": {
"command": "fast-web-search-mcp",
"args": [],
"env": {
"FWSMCP_LOG_LEVEL": "warn",
"FWSMCP_REDACT_QUERIES": "true"
}
}
}
}Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"fast-web-search": {
"command": "fast-web-search-mcp",
"env": {
"FWSMCP_LOG_LEVEL": "warn"
}
}
}
}Add to .vscode/mcp.json in your workspace:
{
"servers": {
"fast-web-search": {
"command": "fast-web-search-mcp",
"env": {
"FWSMCP_LOG_LEVEL": "warn"
}
}
}
}MCP Tools
Tool | Description | Use Case |
| Search the general web via DuckDuckGo + Bing fallback | General research, fact-finding |
| Search for recent news articles with publication dates | Current events, monitoring |
| Fetch a URL and extract clean Markdown or plain text | Article reading, documentation |
| Combined search + fetch workflow with character budget | Deep research, analysis |
| Return non-sensitive server diagnostics | Troubleshooting (disabled by default) |
Tool Parameters
Parameter | Type | Default | Description |
| string | required | Search query (1-500 characters) |
| integer | 10 | Maximum results to return (1-25) |
| string |
| Provider strategy: |
| string |
| Region code for localized results |
| string |
| Language code |
| string |
| Time filter: |
| string |
| Content filter: |
| array | — | Restrict results to these domains |
| array | — | Exclude results from these domains |
| boolean |
| Remove duplicate results by URL |
| integer | — | Operation timeout (1000-60000 ms) |
Parameter | Type | Default | Description |
| string | required | News search query (1-500 characters) |
| integer | 10 | Maximum results (1-25) |
| string |
| Time filter: |
| string |
| Region code |
| string |
| Language code |
| array | — | Restrict to these domains |
| array | — | Exclude these domains |
Parameter | Type | Default | Description |
| string | required | HTTP/HTTPS URL to fetch |
| string |
| Output format: |
| integer | 20000 | Maximum characters (100-100000) |
| boolean |
| Include page metadata |
| boolean |
| Include extracted links |
| integer | — | Fetch timeout (1000-60000 ms) |
Parameter | Type | Default | Description |
| string | required | Search query (1-500 characters) |
| integer | 8 | Number of results to consider (1-20) |
| integer | 3 | Number of pages to fetch (1-5) |
| integer | 20000 | Character limit per page |
| integer | 100000 | Total character budget |
| integer | — | Total timeout (5000-120000 ms) |
Configuration
All configuration is environment-based. No config files required.
Variable | Default | Description |
|
| Log verbosity: |
|
| Log format: |
|
| Redact search queries in logs |
|
| Default region for searches |
|
| Default language for searches |
|
| Safe search level: |
|
| Comma-separated provider list |
|
| Strategy: |
|
| Search operation timeout (ms) |
|
| Per-provider timeout (ms) |
|
| Page fetch timeout (ms) |
|
| search_and_fetch total timeout (ms) |
|
| Maximum results per search |
|
| Maximum characters per fetch |
|
| Enable in-memory result cache |
|
| Maximum cache entries |
|
| Search cache TTL (15 min) |
|
| News cache TTL (5 min) |
|
| Page cache TTL (30 min) |
| — | Optional SearXNG instance URL |
|
| Enable diagnostics tool |
| — | Comma-separated domains to always exclude |
| — | Path to optional JSON config file |
Optional JSON Configuration
For complex setups, point FWSMCP_CONFIG_FILE to a JSON file:
{
"defaults": {
"region": "us-en",
"language": "en",
"safeSearch": "moderate"
},
"providers": {
"order": ["duckduckgo", "bing", "wikipedia"],
"strategy": "fallback"
},
"cache": {
"enabled": true,
"maxEntries": 250,
"searchTtlMs": 900000
},
"limits": {
"maxSearchResults": 25,
"maxFetchCharacters": 100000
},
"privacy": {
"redactQueriesInLogs": true
}
}Priority: Environment variables > JSON config file > defaults.
Architecture
┌─────────────────────────────────────────────────────────┐
│ MCP Client │
│ (Claude Code / Codex / OpenCode) │
└─────────────────────┬───────────────────────────────────┘
│ stdio (JSON-RPC)
▼
┌─────────────────────────────────────────────────────────┐
│ fast-web-search-mcp │
│ │
│ ┌─────────┐ ┌──────────┐ ┌───────────┐ ┌────────┐ │
│ │ Tools │ │ Cache │ │ Coalescer │ │ Limiter│ │
│ │ 5 tools │ │ LRU+TTL │ │ Dedup │ │ Per- │ │
│ │ │ │ │ │ inflight │ │ provider│ │
│ └────┬─────┘ └──────────┘ └───────────┘ └────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Orchestrator Pipeline │ │
│ │ Validate → Cache → Coalesce → Select → Execute │ │
│ │ → Normalize → Filter → Dedup → Rank → Return │ │
│ └─────────────────────┬───────────────────────────┘ │
│ │ │
│ ┌────────────────┼────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────┐ ┌──────────┐ ┌────────────┐ │
│ │ DuckDuck │ │ Bing │ │ Wikipedia │ │
│ │ Go │ │ │ │ REST API │ │
│ │ (HTML) │ │ (HTML) │ │ │ │
│ └─────────┘ └──────────┘ └────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ HTTP Client (Node fetch) │ │
│ │ Timeout · Body Limit · Redirect · SSRF Block │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘Security
Protections
Threat | Mitigation |
SSRF / private network access | Blocks localhost, RFC1918, link-local, cloud metadata IPs |
Credential leakage | Rejects URLs with embedded username/password |
Query exposure | Logs redact queries by default ( |
Prompt injection via fetched content | Includes untrusted content warning in all fetch results |
Uncontrolled resource consumption | Body size limits, timeout enforcement, character budgets |
Process isolation | stdio transport only — no network listener, no HTTP endpoint |
Disabled by Default
Diagnostics tool — must be explicitly enabled via
FWSMCP_DIAGNOSTICS_ENABLED=trueSearXNG integration — requires explicit
FWSMCP_SEARXNG_URLconfiguration
See docs/SECURITY.md for the full threat model.
Development
git clone https://github.com/your-org/fast-web-search-mcp.git
cd fast-web-search-mcp
npm ci
npm run build
npm testAvailable Scripts
Script | Description |
| Production build with tsup |
| Development mode with tsx |
| Run full test suite (177 tests) |
| Unit tests only |
| Security tests only |
| TypeScript type checking |
| ESLint |
| Prettier formatting |
Project Structure
fast-web-search-mcp/
├── src/
│ ├── cache/ # LRU cache, cache key generation
│ ├── config/ # Defaults, env parsing, config loader
│ ├── fetch/ # URL validation, content extraction, Markdown
│ ├── http/ # HTTP client, errors, headers
│ ├── observability/ # Structured stderr logger
│ ├── providers/ # DuckDuckGo, Bing, Wikipedia, SearXNG
│ ├── schemas/ # Zod validation schemas
│ ├── search/ # Orchestrator, coalescer, rate limiter, dedup
│ ├── server/ # MCP server factory, tool registration
│ ├── tools/ # 5 MCP tool implementations
│ ├── utils/ # Domain, text, date, async utilities
│ └── index.ts # Entry point
├── test/
│ ├── fixtures/ # HTML fixtures for parser tests
│ └── unit/ # Unit tests (177 tests)
├── docs/ # Documentation and ADRs
└── examples/ # Config examplesDocumentation
Document | Description |
All environment variables and options | |
Provider details, strategy, and SearXNG setup | |
Threat model and protections | |
Common issues and debugging | |
OpenCode-specific setup guide | |
Version history |
Roadmap
SQLite persistent cache
Brave Search provider
Image search support
Streamable HTTP transport
Result scoring customization
Contributing
Fork the repository
Create a feature branch (
git checkout -b feature/amazing)Commit changes (
git commit -m 'feat: add amazing feature')Push to branch (
git push origin feature/amazing)Open a Pull Request
License
MIT License. See LICENSE for details.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- 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/iPraBhu/fast-web-search-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server