Aller au contenu

Serveur MCP · Streamable HTTP · JSON

Fiablink, pour vos agents.

Un serveur MCP : Claude ou Cursor s'y connecte avec votre clé API pour chercher des sites, chiffrer une commande, la payer depuis votre solde et suivre la publication.

Protocole
MCP, sur HTTP
Authentification
Clé API
Paiement
Solde prépayé
Outils
7
Adresse du serveur
https://fiablink.fr/api/mcp
Fia, la mascotte de Fiablink, loupe à la main

Ce que l'agent peut faire

Le serveur applique les mêmes règles que votre espace et que l'API : mêmes prix, mêmes statuts, mêmes contrôles. Il agit au nom du compte qui a créé la clé.

Chercher des sites

Les filtres du catalogue : thématique, pays, langue, prix, trafic, dofollow. Puis la fiche d'un site, avec ses prix par format.

search_sitesget_site

Chiffrer avant d'acheter

Le prix de chaque ligne, la remise d'un code promo, le total hors taxes et la comparaison avec votre solde. Rien n'est créé.

quote_orderget_balance

Commander

Une ou plusieurs commandes en un appel, payées par le solde : tout est créé, ou rien. Une clé d'idempotence évite de créer deux fois la même commande.

create_order

Suivre la publication

Le statut de chaque commande, l'adresse de publication et les derniers contrôles du lien.

list_ordersget_order

Connexion

Trois étapes : un compte, une clé, puis la configuration de votre client MCP.

  1. 01

    Ouvrez un compte

    Un compte Fiablink suffit. Les commandes passées par un agent sont réglées avec votre solde prépayé.

    Créer un compte
  2. 02

    Créez une clé API

    Dans Paramètres, section Clés API, donnez un nom à la clé puis validez. Elle commence par fbl_ et ne s'affiche qu'une fois : copiez-la aussitôt.

    Ouvrir les paramètres
  3. 03

    Ajoutez le serveur à votre client

    Donnez-lui l'adresse du serveur et la clé, dans l'en-tête Authorization. Les exemples par client sont plus bas.

Adresse du serveur
https://fiablink.fr/api/mcp
En-têtes acceptés
Authorization: Bearer fbl_xxxxxxxxxxxx
# ou
X-Fiablink-Api-Key: fbl_xxxxxxxxxxxx

La clé et la limite de débit sont celles de l'API : voir Authentification et Limites. Une requête sans clé valide reçoit une réponse 401.

La clé donne le droit de dépenser votre solde

Les commandes passées par un agent sont payées par le solde prépayé du compte, hors taxes. Qui détient la clé peut commander tant que ce solde le permet : gardez-la dans la configuration de votre client, pas dans une conversation, et révoquez-la dans Paramètres au moindre doute. La révocation prend effet immédiatement.

Configuration par client

Remplacez fbl_xxxxxxxxxxxx par votre clé. Chaque syntaxe vient de la documentation officielle du client, donnée en lien : elle fait foi si l'interface du client a changé depuis.

Claude Code

Une commande suffit. Ajoutez-lui l'option --scope user pour que le serveur soit disponible dans tous vos projets. Source : documentation officielle.

Dans un terminal
claude mcp add --transport http fiablink https://fiablink.fr/api/mcp \
  --header "Authorization: Bearer fbl_xxxxxxxxxxxx"

Vérifiez la connexion avec claude mcp list, ou avec la commande /mcp dans Claude Code.

.mcp.json à la racine d'un projet partagé
{
  "mcpServers": {
    "fiablink": {
      "type": "http",
      "url": "https://fiablink.fr/api/mcp",
      "headers": {
        "Authorization": "Bearer ${FIABLINK_API_KEY}"
      }
    }
  }
}

Ce fichier se partage avec le dépôt : la clé n'y figure pas, elle est lue dans la variable d'environnement FIABLINK_API_KEY.

Claude Desktop

Un serveur distant s'ajoute comme connecteur personnalisé, dans l'application ou sur claude.ai. Les étapes sont celles d'un compte individuel, avec les libellés de l'interface en anglais ; sur un forfait Team ou Enterprise, l'ajout revient à un propriétaire de l'organisation. Source : documentation officielle.

  1. 01Ouvrez Customize > Connectors.
  2. 02Cliquez sur + Add, puis sur Add custom connector.
  3. 03Donnez un nom au connecteur, par exemple Fiablink, saisissez l'adresse du serveur, puis Continue.
  4. 04Sous Authentication, choisissez No sign in : le serveur ne propose pas de connexion OAuth.
  5. 05Sous Request headers, choisissez l'en-tête authorization et donnez-lui la valeur Bearer fbl_xxxxxxxxxxxx, en y mettant votre clé. Le mot Bearer et l'espace font partie de la valeur.
  6. 06Validez avec Add.

