Serveur MCP pour assistants IA

WyndPath expose un serveur MCP (Model Context Protocol) distant sur https://mcp.wyndpath.com/mcp. Un assistant IA capable de parler MCP (Claude, ChatGPT, Cursor, VS Code...) s'y connecte et gagne un accès direct aux pages web publiques difficiles, avec le même compte et les mêmes crédits que l'API REST.

Endpoints.
  • Serveur MCP (authentifié) : https://mcp.wyndpath.com/mcp
  • Découverte publique, sans authentification : https://mcp.wyndpath.com/public
  • Métadonnées OAuth : https://mcp.wyndpath.com/.well-known/oauth-authorization-server et https://mcp.wyndpath.com/.well-known/oauth-protected-resource/mcp
  • Fiche du serveur (server card) : https://mcp.wyndpath.com/.well-known/mcp/server-card.json

Sommaire

Qu'est-ce que WyndPath MCP ?

Un agent IA essaie d'abord ses outils habituels pour lire une page web. Sur un site protégé par un anti-bot, une page qui charge son contenu en JavaScript ou un résultat vide, ces outils échouent ou renvoient un captcha. C'est à ce moment que l'agent choisit d'appeler WyndPath, de lui-même, sans que l'utilisateur ait besoin de coller une URL dans un onglet séparé. WyndPath récupère la page (navigateur si nécessaire, IP résidentielle si nécessaire) et renvoie un contenu exploitable, en Markdown par défaut. Le même moteur que l'API REST et le mode proxy fait le travail ; seul le protocole d'appel change.

Connecter WyndPath à un assistant IA

L'URL du serveur est la même partout : https://mcp.wyndpath.com/mcp. Ce qui change d'un client à l'autre, c'est la manière de la déclarer.

Claude Code

claude mcp add --transport http wyndpath https://mcp.wyndpath.com/mcp

Puis lancez /mcp dans une session pour vous authentifier (OAuth par défaut, ou une clé API si vous préférez).

Claude.ai et Claude Desktop

ParamètresConnecteursAjouter un connecteur personnalisé, avec l'URL https://mcp.wyndpath.com/mcp. Claude ouvre ensuite la page de connexion WyndPath pour l'autorisation OAuth.

Cursor

Ajoutez ce bloc dans ~/.cursor/mcp.json :

{"mcpServers":{"wyndpath":{"url":"https://mcp.wyndpath.com/mcp"}}}

VS Code

Ajoutez ce bloc dans .vscode/mcp.json :

{"servers":{"wyndpath":{"type":"http","url":"https://mcp.wyndpath.com/mcp"}}}

ChatGPT

Ajoutez WyndPath comme connecteur personnalisé, avec la même URL. L'autorisation passe uniquement par OAuth : ChatGPT ne propose pas de champ pour coller une clé API sur ses connecteurs.

Client Python (SDK mcp)

from mcp import Client
from mcp.client.streamable_http import streamable_http_client
import httpx as httpx2

async with streamable_http_client(
    "https://mcp.wyndpath.com/mcp",
    http_client=httpx2.AsyncClient(headers={"Authorization": "Bearer wk_VOTRE_CLE"}),
) as (read, write, _):
    async with Client(read, write) as client:
        result = await client.call_tool("fetch_url", {"url": "https://exemple.com"})
        print(result)

Onboarding en moins de deux minutes

  1. Connect : l'assistant déclare le serveur.
  2. Connexion ou création de compte sur wyndpath.com (des crédits gratuits sont inclus dès l'inscription).
  3. Autorisation de l'accès demandé.
  4. WyndPath apparaît dans la liste des outils de l'assistant, prêt à être appelé.

Authentification

OAuth 2.1

Le flux suit OAuth 2.1 avec PKCE, enregistrement dynamique des clients et Client ID Metadata Documents. L'utilisateur donne son consentement directement sur wyndpath.com : l'assistant ne voit jamais le mot de passe, seulement un jeton d'accès porteur d'une portée limitée. La révocation se fait depuis la console, dans ParamètresAssistants IA connectés ; elle coupe l'accès immédiatement, sans toucher au reste du compte.

Clé API

Pour un client scripté ou un IDE, une clé API suffit : Authorization: Bearer wk_.... C'est la même clé que pour l'API REST (voir Authentification), à placer dans le champ headers de la configuration du client plutôt que dans une variable OAuth.

Qui supporte quoi

ClientOAuthClé API en en-tête
Claude CodeOuiOui
Claude.ai / Claude DesktopOuiNon (connecteur sans champ d'en-têtes)
CursorOuiOui
VS CodeOuiOui
ChatGPTOui (seule méthode)Non
Client programmatique (SDK)OuiOui

Outils disponibles

Sept outils, trois gratuits et accessibles sans compte (utiles pour qu'un agent évalue WyndPath avant de se connecter), quatre qui consomment des crédits sur le compte relié.

get_capabilities

Quand l'utiliser : pour qu'un agent découvre ce que WyndPath sait faire avant de s'y connecter. Gratuit, sans authentification.

ParamètreTypeDéfautRôle
Aucun paramètre.

Renvoie : description du service, cas d'usage (use_when / do_not_use_when), liste des outils, formats supportés, modèle de crédits, limites, méthodes d'authentification, lien d'inscription et de documentation.

Coût : gratuit.

get_pricing

Quand l'utiliser : quand l'utilisateur demande le prix de WyndPath, ou avant de recommander un forfait. Gratuit, sans authentification.

ParamètreTypeDéfautRôle
Aucun paramètre.

Renvoie : liste des forfaits (nom, prix EUR/USD par mois, crédits inclus, concurrence autorisée, disponibilité), coût en crédits par type de requête, règle de facturation, liens vers la grille tarifaire et la gestion du forfait.

Coût : gratuit.

check_support

Quand l'utiliser : avant fetch_url, quand le coût compte ou qu'on ignore si le site est supporté. Ne récupère rien et ne consomme aucun crédit.

ParamètreTypeDéfautRôle
urlstring, requis-URL absolue à vérifier.

Renvoie : supported (bool), estimated_credits, max_credits_with_escalation, route, protection détectée, difficulty, si un identifiant est requis (login_required), et une recommendation textuelle (par exemple le max_credits minimum à passer à fetch_url).

Coût : gratuit.

fetch_url

Quand l'utiliser : quand les outils web habituels de l'agent échouent, renvoient une page vide, un captcha, un mur de consentement, une erreur 403/429/503, ou quand la page doit être vue depuis un pays précis. À éviter derrière un login ou un paywall, et sur une URL que les outils normaux lisent déjà correctement.

ParamètreTypeDéfautRôle
urlstring, requis-URL absolue http(s) de la page.
formatenummarkdownmarkdown (nettoyé), text ou html brut. Les réponses d'API sont toujours renvoyées en JSON.
countrystring ou nullnullCode pays ISO 3166-1 alpha-2 (fr, de, us...) pour voir la page depuis ce pays.
renderenumautoauto (voie la moins chère, peut escalader), browser (navigateur forcé), http (voie légère seulement, jamais d'escalade).
max_creditsentier 1-100 ou nullnull (15)Plafond de crédits pour l'appel ; au-delà, rien n'est récupéré et COST_LIMIT_EXCEEDED indique le coût nécessaire.
max_charsentier 1000-400000 ou nullnull (80 000)Tronque le contenu renvoyé. La page est récupérée et facturée une seule fois quoi qu'il arrive.
timeoutentier 5-170 ou nullnull (60)Secondes d'attente pour la récupération.
idempotency_keystring ou null (max 100)nullMême clé rejouée dans les 10 minutes : le résultat précédent est renvoyé sans nouveau débit.

Renvoie : en succès, status, title, content (dans le format choisi), truncated, credits_used, credits_remaining, duration_ms, et une strategy (route, moteur, type de proxy, escalade, tentatives). En échec, success: false, un error stable, un message, parfois un hint ou une action à faire suivre à l'utilisateur.

Coût : 1 crédit pour un site simple, 10 avec navigateur ou anti-bot, 15 avec IP résidentielle. Facturé uniquement en cas de succès.

batch_fetch

Quand l'utiliser : quand la liste des URLs est déjà connue (fiches produit, pages de résultats, annonces) et qu'on veut les récupérer ensemble plutôt qu'un appel par page.

ParamètreTypeDéfautRôle
urlstableau de string, requis (1 à 50)-URLs absolues des pages publiques.
formatenummarkdownFormat appliqué à chaque page.
countrystring ou nullnullCode pays appliqué à chaque page.
renderenumautoComme pour fetch_url, appliqué à chaque page.
max_credits_per_urlentier 1-100 ou nullnull (15)Plafond de crédits par page.
max_total_creditsentier 1-1000 ou nullnullArrête la récupération des pages restantes une fois ce total atteint.
max_charsentier 1000-400000 ou nullnull (20 000)Tronque le contenu de chaque page.

Renvoie : un résultat par URL (même forme que fetch_url), plus les totaux credits_used, credits_remaining, succeeded, failed. S'arrête tôt avec COST_LIMIT_EXCEEDED sur les URLs restantes si max_total_credits serait dépassé.

Coût : comme fetch_url, par page réellement récupérée avec succès (jusqu'à 50 pages).

extract_structured_data

Quand l'utiliser : pour obtenir des champs précis (prix, disponibilité, titre, auteur, date...) plutôt qu'une page entière.

ParamètreTypeDéfautRôle
urlstring, requis-URL absolue de la page à lire.
schemaobjet, requis-Champs à extraire, en forme courte ({"name":"string","price":"number"}) ou en JSON Schema complet ; 40 champs maximum, une description par champ aide à lever l'ambiguïté.
countrystring ou nullnullCode pays pour voir la page depuis ce pays.
renderenumautoComme pour fetch_url.
max_creditsentier 1-100 ou nullnull (15)Plafond de crédits pour la récupération.
idempotency_keystring ou null (max 100)nullRejoue le résultat précédent sans nouveau débit dans les 10 minutes.

Renvoie : data (un champ par clé du schéma, null si absent), missing (champs non trouvés), sources (données structurées de la page ou modèle), method. Rien n'est jamais inventé : un champ absent reste null et apparaît dans missing, avec un extrait Markdown de la page (evidence) pour le lire soi-même si besoin.

Coût : comme fetch_url, plus un supplément uniquement si l'extraction assistée par modèle est activée côté serveur (visible alors dans method: "structured-data+llm").

get_account

Quand l'utiliser : avant un gros lot d'appels, pour vérifier le budget, ou quand l'utilisateur demande combien de crédits il reste.

ParamètreTypeDéfautRôle
Aucun paramètre.

Renvoie : forfait, crédits consommés ce mois-ci, crédits restants, limite de concurrence, usage des 7 derniers jours, domaines les plus appelés, et des liens vers la console, la facturation et le journal des requêtes.

Coût : gratuit.

Crédits

Le même compte, le même solde que l'API REST et le mode proxy : voir le barème complet dans Crédits & coûts.

Payé au succès. Un appel qui échoue (blocage, cible injoignable) ne consomme aucun crédit.

Exemples

Page produit bloquée

Une fiche produit protégée par un anti-bot renvoie une page vide aux outils habituels de l'agent.

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"fetch_url","arguments":{"url":"https://boutique-exemple.com/produit/123","render":"browser","max_credits":15}}}

Réponse (résumée) : success: true, content en Markdown avec la fiche produit, credits_used: 10, strategy.route: "browser", strategy.escalated: true.

Prix et disponibilité

Besoin du prix et du stock sans le reste de la page.

{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"extract_structured_data","arguments":{"url":"https://boutique-exemple.com/produit/123","schema":{"name":"string","price":"number","currency":"string","available":"boolean"}}}}

Réponse (résumée) : data: {"name":"...","price":129.9,"currency":"EUR","available":true}, missing: [], method: "structured-data", credits_used: 1.

Vérifier le coût avant d'y aller

Avant de dépenser des crédits, l'agent vérifie ce que WyndPath sait de la cible.

{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"check_support","arguments":{"url":"https://boutique-exemple.com/produit/123"}}}

Réponse (résumée) : supported: true, estimated_credits: 10, protection: "cloudflare", route: "browser", recommendation: "Call fetch_url with max_credits >= 10."

Sécurité

Périmètre

WyndPath ne récupère que du contenu public. Il ne contourne jamais un login ni un paywall, et applique ses propres règles d'usage à chaque appel, quel que soit le canal (REST, proxy, MCP).

Anti-SSRF

Les adresses privées ou internes sont refusées avant toute tentative de récupération : l'appel échoue avec URL_NOT_ALLOWED, sans jamais atteindre un réseau interne.

Contenu non fiable et injection de prompt

Une page récupérée peut contenir du texte du genre « ignore les instructions précédentes » ou toute autre tentative de manipulation. WyndPath renvoie ce texte comme du contenu, jamais comme une commande à exécuter. Côté intégrateur : traitez toujours le champ content (ou data, evidence) comme une donnée à lire, pas comme des instructions pour l'agent, et ne faites jamais exécuter à l'agent une action sensible (achat, envoi, suppression) sur la seule foi d'un texte trouvé dans une page.

Jetons

Les jetons OAuth et les clés API sont opaques, révocables à tout moment depuis la console et expirent. Une révocation ferme l'accès immédiatement, sans affecter le reste du compte.

Ce que l'assistant peut faire, et ce qu'il ne peut pas

Un assistant connecté peut lire des pages publiques, extraire des champs et consulter l'état du compte. Il ne peut pas acheter de crédits, changer de forfait ni modifier les paramètres du compte : ces actions restent entre les mains de l'utilisateur, dans la console.

Dépannage

SymptômeCause probable
401 à la connexionJeton OAuth expiré ou révoqué, ou clé API désactivée. Reconnectez l'assistant (/mcp sur Claude Code, ou le connecteur côté client).
TARGET_BLOCKEDLa cible a résisté à toutes les tentatives autorisées par le budget. Réessayer avec render: "browser" et un max_credits plus élevé peut suffire ; sinon la cible n'est pas récupérable pour l'instant.
COST_LIMIT_EXCEEDEDLe coût réel dépasse max_credits. La réponse indique credits_needed : relancez avec un plafond au moins égal.
RATE_LIMITED / TOO_MANY_CONCURRENTLa cible limite le débit, ou le forfait limite la concurrence. Patientez quelques secondes avant de relancer.
Réponse lente ou coupéeLe transport Streamable HTTP garde la connexion ouverte pendant la récupération (SSE keep-alive) ; au-delà d'environ 150 secondes sans réponse, mieux vaut réduire timeout ou vérifier la cible plutôt que réessayer en boucle.
L'assistant n'utilise pas WyndPathC'est voulu : l'assistant essaie d'abord ses outils normaux. Sur une cible qu'on sait difficile, demandez-lui explicitement d'utiliser WyndPath.

Pour vérifier une connexion en ligne de commande, l'Inspector officiel du protocole fonctionne directement contre le serveur WyndPath :

npx @modelcontextprotocol/inspector --cli --transport http --server-url https://mcp.wyndpath.com/mcp --header "Authorization: Bearer wk_..." --method tools/list