Skip to main content
Glama
luxiaolei

SearXNG-Crawl4AI MCP Server

by luxiaolei
README.md
# SearXNG + Crawl4AI MCP Server

A self-hosted MCP (Model Context Protocol) server providing fast search and reliable web scraping using SearXNG + Crawl4AI stack.

## šŸš€ **Why This Solution?**

This project evolved from limitations found in self-hosted Firecrawl:
- āŒ Firecrawl's search API doesn't work in self-hosted mode
- āŒ Missing Fire-engine features in self-hosted version  
- āŒ Authentication issues and poor documentation

**Our solution provides:**
- āœ… **Truly self-hosted search** via SearXNG (aggregates 70+ search engines)
- āœ… **Superior scraping** via Crawl4AI (50k+ GitHub stars)
- āœ… **3x faster** than Claude Code native search tools
- āœ… **100% reliable** vs failing native WebFetch
- āœ… **Complete privacy** - no external API dependencies

## šŸ—ļø **Architecture**

```
ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”    ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”    ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│             │    │              │    │             │
│  SearXNG    │    │  Crawl4AI    │    │   Redis     │
│  (Search)   │    │  (Scraping)  │    │  (Cache)    │
│             │    │              │    │             │
│  Port 8081  │    │  Port 8001   │    │ Port 6380   │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜    ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜    ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
        │                   │                   │
        ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
                           │
                  ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
                  │              │
                  │ MCP Server   │
                  │ (TypeScript) │
                  │              │
                  ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
                           │
                    ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
                    │             │
                    │ Claude Code │
                    │             │
                    ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
```

## šŸ“¦ **Features**

- šŸ” **Fast Search**: SearXNG aggregates 70+ search engines (Google, Bing, DuckDuckGo, etc.)
- šŸ•·ļø **Advanced Scraping**: Crawl4AI with Playwright for JavaScript-heavy sites
- ⚔ **High Performance**: Sub-second search, reliable scraping
- 🐳 **Docker Ready**: Complete Docker Compose orchestration
- šŸ”„ **Proxy Support**: Built-in rotating IP proxy integration
- šŸ“Š **MCP Integration**: 3 powerful tools for Claude Code
- šŸ›”ļø **Privacy First**: All processing happens locally

## šŸš€ **Quick Start**

### 1. Clone and Setup
```bash
git clone https://github.com/yourusername/searxng-crawl4ai-mcp
cd searxng-crawl4ai-mcp
npm install
npm run build
```

### 2. Start Docker Services
```bash
# Start all services (SearXNG, Crawl4AI, Redis)
docker compose up -d

# Verify services are running
curl http://localhost:8081/search?q=test&format=json  # SearXNG
curl http://localhost:8001/health                      # Crawl4AI
```

### 3. Configure Claude Code MCP

**Simple Configuration (No Proxy):**
```json
{
  "mcpServers": {
    "searxng-crawl4ai": {
      "command": "node",
      "args": ["fixed-mcp-server.js"],
      "cwd": "/absolute/path/to/your/project"
    }
  }
}
```

**With Proxy Configuration:**
```json
{
  "mcpServers": {
    "searxng-crawl4ai": {
      "command": "node",
      "args": ["fixed-mcp-server.js"],
      "cwd": "/absolute/path/to/your/project",
      "env": {
        "PROXY_URL": "http://username:password@your-proxy-server.com:10000"
      }
    }
  }
}
```

### 4. Increase Token Limits (Recommended)

Create `.claude/settings.json`:
```json
{
  "environmentVariables": {
    "MAX_MCP_OUTPUT_TOKENS": "100000"
  }
}
```

## šŸ› ļø **Available MCP Tools**

### 1. `search_web` - Lightning Fast Search
```json
{
  "query": "latest AI developments 2025",
  "maxResults": 10
}
```
**Returns:** 30+ search results in <1 second from multiple engines

### 2. `crawl4ai_scrape` - Advanced Web Scraping
```json
{
  "url": "https://finance.yahoo.com/quote/BTC-USD/",
  "formats": ["markdown"]
}
```
**Returns:** Full page content with metadata (title, word count, clean markdown)

