Un agent chargé de nettoyer les balises orphelines d’un site de plus de 5 000 articles s’est retrouvé, à cause d’une mauvaise formulation de sa propre logique de boucle, à rappeler le même outil de suppression plus de 400 fois en moins d’une minute, avant qu’un administrateur ne remarque l’anomalie dans les journaux serveur et ne coupe manuellement l’accès. Aucune donnée n’a été perdue dans ce cas précis, mais l’incident a suffi à convaincre l’équipe de poser un quota strict, pas seulement une bonne pratique de prompt.
Cet article ne traite pas le coût financier des appels d’agents, abordé séparément ailleurs : il porte uniquement sur la mise en place technique d’un quota de sécurité, pensé pour protéger le site lui-même, indépendamment de la facture qui en résulte.
Pourquoi un quota côté serveur, pas côté agent
Faire confiance à l’agent ou à son orchestrateur pour respecter une limite de bon sens est une protection insuffisante : un bug dans la logique de boucle, une mauvaise interprétation d’une consigne, ou un enchaînement inattendu de conditions peuvent tous mener au même résultat, un déluge d’appels en un temps très court. Le quota doit donc être appliqué au niveau du serveur MCP lui-même, qui reste le seul point de passage obligé de chaque appel.

Mise en place du compteur par session
Chaque session d’agent reçoit un identifiant unique à la connexion. Le serveur MCP incrémente un compteur associé à cet identifiant à chaque appel d’outil, stocké dans un cache à courte durée de vie plutôt que dans la base de données principale, pour ne pas alourdir chaque appel d’une écriture SQL supplémentaire.
function agence_verifier_quota_session( $session_id ) {
$cle = 'agent_quota_' . $session_id;
$compte = (int) wp_cache_get( $cle, 'agent_quota' );
if ( $compte >= 50 ) {
return new WP_Error(
'quota_depasse',
'Limite de 50 appels d\'outils atteinte pour cette session. Contactez un administrateur pour la relever.'
);
}
wp_cache_set( $cle, $compte + 1, 'agent_quota', HOUR_IN_SECONDS );
return true;
}
function agence_avant_appel_outil( $nom_outil, $parametres, $session_id ) {
$verification = agence_verifier_quota_session( $session_id );
if ( is_wp_error( $verification ) ) {
return $verification;
}
// poursuite normale de l'appel de l'outil
}
Un seuil différencié selon le type d’action
Un seuil unique pour tous les outils s’est révélé trop grossier dès les premiers tests : un outil de lecture seule (rechercher un article) peut légitimement être appelé des dizaines de fois dans une session d’analyse complexe, alors qu’un outil de suppression devrait déclencher une alerte bien avant 50 appels. Le quota final distingue donc deux catégories.
| Catégorie d’outil | Seuil avant blocage |
|---|---|
| Lecture seule (recherche, consultation) | 200 appels par session |
| Écriture ou suppression | 15 appels par session |
Que se passe-t-il au blocage
Une fois le quota atteint, le serveur renvoie une erreur explicite à l’agent, sans exécuter l’appel, et enregistre l’événement dans le journal d’audit avec le détail des derniers appels effectués. Une notification est envoyée à un administrateur si le quota d’écriture est atteint, ce cas étant considéré comme suffisamment rare pour justifier une vérification humaine systématique.
Un quota qui bloque sans expliquer pourquoi frustre l’agent et celui qui le supervise. Le message d’erreur doit permettre de comprendre immédiatement ce qui s’est passé, pas seulement que quelque chose a échoué.
Réinitialisation et relèvement du quota
Le compteur expire automatiquement au bout d’une heure d’inactivité, pour éviter qu’une session légitime mais longue ne reste bloquée artificiellement. Un relèvement manuel du quota reste possible depuis l’interface d’administration, pour les cas où une tâche ponctuelle nécessite réellement un volume d’appels plus important que d’habitude, comme une migration de contenu planifiée à l’avance.
En résumé
Un quota d’appels d’outils par session, appliqué côté serveur MCP et différencié selon que l’outil lit ou modifie le site, protège contre les boucles incontrôlées sans dépendre de la fiabilité du comportement de l’agent lui-même. Ce garde-fou reste peu coûteux à mettre en place et s’est révélé, dans notre expérience, l’un des plus efficaces contre les incidents les plus spectaculaires.