Skip to main content
Glama
Prog-up

Web Scraper MCP

by Prog-up

Web Scraper MCP

Ein selbst gehosteter Model Context Protocol-Server, der einem LLM-Client (Claude Code, Cursor, ChatGPT) dieselbe Tool-Oberfläche bietet wie kostenpflichtige Scraping-Dienste — scrape, crawl, map, search, extract, interact, deep_research — und vollständig auf Ihrer eigenen Hardware läuft.

Keine kostenpflichtigen Proxy-/CAPTCHA-Dienste: Der Anti-Bot-Schutz ist selbst gehostet (headless Chromium + playwright-stealth, robots.txt, höfliches Rate Limiting). Härtende Websites können uns dennoch blockieren; siehe Einschränkungen.

Werkzeuge

Tool

Was es tut

scrape

Eine URL → sauberes Markdown (Boilerplate entfernt). Statisch zuerst, automatischer Browser-Fallback für JS-Seiten.

crawl / check_crawl_status

Hintergrund-BFS-Crawl-Job (Deduplizierung, Tiefen-/Seitenlimits); Ergebnisse abfragen.

map

Listet die Links auf einer Seite auf (optional gleiche Domain) — entscheiden Sie, was gecrawlt werden soll.

search

Websuche. Austauschbares Backend: DuckDuckGo (Standard), SearXNG, Brave oder Tavily.

extract

Ruft eine Seite ab und extrahiert strukturiertes JSON passend zu Ihrem Schema, über ein LLM.

browser_navigate / browser_act / browser_close

Steuern einer persistenten Browser-Sitzung (Klicken/Ausfüllen/Drücken) mithilfe tokenarmer ARIA-Snapshots.

deep_research

Suche → Top-Quellen lesen → einen zitierten Synthesebericht zurückgeben.

extract und deep_research erfordern ANTHROPIC_API_KEY.

Related MCP server: Universal Web Data Extraction Platform

Schnellstart

uv sync                      # install deps (uses the pinned uv.lock)
uv run playwright install chromium
export SCRAPER_AUTH_TOKEN=$(openssl rand -hex 32)
uv run web-scraper-mcp       # HTTP server on http://127.0.0.1:8000/mcp

Stdio (lokal, für einen Desktop-Client): SCRAPER_TRANSPORT=stdio uv run web-scraper-mcp.

Docker

Der schnellste Weg, um loszulegen, ist das Ziehen des vorgefertigten Images von DockerHub.

# Pull the latest image
docker pull PROG_UP_USERNAME/web-scraper-mcp:latest

# Run the container (with Anthropic / Claude)
docker run -p 8000:8000 \
  -e SCRAPER_AUTH_TOKEN=your_secure_token_here \
  -e ANTHROPIC_API_KEY=sk-ant-api03-... \
  PROG_UP_USERNAME/web-scraper-mcp:latest

# Or run the container over stdio (useful for local MCP clients)
docker run -i --rm \
  -e SCRAPER_TRANSPORT=stdio \
  -e SCRAPER_AUTH_TOKEN=your_secure_token_here \
  PROG_UP_USERNAME/web-scraper-mcp:latest

(Stellen Sie sicher, dass Sie PROG_UP_USERNAME durch Ihren tatsächlichen DockerHub-Benutzernamen ersetzen).

Verwendung lokaler Modelle (Ollama) und Kontextfenster

Wenn Sie Modelle lieber lokal ausführen möchten, anstatt die Anthropic-API zu verwenden, unterstützt der Server Ollama vollständig als alternatives Backend für die extract- und deep_research-Werkzeuge.

docker run -p 8000:8000 \
  -e SCRAPER_AUTH_TOKEN=your_secure_token_here \
  -e SCRAPER_OLLAMA_HOST=http://host.docker.internal:11434 \
  -e SCRAPER_EXTRACT_MODEL=qwen3.5:2b \
  -e SCRAPER_RESEARCH_MODEL=qwen3.5:2b \
  PROG_UP_USERNAME/web-scraper-mcp:latest

[!WARNUNG] Kontextfenster sind entscheidend! Web-Scraping erzeugt eine enorme Menge an Markdown. extract kann bis zu 100.000 Zeichen und deep_research bis zu 16.000 Zeichen an das LLM senden.

Standardmäßig verarbeitet Claude große Kontexte nativ. Allerdings ist das Standard-Kontextfenster von Ollama (num_ctx) oft auf nur 2.048 Token eingestellt. Wenn Sie eine riesige Wikipedia-Seite an ein lokales Modell übergeben, wird der Prompt stillschweigend abgeschnitten (Ihre Anweisungen werden verworfen) und leere Zeichenfolgen zurückgegeben!

Wir übergeben automatisch "num_ctx": 32768 an Ollama in den API-Payloads, um dieses Abschneiden zu verhindern. Stellen Sie sicher, dass Ihr lokaler Rechner genügend RAM/VRAM hat, um ein 32K-Kontextfenster zu unterstützen, wenn Sie Ollama verwenden!

In einem Client registrieren (mcp.json)

Wenn über HTTP ausgeführt:

{
  "mcpServers": {
    "web-scraper": {
      "url": "http://127.0.0.1:8000/mcp",
      "headers": { "Authorization": "Bearer your_secure_token_here" }
    }
  }
}

Wenn über stdio (Docker) ausgeführt:

{
  "mcpServers": {
    "web-scraper": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "SCRAPER_TRANSPORT=stdio",
        "-e", "SCRAPER_OLLAMA_HOST=http://host.docker.internal:11434",
        "-e", "SCRAPER_EXTRACT_MODEL=qwen3.5:2b",
        "-e", "SCRAPER_RESEARCH_MODEL=qwen3.5:2b",
        "PROG_UP_USERNAME/web-scraper-mcp:latest"
      ]
    }
  }
}

