# Abilities API et un connecteur Brevo pour orchestrer une campagne

> wp_register_ability() suffit-il à sécuriser le déclenchement d'une campagne d'emailing par un agent ? Cas d'usage concret des abilities de WordPress 6.9 appliquées à un connecteur Brevo.

- Auteur : Clément Hadrot
- Publié le : 2026-04-17
- Mis à jour le : 2026-04-17
- Catégorie : IA &amp; MCP
- URL : https://wpmoderne.dev.wordpress-developpement.fr/ia-mcp/abilities-api-connecteur-brevo-orchestrer-campagne/

## L’essentiel

- Chaque ability déclare précisément ses permissions requises
- L'agent ne voit que les abilities autorisées pour son contexte d'exécution
- Le déclenchement d'une campagne reste une ability distincte de sa préparation

`wp_register_ability( 'wpmoderne/preparer-campagne-brevo', [...] )` : cette seule ligne, introduite avec l'Abilities API livrée dans WordPress 6.9 en décembre 2025, a changé la manière dont un agent obtient le droit de préparer une campagne d'emailing sur un site vitrine d'une enseigne de cosmétiques bio, connectée à Brevo pour l'envoi de ses newsletters.

Avant l'Abilities API, exposer une capacité à un agent passait presque toujours par un point de terminaison REST personnalisé, avec sa propre gestion de permissions codée à la main. L'Abilities API standardise cette déclaration directement dans le cœur de WordPress, avec un format commun que les serveurs MCP peuvent ensuite exposer sans réinventer la couche d'autorisation à chaque nouvelle fonctionnalité.

## Deux abilities, pas une seule

Le choix architectural retenu sépare volontairement la préparation d'une campagne de son déclenchement effectif, deux actions aux conséquences très différentes qui ne devraient jamais partager la même permission :

```
wp_register_ability( 'wpmoderne/preparer-campagne-brevo', array(
    'label'               => 'Préparer un brouillon de campagne Brevo',
    'description'         => 'Crée un brouillon de campagne à partir d\'un segment et d\'un contenu proposé, sans l\'envoyer.',
    'input_schema'        => array(
        'type'       => 'object',
        'properties' => array(
            'segment_id' => array( 'type' => 'string' ),
            'sujet'      => array( 'type' => 'string' ),
        ),
        'required'   => array( 'segment_id', 'sujet' ),
    ),
    'permission_callback' => function () {
        return current_user_can( 'wpmoderne_preparer_campagnes' );
    },
    'execute_callback'    => 'wpmoderne_preparer_brouillon_brevo',
) );
```

## La deuxième ability : le déclenchement, réservé à un rôle distinct

> L'essentiel à retenir : Chaque ability déclare précisément ses permissions requises ; L'agent ne voit que les abilities autorisées pour son contexte d'exécution ; Le déclenchement d'une campagne reste une ability distincte de sa préparation

```
wp_register_ability( 'wpmoderne/lancer-campagne-brevo', array(
    'label'               => 'Lancer l\'envoi d\'une campagne Brevo',
    'description'         => 'Déclenche l\'envoi effectif d\'un brouillon de campagne déjà validé.',
    'input_schema'        => array(
        'type'       => 'object',
        'properties' => array(
            'campagne_id' => array( 'type' => 'string' ),
        ),
        'required'   => array( 'campagne_id' ),
    ),
    'permission_callback' => function () {
        return current_user_can( 'wpmoderne_lancer_campagnes' );
    },
    'execute_callback'    => 'wpmoderne_declencher_envoi_brevo',
) );
```

Un agent conçu pour préparer des campagnes n'obtient que la capacité `wpmoderne_preparer_campagnes`, jamais `wpmoderne_lancer_campagnes`. Le déclenchement effectif reste réservé à un agent distinct, activé uniquement après une validation humaine explicite consignée dans le CRM Brevo.

## Ce que le MCP Adapter en fait ensuite

Une fois ces deux abilities enregistrées dans WordPress, le MCP Adapter les expose automatiquement comme deux outils MCP distincts, avec leurs schémas d'entrée respectifs et leurs vérifications de permission héritées directement de l'Abilities API, sans code supplémentaire à écrire côté serveur MCP lui-même. C'est là tout l'intérêt de cette couche standardisée : la déclaration d'une capacité et son exposition à un agent deviennent deux problèmes complètement découplés.

## Ce que cette séparation a évité

- Aucun agent de préparation n'a jamais pu déclencher un envoi, même en cas d'erreur de raisonnement
- Chaque appel à l'une ou l'autre ability est journalisé séparément, avec l'identité de l'agent et l'utilisateur associé
- Un changement de permission sur l'une des deux abilities n'affecte jamais l'autre

> Une ability qui prépare et une ability qui déclenche ne devraient jamais partager la même permission, même quand elles servent le même objectif final.

## En résumé

L'Abilities API apporte un vocabulaire commun pour déclarer des capacités et leurs permissions dans WordPress, que les agents consomment ensuite via MCP sans logique d'autorisation dupliquée. Sur ce projet, séparer préparation et déclenchement en deux abilities distinctes s'est révélé être la décision la plus structurante, bien avant la configuration des campagnes elles-mêmes, qui reste un sujet entièrement à part.
