# Serveur MCP de recherche web pour Claude Code, Claude Desktop, Cursor et autres clients MCP

> Serveur MCP de recherche web pour Claude Code et Cursor : un court fichier Python avec search_web et read_urls, enregistré en une commande, sans KYC.

- URL: https://llmwebsearch.com/fr/docs/mcp/
- Dernière mise à jour: 2026-10-22
- Éditeur: LLMWebSearch (https://llmwebsearch.com)

Donnez à n'importe quel client MCP deux outils : `search_web`, qui renvoie des sources classées avec les meilleures pages déjà lues, et `read_urls`, qui lit des liens que le modèle possède déjà. Le serveur est un seul fichier Python qui tourne sur votre machine, avec votre clé dans son environnement.

**Réponse rapide — Comment ajouter un serveur MCP de recherche web à Claude Code ou Claude Desktop ?**

Enregistrez le court serveur Python de cette page, qui expose les outils `search_web` et `read_urls` appelant **LLMWebSearch**, puis enregistrez-le avec `claude mcp add` ou dans `claude_desktop_config.json`, avec votre clé dans `env`. Le modèle peut alors rechercher sur le web en direct et lire les meilleures pages en Markdown. Une recherche coûte 1 crédit, à partir de 1,20 $US/1K requêtes en octobre 2026. Sans KYC ; payez en crypto.

## Le serveur MCP en un coup d'œil

| Attribut | Valeur |
| --- | --- |
| Langage | Python 3.10+, avec les packages `mcp` et `httpx` |
| Transport | stdio : le client démarre le serveur comme un processus local |
| Outil 1 | `search_web(query, max_results=5, read=3)` → sources numérotées avec URLs et texte des pages |
| Outil 2 | `read_urls(urls)` → le contenu principal de 1 à 20 pages connues |
| Noms | Pas `web_search` ni `web_fetch` : Claude Code et OpenClaw embarquent déjà des outils portant ces noms |
| Clé | Lu depuis `LLMWEBSEARCH_API_KEY` dans l'environnement du serveur |
| Facturation | Un crédit paie une recherche : jusqu'à 20 résultats classés, avec les pages des 3 premiers lues et renvoyées en Markdown. Lire 4 à 10 pages coûte 2 crédits. Un appel qui se termine sur une erreur ne coûte rien. Lire des pages dont vous avez déjà les URLs coûte 1 crédit par groupe de 3 pages entamé, renvoyées avec leur contenu, jusqu'à 20 URLs par appel ; les URLs refusées ou en échec ne sont pas comptées |

## Pourquoi les outils s'appellent-ils search_web et read_urls ?

Parce que deux outils portant le même nom perturbent le client et le modèle. Claude Code et OpenClaw incluent chacun des outils intégrés nommés `web_search` et `web_fetch`. Des noms distincts, avec des descriptions claires, permettent au modèle de choisir les nôtres à dessein et vous permettent de distinguer les appels dans les logs.

Les deux outils renvoient du texte, pas du JSON brut. Chaque source commence par un numéro, un titre et son URL, pour que le modèle puisse citer `[1]` ou `[2]` et que le lecteur puisse vérifier la page.

*llmwebsearch_mcp.py*

```python
import os

import httpx
from mcp.server.fastmcp import FastMCP

BASE = "https://llmwebsearch.com/api/v1"
HEADERS = {"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]}
mcp = FastMCP("llmwebsearch")


def _call(path: str, body: dict) -> dict:
    resp = httpx.post(BASE + path, json=body, headers=HEADERS, timeout=90)
    data = resp.json()
    if resp.status_code != 200:
        err = data.get("error", {})
        raise RuntimeError(err.get("code", str(resp.status_code)) + ": " + err.get("message", ""))
    return data


def _page(n: int, item: dict) -> str:
    head = f"[{n}] {item.get('title') or item['url']}\n{item['url']}\n"
    if item.get("content_status") == "ok":
        return head + item["content"]
    return head + "(not read: " + item.get("content_status", "unknown") + ") " + item.get("snippet", "")


@mcp.tool()
def search_web(query: str, max_results: int = 5, read: int = 3) -> str:
    """Search the live web and return numbered sources; the first `read` pages include their text.

    Use it for current facts, documentation and news. Cite sources by their number.
    """
    body = {"q": query, "max_results": max(1, min(max_results, 20)), "read": max(0, min(read, 10)), "max_chars": 5000}
    data = _call("/search", body)
    return "\n\n".join(_page(i, r) for i, r in enumerate(data["results"], start=1))


@mcp.tool()
def read_urls(urls: list[str]) -> str:
    """Read 1 to 20 public web pages whose URLs you already have and return their main text."""
    data = _call("/extract", {"urls": urls[:20], "max_chars": 12000})
    return "\n\n".join(_page(i, r) for i, r in enumerate(data["results"], start=1))


if __name__ == "__main__":
    mcp.run()

```

## Comment installer et tester le serveur ?

Créez un environnement virtuel, installez `mcp` et `httpx`, et enregistrez le fichier ci-dessus. `mcp` est le SDK Python officiel du Model Context Protocol ; sa classe `FastMCP` transforme des fonctions Python typées en outils et utilise chaque docstring comme description de l'outil.

Lancez le fichier une fois depuis un terminal avec votre clé définie. Il attend ensuite silencieusement un client sur l'entrée standard, ce qui signifie qu'il fonctionne ; arrêtez-le avec Ctrl+C. Les erreurs de l'API sont remontées comme erreurs d'outil avec leur code, pour que le modèle voie `rate_limited` ou `insufficient_credits` en clair.

*Installer et lancer une fois*

```bash
python -m venv .venv
. .venv/bin/activate
pip install "mcp[cli]" httpx
LLMWEBSEARCH_API_KEY="your-key" python llmwebsearch_mcp.py
```

## Comment l'ajouter à Claude Code ?

Utilisez `claude mcp add`. La documentation de Claude Code donne la forme `claude mcp add [options] <name> -- <command> [args...]` : ses propres options d'abord, puis un double tiret, puis la commande qui démarre le serveur. Les variables d'environnement vont dans `--env KEY=value`, et au moins une autre option, comme `--transport stdio`, doit se trouver entre `--env` et le nom du serveur.

Ajoutez `--scope user` pour rendre le serveur disponible dans tous vos projets ; la portée par défaut, `local`, ne couvre que le projet courant. Utilisez des chemins absolus pour le Python de votre environnement virtuel et pour le fichier du serveur.

*Enregistrer le serveur dans Claude Code*

```bash
claude mcp add --env LLMWEBSEARCH_API_KEY=your-key --transport stdio --scope user llmwebsearch \
  -- /home/you/llmwebsearch/.venv/bin/python /home/you/llmwebsearch/llmwebsearch_mcp.py
```

## Comment l'ajouter à Claude Desktop et aux autres clients ?

Claude Desktop lit les serveurs depuis `claude_desktop_config.json`, sous `mcpServers`. Donnez au serveur un nom, la commande, ses arguments et un objet `env` contenant la clé, puis redémarrez l'application ; `search_web` et `read_urls` apparaissent dans la liste des outils.

Les autres clients MCP, comme Cursor, demandent les mêmes trois éléments dans leurs propres paramètres MCP : une commande, ses arguments et des variables d'environnement. La clé n'apparaît jamais dans un argument d'outil ni dans la conversation.

*claude_desktop_config.json*

```json
{
  "mcpServers": {
    "llmwebsearch": {
      "command": "/home/you/llmwebsearch/.venv/bin/python",
      "args": ["/home/you/llmwebsearch/llmwebsearch_mcp.py"],
      "env": { "LLMWEBSEARCH_API_KEY": "your-key" }
    }
  }
}
```

## Comment garder les recherches économiques et courtes ?

Indiquez au modèle comment chercher dans vos instructions : une ou deux requêtes par question, puis lisez davantage uniquement si les sources se contredisent. Le serveur plafonne déjà chaque page à 5 000 caractères en `search_web` et 12 000 en `read_urls` ; abaissez ces valeurs pour les petits modèles.

Chaque appel `search_web` avec `read` jusqu'à 3 coûte un crédit. Un assistant qui lance 40 requêtes par jour consomme environ 1 200 crédits par mois, donc 5 000 requêtes (9,25 $US) dure environ quatre mois. Les crédits de recherche n'ont pas de date d'expiration : ce que vous n'utilisez pas ce mois-ci est toujours là l'année prochaine.

## Que voit le modèle quand une page ne peut pas être lue ?

La source apparaît quand même, avec son numéro, son titre et son URL, suivis de la raison entre crochets et de l'extrait de recherche. Notre lecteur respecte robots.txt : il s'annonce comme LLMWebSearch, suit les règles qu'un site écrit pour lui ou pour tous les robots, et laisse de côté le contenu de toute page qu'il n'est pas autorisé à lire. Quand un site refuse notre lecteur, le résultat revient sans contenu et avec le statut du site : nous ne résolvons jamais de CAPTCHA, ne nous connectons pas à des comptes et ne contournons ni un blocage ni un paywall. Le modèle peut alors s'appuyer sur les autres sources ou signaler qu'une page n'était pas disponible.

## Serveur MCP : questions fréquentes

### Existe-t-il un package MCP ou un endpoint hébergé officiel pour LLMWebSearch ?

Non. Le fichier de cette page constitue l'intégration : environ 50 lignes que vous pouvez lire et modifier. Il s'exécute sur votre machine, et votre clé ne circule que vers notre API.

### Dois-je désactiver la recherche web intégrée de Claude Code ?

Pas besoin. Les deux peuvent rester ; les descriptions indiquent au modèle ce que fait chacun. Gardez le nôtre quand vous voulez le texte des pages dans les résultats, un prix fixe par requête ou un seul endroit pour vos logs de recherche.

### Puis-je l'utiliser avec OpenClaw ?

Oui, comme serveur MCP enregistré avec `openclaw mcp add`. La [page OpenClaw](https://llmwebsearch.com/fr/docs/openclaw/) donne la commande et explique comment il cohabite avec les fournisseurs de recherche intégrés d'OpenClaw.

### Le serveur conserve-t-il mes recherches ?

Non. Il ne conserve rien entre les appels. De notre côté, Nous n'entraînons aucun modèle sur vos requêtes ni sur ce que renvoie l'API, et nous n'ajoutons aucune règle de notre cru contre la conservation des résultats ; les droits des sites dont vous lisez les pages s'appliquent toujours.

## Sources

1. [Connecter Claude Code à des outils via MCP](https://code.claude.com/docs/en/mcp) — Claude Code docs (read 2026-10-22)

---

LLMWebSearch: LLMWebSearch est une API de recherche web pour agents IA qui renvoie des résultats classés avec le contenu des meilleures pages en Markdown, payée en crypto sans envoi de pièce d'identité. Les crédits prépayés à partir de 1,20 $US/1K requêtes n'expirent jamais. Sans KYC — pas de pièce d'identité, pas de selfie, pas de documents. Payez en crypto.
