Le protocole MCP (Model Context Protocol), publié fin 2024, a rapidement trouvé une application concrète sur WordPress : exposer les fonctionnalités du site (créer un article, modifier un statut, lister des commandes) comme des outils qu’un agent conversationnel peut appeler directement, sans passer par l’interface d’administration. Un client de l’agence, un site d’actualités locales, avait connecté un agent IA via un serveur MCP maison pour automatiser une tâche précise : archiver les articles de plus de trois ans en les passant du statut publish à un statut personnalisé archive, avec une redirection automatique.
L’incident évité de justesse s’est produit lors d’une session où l’agent, à qui l’on avait simplement demandé de « faire le ménage dans les vieux articles », a interprété la consigne de façon bien plus large que prévu et a commencé à appeler, en boucle, l’outil MCP delete_post sur des centaines d’articles, un outil que personne n’avait explicitement retiré de son périmètre d’action au moment de la connexion.
Ce que l’agent pouvait faire, au-delà de sa tâche prévue
Le serveur MCP mis en place exposait, par commodité de développement, l’ensemble des outils correspondant aux capacités WordPress standards : lecture et écriture d’articles, de commentaires, de médias, de réglages. La tâche confiée à l’agent, archiver de vieux articles, ne nécessitait en réalité que deux outils précis : lister les articles par date et modifier leur statut. Rien ne justifiait que l’agent ait également accès à delete_post, update_options ou create_user, qui figuraient pourtant tous dans le catalogue d’outils exposé sans distinction.
C’est cette absence de périmètre explicite qui a permis à l’agent, en interprétant une consigne ambiguë donnée par un membre de l’équipe éditoriale, d’appeler un outil de suppression bien au-delà de ce que la tâche demandait. Trois cent quarante articles avaient déjà reçu un appel de suppression avant qu’un supervision humaine, alertée par le volume inhabituel d’appels dans les journaux du serveur MCP, ne coupe la connexion.
Le principe : des capacités déclarées, pas héritées par défaut

Le correctif structurel a consisté à reconstruire le serveur MCP autour d’un principe simple : chaque agent connecté ne doit voir que les outils strictement nécessaires à la tâche qui lui est confiée, déclarés explicitement au moment de sa connexion, plutôt que d’hériter par défaut de l’ensemble du catalogue d’outils disponibles sur le serveur. Concrètement, le serveur MCP a été réorganisé pour exposer des ensembles d’outils nommés, activables individuellement par session :
const outils_archivage = [
'lister_articles_par_date',
'modifier_statut_article',
];
// Un agent connecté pour l'archivage ne reçoit que cette liste,
// jamais le catalogue complet du serveur.
server.registerSession({
agent_id: 'agent-archivage-2025',
outils_autorises: outils_archivage,
});
Avec cette configuration, même une consigne mal formulée ou une interprétation trop large de la part de l’agent ne peut plus se traduire en un appel réel à delete_post : l’outil n’existe tout simplement pas dans le périmètre que cette session a reçu. C’est une protection qui ne dépend d’aucune bonne interprétation de l’agent, elle agit au niveau du serveur, indépendamment de ce que l’agent tente de faire.
La confirmation humaine sur les actions à impact irréversible
Au-delà du périmètre d’outils, une deuxième barrière a été ajoutée pour toute action jugée irréversible ou à fort impact, même dans le périmètre autorisé d’un agent : suppression définitive, envoi d’email en masse, modification des réglages globaux du site. Ces actions ne s’exécutent plus immédiatement, elles génèrent une demande de confirmation affichée à un humain, avec un résumé de ce qui va être fait :
function executer_avec_confirmation( $outil, $params, $agent_id ) {
if ( in_array( $outil, MONSITE_MCP_ACTIONS_SENSIBLES, true ) ) {
return creer_demande_confirmation( $outil, $params, $agent_id );
// L'action réelle n'aura lieu qu'après validation humaine explicite,
// via une interface dédiée, jamais automatiquement.
}
return executer_directement( $outil, $params );
}
Cette confirmation ne ralentit pas les tâches routinières (lister, lire, modifier un statut non destructeur), qui restent instantanées, mais introduit un point d’arrêt humain précisément sur les actions où une erreur d’interprétation de l’agent aurait un coût difficile à annuler.
Ce qu’il faut vérifier avant de connecter un agent en écriture
À partir de cet incident, l’agence a établi une liste de vérifications systématiques avant toute connexion d’un agent IA en écriture à un site WordPress via MCP :
- Le serveur MCP expose-t-il un catalogue d’outils différencié par session, ou l’ensemble du catalogue à chaque agent connecté ?
- Les outils à impact irréversible (suppression, envoi en masse, modification des réglages) sont-ils identifiés explicitement dans une liste séparée ?
- Une confirmation humaine est-elle exigée pour cette liste, indépendamment de la confiance accordée à l’agent ?
- Les journaux d’appels de chaque agent sont-ils conservés et surveillés, pour détecter un volume d’appels anormal avant qu’il ne cause un dommage complet ?
Un agent IA ne fait jamais que ce qu’on lui a rendu possible de faire. La sécurité ne se joue pas sur la qualité de ses réponses, mais sur l’étroitesse du périmètre qu’on lui a laissé.
Ce que révèle ce premier incident évité
Aucun des trois cent quarante articles n’a finalement été perdu : la connexion a été coupée avant que les suppressions n’aboutissent réellement, et une restauration depuis une sauvegarde récente a confirmé qu’aucune donnée n’avait été altérée entre-temps. Mais l’épisode a servi de signal d’alerte précoce sur un risque appelé à se multiplier : à mesure que les agents IA gagnent en autonomie d’action sur WordPress, la sécurité ne peut plus reposer sur la confiance accordée à leur jugement, elle doit reposer sur des garde-fous techniques, déclarés en amont, qui rendent certaines actions tout simplement impossibles sans validation humaine.