La section Request headers est en bêta chez Anthropic et n'est pas ouverte à tous les comptes (détail). Si elle n'apparaît pas dans la fenêtre, le connecteur ne peut pas envoyer votre clé : passez par Claude Code ou Cursor.

Claude se connecte alors depuis les serveurs d'Anthropic, pas depuis votre ordinateur. Le fichier claude_desktop_config.json sert aux serveurs MCP locaux : il n'est pas utile ici.

Cursor

Ajoutez le serveur à ~/.cursor/mcp.json pour tous vos projets, ou à .cursor/mcp.json à la racine d'un projet. Source : documentation officielle.

mcp.json
{
  "mcpServers": {
    "fiablink": {
      "url": "https://fiablink.fr/api/mcp",
      "headers": {
        "Authorization": "Bearer ${env:FIABLINK_API_KEY}"
      }
    }
  }
}

La clé est lue dans la variable d'environnement FIABLINK_API_KEY.

Outils

Cette liste est produite à partir de la définition que le serveur donne à l'agent : nom, description et arguments sont ceux qu'il lit. Les montants sont en centimes d'euro, hors taxes.

Domaines masqués

Comme sur le site, le domaine d'un site tiers peut rester masqué tant qu'aucun de vos liens n'y a été publié : l'agent reçoit alors une référence du type « Site A1B2C3 » et domain vaut null.

Search Console : connexion pas encore activée

La connexion Search Console des éditeurs n'est pas encore activée sur la plateforme. Les clics, les pages positionnées et le filtre gscOnly ne portent que sur les sites qui ont connecté leur Search Console.

search_sitesChercher des sitesLecture seule

Cherche des sites dans le catalogue Fiablink, où acheter un article sponsorisé ou un lien. À utiliser en premier, pour trouver des sites selon une thématique, un pays, un budget ou un trafic minimum. Renvoie total, page, pages et items. Pour chaque site : id (à passer dans siteId pour un devis ou une commande), slug (à passer à get_site), name, pays, langue, thématiques, métriques (clics Search Console sur 90 jours, TF, DR…), règles de l'éditeur et prix hors taxes en centimes. Le domaine d'un site tiers peut rester masqué tant qu'aucun lien n'y a été publié pour ce compte : domain vaut alors null et name est une référence du type « Site A1B2C3 ».

qtexte
Recherche par texte : thématique, ou domaine, nom et description des sites dont le domaine est visible. La référence d'un site au domaine masqué (« Site A1B2C3 ») retrouve sa fiche.
categorytexte
Identifiant de thématique, tel que renvoyé dans le champ categories d'un site.
countrytexte
Code pays du site, en majuscules : FR, BE, CH, CA…
languagetexte
Code langue du site, en minuscules : fr, en, es…
minPricenombre
Prix minimum de l'article, en euros hors taxes (et non en centimes). Filtre approché, appliqué au prix net de l'éditeur.
maxPricenombre
Prix maximum de l'article, en euros hors taxes (et non en centimes). Filtre approché, appliqué au prix net de l'éditeur.
minTfentier
TF minimum (métrique tierce, indicative).
minDrentier
DR minimum (métrique tierce, indicative).
minClicksentier
Clics organiques mensuels minimum : clics Search Console sur 90 jours, divisés par 3.
gscOnlybooléen
true : seulement les sites qui ont connecté leur Search Console.
networkOnlybooléen
true : seulement les sites du réseau Fiablink.
dofollowbooléen
true : seulement les sites qui acceptent les liens dofollow.
sorttexte
Ordre de tri. relevance (par défaut) : sites mis en avant, puis trafic et ventes. price_asc, price_desc : prix de l'article. clicks_desc : clics Search Console. tf_desc : TF. newest : sites les plus récents.Valeurs : relevance, price_asc, price_desc, clicks_desc, tf_desc, newestPar défaut : relevance
pageentier
Numéro de page, à partir de 1. Le champ pages de la réponse donne le nombre de pages.Par défaut : 1

get_siteFiche d'un siteLecture seule

Donne la fiche d'un site du catalogue à partir de son identifiant public (champ slug renvoyé par search_sites). À utiliser avant de commander, pour lire les prix par format et, si le site a connecté sa Search Console, ses pages positionnées (positioned_pages, dont l'id sert de positionedPageId pour une INSERTION) et ses clics quotidiens (daily_clicks). Renvoie une erreur « Site introuvable » si l'identifiant est inconnu ou si le site n'est plus en vente.

slugtexte · requis
Identifiant public du site : champ slug renvoyé par search_sites.

quote_orderDevisLecture seule

