Réponse rapide
Comment ajouter un lecteur de pages web à Claude Desktop ou Cursor avec MCP ?
Lancez un petit serveur MCP qui expose un outil read_url appelant WebReaderAPI, puis enregistrez-le dans les paramètres MCP de votre client avec votre clé dans env. Le modèle peut alors lire n'importe quelle page publique en Markdown propre. Chaque page lue coûte 1 crédit, 2 avec un navigateur, à partir de 0,07 $US/1K pages en octobre 2026. Sans KYC ; payez en crypto.
Le serveur MCP en bref
| Langage | Python 3.10+, avec les packages mcp et httpx |
|---|---|
| Transport | stdio : le client démarre le serveur comme processus local |
| Outil | read_url(url, max_chars) → titre, URL source, puis le Markdown de la page |
| Pourquoi pas web_fetch | Claude Code et OpenClaw embarquent déjà un outil intégré portant ce nom |
| Clé | Lue depuis WEBREADER_API_KEY dans l'environnement du serveur |
| Facturation | 1 crédit = 1 page lue sans navigateur ; 2 crédits quand la page nécessite un navigateur pour exécuter JavaScript. Une requête qui échoue, ou qu'un robots.txt de site refuse, n'est pas facturée |
Pourquoi un outil read_url et pas web_fetch ?
Parce que deux outils du même nom perturbent à la fois le client et le modèle. Claude Code et OpenClaw incluent déjà un outil nommé web_fetch. Un nom distinct, read_url, et une description claire permettent au modèle de choisir le nôtre lorsqu'il a besoin du contenu principal d'une page, pages JavaScript et PDF compris.
L'outil renvoie du texte, pas du JSON. Les modèles traitent mieux un court en-tête et du Markdown que des champs imbriqués, et l'en-tête garde l'URL source visible pour que la réponse puisse la citer.
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()
Comment installer et tester le serveur ?
Créez un environnement virtuel, installez mcp et httpx, puis enregistrez le fichier ci-dessus. Le package mcp est le SDK Python officiel du Model Context Protocol ; FastMCP transforme une fonction Python typée en outil, en utilisant la docstring comme description.
Avant de le brancher dans un client, exécutez le fichier une fois depuis un terminal avec votre clé définie. Il attend silencieusement un client sur stdin, ce qui signifie qu'il a démarré correctement ; arrêtez-le avec Ctrl+C.
python -m venv .venv
. .venv/bin/activate
pip install "mcp[cli]" httpx
WEBREADER_API_KEY="your-key" python webreader_mcp.pyComment l'enregistrer dans Claude Desktop ?
Ouvrez les paramètres développeur de Claude Desktop, modifiez claude_desktop_config.json et ajoutez une entrée sous mcpServers. Utilisez des chemins absolus : le Python de votre environnement virtuel et le fichier du serveur. Placez la clé dans env, pour qu'elle n'apparaisse jamais dans les arguments de l'outil ni dans la conversation. Redémarrez Claude Desktop, et read_url apparaît dans la liste des outils.
Cursor lit la même structure mcpServers depuis son propre fichier de configuration MCP, et Claude Code peut enregistrer la même commande avec sa commande claude mcp add. Pour OpenClaw, voir la page OpenClaw.
{
"mcpServers": {
"webreaderapi": {
"command": "/home/you/webreader/.venv/bin/python",
"args": ["/home/you/webreader/webreader_mcp.py"],
"env": { "WEBREADER_API_KEY": "your-key" }
}
}
}Comment garder les pages dans le contexte du modèle ?
Baissez max_chars. La valeur par défaut de 20 000 caractères suffit pour la plupart des articles et évite qu'une longue page ne sature le contexte. Un modèle qui lit plusieurs pages dans une même réponse s'en sort mieux avec 8 000 à 12 000 par page.
Demandez au modèle de lire les pages dont il a besoin, pas tous les liens qu'il voit. Une phrase courte dans les instructions de votre projet, comme « lire au maximum trois pages par question », maîtrise à la fois le coût et le contexte.
Que se passe-t-il quand un site refuse la lecture ?
L'outil renvoie un court message avec le code d'erreur, tel que blocked_by_robots ou target_refused, et rien n'est facturé. Nous respectons robots.txt : notre crawler s'identifie comme WebReaderAPI, suit les règles écrites pour lui ou pour tous les robots, et ne lit pas une page qu'un site interdit. Les pages refusées ne sont pas facturées. Si un site refuse notre requête, nous renvoyons sa réponse : nous ne résolvons jamais de CAPTCHA, ne nous connectons pas à des comptes et ne cherchons pas à contourner un blocage ou un paywall. Le modèle peut alors indiquer que la page n'est pas accessible aux lecteurs automatisés et utiliser une autre source.
Serveur MCP : questions fréquentes
Existe-t-il un package MCP officiel WebReaderAPI ?
Non. Le fichier de cette page est l'intégration : 40 lignes que vous pouvez lire, modifier et exécuter vous-même. Rien à installer de notre côté, et votre clé ne quitte jamais votre machine, sauf dans les appels à notre API.
Le modèle peut-il faire une recherche web avec ce serveur ?
Non. read_url lit une page dont vous ou le modèle avez déjà l'adresse. Associez-le à n'importe quel outil de recherche proposé par votre client ; le modèle cherche, puis lit les pages qui comptent.
Combien coûte l'usage d'un assistant avec ce serveur ?
Un crédit par page lue, deux lorsqu'un navigateur est nécessaire. Un assistant qui lit 50 pages par jour utilise environ 1 500 crédits par mois, et 10 000 pages (3,75 $US) couvre cela pendant environ six mois.
Le serveur fonctionne-t-il hors ligne ?
Non. Il appelle https://webreaderapi.com/api/v1/read pour chaque page, il lui faut donc un accès internet et une clé valide.