# mcpsurfr

Local web search MCP server without API keys. Queries multiple search backends and ranks relevant passages directly on your device.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 135
- Author: nkapila6
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/nkapila6/mcpsurfr
- Updated: 2026-10-23
- HTML: https://affpapa.org/en/nevibecode/mcp/mcpsurfr

## What it does

This server enables agents to browse the live web without external API subscriptions. It sends queries through the `ddgs` package, gathering hits from backends like DuckDuckGo, Brave, Startpage, or Wikipedia. If Google responds with blocks, the engine falls back to its `auto` multi-engine routine automatically.

Ranking happens on your own CPU using a compact MobileBERT model running on pure numpy. The server strips boilerplate such as navigation headers, cookie notices, and footers while preserving source code blocks and tables. Instead of feeding entire web pages into your context window, the primary `search` tool extracts only relevant paragraphs.

Running the packaged container requires Docker installed on your host. When you need larger document payloads, adjust the environment variable `MCPSURFR_MAX_CHARS` in your server configuration.

## Requirements
- Needs: Docker

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add mcpsurfr -- docker run -i --rm ghcr.io/nkapila6/mcpsurfr:v1.1.1
```

### Codex

**Platform CLI**
```bash
codex mcp add mcpsurfr -- docker run -i --rm ghcr.io/nkapila6/mcpsurfr:v1.1.1
```

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "mcpsurfr": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "ghcr.io/nkapila6/mcpsurfr:v1.1.1"
            ]
        }
    }
}
```

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "mcpsurfr": {
            "type": "stdio",
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "ghcr.io/nkapila6/mcpsurfr:v1.1.1"
            ]
        }
    }
}
```

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add mcpsurfr docker run -i --rm ghcr.io/nkapila6/mcpsurfr:v1.1.1
```

## When to use it
- search the public web without third-party search API credentials
- extract relevant text passages instead of loading full web pages
- aggregate multi-query research across several search engines at once
- clean web content while preserving table formatting and code blocks

## Example prompts
- Use mcpsurfr to search for recent syntax updates in Python
- Run deep_research on the latest developments in local embedding models
- Search Brave for troubleshooting steps regarding Docker networking errors

## Similar
- [Scrapling MCP Server](https://affpapa.org/en/nevibecode/mcp/scrapling-mcp-server.md) — MCP server · ★ 89433
- [browser-use](https://affpapa.org/en/nevibecode/mcp/browser-use.md) — MCP server · ★ 119160
- [AIHawk](https://affpapa.org/en/nevibecode/mcp/aihawk.md) — MCP server · ★ 32221
- [Skyvern](https://affpapa.org/en/nevibecode/mcp/skyvern.md) — MCP server · ★ 23263
- [SeleniumBase MCP](https://affpapa.org/en/nevibecode/mcp/seleniumbase-mcp.md) — MCP server · ★ 13169
- [apify-mcp-server](https://affpapa.org/en/nevibecode/mcp/apify-mcp-server.md) — MCP server · ★ 12927

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
