Web Eyes
Web Eyes
Search, crawl, and summarize the web — exposed as both a REST API and an MCP server for LLM agents.
Powered by SearXNG, Crawl4AI, and NVIDIA NIM.
What it does
Web Eyes provides a pipeline of web intelligence tools:
Search — query SearXNG for web results
Crawl — extract clean text from URLs using a headless browser
Summarize — distill content via an LLM (NVIDIA NIM)
Ask — full pipeline: search → crawl → synthesize an answer with citations
See — take screenshots and use a vision LLM to extract content from JS-heavy, canvas-rendered, or image-heavy pages
Look — analyze any image directly via vision AI (no URL crawling needed)
These are exposed via a FastAPI REST API and an MCP (Model Context Protocol) server, so any MCP-compatible agent (Claude Desktop, Claude Code, Cursor, etc.) can use them directly.
Quick Start
1. Start SearXNG
docker compose up -d2. Configure environment
cp .env.example .env
# Edit .env and set NIM_API_KEY (get one at https://build.nvidia.com/)3. Install dependencies
pip install -r requirements.txt4. Run
REST API + MCP together (port 3000):
python main.pyREST API:
http://localhost:3000MCP endpoint:
http://localhost:3000/mcpInteractive docs:
http://localhost:3000/docs
Standalone MCP server:
python run_mcp.py # stdio (default)
python run_mcp.py http # streamable-http on port 3001
python run_mcp.py sse # SSE on port 3001REST API
Method | Path | Description |
|
| Search → crawl → summarize |
|
| Crawl specific URLs |
|
| Crawl + summarize specific URLs |
|
| Search → crawl → answer with citations |
|
| Screenshot + vision extraction + summarize |
|
| Analyze a base64-encoded image with vision AI |
Example:
curl -X POST http://localhost:3000/search \
-H "Content-Type: application/json" \
-d '{"query": "latest Rust release", "limit": 5}'MCP Tools
Tool | Parameters | Description |
|
| Search, crawl, and summarize |
|
| Extract raw text from URLs |
|
| Crawl and summarize URLs |
|
| Answer a question with web sources |
|
| Screenshot + vision extraction + summarize |
|
| Analyze an image directly with vision AI |
Agent Configuration
Claude Desktop / Claude Code (mcp.json):
{
"mcpServers": {
"web-eyes": {
"command": "python",
"args": ["C:\\Users\\you\\web_eyes\\run_mcp.py", "stdio"]
}
}
}Remote agents (HTTP transport):
http://localhost:3001/mcpConfiguration
All settings are in .env. See .env.example for defaults.
Variable | Default | Description |
| — | NVIDIA NIM API key (required for summarize/ask) |
|
| NIM API endpoint |
|
| LLM model for summarization |
|
| Vision model for screenshot extraction |
|
| Auto-fallback to vision when text extraction fails |
|
| Minimum words before triggering vision fallback |
|
| Max screenshot dimension before resize |
|
| SearXNG host |
|
| SearXNG port |
|
| REST API bind address |
|
| REST API port |
|
| Standalone MCP bind address |
|
| Standalone MCP port |
Project Structure
web_eyes/
├── main.py FastAPI app (REST + mounted MCP)
├── mcp_server.py MCP server with 6 tools
├── run_mcp.py Standalone MCP entry point
├── controller.py Core pipeline logic
├── search.py SearXNG search client
├── crawler.py Crawl4AI web crawler
├── summarizer.py NIM LLM summarization + vision extraction
├── vision.py Image resize and message utilities
├── config.py Environment config
├── logger.py Rich logging
├── docker-compose.yml
├── requirements.txt
└── searxng/
└── settings.yml SearXNG configurationLicense
MIT