Que fait Pipeline de Contenu CMS Headless via MCP ?
Quand l'utiliser
- Gérer, rédiger ou publier des articles de blog et des pages sur WordPress Headless via le Model Context Protocol (MCP).
- Orchestrer des pipelines autonomes de génération d'articles AI vers un frontend headless Next.js.
- Connecter des agents AI externes au RPC MCP de Sayoti Suite (
/wp-json/sayoti-mcp/v1/rpc). - Synchroniser les normes éditoriales, la matrice The Borderline, les règles cliniques E-E-A-T et les directives visuelles de marque entre le CMS et l'agent AI.
- Configurer des menus de navigation headless dynamiques, des audits de mots-clés de focus on-page et des rôles de page spécialisés (Lead Magnets, Politique de Confidentialité, Conditions d'Utilisation).
Prérequis et Politique Zéro Secret
⚠️ Protection stricte des identifiants (Zero Secret Leakage)
- NE JAMAIS coder en dur les clés API, mots de passe ou jetons d'authentification dans
SKILL.mdou les fichiers suivis par git. - Tous les identifiants doivent strictement provenir des variables d'environnement dans
$HERMES_HOME/.envou des fichiers.envspécifiques au profil. - Identifiants requis par ce pipeline :
MCP_SAYOTI_CMS_KEY: La clé secrète maître pour l'authentification RPC MCP WordPress (headers: {'X-Sayoti-Key': '${MCP_SAYOTI_CMS_KEY}'}).HERMES_CUSTOM_9ROUTER_SAYOTI_MY_ID_API_KEYouNINEROUTER_API_KEY: La clé API pour la passerelle multi-modèles 9Router (image_generateet embeddings).
- Configuration du serveur MCP WordPress (dans
config.yamlsousmcp_servers) :mcp_servers: sayoti-cms: url: "http://wordpress-sentra/wp-json/sayoti-mcp/v1/rpc" headers: X-Sayoti-Key: "${MCP_SAYOTI_CMS_KEY}" enabled: true timeout: 180 - Prérequis de la base de données vectorielle :
- Dans l'administration WordPress (
sayoti_mcp_settings),embedding_statusdoit être défini surenabledavec le modèlelocal/nomic-embed-textpour prendre en chargerag_searchet l'indexation automatique des articles.
- Dans l'administration WordPress (
Principes Architecturaux
-
WordPress comme pur entrepôt de données (Zero Timeout) :
- WordPress ne doit jamais exécuter d'appels AI synchrones de longue durée (génération LLM, modèles de diffusion) lors des requêtes REST/MCP.
- L'agent AI (Hermes) agit comme moteur d'exécution : il effectue des recherches, rédige du contenu, génère des visuels via 9Router et intègre les médias avant d'envoyer les données au CMS.
- Les opérations CMS (
save_post,save_page) doivent s'exécuter purement comme des transactions rapides en base de données (< 1 seconde) et déclencher la revalidation ISR à la demande de Next.js.
-
Séparation stricte des entités via Upsert :
- Utilisez toujours des outils upsert dédiés pour des entités de contenu distinctes :
save_postpour les articles de blog etsave_pagepour les pages statiques/landing. - Ne combinez pas les articles et les pages en un seul outil générique avec des paramètres conditionnels ; des schémas distincts éliminent les fuites de paramètres et les hallucinations du LLM.
- Logique upsert : si un
idou unslugcorrespondant existe, effectuez une mise à jour ; sinon, créez un nouveau contenu.
- Utilisez toujours des outils upsert dédiés pour des entités de contenu distinctes :
-
Rôles de page spécialisés et classification des Lead Magnets :
- Les pages remplissent des rôles commerciaux ou juridiques spécifiques dans l'entonnoir :
standard,lead_magnet,privacy_policy,terms_of_serviceoudisclaimer. - Ne laissez jamais les pages lead magnet ambiguës. Classez toujours
page_role: 'lead_magnet'et indiquez le type d'actif exact vialead_magnet_type(par exemple,"Checklist Milestone Perkembangan 2–7 Tahun (PDF)"). - Le CMS expose ces informations via
/wp-json/sayoti/v1/site-settingset enregistre des badges d'état d'article ([🎁 LEAD MAGNET: ...],[🔒 PRIVACY POLICY],[📜 TERMS OF SERVICE]) dans l'administration WordPress afin que les éditeurs humains reconnaissent immédiatement les fonctions des pages.
- Les pages remplissent des rôles commerciaux ou juridiques spécifiques dans l'entonnoir :
-
Menus de navigation headless dynamiques :
- Les menus ne doivent jamais être codés en dur dans le frontend. WordPress est la source unique de vérité via
/wp-json/sayoti/v1/menus?location=primaryetfooter. - La mise à jour des menus dans l'administration WP (
Apparence -> Menus) déclenche un webhook de revalidation ISR avec la balisemenuet le chemin/, mettant à jour instantanément l'en-tête et le pied de page Next.js sans redéploiement. - Toujours pré-initialiser les menus de navigation par défaut lors du premier démarrage afin que le tableau de bord WP dispose d'un menu prêt à éditer immédiatement.
- Les menus ne doivent jamais être codés en dur dans le frontend. WordPress est la source unique de vérité via
-
Source unique de vérité pour les règles éditoriales et visuelles :
- Les règles éditoriales (
content.md), les normes E-E-A-T (sayoti-editorial.md), les règles visuelles de marque (sayoti-visual-branding.md) et les règles de mots-clés SEO On-Page résident dans les options de la base de données WordPress. - L'agent récupère ces règles dynamiquement via
get_editorial_guidelinesafin que les résultats restent 100 % alignés avec la génération dans le tableau de bord.
- Les règles éditoriales (
-
Architecture découplée à 2 plugins (Contenu universel vs Pont headless) :
- Ne couplez jamais l'IA, les clusters de sujets et le serveur MCP à la logique de redirection headless. Un plugin monolithique se brise si un client a déjà un thème WordPress actif (Astra, Elementor, Divi) et souhaite uniquement le moteur IA/SEO.
- Séparez en deux plugins propres et indépendants :
sayoti-content-engine: Universel et indépendant du thème. Contient MariaDB 11.8 Vector RAG, Topic Clusters (Hub & Spoke), Link Explorer, Auto-guérison des liens morts, Rédacteur IA dans le tableau de bord, Lead Magnet CPT & CRM, et Serveur MCP (/wp-json/sayoti-mcp/v1/rpc). Pas de redirections, pas de dépendances Next.js. Fonctionne sur TOUTE installation WordPress existante.sayoti-headless-bridge: Installé uniquement lors de l'utilisation d'un frontend Headless Next.js. Contient les redirections de modèles 301 (avec interrupteur configurable), REST/site-settingset/menus, webhooks de revalidation ISR, Contrôleur de page (page d'accueil et rôles juridiques), et balises de suivi marketing dynamiques (GTM, Meta Pixel, TikTok, Ads) avec schéma SEO local (Google Maps et adresse professionnelle).
Flux de travail complet de génération d'articles en 10 étapes
[Prompt de sujet utilisateur]
↓ 1. Ingestion de la tâche
[WordPress MCP: get_topic_cluster & get_editorial_guidelines]
↓ 2. Récupération de la taxonomie pilier et des directives éditoriales
[Agent (Hermes): Mot-clé de focus et angle]
↓ 3. Formulation du mot-clé de focus et de l'angle spécifique
[WordPress MCP: rag_search]
↓ 4. Vérification de la cannibalisation sémantique (>80 %) et recherche de candidats aux liens internes
[Recherche Web: Hiérarchie de citations universelle à 4 niveaux]
↓ 5. Vérification des faits et étayage des affirmations
[Agents d'agence: content-creator]
↓ 6. Chargement de la personnalité de rédaction spécialisée
[Rédaction de contenu: Gutenberg natif]
↓ 7. Rédaction de 900 à 1500 mots en HTML sémantique (Accroche, H2, lien Hub, FAQ, CTA, Avertissement)
[9Router image_generate + MCP upload_media]
↓ 8. Téléchargement des actifs visuels avec filigrane adaptatif (Zero-Timeout)
[WordPress MCP: save_post]
↓ 9. Transaction instantanée en base de données + Indexation vectorielle automatique + ISR Next.js
[WordPress MCP: audit_post_seo]
↓ 10. Audit du score SEO (Objectif 80-100 %) et rapport en direct
[Mise en ligne sur Vercel Next.js]
Étape 1 : Ingestion du sujet et du contexte
Recevez la demande de contenu initiale de l'utilisateur ou du calendrier éditorial. Identifiez les points faibles du public cible et l'intention commerciale.
Étape 2 : Récupération des directives et des taxonomies
Appelez les outils sayoti-cms pour établir les limites structurelles :
get_topic_cluster: Inspectez les piliers de catégorie disponibles et récupérez le Hub principal officiel (ID de l'article, Titre, Slug) pour la catégorie prévue.get_editorial_guidelines: Récupérez les limites de longueur éditoriale actives (900–1 500 mots), l'anatomie obligatoire de l'ouverture, les règles de l'accordéon FAQ, le cadre d'action et les palettes de couleurs hex officielles.
Étape 3 : Recherche approfondie de mots-clés de focus et formulation de l'angle
- Intention de recherche et recherche de mots-clés : Ne choisissez PAS simplement une phrase au hasard sans recherche. Recherchez activement le comportement de recherche réaliste et les requêtes utilisées par le public cible défini dans le profil (questions d'information, problèmes ou comparaisons d'investigation via la recherche web / modèles de mots-clés).
- Sélectionnez le mot-clé de focus principal : Sur la base des résultats de la recherche, établissez exactement 1 mot-clé de focus principal avec une intention de recherche longue traîne claire (par exemple,
"cara melatih anak speech delay 2 tahun mandiri"plutôt que des termes de tête larges et génériques). - Définissez un angle net et unique : Ancrez le mot-clé choisi à un angle distinctif (par exemple, transition d'âge spécifique, routines domestiques quotidiennes réalistes ou étapes tangibles applicables en ≤24 heures).
- Mappage URL unique : Garantissez que ce mot-clé de focus est strictement dédié à une seule URL unique afin d'éviter toute future concurrence de mots-clés.
Étape 4 : Vérification sémantique RAG et contrôle de cannibalisation
Exécutez rag_search(query: "<focus_keyword> <angle>", limit: 5) :
- Filtre de cannibalisation : Si un article publié présente une similarité sémantique >80 % sur le même angle, pivotez immédiatement l'angle (par exemple, passez des symptômes généraux aux routines domestiques ou aux transitions spécifiques de jalons).
- Découverte de liens horizontaux : Notez les articles existants pertinents renvoyés par la recherche vectorielle pour servir de liens internes contextuels.
Étape 5 : Recherche de citations à plusieurs niveaux (Hiérarchie universelle à 4 niveaux)
Étayez toutes les affirmations factuelles à l'aide de la hiérarchie de preuves universelle :
- Niveau 1 (Autorités scientifiques et statutaires principales - Gold Standard) : Associations cliniques officielles (IDAI, Himpsi, PPHI, OMS, CDC, AAP), directives gouvernementales en matière de santé et revues à comité de lecture. Obligatoire pour les chiffres de jalons d'âge, les définitions cliniques et les allégations médicales.
- Niveau 2 (Recherche secondaire et industrielle réputée) : Agences de presse crédibles (Kompas, Antara, BBC) et livres blancs institutionnels pour les tendances macro.
- Niveau 3 (Observations et sentiment de terrain) : Difficultés réelles du public/des utilisateurs, notes de terrain des praticiens et discussions communautaires. Utilisez-les pour élaborer des accroches d'ouverture empathiques. Étiquetez toujours comme sentiment ou observation pratique de terrain, jamais comme fait normatif, statutaire ou clinique.
- Niveau 4 (Interdit) : Fermes de contenu, blogs SEO non crédités et reformulations AI sans liens primaires. Ne citez jamais.
Étape 6 : Chargement de la personnalité spécialisée
Invoquez agency_agents_load(agent="content-creator") (ou le spécialiste d'agence approprié) et appliquez le ton de communication dicté par le SOUL.md du profil actif.
Étape 7 : Rédaction complète en HTML sémantique (Gutenberg natif)
Composez 900–1 500 mots de HTML sémantique en utilisant les commentaires de blocs Gutenberg natifs de WordPress (<!-- wp:paragraph -->, <!-- wp:heading -->, <!-- wp:separator -->, <!-- wp:list -->) :
- H1 unique : Géré par le modèle de page ; commencez le corps directement par des paragraphes d'ouverture.
- Anatomie d'ouverture en 3 paragraphes :
- Paragraphe 1 (L'accroche) : Scénario réel validant les difficultés du public (issu des informations de niveau 3).
- Paragraphe 2 (Réponse rapide) : Réponse directe naturelle et apaisante (sans étiquette rigide "Réponse rapide :").
- Paragraphe 3 (Transition) : Invitation chaleureuse à explorer les solutions ensemble.
- Développement par H2 : 3 à 5 paragraphes complets par titre, intégrant des étapes pratiques de stimulation à domicile (≤24 heures).
- Intégration de liens internes :
- Vertical (Obligatoire) : Lien contextuel naturel vers le Hub principal dans les 300–500 premiers mots :
<a href="/posts/<hub-slug>" class="text-primary font-semibold underline hover:text-accent">...</a>. - Horizontal : Lien contextuel vers les articles satellites connexes découverts à l'étape 4.
- Vertical (Obligatoire) : Lien contextuel naturel vers le Hub principal dans les 300–500 premiers mots :
- Règle de contraste des cartes d'appel : Les notes spéciales doivent utiliser
<div class="my-8 rounded-2xl border-2 border-primary/25 bg-card p-6 sm:p-8 shadow-sm">avec des titres entext-primary font-boldoutext-foreground font-bold. N'utilisez jamaistext-secondarysur les cartes claires. - Séquence de clôture :
<h2>Kesimpulan & Langkah Pendampingan Terbaik</h2>: Conclusion avec 3 liens d'action (/metode-belajar,/checklist-milestone,/kontakou WhatsApp direct).<h2>Pertanyaan yang Sering Diajukan Orang Tua (FAQ)</h2>: Minimum 5 questions formatées en<details class="faq-accordion mb-4 rounded-xl border border-border p-4 bg-card transition-all"><summary class="cursor-pointer font-semibold text-foreground flex items-center justify-between"><span>...</span><span class="text-primary font-bold ml-2">+</span></summary><div class="mt-3 text-sm text-foreground/80 leading-relaxed border-t border-border pt-3">...</div></details>. Placé AVANT l'avertissement.- Avertissement clinique obligatoire :
<div class="my-6 rounded-xl border border-border bg-muted/30 p-4 text-xs italic text-muted-foreground leading-relaxed">Catatan: Informasi dalam panduan ini bersifat edukatif untuk mendukung stimulasi mandiri di rumah dan tidak menggantikan asesmen langsung serta anjuran medis dari dokter spesialis anak atau terapis profesional.</div> <h2>Referensi</h2>:<ol>liste de sources vérifiées avec des URLhttps://complètes cliquables correspondant aux citations en ligne.
- 7 critères SEO On-Page : Mot-clé de focus présent dans le titre, le slug du permalien, les 100 premiers mots, au moins un H2/H3, l'extrait et la densité maintenue entre 0,5 % et 2,0 %.
Étape 8 : Génération visuelle et téléchargement de médias (Zero Timeout)
- Générez une image via
image_generate(9Router) en imposant les couleurs hex de la marque officielle et une règleanti_text_rulestricte (pas de texte/chiffres/filigranes sur le canevas). - Téléchargez l'image via l'outil MCP
upload_media:- Passez
image_urlouimage_base64. - Passez
apply_watermark: truepour l'image à la une (appose automatiquement le logo de la marque de manière adaptative via PHP GD) etapply_watermark: falsepour les illustrations des H2. - L'outil renvoie l'
idofficiel (ID de pièce jointe) et l'urlsur le domaine CMS (https://cms...), 100 % conforme àremotePatternsde Vercel Next.js.
- Passez
- Intégrez les images dans l'article directement dans les blocs
<figure class="wp-block-image size-large"><img src="..." alt="..." /><figcaption>...</figcaption></figure>.
Étape 9 : Publication instantanée (save_post)
Appelez save_post avec :
title,slug,content,category_id,focus_keyword,excerpt.featured_media_id: Défini sur l'idde la pièce jointe renvoyé parupload_mediaà l'étape 8.generate_featured_image: falseetgenerate_in_article_images: false(contourne la génération d'images synchrone côté serveur ; s'exécute comme une écriture DB instantanée <1 seconde, éliminant complètement les risques de timeout).- WordPress automatiquement :
- Enregistre l'article et met à jour les champs méta SEO.
- Déclenche la revalidation ISR à la demande de Next.js.
- Indexe les sections de l'article dans la table d'embeddings vectoriels MariaDB (
wp_sayoti_vectors).
Étape 10 : Audit SEO et rapport final
- Appelez
audit_post_seo(post_id: <id>)pour ...
... [tronqué pour la traduction]