Ces hooks entourent la surface agents IA de HappenBoard : les abilities qui permettent à un agent IA de lire et de modifier vos événements via l’API Abilities de WordPress. Les clients IA les appellent par le serveur MCP intégré à HappenBoard. Servez-vous-en pour ajouter vos propres abilities derrière les mêmes protections, masquer celles fournies, choisir ce que reçoivent les clients MCP, transmettre la piste d’audit ou régler les limites de débit. Le côté propriétaire du site est décrit dans Les agents IA et l’API Abilities. Si les hooks sont nouveaux pour vous, commencez par Étendre HappenBoard avec les hooks.
Quand les abilities existent
Rien n’est déclaré tant que Expose HappenBoard to AI agents est désactivé dans HappenBoard → Settings → AI agents, ce qui est le cas par défaut. La surface reste aussi fermée quand HAPPENBOARD_DISABLE_ABILITIES vaut true dans wp-config.php, et sur les versions de WordPress sans API Abilities (elle est arrivée avec la 6.9). Dans ces cas, les hooks de déclaration ne se déclenchent jamais et le serveur MCP n’existe pas. Seuls tournent encore le filtre de conservation du journal et les deux contrôles OAuth que lit l’écran de réglages AI agents.
Le propriétaire du site dispose volontairement d’un seul interrupteur. Le développeur qui a besoin d’un contrôle plus fin retire des abilities avec happenboard_registered_abilities.
Ce que reçoit chaque ability
Les abilities déclarées via \HappenBoard\Service\Abilities\Registry::ability(), celles de HappenBoard comme celles de Pro, partagent les mêmes protections :
- Aucun accès anonyme : un appel sans utilisateur connecté est toujours refusé, même en lecture.
- Un contrôle de permission : l’utilisateur doit avoir la permission de l’ability, ou
manage_options. - Une limite de débit par utilisateur : 300 lectures par minute, 60 écritures par minute et 600 écritures par heure.
- Les abilities marquées destructives, comme les suppressions, exigent
"confirm": truedans leurs données d’entrée. - Chaque écriture est annoncée sur
happenboard_ability_executedet enregistrée dans le journal des agents, appels refusés compris.
Une ability déclarée directement avec wp_register_ability() ne reçoit rien de tout cela.
Appeler une ability en REST
Les clients IA comme Claude ou ChatGPT se connectent par le serveur MCP de HappenBoard, décrit dans la section suivante. Votre propre code et vos scripts peuvent appeler les abilities directement : elles s’exécutent via la route WordPress /wp-json/wp-abilities/v1/abilities/{name}/run, avec un utilisateur connecté (par un mot de passe d’application, par exemple). Toute ability HappenBoard qui n’est pas une écriture est marquée en lecture seule.
Appelez les abilities en lecture seule en GET, avec leurs données d’entrée dans l’URL, par exemple ?input[id]=42. Appelez les écritures en POST, avec un corps JSON { "input": { ... } }. La mauvaise méthode reçoit une erreur HTTP 405.
Les abilities des types de rendez-vous lisent aussi les brouillons. happenboard/create-booking-type crée un brouillon, et happenboard/get-booking-type le renvoie avec son status : un agent peut ainsi relire, configurer et publier ce qu’il vient de créer.
Ce que reçoivent les clients MCP
Le serveur MCP de HappenBoard répond sur POST /wp-json/happenboard/mcp/v1, sans autre extension. Chaque ability devient un outil qui porte son nom, avec __ à la place de la barre oblique : happenboard/list-events devient l’outil happenboard__list-events. Un client se connecte par OAuth ou envoie un mot de passe d’application, et chaque appel passe par les protections de l’ability listées plus haut.
Le serveur réduit la liste des outils dans cet ordre, et chaque étape ne peut que retirer :
- Seules les abilities déclarées via le
Registry, et jamais une ability destructive. Passez'mcp_public' => falsepour tenir l’une des vôtres à l’écart du serveur MCP. - Seules les abilities que permettent les permissions de l’utilisateur.
- Une connexion approuvée en Read only sur l’écran de consentement ne reçoit que les outils de lecture, et se voit refuser un outil d’écriture appelé par son nom.
happenboard_mcp_read_only peut passer toutes les connexions en lecture seule, et happenboard_mcp_served_abilities a le dernier mot sur la liste. Un outil qui n’est pas servi ne peut pas être appelé par son nom. Ces filtres ne changent que le serveur MCP, pas la route REST de WordPress ci-dessus.
Ce que garde le journal des agents
Chaque écriture y laisse une ligne : qui a agi, quelle ability, les données d’entrée avec les secrets remplacés par [redacted], le résultat et l’heure. Une écriture refusée ou en échec garde aussi son code d’erreur et le message reçu par l’agent, dans la langue de cette requête, jusqu’à 255 caractères. Le panneau Agent activity de HappenBoard → Settings → AI agents les affiche. Une écriture refusée faute de permission y apparaît comme Not allowed.
happenboard_register_abilities
Se déclenche sur wp_abilities_api_init, après la déclaration des abilities de HappenBoard. Déclarez les vôtres ici pour qu’elles suivent le même interrupteur : quand la surface agents est fermée, ce hook ne se déclenche jamais.
Signature
do_action( 'happenboard_register_abilities' )
Exemple
add_action( 'happenboard_register_abilities', function () {
\HappenBoard\Service\Abilities\Registry::ability(
'list-sponsors',
array(
'namespace' => 'acme',
'label' => 'List sponsors',
'description' => 'Returns the sponsor names attached to an event.',
'category' => 'happenboard-events',
'cap' => 'happenboard_manage_events',
'input_schema' => array(
'type' => 'object',
'properties' => array( 'event_id' => array( 'type' => 'integer' ) ),
'required' => array( 'event_id' ),
),
'output_schema' => array( 'type' => 'array', 'items' => array( 'type' => 'string' ) ),
'execute' => fn ( $input ) => acme_sponsors_for( (int) $input['event_id'] ),
)
);
} );
Remarques
- Aucun argument.
wp_register_ability()et leRegistryde HappenBoard sont disponibles ici. Registry::ability( $name, $args )prendlabel,description,category,cap,execute,input_schemaetoutput_schema, plus les optionsnamespace(par défauthappenboard),write,destructiveetmcp_public.- Utilisez votre propre espace de noms, comme dans l’exemple, et une des catégories de l’extension gratuite :
happenboard-events,happenboard-booking,happenboard-attendeesouhappenboard-site. WordPress refuse une ability dont la catégorie n’existe pas. - HappenBoard Pro déclare ses abilities sur cette action en priorité 10, puis déclenche
happenboard_pro_register_abilities.
happenboard_pro_register_abilities
Se déclenche après la déclaration des abilities de HappenBoard Pro, à l’intérieur du happenboard_register_abilities de l’extension gratuite. Servez-vous-en pour les modules qui s’appuient sur des fonctions Pro, comme les billets.
Signature
do_action( 'happenboard_pro_register_abilities' )
Exemple
add_action( 'happenboard_pro_register_abilities', function () {
\HappenBoard\Service\Abilities\Registry::ability(
'flag-sponsor-ticket',
array(
'namespace' => 'acme',
'label' => 'Flag a sponsor ticket',
'description' => 'Marks one ticket type as a sponsor ticket.',
'category' => 'happenboard-commerce',
'cap' => 'happenboard_manage_tickets',
'write' => true,
'input_schema' => array(
'type' => 'object',
'properties' => array( 'ticket_id' => array( 'type' => 'integer' ) ),
'required' => array( 'ticket_id' ),
),
'output_schema' => array( 'type' => 'object', 'properties' => array( 'ok' => array( 'type' => 'boolean' ) ) ),
'execute' => fn ( $input ) => array( 'ok' => acme_flag_sponsor_ticket( (int) $input['ticket_id'] ) ),
)
);
} );
Remarques
- Aucun argument. Il ne se déclenche jamais quand la surface agents est fermée ou que Pro est inactif.
- La catégorie
happenboard-commercen’existe que si Pro est actif : les abilities qui l’utilisent se déclarent sur ce hook. - Mettez
writeà true pour tout ce qui modifie des données : l’ability utilise alors la limite d’écriture, est annoncée surhappenboard_ability_executedet s’appelle enPOST. Ajoutezdestructivepour exigerconfirm: true. - Les abilities de Pro utilisent l’espace de noms
happenboard-pro. Gardez les vôtres dans le vôtre.
happenboard_registered_abilities
Filtre chaque ability que HappenBoard s’apprête à déclarer. Retirez son nom et elle n’est jamais déclarée : les agents ne la voient pas du tout, au lieu d’être refusés quand ils l’appellent.
Signature
apply_filters( 'happenboard_registered_abilities', array $names )
Paramètres
-
$namesarray<int,string> - Un tableau d’un seul élément : le nom complet de l’ability en cours de déclaration, par exemple
happenboard/delete-event.
Valeur de retour
array<int,string>
Les noms à garder. Renvoyez le tableau sans le nom pour écarter cette ability.
Exemple
add_filter(
'happenboard_registered_abilities',
fn ( $names ) => array_diff(
$names,
array( 'happenboard/delete-event', 'happenboard/delete-booking-type' )
)
);
Remarques
- Il s’exécute une fois par ability, pas une fois pour toute la liste. Comparez avec les noms à retirer au lieu d’attendre une liste complète.
- Ce n’est pas un contrôle de permission : chaque ability vérifie déjà la permission de l’utilisateur. Servez-vous-en pour réduire la surface.
- Il voit toutes les abilities déclarées via le
Registryde HappenBoard, celles de Pro comprises (noms enhappenboard-pro/), mais pas celles déclarées directement avecwp_register_ability(). - Une ability retirée n’est jamais déclarée : elle disparaît aussi pour les clients MCP.
happenboard_ability_executed
Se déclenche après l’appel d’une ability d’écriture, quel qu’en soit le résultat, y compris pour les appels refusés avant de s’exécuter. Le journal des agents l’écoute ; branchez-vous dessus pour transmettre la piste d’audit à vos propres journaux ou alertes.
Signature
do_action( 'happenboard_ability_executed', string $name, array $input, mixed $result, string $status )
Paramètres
-
$namestring - Nom complet de l’ability, par exemple
happenboard/create-event. -
$inputarray<string,mixed> - Les données d’entrée, validées par le schéma de l’ability. Elles peuvent contenir des identifiants secrets : masquez-les avant de les stocker, comme le fait le journal des agents.
-
$resultmixed - Ce que l’ability a renvoyé, ou le
WP_Errorpar lequel l’appel a été refusé. -
$statusstring ok,error(l’ability a dit non, par exemple pour une réservation qui n’est pas en attente),failed(une exception a été interceptée),rate_limited,unconfirmed(un appel destructif sansconfirm: true) ouforbidden(l’utilisateur n’a pas la permission).
Exemple
add_action(
'happenboard_ability_executed',
function ( $name, $input, $result, $status ) {
if ( ! in_array( $status, array( 'forbidden', 'rate_limited' ), true ) ) {
return;
}
error_log( sprintf(
'Agent call %s by user %d: %s (%s)',
$name,
get_current_user_id(),
$status,
is_wp_error( $result ) ? $result->get_error_message() : ''
) );
},
10,
4
);
Remarques
- Quatre arguments sont passés : enregistrez le hook avec
10, 4. - Les lectures ne le déclenchent jamais. Seules les abilities déclarées avec
writevia leRegistryde HappenBoard le font. - Un appel
forbiddenle déclenche depuis le contrôle de permission, avant l’exécution, une fois par ability et par requête, et seulement pour un utilisateur connecté.$resultest alors une erreurhappenboard_forbidden(HTTP 403). - Une exception levée par un écouteur est interceptée : elle ne peut pas transformer une écriture terminée en erreur. Elle arrête quand même les écouteurs suivants, dont le journal des agents en priorité 10.
happenboard_abuse_guard_limits
Filtre les limites de débit appliquées à chaque appel d’ability, par utilisateur. Elles empêchent un agent qui boucle, ou un mot de passe d’application divulgué, d’épuiser le site : augmentez-les avec prudence.
Signature
apply_filters( 'happenboard_abuse_guard_limits', array $limits )
Paramètres
-
$limitsarray<string,int> - Clés
read_per_minute(300),write_per_minute(60) etwrite_per_hour(600).
Valeur de retour
array<string,int>
Les limites à appliquer. Une clé absente reprend sa valeur par défaut, et chaque valeur vaut au moins 1.
Exemple
add_filter(
'happenboard_abuse_guard_limits',
function ( $limits ) {
// Une synchro de nuit a besoin de plus d'écritures qu'un agent conversationnel.
$limits['write_per_hour'] = 2000;
return $limits;
}
);
Remarques
- Les limites sont comptées par utilisateur, pas pour tout le site : une intégration très active ne ralentit pas les autres.
- Au-delà de la limite, l’appel répond HTTP 429 avec
happenboard_rate_limitet unretry_afterde 60 ou 3600 secondes. Une écriture refusée pour cette raison est enregistrée commerate_limited. - Seules les abilities déclarées via le
Registryde HappenBoard sont limitées. Les formulaires publics d’inscription et de réservation ont leurs propres limites et ne sont pas concernés.
happenboard_abuse_guard_denial_threshold
Se déclenche la première fois qu’un utilisateur atteint dix appels d’abilities refusés en cinq minutes. Un identifiant volé qui sonde la surface produit des refus : c’est le signal sur lequel alerter.
Signature
do_action( 'happenboard_abuse_guard_denial_threshold', int $actor_id, int $count )
Paramètres
-
$actor_idint - Identifiant de l’utilisateur connecté. Un appel sans utilisateur connecté est refusé avant tout comptage.
-
$countint - Refus dans la fenêtre en cours : toujours 10, le seuil.
Exemple
add_action(
'happenboard_abuse_guard_denial_threshold',
function ( $actor_id, $count ) {
wp_mail(
get_option( 'admin_email' ),
'HappenBoard : refus répétés pour un agent',
sprintf( 'L\'utilisateur %d a été refusé %d fois en cinq minutes.', $actor_id, $count )
);
},
10,
2
);
Remarques
- Deux arguments sont passés : enregistrez le hook avec
10, 2. - Seuls les refus de permission comptent, en lecture comme en écriture. Une requête qui liste les abilities, comme le fait un client MCP pour ses outils, compte au plus un refus, quel que soit le nombre d’abilities interdites à l’utilisateur. Les appels limités par le débit ou non confirmés ne comptent pas.
- Il se déclenche une fois par fenêtre. Chaque refus relance la fenêtre de cinq minutes : un appelant qui insiste ne le redéclenche qu’après cinq minutes de calme puis dix nouveaux refus.
happenboard_agent_log_retention_days
Filtre le nombre de jours pendant lesquels les entrées du journal des agents sont gardées avant que le nettoyage quotidien ne les supprime.
Signature
apply_filters( 'happenboard_agent_log_retention_days', int $days )
Paramètres
-
$daysint - Durée de conservation en jours. Par défaut
90.
Valeur de retour
int
Jours à garder. Renvoyez 0 ou moins pour couper le nettoyage et tout garder.
Exemple
// Garder une année complète pour une exigence de conformité.
add_filter( 'happenboard_agent_log_retention_days', fn () => 365 );
Remarques
- Le panneau Agent activity lit la même valeur pour indiquer combien de temps les entrées sont gardées : l’écran correspond au nettoyage réel.
- Le nettoyage est un événement WP-Cron quotidien,
happenboard_prune_agent_log, planifié que la surface agents soit ouverte ou non. Ce filtre s’exécute donc même surface fermée. - Une demande d’effacement des données personnelles de WordPress retire l’e-mail et les informations de la personne des données d’entrée journalisées qui la mentionnent, quelle que soit la durée de conservation. Dans le message d’erreur journalisé, son e-mail devient
[erased]. Les entrées elles-mêmes restent.
happenboard_mcp_read_only
Filtre si la connexion MCP en cours peut seulement lire. Renvoyez true et le client ne reçoit que les outils de lecture, quel que soit le choix fait sur l’écran de consentement.
Signature
apply_filters( 'happenboard_mcp_read_only', bool $read_only )
Paramètres
-
$read_onlybool - True quand le jeton OAuth de la connexion a été approuvé pour la lecture seule. False pour un jeton complet et pour un mot de passe d’application.
Valeur de retour
bool
True pour limiter la connexion aux outils de lecture. Renvoyer false n’élargit jamais un jeton approuvé pour la lecture seule.
Exemple
add_filter(
'happenboard_mcp_read_only',
function ( $read_only ) {
// Seuls les administrateurs peuvent laisser un client IA modifier des données.
return $read_only || ! current_user_can( 'manage_options' );
}
);
Remarques
- Il s’exécute après la connexion : l’utilisateur courant est le compte au nom duquel le client agit. Il couvre aussi les clients connectés par mot de passe d’application, qui n’ont pas de portée propre.
- Tant qu’il renvoie true pour un utilisateur, son écran de consentement ne propose que le choix Read only, puisque aucun outil d’écriture ne serait servi.
- Il ne restreint que le serveur MCP. Le même compte peut toujours lancer une ability d’écriture via la route WordPress
/wp-abilities/v1. Pour retirer une écriture partout, utilisezhappenboard_registered_abilitiesou les permissions de l’utilisateur.
happenboard_mcp_served_abilities
Filtre les abilities que le serveur MCP remet à la connexion en cours, après les contrôles du Registry, des permissions et de la portée. Un outil retiré ici n’est pas listé, et un client qui l’appelle par son nom reçoit une erreur d’outil inconnu.
Signature
apply_filters( 'happenboard_mcp_served_abilities', array $served )
Paramètres
-
$servedarray<string,WP_Ability> - Abilities sur le point d’être servies, indexées par nom complet, par exemple
happenboard/list-attendees.
Valeur de retour
array<string,WP_Ability>
Les abilities à servir. Autre chose qu’un tableau ne sert rien. Sur une connexion en lecture seule, une ability d’écriture que vous ajoutez est retirée à nouveau.
Exemple
add_filter(
'happenboard_mcp_served_abilities',
function ( $served ) {
// Tenir les données des participants à l’écart des clients IA.
foreach ( array_keys( $served ) as $name ) {
if ( str_contains( $name, 'attendee' ) ) {
unset( $served[ $name ] );
}
}
return $served;
}
);
Remarques
- L’ability reste déclarée, contrairement à
happenboard_registered_abilities: la route WordPress/wp-abilities/v1et votre propre code peuvent toujours l’exécuter. - Vous pouvez ajouter l’ability d’une autre extension, un
WP_Abilityobtenu avecwp_get_ability(). Elle s’exécute alors avec son seul contrôle de permission, sans les limites de débit ni le journal des agents de HappenBoard. - Il s’exécute plusieurs fois dans une même requête (la liste des outils, chaque appel, l’écran de consentement) : gardez-le léger.
- L’écran de consentement compte les outils à partir de cette liste : la personne qui approuve voit ce que le client recevra. La liste des outils de l’écran de réglages AI agents ne passe pas par ce filtre.
happenboard_mcp_allowed_origins
Filtre les origines autorisées à appeler le point d’accès MCP depuis une page web. Une requête dont l’en-tête Origin n’est pas dans la liste est refusée (HTTP 403, happenboard_mcp_invalid_origin). Un autre site ne peut ainsi pas piloter le point d’accès via un navigateur connecté.
Signature
apply_filters( 'happenboard_mcp_allowed_origins', array $allowed )
Paramètres
-
$allowedarray<int,string> - URL absolues. Par défaut
home_url()etsite_url().
Valeur de retour
array<int,string>
Les URL à accepter. Seuls le schéma, l’hôte et le port sont comparés, et un port par défaut est ignoré.
Exemple
add_filter(
'happenboard_mcp_allowed_origins',
function ( $origins ) {
// Un tableau de bord web sur un autre sous-domaine parle au serveur MCP.
$origins[] = 'https://app.example.com';
return $origins;
}
);
Remarques
- Une requête sans en-tête
Originn’est pas contrôlée. Les navigateurs en envoient un, les connecteurs côté serveur et les clients de bureau en général non : la plupart des clients n’atteignent jamais ce filtre. - Le contrôle a lieu avant la connexion, à chaque requête vers le point d’accès : gardez-le léger.
happenboard_mcp_oauth_enabled
Filtre si le serveur MCP propose la connexion OAuth. Renvoyez false et les clients ne peuvent se connecter qu’avec un mot de passe d’application.
Signature
apply_filters( 'happenboard_mcp_oauth_enabled', bool $enabled )
Paramètres
-
$enabledbool - True quand WordPress dispose de
wp_fast_hash()(6.8 et suivantes), que HappenBoard utilise pour hacher les jetons.
Valeur de retour
bool
Si les points d’accès de découverte, d’enregistrement, de jeton, de révocation et de consentement répondent.
Exemple
// Sur ce site, les connexions passent uniquement par mot de passe d’application.
add_filter( 'happenboard_mcp_oauth_enabled', '__return_false' );
Remarques
- Désactivé, les jetons déjà émis cessent de fonctionner : chaque appel fait avec l’un d’eux reçoit une erreur HTTP 401 avec
happenboard_mcp_oauth_disabled. - La carte Connect an AI client lit la même valeur. Désactivé, elle indique que la connexion OAuth est coupée et affiche les étapes par mot de passe d’application pour chaque client.
- Il s’exécute aussi au chargement de l’écran de réglages AI agents, même surface agents fermée.
happenboard_mcp_oauth_transport_is_secure
Filtre si le site est considéré comme assez sécurisé pour la connexion OAuth. Par défaut, HTTPS passe, tout comme un hôte local (localhost, 127.0.0.1, ::1, tout *.localhost) et un type d’environnement local.
Signature
apply_filters( 'happenboard_mcp_oauth_transport_is_secure', bool $secure, string $url )
Paramètres
-
$securebool - Résultat du contrôle intégré sur l’URL du point d’accès MCP.
-
$urlstring - L’URL du point d’accès MCP, par exemple
https://example.com/wp-json/happenboard/mcp/v1.
Valeur de retour
bool
False refuse OAuth sur ce site. True ne fait pas fonctionner le HTTP simple : voir les notes.
Exemple
add_filter(
'happenboard_mcp_oauth_transport_is_secure',
function ( $secure, $url ) {
// Exiger HTTPS pour OAuth, même sur un site local.
return $secure && str_starts_with( $url, 'https://' );
},
10,
2
);
Remarques
- Deux arguments sont passés : déclarez-le avec
10, 2. - Servez-vous-en pour retirer OAuth. Chaque requête OAuth exige aussi
is_ssl(), un hôte local ou un environnementlocal: renvoyer true sur un site en HTTP simple change la carte de configuration, mais chaque connexion reste refusée. - Derrière un proxy qui termine le HTTPS, rendez
is_ssl()vrai danswp-config.php(à partir deX-Forwarded-Proto, par exemple) plutôt que d’utiliser ce filtre.
happenboard_mcp_protected_resource_metadata
Filtre les métadonnées de ressource protégée RFC 9728, le document qui indique à un client où se connecter. Il est servi à /.well-known/oauth-protected-resource/wp-json/happenboard/mcp/v1 et à l’alias REST /wp-json/happenboard/mcp/v1/oauth-protected-resource.
Signature
apply_filters( 'happenboard_mcp_protected_resource_metadata', array $document )
Paramètres
-
$documentarray<string,mixed> - Clés
resource(l’URL du point d’accès MCP),authorization_servers,scopes_supported(mcpetmcp.read),bearer_methods_supportedetresource_name(« HappenBoard on » suivi du nom du site).
Valeur de retour
array<string,mixed>
Le document, envoyé en JSON.
Exemple
add_filter(
'happenboard_mcp_protected_resource_metadata',
function ( $document ) {
// Un nom plus clair, et une page sur vos règles d’accès pour l’IA.
$document['resource_name'] = 'Acme Theatre events';
$document['resource_documentation'] = 'https://example.com/ai-access/';
return $document;
}
);
Remarques
- N’ajoutez ou ne reformulez que des champs informatifs. Les jetons restent émis pour l’URL réelle du point d’accès, et contrôlés par rapport à elle : modifier
resourceouauthorization_serverscasse la connexion. - Le document est public, et l’URL well-known l’envoie avec
Access-Control-Allow-Origin: *. N’y mettez rien de privé. - Il ne s’exécute jamais quand OAuth est désactivé : l’alias REST répond alors 404, et l’URL well-known est laissée à WordPress.
happenboard_mcp_authorization_server_metadata
Filtre les métadonnées de serveur d’autorisation RFC 8414 : les points d’accès de connexion, de jeton, d’enregistrement et de révocation que découvre un client. Il est servi à /.well-known/oauth-authorization-server/wp-json/happenboard/mcp et à /wp-json/happenboard/mcp/v1/oauth-authorization-server.
Signature
apply_filters( 'happenboard_mcp_authorization_server_metadata', array $document )
Paramètres
-
$documentarray<string,mixed> - Clés
issuer, les quatre points d’accès, et ce qui est pris en charge : les portéesmcpetmcp.read, les autorisationsauthorization_codeetrefresh_token, PKCE avecS256et les méthodes d’authentification des clients.
Valeur de retour
array<string,mixed>
Le document, envoyé en JSON.
Exemple
add_filter(
'happenboard_mcp_authorization_server_metadata',
function ( $document ) {
// Indiquer aux clients votre documentation et votre politique d’accès pour l’IA.
$document['service_documentation'] = 'https://example.com/ai-access/';
$document['op_policy_uri'] = 'https://example.com/ai-access-policy/';
return $document;
}
);
Remarques
- N’ajoutez que des champs informatifs. Les clients vérifient que
issuercorrespond à l’URL d’où ils ont lu le document, et HappenBoard ne suit pas des points d’accès modifiés : changer l’un ou l’autre casse la connexion. - L’émetteur a son propre chemin,
/wp-json/happenboard/mcp, plutôt que la racine du site. Le serveur OAuth d’une autre extension sur le même site, comme celui de SEOPress, garde ainsi son propre document. - Comme le document de ressource protégée, il est public et ne s’exécute jamais quand OAuth est désactivé.
Pour aller plus loin
- Les agents IA et l’API Abilities : comment le propriétaire du site ouvre la surface et connecte un agent.
- Hooks administration, rôles et permissions : les permissions que vérifie chaque ability, et comment les rôles les obtiennent.
- Rôles et permissions Pro : les permissions Pro derrière les abilities de billets et de check-in.