MCP Guide d'intégration
Le Protocole de contexte du modèle (MCP) est une norme ouverte qui permet aux assistants IA d'appeler directement des outils externes. SocialHub implémente une MCP serveur vous permettant de gérer les magasins, les membres, les coupons et les points depuis l'intérieur Claude Desktop, Cursor, ou n'importe quel MCP-client compatible.
Au lieu d'écrire du code, il vous suffit de demander à l'IA : « Lister toutes les boutiques actives » ou « Attribuer 500 points au membre m_abc123 ». L'assistant appelle alors l'outil SocialHub MCP pour vous.
Configuration de la connexion
SocialHub expose un point de terminaison HTTP Streamable MCP. Vous avez besoin de deux informations :
| URL du point de terminaison | https://flash.socialhub.ai/api/mcp |
| API En-tête de clé | Authorization: Bearer fl_live_... |
Créez une clé API à /flash/account/api-keys. Assurez-vous que la clé dispose des autorisations nécessaires pour les outils que vous prévoyez d'utiliser.
Claude Desktop Configuration
Ajoutez les éléments suivants à vos paramètres Claude Desktop MCP (claude_desktop_config.json) :
{
"mcpServers": {
"flash": {
"type": "http",
"url": "https://flash.socialhub.ai/api/mcp",
"headers": {
"Authorization": "Bearer fl_live_your_key_here"
}
}
}
}Cursor Configuration
Dans Cursor, accédez à Paramètres > MCP et ajoutez un nouveau serveur :
{
"mcpServers": {
"flash": {
"type": "http",
"url": "https://flash.socialhub.ai/api/mcp",
"headers": {
"Authorization": "Bearer fl_live_your_key_here"
}
}
}
}Le champ type accepte également streamable-http comme alias. Ces clients de bureau stockent la clé dans leur fichier de configuration ; traitez-la comme un secret et privilégiez le format variable d'environnement (ci-dessous) lorsque cela est possible afin de ne pas stocker la clé en clair sur le disque.
Connexion depuis Claude Code
Ajoutez SocialHub comme serveur HTTP MCP avec la commande claude mcp add. Exportez d'abord votre clé comme variable d'environnement afin qu'elle ne se retrouve jamais en clair dans un fichier de configuration ou l'historique de votre terminal :
export FLASH_API_KEY="fl_live_your_key_here"
claude mcp add --transport http flash \
https://flash.socialhub.ai/api/mcp \
--header "Authorization: Bearer ${FLASH_API_KEY}"Ou validez un .mcp.json à l'échelle du projet à la racine du dépôt. Référencez la variable d'environnement avec ${FLASH_API_KEY} — ne collez jamais de clé en texte brut :
{
"mcpServers": {
"flash": {
"type": "http",
"url": "https://flash.socialhub.ai/api/mcp",
"headers": {
"Authorization": "Bearer ${FLASH_API_KEY}"
}
}
}
}Auto-vérification après la connexion :
- Exécutez
claude mcp listet vérifiez queflashest bien connecté. - Demandez à l'assistant de "répertorier les outils SocialHub disponibles" : vous devriez voir uniquement les outils autorisés par les étendues de votre clé.
- La clé du serveur doit être exactement
flash; assurez-vous queFLASH_API_KEYest exporté dans le shell qui lance Claude Code.
Je vous ai eu : une clé invalide ou révoquée apparaît comme un échec de connexion, et non comme une invite d'authentification. SocialHub utilise l'authentification par jeton de porteur avec pas de repli OAuth, donc si le serveur apparaît comme étant en échec/déconnecté, revérifiez la valeur de la clé et qu'elle dispose des étendues dont vous avez besoin avant de déboguer quoi que ce soit d'autre.
Outils disponibles (75)
cwm_get_forecast_capabilitiesLire TimesFM 2.5 Préparation à l'analyse agrégée des tendances/quantiles et à la fusion locataire-privé (7/30/90 jours). Formation/validation en attente (mention explicite). Nécessite : predictions:read.
cwm_predict_next_behaviorsUne prédiction des consommateurs : distribution/classement final du prochain événement plus CWM + TimesFM 7/30/90d purchaseWindowsModèle d'événements locataires acquis privilégié ; une référence interne publique a priori de repli. Pas de résultats d'experts individuels. Probabilités d'événements non calibrées ; fenêtres d'achat null jusqu'à formation/validation. Nécessite predictions:read; metrics:read permet en outre d'effectuer des achats en ligne.
member_id*cwm_forecast_aggregate_trendPrévisions quotidiennes des indicateurs de marque/catégorie avec TimesFM 2,5 : point + q10…q90. En cas d'historique manquant, renvoie null. Les quantiles agrégés ne sont pas calibrés ; aucun intervalle personnalisé n'est fourni. Nécessite les options predictions:read et metrics:read.
metric?, horizon_days?, history_days?, category?cwm_predict_purchase_windowsProbabilités d'achat (locataire privé) CWM + TimesFM au 30/07/90 jours (0–1). Valeur nulle jusqu'à l'entraînement et la validation ; aucune valeur de repli artificielle. Nécessite les paramètres predictions:read et metrics:read.
member_idlist_metricsListe des indicateurs disponibles pour cette équipe à partir de la couche sémantique gouvernée (clé, étiquette, unité, certification, catégorie). Appel préalable pour découvrir les clés d'indicateurs valides. Nécessite l'autorisation `metrics:read`.
category?describe_metricObtenez les spécifications complètes d'une métrique : définition officielle, unité, certification, dimensions, champs filtrables, paramètres ajustables et guide d'utilisation. Nécessite metrics:read.
metricquery_metricExécutez une requête de métrique contrôlée et obtenez des chiffres avec leur définition officielle. Choisissez une clé de métrique, ainsi que des dimensions, des filtres, une plage de dates, une granularité et une comparaison d'une période à l'autre (optionnels) — sans utiliser SQL. Nécessite metrics:read.
metric, dimensions?, filters?, timeRange?, grain?, compare?, params?breakdown_metricDécomposer une métrique selon une seule dimension sur une période récente fixe, avec des libellés lisibles (noms de magasin/niveau/canal). Nécessite metrics:read.
metric, dimension, days, state?ask_metricsRépondez à une question en langage naturel en sélectionnant les indicateurs clés de performance (KPI) appropriés, en les récupérant et en analysant l'indicateur principal. Pour un diagnostic ouvert. Nécessite l'accès à metrics:read.
question, categories?list_storesListe de tous les magasins de l'équipe actuelle. Filtre de statut, recherche et pagination optionnels.
status?, search?, limit?, offset?get_storeObtenir les détails d'un magasin spécifique grâce à son ID.
store_idlist_membersListe des membres du programme de fidélité. Prise en charge du filtrage et de la pagination des programmes.
programId?, limit?, offset?, status?get_memberAccès aux informations d'un membre du programme de fidélité par son identifiant. Retourne les données personnelles décryptées.
member_idlist_coupon_poolsListe des groupes de coupons. Prend en charge les filtres de statut et de type.
status?, coupon_type?, limit?, offset?get_dashboard_statsAperçu du tableau de bord opérationnel (captures, scans, taux de capture, coupons, magasins, abonnement). Cet indicateur n'est pas réglementé ; utilisez les outils de mesure pour obtenir des indicateurs commerciaux fiables.
(none)earn_pointsAttribuez des points de fidélité à un membre. Renvoie l’ID de transaction et le nouveau solde.
member_id, amount, description?redeem_pointsDéduction des points de fidélité d'un membre (principe du premier entré, premier sorti).
member_id, amount, reasonget_points_balanceAccéder au solde de points actuel du membre et à son historique de transactions récentes.
member_id, limit?get_member_couponsObtenir les coupons disponibles (non utilisés, non expirés) d’un membre.
member_idget_member_tierConsultez le niveau actuel du membre, les conditions de passage au niveau supérieur et tous les niveaux.
member_idget_member_receiptsAccédez à l’historique des soumissions de reçus des membres, avec le statut OCR et les points attribués.
member_id, limit?redeem_points_for_couponÉchangez vos points de fidélité contre un coupon parmi ceux disponibles (opération atomique : points + coupon, ou aucun des deux).
member_id, pool_id, points_costissue_couponÉmettre un coupon à partir d'une réserve pour un membre (membre unique ; les audiences groupées passent par le processus de confirmation So). Nécessite l'outil coupons:write.
member_id, pool_id, run_id?check_email_frequencyVérifiez si un e-mail marketing peut être envoyé à une adresse en respectant les limites de fréquence (1/jour, 2/semaine, 4/mois).
emaillist_ambassador_candidatesListe des candidats Ambassadeurs notés pour le programme de fidélité (mode Pro). Champ vide en mode Lite.
band?, status?, level?, sort_by?, limit?, offset?get_ambassador_metricsObtenez le rapport de retour sur investissement des Ambassadeurs : les trois sous-objectifs, la fidélisation au deuxième mois et le critère de décision à 90 jours.
since_days?, assumed_paid_cac_usd?issue_ambassador_codeÉmettre ou mettre à jour le code d'affiliation Ambassadeur personnel d'un membre. Renvoie le code string.
member_id, single_use?, max_redemptions?, min_order_amount?get_tracking_statsAccédez à l'analyse des visites et du comportement des utilisateurs : vue d'ensemble, pages les plus consultées, répartition par appareil et sources de trafic.
metric?, period?, start?, end?, campaign?, limit?get_member_profileProfil agrégé d'un membre (accessibilité, consentement/CCPA, fidélisation, regroupements commerciaux/catégories/canaux/engagement, préférences déclarées, balises, géolocalisation approximative, tranche d'âge). Données personnelles masquées — aucun nom ni coordonnées. Nécessite members:read.
member_idget_member_timelineHistorique récent des activités d'un membre (visites, points, coupons, courriels, reçus) + résumé, pour déterminer une action personnalisée. Renvoie les données personnelles décryptées. Nécessite : members:behavior:lire.
member_id, limit?list_segmentsAfficher les segments d’audience de l’équipe (nom, statut, nombre de membres en cache). Nécessite l’option « segments:read ».
status?, limit?, offset?create_segmentCréer un segment d'audience à partir de conditions structurées (jamais de SQL) ; rejeter les doublons. Nécessite : segments:write + une clé appartenant à l'utilisateur.
name, conditions, description?list_automationsLister les automatisations de l'équipe (campagnes déclenchées par des événements) et leur statut. Nécessite automations:read.
status?pause_automationMettre en pause une automatisation en cours par ID de campagne (idempotent). Nécessite automations:write.
campaign_idlist_campaign_templatesListe des modèles de campagne disponibles pour cette équipe (officiels + enregistrés), pour découvrir un template_id pour create_campaign_draft. Nécessite campaigns:read.
limit?list_campaignsRépertoriez les campagnes récentes de l'équipe (identifiant, titre, statut) pour trouver un source_campaign_id pour cloner un brouillon. Nécessite campaigns:read.
limit?, status?create_campaign_draftCréez une version brouillon d'une campagne à partir d'un modèle ou d'une campagne précédente (ne sera jamais envoyée ; une vérification humaine est requise). campaigns:write-brouillon.
title, template_id?, source_campaign_id?, segment_id?, merge_context?check_member_reachVérifie si un membre a déjà été contacté (quel que soit le système) sur un canal récemment — évite les contacts excessifs. Nécessite members:behavior:read.
member_id, channel, days?create_memberCréer un membre de fidélité, ou résoudre de manière idempotente un membre existant par externalId/email. Le consentement marketing n'est PAS activé via MCP. Nécessite members:write.
email, fullName, phone?, externalId?, birthMonth?, birthDay?update_memberMettre à jour le profil/l'identité d'un membre (courriel, téléphone, fullName, externalId, statut). Propriété de l'équipe imposée. Nécessite members:write.
member_id, email?, fullName?, phone?, externalId?, status?upsert_storeCréez un magasin ou mettez à jour le magasin existant correspondant externalId pour cette équipe. Nécessite stores:write.
name, externalId?, address?, city?, state?, country?, timezone?ingest_orderEnregistrez un bon de commande et attribuez automatiquement des points (membre, problème résolu par memberId > externalId > courriel). Nécessite orders:write.
externalOrderId, customer, totalAmount, financialStatus?, currency?, orderName?, storeId?reverse_pointsRécupération des points d'un membre, liée à l'identifiant de transaction d'origine — pour un remboursement ou une annulation via un terminal de point de vente/ERP. Nécessite l'autorisation points:write.
member_id, reversesTransactionId, amount, reasonassign_tagAttribuez manuellement une étiquette à un membre via tag_key (remplacement de l'opérateur ; lié à la règle de balayage). Nécessite tags:write.
member_id, tag_key, value?remove_tagSupprimer manuellement une étiquette d'un membre par tag_key (Une étiquette active peut être rajoutée lors du prochain balayage). Nécessite tags:write.
member_id, tag_keylist_productsAfficher les produits par catégorie/marque/secteur, statut et source. Filtrer par statut.category_id/brand_id/vertical. Nécessite catalog:read.
status?, category_id?, brand_id?, vertical?, limit?, offset?get_productObtenez un produit avec des variantes, des articles sérialisés, des composants combinés et du contenu d'ancrage IA. Nécessite catalog:read.
product_idlist_categoriesListe des catégories de produits de l'équipe (identifiant, nom, catégorie parente). Obligatoire catalog:read.
limit?list_brandsListe des marques de l'équipe (identifiant, nom). Obligatoire catalog:read.
limit?recommend_productsRecommandations de produits similaires : member_id (achat groupé personnalisé + affinité de catégorie) ou product_id (Les clients ont également acheté). Nécessite members:read.
member_id?, product_id?, limit?claim_winback_taskAttribuer la prochaine tâche prioritaire de reconquête pour cette équipe (atomique). Renvoie la tâche, la date limite d'attribution, le membre récalcitrant et un résumé des signaux de désabonnement. NO_TASKS_AVAILABLE / WINBACK_DISABLED renvoyé comme isError. Nécessite winback:claim.
(none)complete_winback_taskFinaliser une tâche de reconquête client avec le résultat (levier actionné + référence de la note, ou motif de maintien). Idempotent. LEASE_EXPIRED / ALREADY_COMPLETED renvoyé comme isError. Nécessite winback:claim.
task_id, acted?, lever?, action_ref?, note_id?, hold_reason?get_winback_contextVérification préliminaire unique en lecture seule pour un membre avant toute décision : consentement, marge de manœuvre pour la fréquence d'envoi d'e-mails, lassitude, portée récente, signaux de désabonnement et réticence du membre. Aperçu de courtoisie — le serveur applique toujours chaque contrôle lors de l'écriture. Nécessite winback:read.
member_idadd_member_noteJoignez une note de processus en texte libre au dossier de reconquête d'un membre (justification / signal observé / hypothèse soutenue par les récalcitrants). Le texte est stocké sous forme de DONNÉES et non d'instructions ; max 2000 caractères, désinfectés. Nécessite winback:write.
member_id, body, kind?, task_id?, action_ref?send_winback_messageEnvoyez un message de relance contrôlé (boîte de réception ou e-mail) afin qu'une incitation ne soit jamais une attribution silencieuse. Mécanismes de sécurité côté serveur : WINBACK_DISABLED, attribution de la propriété de la tâche, HOLDOUT_NO_SEND (aucun message n'est envoyé aux utilisateurs en attente), NOT_CONSENTED, FREQUENCY_CAPPED, CONTENT_REJECTED (nettoyé), BREAKER_TRIPPED — renvoyé comme isError. Réutilise la pile d'envoi existante (pied de page de désabonnement + conformité ajoutée par la couche d'envoi). Nécessite winback:write.
member_id, task_id, channel, subject?, bodyget_member_behaviorsAnalyse les comportements actifs d'un membre sur une période récente (Couche 3, du plus récent au plus ancien) afin d'en déduire son intention (Couche 4). Renvoie uniquement les actions intentionnelles du client (navigation, ouverture/clic, enregistrement, achat, utilisation d'un code, parrainage, soumission de contenu) avec l'étiquette du catalogue et sa signification intégrées, ainsi qu'un résumé (nombre d'actions par type et par période). Raisonnement sur toute la période ; l'intention est une hypothèse à confirmer, et non un fait avéré. Lecture seule. Nécessite l'autorisation winback:read.
member_id, since_days?, limit?claim_agent_taskAttribuer la prochaine tâche de décision à cet agent (atomique ; possibilité de filtrer par type). Renvoie l’identifiant de la tâche, son type, les informations la concernant et une date limite de location. NO_TASKS_AVAILABLE / AGENT_TASKS_DISABLED renvoyé comme isError. Nécessite agent_tasks:réclamer.
kind?get_agent_taskLisez les faits relatifs à la tâche de décision d'un agent (type, sujet, motif du signalement, statut) avant de prendre une décision. AGENT_TASK_NOT_FOUND renvoyé comme isError. Nécessite agent_tasks:lire.
taskIdcomplete_agent_taskFinalisez une tâche louée en prenant une décision et en appliquant son effet via les écritures idempotentes existantes. fraud_household_referral : bloquer (récupérer les deux parties) / autoriser (ignorer le signalement) / escalader (laisser à un humain). ALREADY_COMPLETED / NOT_LEASE_OWNER / LEASE_EXPIRED renvoyé comme isError. Nécessite agent_tasks:claim.
taskId, decision, reason?list_objectsListe des objets métier sur lesquels cette équipe peut raisonner : les objets principaux de la plateforme (membre, commande, magasin, coupon, campagne, produit, segment, étiquette) plus ceux de cette équipe. MCP-Objets personnalisés visibles : clé, étiquette et signification concise. Appelez d’abord pour découvrir les objets valides. object clés. Nécessite introspection:read.
(none)describe_objectDécrivez une entreprise object À partir du registre géré : signification faisant autorité et propriétés partitionnées en faits (basés sur des colonnes), dérivés (références de métriques/balises/agrégats actualisées – jamais de recalcul de la qualité) et personnalisés (champs personnalisés de cette équipe). Les propriétés PII renvoient uniquement des métadonnées, jamais de valeurs. champs=résumé (par défaut) ou complet. Nécessite introspection:read.
object, fields?list_actionsListe des actions de l'agent régi (ce qu'un agent peut faire) : cible object, effet secondaire, engrenage (auto/examen/interdit), clés de précondition côté serveur, limite de valeur et réversibilité — auto-vérification avant de proposer une écriture. Filtre optionnel par object. Nécessite introspection:read.
object?list_stamp_programsListe des cartes de fidélité de l'équipe (eStampProgrammes : identifiant, nom, nombre de timbres requis, type de récompense (coupon/points/manuel), réinitialisation automatique et statut. Appelez d’abord pour obtenir un numéro. program_id. Nécessite stamp:read.
(none)get_member_stamp_cardsObtenez les cartes de fidélité actives d'un membre : nom du programme, tampons actuels, tampons manquants, programmes complétés à ce jour et récompense. Nécessite stamp:read.
member_idgrant_stampsAccorder des timbres à un membre pour un programme de fidélité (par exemple, une visite en magasin). Idempotent avec idempotency_keyUne fois la carte complétée, la récompense (coupon/points) est émise automatiquement. Montant plafonné par appel. Nécessite stamp:write.
program_id, member_id, amount?, reason?, idempotency_key?get_member_pointsPoints d'un membre : solde disponible, cumul total, échanges, niveau actuel, lot expirant le plus rapidement. Clé liée au membre → points personnels (omettre member_id) ; clé d'équipe → transmettre member_id. Nécessite loyalty:self:read.
member_id?get_member_points_historyTransactions récentes d'un membre (points gagnés/utilisés/ajustés), de la plus récente à la plus ancienne. Clé personnelle → historique ; clé d'équipe → laissez-passer member_id. Nécessite loyalty:self:lire.
member_id?get_member_rewardsRécompenses pour lesquelles un membre peut échanger des points — catalogue avec coût en points, classées par accessibilité en fonction du solde du membre. Clé personnelle → personnelle ; clé d’équipe → partagée member_id. Nécessite loyalty:self:lire.
member_id?get_loyalty_program_rulesFonctionnement du programme de fidélité : taux d’accumulation, bonus de bienvenue, valeur des points, modalités d’inscription, et FAQ approuvée par la marque. Informations publiques. Clé d’accès réservée aux membres. Nécessite l’inscription à loyalty:self:read.
member_id?list_synthetic_scenariosListez les scénarios de simulation de panel synthétique en précisant pour chacun leurs limites d'utilisabilité, leur niveau de confiance maximal et leurs champs de saisie. Appelez d'abord pour choisir un type. Nécessite metrics:read.
(none)get_synthetic_calibrationétalonnage du panel synthétique de la marque (taux de réussite des prédictions synthétiques passées par rapport à la réalité ; null (jusqu'à ce que des backtests existent). Nécessite metrics:read.
(none)get_synthetic_reportLisez le rapport honnête gelé pour une analyse par panel synthétique — lecture directionnelle, plafond de confiance, indicateurs de suppression, thèmes — ou un blockReason si ce n'est pas prêt. Nécessite metrics:read.
run_idrun_synthetic_panelExécuter un panel synthétique : des jumeaux numériques anonymisés d'un segment réagissent à un stimulus, produisant un rapport directionnel fiable (jamais de valeurs absolues réelles). Renvoie un identifiant d'exécution (run_id) à interroger. Limité par un nombre maximal d'exécutions quotidiennes + ≤ 50 jumeaux. Nécessite le module synthetic:write.
segment_id, kind, fieldsSécurité et confidentialité
L’interface MCP est une couche d’IA conviviale, et non un outil d’administration en masse. Quelques points importants :
- Le serveur est la limite, pas le chat. Les opérations d'écriture (attribution/échange de points, émission de coupons, émission de codes ambassadeur) nécessitent la portée d'écriture correspondante et sont délimitées par une protection côté serveur : un plafond de valeur par appel plus une limite de taux d'écriture par clé, tous deux appliqués en cas de fermeture en cas d'échec. Toute confirmation dans le chat demandée par votre client IA est une question de courtoisie : le serveur est ce qui empêche réellement une clé divulguée ou un modèle injecté rapidement de se vider des points.
- Certains outils de lecture renvoient les informations personnelles des membres. Des outils comme
get_memberetlist_memberspeuvent renvoyer les noms et adresses e-mail déchiffrés à votre client d'IA. Traitez ces données en conséquence et privilégiez les clés à privilèges minimaux. - Ne jamais enregistrer une clé en clair. Toujours faire référence à
${FLASH_API_KEY}dans une copie.mcp.jsonenregistrée plutôt qu'à la clé littérale. - Utilisez des clés à privilèges minimaux et en lecture seule. Créez une clé limitée aux outils dont vous avez besoin. Si une clé ne contient pas d'outil, celui-ci est simplement masqué et n'apparaît jamais dans la liste.
Les chiffres proviennent de la couche sémantique gouvernée
Chaque indicateur rapporté par l'IA (GMV, nombre de membres actifs, taux de conversion, etc.) transite par la couche d'indicateurs contrôlée de SocialHub, qui détient une définition unique et faisant autorité (et une certification) pour chaque indicateur. Les outils list_metrics, describe_metric, query_metric, breakdown_metric et ask_metrics sélectionnent les clés et dimensions des indicateurs sous cette gouvernance — l'IA n'écrit jamais de requêtes SQL. Ainsi, les données obtenues correspondent à vos tableaux de bord et ne sont pas des agrégats ad hoc sujets à des dérives.
Exemple de conversation
list_stores avec le statut « actif »