Self-contained web search MCP server. Rust. 7 backends. Works from any IP.
No API keys required. No Docker. No Python.
Daedra is a self-contained web search MCP server written in Rust. Multiple search backends with automatic fallback. Works from any IP — datacenter, VPS, residential. No API keys required for basic search.
Every major search engine (Google, Bing, DuckDuckGo, Brave) blocks datacenter/VPS IPs with CAPTCHAs since 2025. Daedra solves this with a multi-backend fallback chain that automatically finds a backend that works:
Serper (API) → Tavily (API) → Bing → Wikipedia → StackOverflow → GitHub → DuckDuckGo
No Docker. No Python. No SearXNG. Pure Rust. Daedra IS the search infrastructure.
cargo install daedra| Backend | Type | API Key | Works from VPS? |
|---|---|---|---|
| Serper.dev | Google JSON API | SERPER_API_KEY |
Yes |
| Tavily | AI-optimized API | TAVILY_API_KEY |
Yes |
| Bing | HTML scraping | None | Sometimes (CAPTCHA risk) |
| Wikipedia | OpenSearch API | None | Always |
| StackExchange | Public API | None | Always |
| GitHub | Public API | None / GITHUB_TOKEN |
Always |
| DuckDuckGo | HTML scraping | None | Rarely (blocked since mid-2025) |
Backends are tried in order. First one that returns results wins.
{
"mcpServers": {
"daedra": {
"command": "daedra",
"args": ["serve", "--transport", "stdio", "--quiet"]
}
}
}# Search
daedra search "rust async runtime" --num-results 5
# Fetch a webpage as Markdown
daedra fetch https://rust-lang.org
# Check backend health
daedra check
# Server info
daedra infouse daedra::tools::SearchProvider;
use daedra::types::SearchArgs;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let provider = SearchProvider::auto();
let args = SearchArgs {
query: "rust programming".to_string(),
options: None,
};
let results = provider.search(&args).await?;
for r in &results.data {
println!("{} — {}", r.title, r.url);
}
Ok(())
}Search the web with automatic backend fallback.
{
"query": "search terms",
"options": {
"region": "wt-wt",
"safe_search": "MODERATE",
"num_results": 10,
"time_range": "w"
}
}Aliases: search_duckduckgo (backward compat)
Fetch and extract web page content as Markdown.
{
"url": "https://example.com",
"selector": "article.main",
"include_images": false
}Daedra
├── SearchProvider (fallback chain)
│ ├── SerperBackend (Google via API)
│ ├── TavilyBackend (AI-optimized API)
│ ├── BingBackend (HTML scraping)
│ ├── WikipediaBackend (OpenSearch API)
│ ├── StackExchangeBackend (Public API)
│ ├── GitHubBackend (Public API)
│ └── SearchClient (DuckDuckGo HTML)
├── FetchClient (HTML → Markdown)
├── SearchCache (moka async cache)
├── MCP Server
│ ├── STDIO transport (JSON-RPC)
│ └── SSE transport (Axum HTTP)
└── CLI (clap)
# Optional API keys (improves result quality)
export SERPER_API_KEY=... # Google results via Serper
export TAVILY_API_KEY=... # AI-optimized search
export GITHUB_TOKEN=... # Higher GitHub API rate limit
# Logging
export RUST_LOG=daedra=info| Project | What |
|---|---|
| pawan | CLI coding agent that uses daedra for web search via MCP |
| ares | Agentic retrieval-enhanced server |
| eruka | Context intelligence engine |
Built by DIRMACS.
MIT