Konfiguration

Alle Einstellungen sind Umgebungsvariablen (Präfix SCRAPER_) oder eine .env-Datei — siehe .env.example.

Var

Standard

Hinweise

SCRAPER_AUTH_TOKEN

(nicht gesetzt)

Bearer-Token für den HTTP-Endpunkt. Erforderlich für jede Netzwerkbereitstellung; nicht gesetzt = nicht authentifiziert (gewarnt).

SCRAPER_HOST / SCRAPER_PORT

127.0.0.1 / 8000

Bind-Adresse. Docker-Image setzt Host 0.0.0.0.

SCRAPER_MAX_CONCURRENT_PAGES

8

Gleichzeitigkeitslimit für Headless-Seiten (RAM/CPU-gebunden).

SCRAPER_MAX_CRAWL_PAGES / _DEPTH

100 / 3

Harte Obergrenzen für Crawl-Jobs.

SCRAPER_PER_DOMAIN_DELAY_S

1.0

Höfliches Ratenlimit pro Domain.

SCRAPER_RESPECT_ROBOTS

true

robots.txt respektieren.

SCRAPER_ALLOW_PRIVATE_NETWORKS

false

Auf false lassen — deaktiviert den SSRF-Schutz, wenn true.

ANTHROPIC_API_KEY

(nicht gesetzt)

Aktiviert extract / deep_research.

SCRAPER_SEARXNG_URL, BRAVE_API_KEY, TAVILY_API_KEY

(nicht gesetzt)

Optionale Such-Backends (erste gesetzte gewinnt, sonst DuckDuckGo).

Sicherheit

  • SSRF-Schutz — jede abgerufene URL (und jeder Redirect-Hop) wird per DNS aufgelöst und abgelehnt, wenn sie auf eine private / Loopback- / Link-Local- / Cloud-Metadata-Adresse zeigt. Der Browser bricht auch Subresource-Anfragen an private IPs ab.

  • Authentifizierung — Bearer-Token auf dem HTTP-Transport; standardmäßig an localhost gebunden.

  • Ressourcenlimits — Antwortgröße, Timeout, Seiten-Gleichzeitigkeit, Crawl-Seiten-/Tiefenlimits zum Schutz des Hosts.

  • robots.txt + Ratenlimitierung standardmäßig aktiviert.

  • Container — läuft als Nicht-Root-Benutzer; Geheimnisse nur über Umgebungsvariablen.

Lieferkette — Überprüfung des Images

CI signiert das Image schlüssellos mit cosign (Sigstore) unter Verwendung der OIDC-Identität von GitLab und fügt eine SPDX-SBOM-Bescheinigung hinzu. Überprüfen Sie vor der Ausführung:

cosign verify \
  --certificate-oidc-issuer https://gitlab.cri.epita.fr \
  --certificate-identity-regexp 'https://gitlab.cri.epita.fr/enzo.juhel/web-scraper//.*' \
  registry.gitlab.cri.epita.fr/enzo.juhel/web-scraper@sha256:...

Benchmark

benchmarks/run.py bewertet unser scrape/extract gegen öffentliche Datensätze und die Crawl4AI-Baseline und erstellt eine Scorecard (pro Seitentyp F1/Genauigkeit + einen Abschnitt zu Einschränkungen). Führen Sie es lokal oder über den manuellen CI-benchmark-Job aus:

uv run python benchmarks/run.py --output scorecard.md

Einschränkungen

  • Keine kostenpflichtigen Proxys/CAPTCHA: Stark verteidigte Websites (LinkedIn, Amazon, Cloudflare-Herausforderungen) blockieren uns manchmal. Die Benchmark-Scorecard quantifiziert, wo.

  • Die Extraktion des Hauptinhalts ist bei Artikeln stark, bei Foren / Produkt- / Listenseiten schwächer (eine bekannte Eigenschaft aller Extraktoren).

  • In-Memory-Crawl-/Sitzungsstatus — bewusst Single-Process, Single-User.

Entwicklung

uv run pre-commit install        # local lint/secret hooks
uv run ruff check . && uv run ruff format --check .
uv run mypy src
uv run pytest -q
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables web scraping and crawling capabilities for LLM clients, supporting single-page scraping, multi-page website crawling, and web search with multiple engines (Playwright, Cheerio, Puppeteer) and flexible output formats including markdown, HTML, text, and screenshots.
    18
    6
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to extract content from websites using automated static and dynamic scraping engines with built-in anti-bot protections. It provides tools for web data retrieval and stores results in MongoDB with support for JSON and CSV exports.
  • A
    license
    A
    quality
    A
    maintenance
    Web scraping, crawling, and structured data extraction for AI agents. 5 tools: scrape (clean markdown from any URL), crawl (entire sites), map (discover URLs), extract (structured JSON), and search. 833ms avg latency, single binary, self-hostable.
    8
    852
    AGPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables LLMs to fetch and extract web content using browser automation, OCR, and multiple extraction methods, handling JavaScript rendering and anti-scraping techniques.
    17
    MIT

View all related MCP servers

Related MCP Connectors

  • Enable language models to perform advanced AI-powered web scraping with enterprise-grade reliabili…

  • Scrape, crawl, map & search the web. Open-source, self-hostable Rust crawler & search for AI agents.

  • Live web access for agents: scrape, SERP search, crawl/map, 74 collectors, datasets, proxies.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Prog-up/web-scraper-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server