Fast Web Search
БесплатноНе проверенA production-ready MCP server for free web search, news search, and webpage content extraction using DuckDuckGo and Bing.
Описание
A production-ready MCP server for free web search, news search, and webpage content extraction using DuckDuckGo and Bing.
README
fast-web-search-mcp
A production-ready Model Context Protocol server for free web search, news search, and webpage content extraction.
Features · Quick Start · Integration · Configuration · Security · Docs
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 | ✅ | ✅ | ⚠️ |
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-mcp
Requirements
| 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 --version
Integration
Add fast-web-search-mcp to your AI coding assistant. Select your platform below:
Claude Code (Anthropic CLI)
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-mcp
Windows users: Wrap the command with
cmd /c:claude mcp add fast-web-search -- cmd /c fast-web-search-mcp
Claude Desktop (Anthropic GUI)
Add to your configuration file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%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.
OpenAI Codex CLI
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-mcp
OpenCode
Add 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 (Google IDE / CLI)
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.json - Project:
.agents/mcp_config.json
{
"mcpServers": {
"fast-web-search": {
"command": "fast-web-search-mcp",
"args": [],
"env": {
"FWSMCP_LOG_LEVEL": "warn",
"FWSMCP_REDACT_QUERIES": "true"
}
}
}
}
Cursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"fast-web-search": {
"command": "fast-web-search-mcp",
"env": {
"FWSMCP_LOG_LEVEL": "warn"
}
}
}
}
VS Code / GitHub Copilot
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 |
|---|---|---|
web_search |
Search the general web via DuckDuckGo + Bing fallback | General research, fact-finding |
news_search |
Search for recent news articles with publication dates | Current events, monitoring |
fetch_url |
Fetch a URL and extract clean Markdown or plain text | Article reading, documentation |
search_and_fetch |
Combined search + fetch workflow with character budget | Deep research, analysis |
diagnostics |
Return non-sensitive server diagnostics | Troubleshooting (disabled by default) |
Tool Parameters
web_search
| Parameter | Type | Default | Description |
|---|---|---|---|
query |
string | required | Search query (1-500 characters) |
max_results |
integer | 10 | Maximum results to return (1-25) |
strategy |
string | "fallback" |
Provider strategy: fallback or merge |
region |
string | "us-en" |
Region code for localized results |
language |
string | "en" |
Language code |
time_range |
string | "any" |
Time filter: day, week, month, year, any |
safe_search |
string | "moderate" |
Content filter: off, moderate, strict |
include_domains |
array | — | Restrict results to these domains |
exclude_domains |
array | — | Exclude results from these domains |
deduplicate |
boolean | true |
Remove duplicate results by URL |
timeout_ms |
integer | — | Operation timeout (1000-60000 ms) |
news_search
| Parameter | Type | Default | Description |
|---|---|---|---|
query |
string | required | News search query (1-500 characters) |
max_results |
integer | 10 | Maximum results (1-25) |
time_range |
string | "week" |
Time filter: day, week, month |
region |
string | "us-en" |
Region code |
language |
string | "en" |
Language code |
include_domains |
array | — | Restrict to these domains |
exclude_domains |
array | — | Exclude these domains |
fetch_url
| Parameter | Type | Default | Description |
|---|---|---|---|
url |
string | required | HTTP/HTTPS URL to fetch |
output |
string | "markdown" |
Output format: markdown or text |
max_characters |
integer | 20000 | Maximum characters (100-100000) |
include_metadata |
boolean | true |
Include page metadata |
include_links |
boolean | false |
Include extracted links |
timeout_ms |
integer | — | Fetch timeout (1000-60000 ms) |
search_and_fetch
| Parameter | Type | Default | Description |
|---|---|---|---|
query |
string | required | Search query (1-500 characters) |
search_results |
integer | 8 | Number of results to consider (1-20) |
fetch_results |
integer | 3 | Number of pages to fetch (1-5) |
max_characters_per_page |
integer | 20000 | Character limit per page |
total_character_budget |
integer | 100000 | Total character budget |
timeout_ms |
integer | — | Total timeout (5000-120000 ms) |
Configuration
All configuration is environment-based. No config files required.
| Variable | Default | Description |
|---|---|---|
FWSMCP_LOG_LEVEL |
warn |
Log verbosity: debug, info, warn, error |
FWSMCP_LOG_FORMAT |
text |
Log format: text or json |
FWSMCP_REDACT_QUERIES |
true |
Redact search queries in logs |
FWSMCP_DEFAULT_REGION |
us-en |
Default region for searches |
FWSMCP_DEFAULT_LANGUAGE |
en |
Default language for searches |
FWSMCP_SAFE_SEARCH |
moderate |
Safe search level: off, moderate, strict |
FWSMCP_PROVIDERS |
duckduckgo,bing,wikipedia |
Comma-separated provider list |
FWSMCP_PROVIDER_STRATEGY |
fallback |
Strategy: fallback (sequential) or merge (parallel) |
FWSMCP_SEARCH_TIMEOUT_MS |
20000 |
Search operation timeout (ms) |
FWSMCP_PROVIDER_TIMEOUT_MS |
10000 |
Per-provider timeout (ms) |
FWSMCP_FETCH_TIMEOUT_MS |
15000 |
Page fetch timeout (ms) |
FWSMCP_RESEARCH_TIMEOUT_MS |
45000 |
search_and_fetch total timeout (ms) |
FWSMCP_MAX_SEARCH_RESULTS |
25 |
Maximum results per search |
FWSMCP_MAX_FETCH_CHARACTERS |
100000 |
Maximum characters per fetch |
FWSMCP_CACHE_ENABLED |
true |
Enable in-memory result cache |
FWSMCP_CACHE_MAX_ENTRIES |
250 |
Maximum cache entries |
FWSMCP_SEARCH_CACHE_TTL_MS |
900000 |
Search cache TTL (15 min) |
FWSMCP_NEWS_CACHE_TTL_MS |
300000 |
News cache TTL (5 min) |
FWSMCP_PAGE_CACHE_TTL_MS |
1800000 |
Page cache TTL (30 min) |
FWSMCP_SEARXNG_URL |
— | Optional SearXNG instance URL |
FWSMCP_DIAGNOSTICS_ENABLED |
false |
Enable diagnostics tool |
FWSMCP_GLOBAL_EXCLUDE_DOMAINS |
— | Comma-separated domains to always exclude |
FWSMCP_CONFIG_FILE |
— | 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 (FWSMCP_REDACT_QUERIES=true) |
| 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=true - SearXNG 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 test
Available Scripts
| Script | Description |
|---|---|
npm run build |
Production build with tsup |
npm run dev |
Development mode with tsx |
npm test |
Run full test suite (183 tests) |
npm run test:unit |
Unit tests only |
npm run test:security |
Security tests only |
npm run typecheck |
TypeScript type checking |
npm run lint |
ESLint |
npm run format |
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 (183 tests)
├── docs/ # Documentation and ADRs
└── examples/ # Config examples
Documentation
| Document | Description |
|---|---|
| Configuration Reference | All environment variables and options |
| Provider Guide | Provider details, strategy, and SearXNG setup |
| Security Model | Threat model and protections |
| Troubleshooting | Common issues and debugging |
| OpenCode Integration | OpenCode-specific setup guide |
| Changelog | 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.
Установка Fast Web Search
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/iPraBhu/fast-web-search-mcpFAQ
Fast Web Search MCP бесплатный?
Да, Fast Web Search MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Fast Web Search?
Нет, Fast Web Search работает без API-ключей и переменных окружения.
Fast Web Search — hosted или self-hosted?
Доступен hosted-вариант: Unyly запускает сервер в облаке, локальная установка не обязательна.
Как установить Fast Web Search в Claude Desktop, Claude Code или Cursor?
Открой Fast Web Search на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
GitHub
PRs, issues, code search, CI status
автор: GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
автор: mcpdotdirectCompare Fast Web Search with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development
