Kurze Antwort
Wie füge ich Claude Desktop oder Cursor mit MCP einen Webseiten-Reader hinzu?
Führen Sie einen kleinen MCP-Server aus, der ein read_url-Tool bereitstellt, das WebReaderAPI aufruft, und registrieren Sie ihn dann in den MCP-Einstellungen Ihres Clients mit Ihrem Schlüssel in env. Das Modell kann dann jede öffentliche Webseite als sauberes Markdown lesen. Jedes gelesene Seite kostet 1 Credit, 2 mit Browser, ab 0,07 $/1K Seiten Stand Oktober 2026. Ohne KYC; mit Krypto bezahlen.
Der MCP-Server auf einen Blick
| Sprache | Python 3.10+, mit den Paketen mcp und httpx |
|---|---|
| Transport | stdio: der Client startet den Server als lokalen Prozess |
| Tool | read_url(url, max_chars) → title, Quell-URL, dann das Markdown der Seite |
| Warum nicht web_fetch | Claude Code und OpenClaw bringen bereits ein eingebautes Tool mit diesem Namen mit |
| Schlüssel | Wird aus WEBREADER_API_KEY in der Umgebung des Servers gelesen |
| Abrechnung | 1 Credit = 1 gelesene Seite ohne Browser; 2 Credits, wenn die Seite einen Browser braucht, um JavaScript auszuführen. Eine Suchanfrage, die fehlschlägt oder die eine robots.txt einer Website verweigert, wird nicht abgerechnet |
Warum ein read_url-Tool und nicht web_fetch?
Weil zwei Tools mit demselben Namen sowohl den Client als auch das Modell verwirren. Claude Code und OpenClaw enthalten bereits ein Tool namens web_fetch. Ein eigener Name, read_url, und eine klare Beschreibung lassen das Modell unser Tool wählen, wenn es den Hauptinhalt einer Seite braucht, JavaScript-Seiten und PDFs eingeschlossen.
Das Tool gibt Text zurück, kein JSON. Modelle kommen mit einem kurzen Header und Markdown besser zurecht als mit verschachtelten Feldern, und der Header hält die Quell-URL sichtbar, damit die Antwort sie zitieren kann.
import os
import httpx
from mcp.server.fastmcp import FastMCP
API = "https://webreaderapi.com/api/v1/read"
KEY = os.environ["WEBREADER_API_KEY"]
mcp = FastMCP("webreaderapi")
@mcp.tool()
def read_url(url: str, max_chars: int = 20000) -> str:
"""Read a public web page and return its main content as Markdown.
Use it when the user gives a link or when a page must be read to answer.
max_chars caps the length of the returned text (1,000 to 500,000).
"""
params = {"url": url, "max_chars": max(1000, min(int(max_chars), 500000))}
try:
resp = httpx.get(API, params=params, headers={"Authorization": "Bearer " + KEY}, timeout=75)
except httpx.HTTPError as exc:
return "Network error while reading the page: " + str(exc)
body = resp.json()
if resp.status_code != 200:
err = body.get("error", {})
return "Could not read the page: " + err.get("code", str(resp.status_code)) + ". " + err.get("message", "")
title = body.get("title") or url
return "# " + title + "\nSource: " + body.get("final_url", url) + "\n\n" + body.get("markdown", "")
if __name__ == "__main__":
mcp.run()
Wie installiere und teste ich den Server?
Erstellen Sie eine virtuelle Umgebung, installieren Sie mcp und httpx und speichern Sie die obige Datei. Das Paket mcp ist das offizielle Python-SDK des Model Context Protocol; FastMCP macht aus einer typisierten Python-Funktion ein Tool und nutzt den Docstring als Beschreibung.
Bevor Sie es in einen Client einbinden, führen Sie die Datei einmal in einem Terminal mit gesetztem Schlüssel aus. Sie wartet still auf einen Client an stdin, was bedeutet, dass sie korrekt gestartet ist; stoppen Sie sie mit Ctrl+C.
python -m venv .venv
. .venv/bin/activate
pip install "mcp[cli]" httpx
WEBREADER_API_KEY="your-key" python webreader_mcp.pyWie registriere ich ihn in Claude Desktop?
Öffnen Sie die Entwicklereinstellungen von Claude Desktop, bearbeiten Sie claude_desktop_config.json und fügen Sie einen Eintrag unter mcpServers hinzu. Verwenden Sie absolute Pfade: den Python Ihrer virtuellen Umgebung und die Server-Datei. Legen Sie den Schlüssel in env ab, damit er nie in den Argumenten des Tools oder im Gespräch auftaucht. Starten Sie Claude Desktop neu, und read_url erscheint in der Tool-Liste.
Cursor liest dieselbe mcpServers-Struktur aus seiner eigenen MCP-Konfigurationsdatei, und Claude Code kann denselben Befehl mit seinem claude mcp add-Befehl registrieren. Für OpenClaw siehe die OpenClaw-Seite.
{
"mcpServers": {
"webreaderapi": {
"command": "/home/you/webreader/.venv/bin/python",
"args": ["/home/you/webreader/webreader_mcp.py"],
"env": { "WEBREADER_API_KEY": "your-key" }
}
}
}Wie halte ich Seiten im Kontext des Modells?
Senken Sie max_chars. Der Standardwert von 20.000 Zeichen reicht für die meisten Artikel und verhindert, dass eine lange Seite den Kontext füllt. Ein Modell, das mehrere Seiten in einer Antwort liest, kommt mit 8.000 bis 12.000 Zeichen pro Seite besser zurecht.
Bitten Sie das Modell, nur die Seiten zu lesen, die es braucht, nicht jeden Link, den es sieht. Ein kurzer Satz in Ihren Projektanweisungen wie „lies höchstens drei Seiten pro Frage“ hält Kosten und Kontext im Zaum.
Was passiert, wenn eine Seite das Lesen verweigert?
Das Tool gibt eine kurze Meldung mit dem Fehlercode zurück, etwa blocked_by_robots oder target_refused, und es wird nichts berechnet. Wir respektieren robots.txt: Unser Crawler identifiziert sich als WebReaderAPI, befolgt die Regeln, die für ihn oder für alle Roboter geschrieben sind, und liest keine Seite, die eine Website nicht erlaubt. Verweigerte Seiten werden nicht abgerechnet. Wenn eine Website unsere Suchanfrage ablehnt, geben wir ihre Antwort zurück: Wir lösen nie CAPTCHAs, melden uns nie in Konten an und versuchen nie, eine Sperre oder eine Paywall zu umgehen. Das Modell kann dann sagen, dass die Seite für automatisierte Reader nicht verfügbar ist, und eine andere Quelle nutzen.
MCP-Server: häufige Fragen
Gibt es ein offizielles WebReaderAPI-MCP-Paket?
Nein. Die Datei auf dieser Seite ist die Integration: 40 Zeilen, die Sie selbst lesen, ändern und ausführen können. Nichts, was Sie von uns installieren müssen, und Ihr Schlüssel verlässt Ihren Rechner nie – außer in Aufrufen an unsere API.
Kann das Modell mit diesem Server im Web suchen?
Nein. read_url liest eine Seite, deren Adresse Sie oder das Modell bereits haben. Kombinieren Sie es mit jedem Suchtool, das Ihr Client bietet; das Modell sucht und liest dann die Seiten, die zählen.
Was kostet der Betrieb eines Assistenten damit?
Ein Credit pro gelesener Seite, zwei, wenn ein Browser nötig ist. Ein Assistent, der 50 Seiten am Tag liest, verbraucht etwa 1.500 Credits im Monat, und 10.000 Seiten (3,75 $) deckt das für etwa sechs Monate ab.
Funktioniert der Server offline?
Nein. Er ruft für jede Seite https://webreaderapi.com/api/v1/read auf, braucht also Internetzugang und einen gültigen Schlüssel.