wp_register_ability( 'monplugin/lister-chaines-non-traduites', ... ) — c’est par cette déclaration que commence l’intégration décrite ici, pensée pour un site utilisant TranslatePress et confronté à un problème classique : de nouvelles chaînes de texte apparaissent régulièrement sans traduction, et personne n’a le temps de les repérer manuellement page après page.
Avec le MCP Adapter désormais disponible pour exposer des abilities WordPress à un client MCP externe, il devient possible de construire un outil dédié à cette tâche précise : repérer les chaînes non traduites, et laisser un agent proposer une traduction, sans jamais lui donner la main sur la publication du site.
Le problème que cet outil résout
TranslatePress détecte automatiquement les chaînes de texte présentes sur le site et permet de les traduire depuis une interface dédiée. Le problème ne vient pas de la détection, déjà bien gérée par l’extension, mais du suivi : sur un site qui publie du contenu régulièrement, la liste des chaînes non traduites s’allonge sans qu’aucune alerte ne prévienne l’équipe éditoriale.
L’outil MCP construit ici se contente de lire cette liste et de la mettre à disposition d’un agent, qui peut ensuite proposer une traduction pour chaque chaîne, sans jamais l’enregistrer directement dans TranslatePress.
Structure de l’outil MCP en lecture

L’ability déclarée expose une capacité en lecture seule, volontairement limitée pour éviter tout risque d’écriture non maîtrisée :
wp_register_ability( 'monplugin/lister-chaines-non-traduites', array(
'label' => 'Chaines non traduites',
'description' => 'Renvoie la liste des chaines detectees par TranslatePress sans traduction pour une langue cible donnee.',
'input_schema' => array(
'type' => 'object',
'properties' => array(
'langue_cible' => array( 'type' => 'string' ),
'limite' => array( 'type' => 'integer', 'default' => 20 ),
),
'required' => array( 'langue_cible' ),
),
'permission_callback' => function() {
return current_user_can( 'edit_pages' );
},
'execute_callback' => 'monplugin_lister_chaines_non_traduites',
) );
Le permission_callback restreint l’accès à cette ability aux comptes disposant déjà de la capacité d’édition de page, ce qui empêche un agent connecté avec un rôle plus restreint d’accéder à cette liste sans autorisation adaptée.
Ce que l’agent fait ensuite, et ce qu’il ne fait pas
Une fois la liste des chaînes non traduites récupérée, l’agent propose une traduction pour chacune, en s’appuyant sur le contexte de la page d’origine transmis dans le prompt. Ces propositions sont stockées dans une table dédiée, en attente de validation, et n’apparaissent à aucun moment sur le site tant qu’un traducteur ou un éditeur n’a pas confirmé chaque proposition individuellement depuis l’interface habituelle de TranslatePress.
Cette séparation stricte entre proposition et publication répond à une contrainte simple : une traduction incorrecte, publiée automatiquement sans relecture, resterait visible par tous les visiteurs de la langue cible jusqu’à sa correction, un risque que ce circuit évite entièrement en conservant une étape de validation humaine obligatoire.
Variantes selon la langue cible
Le prompt transmis à l’agent varie selon la langue cible visée, en particulier pour les langues où l’ordre des mots ou les conventions de politesse diffèrent fortement du français. Une traduction vers l’allemand, par exemple, nécessite une consigne spécifique sur la position du verbe dans les phrases subordonnées, une contrainte qui n’a pas d’équivalent direct en anglais ou en espagnol.
- Ajouter, pour chaque langue cible, un rappel des conventions typographiques propres à cette langue.
- Fournir le contexte de la page d’origine, pas seulement la chaîne isolée, pour éviter les traductions ambiguës hors contexte.
- Limiter le nombre de chaînes traitées par appel pour garder un contrôle qualité réaliste côté relecteur humain.
Un outil MCP en lecture seule reste, dans la grande majorité des cas de traduction, suffisant pour apporter un vrai gain de temps sans exposer le site au moindre risque de publication non maîtrisée.
Ce que cet outil ne couvre pas
Cette intégration ne concerne que TranslatePress et ne traite pas le cas d’une extension de traduction concurrente, dont le fonctionnement interne et le stockage des chaînes diffèrent suffisamment pour nécessiter une adaptation distincte de l’ability décrite ici.