Calcule le devis d'une ou plusieurs lignes de commande sans rien créer, sans rien débiter et sans toucher au panier du compte. À utiliser avant create_order, pour annoncer le prix à l'utilisateur et vérifier que le solde suffit. Renvoie lines (prix unitaire, total et remise de chaque ligne), subtotal_cents, discount_cents, total_cents (total hors taxes, le montant que create_order débiterait), promo (code accepté ou refusé, avec la raison) et balance : available_cents et sufficient, vrai si le solde couvre le total. Montants en centimes d'euro. Une ligne impossible à commander (site indisponible, format non vendu…) renvoie une erreur qui la désigne. Un code promo refusé (promo.valid à false) n'arrête pas le devis mais ferait échouer create_order : retirez-le avant de commander.

itemsliste · requis
Lignes de la commande, une par site et par format.
items[].siteIdtexte
Identifiant du site : champ id renvoyé par search_sites ou get_site. Requis, sauf pour un PACK (laissez-le alors absent et donnez packSlug).
items[].positionedPageIdtexte
Pour une INSERTION dans une page précise : champ id d'une entrée de positioned_pages (get_site).
items[].packSlugtexte
Pour un PACK seulement : le pack du réseau Fiablink commandé. quote_order en donne le prix par lien.Valeurs : decouverte, croissance, autorite
items[].productTypetexte · requis
Format acheté. ARTICLE : article sponsorisé. INSERTION : lien ajouté dans une page déjà positionnée. HOMEPAGE : lien en page d'accueil pour un mois. PACK : pack du réseau Fiablink.Valeurs : ARTICLE, INSERTION, HOMEPAGE, PACK
items[].quantityentier
Nombre de liens identiques, 1 par défaut. Chaque unité devient une commande.Par défaut : 1
items[].targetUrltexte · requis
Adresse de la page vers laquelle le lien pointe.
items[].anchortexte · requis
Texte du lien.
items[].reltexte
Attribut du lien : DOFOLLOW (par défaut), SPONSORED ou NOFOLLOW. Certains sites refusent le dofollow (allows_dofollow).Valeurs : DOFOLLOW, SPONSORED, NOFOLLOWPar défaut : DOFOLLOW
items[].contentModetexte
Qui rédige. PLATFORM_WRITES (par défaut) : rédaction incluse. PUBLISHER_WRITES : l'éditeur rédige, s'il le propose. BUYER_PROVIDES : le texte est fourni dans providedContent.Valeurs : PLATFORM_WRITES, PUBLISHER_WRITES, BUYER_PROVIDESPar défaut : PLATFORM_WRITES
items[].mentionbooléen
Mention « article partenaire » sur la publication, true par défaut. Certains éditeurs l'imposent (mention_policy à ALWAYS).Par défaut : true
items[].brieftexte
Consignes de rédaction pour l'article.
items[].providedContenttexte
Texte de l'article, quand contentMode vaut BUYER_PROVIDES.
items[].projectIdtexte
Identifiant d'un projet du compte, pour y classer la commande.
promo_codetexte
Code promo, facultatif.

create_orderCréer une commandeDébite le solde

Crée une ou plusieurs commandes et les paie aussitôt avec le solde prépayé du compte : le total hors taxes est débité, et tout est créé ou rien ne l'est. À n'utiliser qu'après l'accord de l'utilisateur sur le devis (quote_order). idempotency_key est obligatoire : pendant 24 heures, un nouvel appel avec la même clé et les mêmes lignes renvoie la première réponse sans rien recréer ni redébiter (idempotent_replay à true) ; la même clé avec d'autres lignes est refusée. Renvoie payment_id, total_cents et orders : une commande par lien, avec id, number et status. Solde insuffisant, code promo refusé ou ligne refusée : erreur, rien n'est créé. Un appel rejoué pendant que le premier est encore en cours attend sa réponse. Après une erreur interne, l'état est inconnu : vérifiez avec list_orders avant de recommander avec une nouvelle clé.

