Skip to content

dirmacs/daedra

daedra

Daedra

Self-contained web search MCP server. Rust. 7 backends. Works from any IP.
Single binary. Automatic backend fallback. Zero configuration for basic search.

Crates.io CI License: MIT

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.

Why Daedra?

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

Pure Rust. If one backend is blocked or rate-limited, the next one takes over automatically.

Install

cargo install daedra

Search backends

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.

Usage

MCP Server (for Claude, Cursor, pawan, etc.)

{
  "mcpServers": {
    "daedra": {
      "command": "daedra",
      "args": ["serve", "--transport", "stdio", "--quiet"]
    }
  }
}

CLI

# 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 info

As a Rust library

use 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(())
}

MCP Tools

web_search

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)

visit_page

Fetch and extract web page content as Markdown.

{
  "url": "https://example.com",
  "selector": "article.main",
  "include_images": false
}

Architecture

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)

Configuration

# 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

Ecosystem

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.

License

MIT

About

Self-contained web search MCP server. 7 backends with automatic fallback. Pure Rust. Works from any IP.

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors