Klaviyo, Claude et MCP : auditer un compte en lecture seule
Réponse courte. MCP est un standard ouvert qui permet à un client d'IA comme Claude d'interroger un système externe via des outils déclarés par un serveur. Klaviyo publie son propre serveur MCP, et ce serveur accepte un paramètre read-only=true qui désactive tous les outils d'écriture. En lecture seule, vous obtenez l'inventaire complet d'un compte (flows, segments, listes, métriques, rapports de campagnes et de flows) sans qu'aucune action ne puisse toucher la base ni partir en envoi.
C'est la seule configuration que nous acceptons de brancher sur un compte client. La suite explique ce qu'elle donne réellement, où elle s'arrête, et pourquoi la restriction est un choix d'exploitation plutôt qu'une contrainte technique.
Ce qu'est MCP, sans le vernis
Le Model Context Protocol est décrit par sa documentation comme un standard open source pour connecter des applications d'IA à des systèmes externes : sources de données, outils, workflows.
L'architecture distingue trois rôles. L'hôte est l'application d'IA. Le client est le composant qui maintient une connexion avec un serveur, à raison d'un client par serveur. Le serveur est le programme qui expose le contexte et les outils. La communication passe par une couche de données fondée sur JSON-RPC 2.0 et une couche de transport, avec deux transports documentés : STDIO pour les serveurs qui tournent en local sur la même machine, Streamable HTTP pour les serveurs distants.
Le point qui compte pour un praticien CRM est ailleurs. Les outils MCP sont, selon la spécification, « model-controlled » : le modèle les découvre et les invoque lui-même à partir du contexte et de la demande. La même page pose un avertissement explicite : pour des raisons de sûreté et de sécurité, il devrait toujours y avoir un humain dans la boucle capable de refuser une invocation d'outil.
Autrement dit, brancher un serveur MCP sur un outil marketing revient à donner à un modèle une liste de fonctions qu'il choisira d'appeler seul. Ce que contient cette liste devient donc la vraie question de configuration.
Le serveur MCP officiel de Klaviyo
Klaviyo documente son propre serveur, en deux variantes.
La variante distante, présentée comme recommandée, s'atteint sur https://mcp.klaviyo.com/mcp, en OAuth avec dynamic client registration et en transport Streamable HTTP. Klaviyo précise que cette fonctionnalité n'est disponible que pour les utilisateurs ayant un rôle Owner, Admin ou Manager sur le compte.
La variante locale se lance via uvx klaviyo-mcp-server@latest et s'authentifie avec une clé privée passée en variable d'environnement PRIVATE_API_KEY. Klaviyo donne la table des scopes à cocher sur cette clé pour disposer de tous les outils : Accounts en lecture, Campaigns en full, Catalogs en lecture, Events en full, Flows en lecture, et ainsi de suite.
Côté Claude, la mécanique de branchement est celle de n'importe quel serveur distant : la documentation Claude Code décrit claude mcp add --transport http <name> <url> pour les serveurs HTTP. La même page porte un avertissement à lire avant de brancher quoi que ce soit sur un compte client : vérifiez que vous faites confiance au serveur, car un serveur qui va chercher du contenu externe vous expose à un risque de prompt injection.
Le réglage qui change tout : read-only=true
Le serveur distant accepte des paramètres de requête qui contrôlent son comportement. Le plus important, tel que Klaviyo le documente : read-only vaut false par défaut, et le passer à true désactive tous les outils capables d'effectuer une action d'écriture sur le compte. Sur le serveur local, l'équivalent est la variable d'environnement READ_ONLY.
Trois autres paramètres méritent d'être connus :
disable-tools-with-user-generated-contentdésactive les outils qui lisent du contenu généré par les utilisateurs du compte. Klaviyo accompagne le paramètre par défaut d'une consigne de relecture attentive de chaque appel d'outil, pour éviter que le client n'agisse sur des instructions malveillantes.core-tools-onlylimite le serveur à environ 40 outils dits « core », ce qui réduit le nombre d'outils chargés dans le client.toolsetsrestreint l'exposition aux outils dont tous les scopes requis figurent dans la liste que vous fournissez, au formatresource:access, par exempletoolsets=profiles:read,campaigns:read.
La combinaison de read-only=true et d'un toolsets limité aux scopes de lecture donne un serveur dont la surface d'action est réduite à ce que vous avez explicitement autorisé. C'est le réglage d'audit.
Ce qu'un MCP en lecture seule permet réellement d'auditer
La table des outils publiée par Klaviyo marque d'une colonne « Read Only » ceux qui ne modifient rien. Ce périmètre couvre l'essentiel du diagnostic de compte.
L'inventaire. get_flows liste les flows, get_flow en donne le détail, get_flow_action descend au niveau d'une action. get_segments et get_lists font le même travail sur les groupes, avec get_flows_triggered_by_segment et get_flows_triggered_by_list pour relier un groupe aux flows qu'il déclenche. C'est exactement la cartographie que l'on reconstitue à la main dans un audit Klaviyo classique.
Le reporting. get_campaign_report et get_flow_report renvoient les rapports de performance des campagnes et des flows. query_segment_values et query_segment_series interrogent l'appartenance aux segments, en valeur et dans le temps. query_form_values et query_form_series font l'équivalent sur les formulaires de capture.
Les événements et les métriques. get_metrics liste les métriques, query_metric_aggregates agrège les données d'événements associées à une métrique, get_events et get_profiles descendent au niveau unitaire.
En pratique, cela suffit à répondre aux questions qui structurent un audit : quels flows sont actifs et lesquels ne le sont plus, quels segments déclenchent quoi, quelle est la répartition du revenu entre flows et campagnes, quels segments d'exclusion existent et sont réellement branchés, quelle est la structure de capture. C'est un accélérateur de relevé, pas un remplaçant du jugement.
Ce que ça ne permet pas
Trois limites à poser franchement.
Aucune modification. En lecture seule, tous les outils d'écriture sont hors circuit : les create_, update_, delete_, bulk_ et l'envoi de campagne disparaissent de la liste exposée. C'est le but, mais cela signifie qu'un audit MCP produit un constat et une liste de correctifs, jamais un compte corrigé.
Aucun accès à ce que l'API n'expose pas. Le serveur MCP est une façade sur les endpoints de la référence API de Klaviyo. Ce qui ne s'y trouve pas ne sortira pas du serveur, quelle que soit la formulation de la demande.
Aucune exonération des rate limits. Klaviyo documente un algorithme de fenêtre fixe à deux fenêtres, une burst d'une seconde et une steady d'une minute, avec des paliers allant de XS (1 requête par seconde en burst, 15 par minute en steady) à XL (350 par seconde, 3500 par minute). Le dépassement renvoie un HTTP 429, et les réponses non limitées portent les en-têtes RateLimit-Limit et RateLimit-Remaining. Détail qui compte en agence : les apps OAuth reçoivent leur propre quota par instance installée, alors que les intégrations par clé privée partagent le même quota par compte. Un audit qui balaie un gros compte via une clé privée entre donc en concurrence avec vos autres intégrations.
Pourquoi la lecture seule est un choix de sécurité
La restriction n'est pas une limite technique du protocole. Les outils d'écriture existent, Klaviyo les documente, et ils fonctionnent : créer un segment, mettre à jour le statut d'un flow, supprimer une liste, supprimer des profils en masse, envoyer une campagne à son audience configurée.
Le raisonnement est celui du rayon de destruction. Un outil qui appelle get_flow_report produit au pire une réponse fausse, qu'un humain relit. Un outil qui appelle send_campaign ou bulk_suppress_profiles produit un effet irréversible sur une base et sur une réputation d'expéditeur. La spécification MCP recommande un humain capable de refuser chaque invocation, mais une recommandation de spécification n'est pas un garde-fou d'exploitation : elle dépend de l'attention de la personne qui valide, à la vingtième confirmation d'affilée.
Le paramètre read-only déplace le garde-fou du bon vouloir de l'opérateur vers la configuration du serveur. Un outil qui n'est pas chargé ne peut pas être appelé, même par un modèle qui l'aurait jugé pertinent, même sous l'effet d'une instruction glissée dans un contenu lu en cours de route. C'est la même logique que celle d'un compte de service en lecture sur une base de production.
À cela s'ajoute la question du contenu. La consigne de Klaviyo sur disable-tools-with-user-generated-content dit exactement ce qu'il faut retenir : les données d'un compte CRM contiennent du texte écrit par des tiers (noms de profils, propriétés personnalisées, contenus de formulaires), et ce texte arrive dans le contexte du modèle. Sur un compte client, c'est une surface d'entrée qu'on réduit par défaut.
Notre protocole d'audit, tel qu'il tourne
Ce qui suit est notre méthode, pas une procédure documentée par un éditeur.
- Serveur en
read-only=true, avec untoolsetslimité aux scopes de lecture nécessaires au périmètre convenu. - Relevé automatisé de l'inventaire (flows, segments, listes, formulaires, métriques) et des rapports sur une fenêtre fixe.
- Interprétation humaine. Le modèle relève, il ne tranche pas : les arbitrages de segmentation, d'hygiène de liste ou de coupure de contacts morts restent des décisions.
- Correctifs appliqués à la main dans l'interface, jamais par l'agent.
Le gain n'est pas dans la production de recommandations, que le relevé ne fournit pas. Il est dans la phase de collecte, celle où l'on ouvrait auparavant quarante écrans pour reconstituer un schéma. Sur la nature de la donnée qui alimente tout cela, voir l'API d'événements.
FAQ
Faut-il un plan Klaviyo particulier pour utiliser le serveur MCP ?
Klaviyo ne documente pas de condition de plan sur cette page. Elle documente une condition de rôle : le serveur distant n'est disponible que pour les utilisateurs ayant un rôle Owner, Admin ou Manager sur le compte.
Peut-on empêcher l'agent de modifier le compte ?
Oui. Le paramètre de requête read-only=true sur le serveur distant, ou la variable d'environnement READ_ONLY sur le serveur local, désactivent les outils capables d'écrire. Les outils désactivés ne sont pas exposés au client.
Quelle différence entre serveur MCP local et distant ?
Le transport et l'authentification. Le serveur local tourne sur votre machine et s'authentifie avec une clé privée Klaviyo ; le serveur distant est joint en Streamable HTTP sur https://mcp.klaviyo.com/mcp et s'authentifie en OAuth avec dynamic client registration.
Est-ce que ça remplace un audit humain ?
Non. Le périmètre en lecture seule produit un relevé d'inventaire et des rapports. L'arbitrage, la hiérarchisation des correctifs et leur application restent hors du champ des outils.
Combien de requêtes peut-on passer ?
Cela dépend de l'endpoint. Klaviyo applique des paliers de XS (1 par seconde en burst, 15 par minute) à XL (350 par seconde, 3500 par minute), documentés endpoint par endpoint dans la référence API, avec un HTTP 429 au dépassement.
Pour aller plus loin
Le cadre complet d'un diagnostic de compte est détaillé sur notre page agence Klaviyo.
Provenance et vérification
Les sept sources ont été ouvertes et vérifiées en HTTP 200 le 2026-08-22. Rattachement des affirmations : définition de MCP comme standard open source de connexion entre applications d'IA et systèmes externes sur la page d'introduction ; rôles hôte, client et serveur, couche de données JSON-RPC 2.0, couche de transport, transport STDIO pour les serveurs locaux et Streamable HTTP pour les serveurs distants sur la page d'architecture ; caractère model-controlled des outils, recommandation SHOULD d'un humain dans la boucle capable de refuser une invocation, et découverte par tools/list sur la page Tools de la spécification ; commande claude mcp add --transport http et avertissement sur la confiance à accorder à un serveur et le risque de prompt injection sur la page MCP de la documentation Claude Code ; URL du serveur distant Klaviyo, authentification OAuth avec dynamic client registration, transport Streamable HTTP, restriction aux rôles Owner, Admin et Manager, paramètre read-only=true qui désactive les outils d'écriture, paramètre disable-tools-with-user-generated-content, paramètre core-tools-only limitant à environ 40 outils, paramètre toolsets au format resource:access, variables d'environnement READ_ONLY et ALLOW_USER_GENERATED_CONTENT du serveur local lancé via uvx klaviyo-mcp-server@latest, table des scopes de la clé privée et table complète des outils avec leur colonne Read Only sur la page Klaviyo MCP server ; algorithme de fenêtre fixe à deux fenêtres (burst 1 seconde et steady 1 minute), paliers XS à XL, code 429, en-têtes RateLimit-Limit et RateLimit-Remaining, et quota propre par instance d'app OAuth contre quota partagé par compte pour les clés privées sur la page des rate limits ; existence d'une référence API documentée endpoint par endpoint sur la page API overview. Aucun chiffre de performance, de gain de temps ou de résultat client n'est avancé : aucune source déclarée n'en documente. Le protocole de travail décrit en fin d'article est présenté comme méthode d'agence et non comme capacité documentée.
- Sources contrôlées le
- Relu par
- Contradiction independante en session Claude, distincte de la session de redaction. Les sept sources ont ete rouvertes et les affirmations porteuses reverifiees une par une dans la page Klaviyo MCP server read-only=true, core-tools-only limitant a environ 40 outils, OAuth avec dynamic client registration, transport Streamable HTTP, restriction aux roles Owner, Admin et Manager, lancement local par uvx klaviyo-mcp-server@latest et variables READ_ONLY et ALLOW_USER_GENERATED_CONTENT. Le CLI local etant hors service, aucune revue par CLI n'a eu lieu.
- Assistance IA
- Oui
- Sources
-
- modelcontextprotocol.io/docs/getting-started/intro
- modelcontextprotocol.io/docs/learn/architecture
- modelcontextprotocol.io/docs/concepts/tools
- docs.claude.com/en/docs/claude-code/mcp
- developers.klaviyo.com/en/docs/klaviyo_mcp_server
- developers.klaviyo.com/en/docs/rate_limits_and_error_handling
- developers.klaviyo.com/en/docs/api_overview
Besoin d'appliquer ça à votre stack ?
30 minutes avec Charlotte. On audit votre setup CRM en direct, on chiffre l'opportunité, vous repartez avec un plan d'attaque.
Réserver 30 minutes →