itemsliste · requis
Lignes de la commande, une par site et par format.
items[].siteIdtexte
Identifiant du site : champ id renvoyé par search_sites ou get_site. Requis, sauf pour un PACK (laissez-le alors absent et donnez packSlug).
items[].positionedPageIdtexte
Pour une INSERTION dans une page précise : champ id d'une entrée de positioned_pages (get_site).
items[].packSlugtexte
Pour un PACK seulement : le pack du réseau Fiablink commandé. quote_order en donne le prix par lien.Valeurs : decouverte, croissance, autorite
items[].productTypetexte · requis
Format acheté. ARTICLE : article sponsorisé. INSERTION : lien ajouté dans une page déjà positionnée. HOMEPAGE : lien en page d'accueil pour un mois. PACK : pack du réseau Fiablink.Valeurs : ARTICLE, INSERTION, HOMEPAGE, PACK
items[].quantityentier
Nombre de liens identiques, 1 par défaut. Chaque unité devient une commande.Par défaut : 1
items[].targetUrltexte · requis
Adresse de la page vers laquelle le lien pointe.
items[].anchortexte · requis
Texte du lien.
items[].reltexte
Attribut du lien : DOFOLLOW (par défaut), SPONSORED ou NOFOLLOW. Certains sites refusent le dofollow (allows_dofollow).Valeurs : DOFOLLOW, SPONSORED, NOFOLLOWPar défaut : DOFOLLOW
items[].contentModetexte
Qui rédige. PLATFORM_WRITES (par défaut) : rédaction incluse. PUBLISHER_WRITES : l'éditeur rédige, s'il le propose. BUYER_PROVIDES : le texte est fourni dans providedContent.Valeurs : PLATFORM_WRITES, PUBLISHER_WRITES, BUYER_PROVIDESPar défaut : PLATFORM_WRITES
items[].mentionbooléen
Mention « article partenaire » sur la publication, true par défaut. Certains éditeurs l'imposent (mention_policy à ALWAYS).Par défaut : true
items[].brieftexte
Consignes de rédaction pour l'article.
items[].providedContenttexte
Texte de l'article, quand contentMode vaut BUYER_PROVIDES.
items[].projectIdtexte
Identifiant d'un projet du compte, pour y classer la commande.
promo_codetexte
Code promo, facultatif.
idempotency_keytexte · requis
Identifiant unique de cette commande, choisi par vous (un UUID, par exemple), en caractères ASCII. Renvoyez exactement le même pour un nouvel essai de la même commande.

list_ordersLister les commandesLecture seule

Liste les commandes passées par le compte en tant qu'acheteur, des plus récentes aux plus anciennes, par pages de 50. À utiliser pour suivre plusieurs commandes ou retrouver l'id de l'une d'elles. Renvoie total, page et items : id, number, status, product_type, site_id, target_url, anchor, rel, price_cents, published_url, published_at, guarantee_until, résultat du dernier contrôle du lien et created_at.

statustexte
Ne garder que les commandes dans ce statut.Valeurs : PENDING_PAYMENT, PAID, AWAITING_PUBLISHER, COUNTER_OFFER, ACCEPTED, CONTENT_PENDING, IN_PRODUCTION, REVIEW, PUBLISHED, VERIFIED, COMPLETED, REFUSED, CANCELLED, REFUNDED, DISPUTED
pageentier
Numéro de page, à partir de 1. Une page compte 50 commandes : total donne leur nombre.Par défaut : 1

get_orderDétail d'une commandeLecture seule

Donne le détail d'une commande du compte à partir de son id (renvoyé par create_order ou list_orders). À utiliser pour suivre une commande précise. Renvoie son statut, l'adresse de publication (published_url), la fin de garantie, une éventuelle contre-proposition de prix de l'éditeur (counter_offer_cents), l'historique (events) et les derniers contrôles du lien (checks).

idtexte · requis
Identifiant de la commande : champ id renvoyé par create_order ou list_orders.

get_balanceSoldeLecture seule

Donne le solde prépayé du compte : available_cents (disponible pour commander), pending_cents (en attente), currency et les derniers mouvements (entries). À utiliser avant de commander, ou pour expliquer un débit ou un remboursement.

Aucun argument.

Règles et protocole

Ce qu'il faut savoir avant de confier des achats à un agent, et de quoi brancher un client que cette page ne cite pas.

Un devis avant chaque commande

Demandez à votre agent de vous présenter le résultat de quote_order et d'attendre votre accord. Si votre client propose une confirmation avant l'exécution d'un outil, gardez-la pour create_order.

Pas de commande en double

create_order exige une clé d'idempotence. Pendant 24 heures, un nouvel appel avec la même clé et les mêmes lignes renvoie la première réponse : rien n'est recréé ni redébité. La même clé avec d'autres lignes est refusée.

Des appels consignés

Les appels qui créent une commande et ceux qui échouent sont inscrits au journal d'audit : compte, outil, succès ou échec, durée. Les arguments, qui contiennent vos briefs, n'y figurent pas.

  • Transport Streamable HTTP : chaque message JSON-RPC est un POST sur l'adresse du serveur, et la réponse est un objet JSON. Le serveur n'ouvre pas de flux SSE ni de session : GET et DELETE répondent 405.
  • Versions du protocole acceptées : 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26.
  • En 2026-07-28, sans poignée de main : chaque requête porte sa version et ses capacités dans params._meta, reprises dans les en-têtes MCP-Protocol-Version, Mcp-Method et Mcp-Name. Avant, le client commence par initialize.
  • Les mêmes données sont accessibles sans agent, par l'API publique.
Essai sans client : la liste des outils
curl -X POST https://fiablink.fr/api/mcp \
  -H "Authorization: Bearer fbl_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Prêt à brancher votre agent ?

Créez une clé dans vos paramètres, ajoutez le serveur à votre client, puis demandez-lui de chercher des sites.