### 3. `search_and_scrape` - Combined Power Workflow
```json
{
  "query": "Bitcoin technical analysis September 2025",
  "maxResults": 2
}
```
**Returns:** Search results + scraped content from top URLs (complete market intelligence)

## šŸ“Š **Performance Benchmarks**

| Metric | SearXNG MCP | Claude Code Native |
|--------|-------------|-------------------|
| **Search Speed** | 935ms avg | 2,500-3,000ms |
| **Result Count** | 30+ results | 10 curated |
| **Scraping Success** | 100% success | 0% (WebFetch fails) |
| **Content Extracted** | 29,807 words tested | 0 words |
| **Privacy** | āœ… Self-hosted | āŒ External APIs |

## šŸŽÆ **Trading & Finance Use Cases**

Perfect for traders and financial analysts:

- **Real-time Price Data**: Extract current Bitcoin, stock, forex prices with exact timestamps
- **Technical Analysis**: Get complete RSI, MACD, support/resistance data from TradingView
- **Market Sentiment**: Scrape Fear & Greed Index, VIX, sentiment indicators  
- **News Analysis**: Get latest Fed decisions, earnings, economic data
- **API Discovery**: Extract trading APIs from financial websites

Example trading query:
```
Use search_and_scrape to find "Bitcoin RSI technical analysis September 2025"
```

**Result**: Complete professional trading analysis with specific price levels, technical indicators, and market predictions.

## šŸ”§ **Configuration**

### Environment Variables

| Variable | Description | Default |
|----------|-------------|---------|
| `PROXY_URL` | Your rotating IP proxy URL | None |
| `SEARXNG_URL` | SearXNG service URL | http://localhost:8081 |
| `CRAWL4AI_URL` | Crawl4AI service URL | http://localhost:8001 |
| `MCP_MODE` | Disable console logging for MCP | false |

### Docker Services

- **SearXNG**: Port 8081 - Metasearch engine
- **Crawl4AI**: Port 8001 - Web scraping service  
- **Redis**: Port 6380 - Caching layer

## šŸ›”ļø **Security & Privacy**

- āœ… **No external API calls** - everything runs locally
- āœ… **Proxy support** - hide your IP address
- āœ… **Credential masking** - sensitive data automatically masked in logs
- āœ… **Self-hosted** - complete control over your data

## šŸ†š **vs Alternatives**

| Feature | This Solution | Firecrawl Self-Hosted | Claude Native |
|---------|---------------|----------------------|---------------|
| **Search API** | āœ… Working | āŒ Broken | āœ… Working |
| **Speed** | ⚔ Sub-second | N/A | 🐌 2-3 seconds |
| **Scraping** | āœ… 100% reliable | āŒ Limited | āŒ Unreliable |
| **Privacy** | āœ… Self-hosted | āœ… Self-hosted | āŒ External APIs |
| **Cost** | āœ… Free | āœ… Free | āŒ Rate limited |

## šŸš€ **Advanced Usage**

### Proxy Configuration
```bash
# Set in .env file
PROXY_URL=http://username:password@proxy-server.com:10000
```

### Multiple Search Engines
SearXNG automatically queries:
- Google, Bing, DuckDuckGo
- Startpage, Qwant, Yandex  
- Wikipedia, GitHub, StackOverflow
- Academic sources (ArXiv, Google Scholar)

### Custom Scraping Options
```json
{
  "url": "https://example.com",
  "formats": ["markdown", "html", "links"],
  "wait_for": 2000,
  "timeout": 30000
}
```

## šŸ› **Troubleshooting**

### Services Not Starting
```bash
docker compose logs searxng
docker compose logs crawl4ai
```

### Port Conflicts
Edit `docker-compose.yml` to change ports:
- SearXNG: 8081 → your-port
- Crawl4AI: 8001 → your-port
- Redis: 6380 → your-port

### MCP Connection Issues
1. Ensure all Docker services are running
2. Check absolute path in MCP configuration
3. Verify `npm run build` completed successfully

## šŸ“„ **License**

MIT License - Feel free to use in your projects!

## šŸ¤ **Contributing**

Contributions welcome! Please read our contributing guidelines and submit pull requests.

## ⭐ **Star This Repo**

If this MCP server helps your workflow, please star the repository!

---

**Built with ā¤ļø for the Claude Code community**