WordPress MCP Adapter : brancher tes Abilities à des agents IA via le Model Context Protocol
Depuis WordPress 6.9, l’Abilities API change la donne : on peut enregistrer des capacités applicatives (des “unités de travail”) de façon standardisée, découvrable, typée et exécutable. Ce n’est pas qu’une nouvelle API sympa pour les devs : c’est aussi un socle très concret pour l’automatisation et les workflows IA sur WordPress.
Dans le monde des agents IA, un mouvement important ces derniers mois est le Model Context Protocol (MCP) : un protocole qui permet à un client IA d’aller chercher du contexte et d’exécuter des actions via des “primitives” communes. Dit autrement : au lieu de bricoler des intégrations ad hoc, tu exposes des fonctions et des ressources d’une manière que les outils IA savent comprendre.
Côté WordPress, il existe désormais un composant officiel pour faire le pont : le WordPress MCP Adapter. Son objectif est simple : prendre les Abilities déjà enregistrées via l’Abilities API et les “adapter” en primitives MCP, afin que des applications IA puissent découvrir et appeler ces fonctionnalités comme des MCP tools (et, dans certains cas, lire des données comme des MCP resources).
Dans cet article, on va voir : (1) le rappel indispensable sur les Abilities, (2) ce que fait exactement l’adapter MCP, (3) comment l’installer et activer l’accès MCP, (4) comment connecter Claude Desktop, Cursor, Claude Code et VS Code, (5) comment créer un serveur MCP personnalisé dans ton plugin, (6) un exemple complet avec “List All URLs”, et (7) les bonnes pratiques sécurité.
Rappel express : Abilities API, la fondation
L’Abilities API apporte à WordPress une API fonctionnelle de premier rang, utilisable “cross-context” (PHP, JavaScript, REST API), avec un format commun pour décrire ce que le core ou les extensions savent faire.
Une Ability se définit une seule fois avec :
- Un nom unique (
namespace/ability-name). - Un schéma d’entrée et un schéma de sortie typés (input/output schema).
- Un
permission_callbackqui applique des règles d’accès (capabilities). - Un
execute_callbackqui exécute l’action réelle.
Le code déclenché dans execute_callback peut être très varié : lecture de données, mise à jour de contenus, diagnostics, etc. Une fois enregistrée, l’Ability devient découvrable et exécutable depuis PHP, JavaScript et la REST API.
WordPress 6.9 embarque trois Abilities “core” par défaut, pratiques pour tester rapidement :
core/get-site-info: renvoie les informations de site configurées dans WordPress (par défaut tous les champs, ou un sous-ensemble filtré).core/get-user-info: renvoie les infos de profil de base de l’utilisateur authentifié courant (personnalisation, audit, comportements sensibles aux droits).core/get-environment-info: renvoie des infos de contexte runtime utiles au diagnostic (environnement, runtime PHP, infos serveur BDD, version WordPress).
WordPress MCP Adapter : à quoi ça sert concrètement ?
Le WordPress MCP Adapter fait partie d’une initiative plus large : AI Building Blocks for WordPress. Son rôle : convertir les Abilities enregistrées via l’Abilities API en primitives compatibles MCP (au sens de l’architecture MCP) pour que des agents IA puissent :
- Découvrir des fonctionnalités du site et les invoquer sous forme de MCP tools (fonctions exécutables).
- Lire certaines informations WordPress comme des MCP resources (sources de données passives).
La conséquence pratique est importante : si ton plugin enregistre déjà des Abilities, tu es à un pas de les rendre utilisables par un agent IA.
Petit mémo MCP : tools, resources, prompts
MCP structure l’interaction autour de trois primitives principales :
- Tools : fonctions exécutables que le client IA appelle pour agir (lecture/écriture/diagnostic…).
- Resources : sources de données “passives” (fichiers, lignes de base, etc.) lues par l’IA pour du contexte.
- Prompts : gabarits préconfigurés (templates) pour guider des workflows spécifiques.
Avec l’adapter WordPress, les Abilities sont généralement exposées comme des tools, car elles incarnent une logique exécutable. Mais l’adapter est flexible : si une Ability est strictement en lecture seule et ressemble plutôt à une “source de contexte” (ex. un log de debug ou une configuration statique), elle peut être configurée comme resource pour que l’IA l’ingère sans avoir à “appeler” explicitement une action.
Installer le MCP Adapter (mode plugin)
La voie la plus rapide pour démarrer consiste à installer l’adapter comme plugin, en téléchargeant l’archive depuis la page Releases du dépôt GitHub : https://github.com/WordPress/mcp-adapter/releases.
Une fois activé, le plugin :
- Enregistre un serveur MCP par défaut nommé
mcp-adapter-default-server. - Ajoute trois Abilities dédiées à l’accès MCP :
mcp-adapter/discover-abilities,mcp-adapter/get-ability-info,mcp-adapter/execute-ability. - Expose automatiquement ces Abilities en MCP tools :
mcp-adapter-discover-abilities,mcp-adapter-get-ability-info,mcp-adapter-execute-ability.
Ces trois tools fournissent une approche “en couches” pour accéder aux Abilities : un agent peut découvrir ce qui existe, inspecter une Ability (schémas, permissions, etc.), puis exécuter l’Ability.
Rendre une Ability accessible au serveur MCP par défaut
Point clé : le serveur MCP par défaut n’expose pas toutes les Abilities automatiquement. Par défaut, une Ability n’est disponible via ce serveur que si tu la marques explicitement comme “publique” pour MCP, via un flag meta.mcp.public lors de l’enregistrement avec wp_register_ability().
'meta' => array(
'mcp' => array(
'public' => true, // Required for MCP default server access
),
),Pour les Abilities du core, tu ne vas pas ré-enregistrer : tu peux modifier leurs arguments via le filtre wp_register_ability_args afin d’ajouter ce flag meta.mcp.public.
<?php
/**
* Plugin Name: Enable core abilities
* Version: 1.0.0
*
* @package enable-core-abilities
*/
add_filter( 'wp_register_ability_args', 'myplugin_enable_core_abilities_mcp_access', 10, 2 );
/**
* Enable MCP access for core abilities.
*
* @param array $args Ability registration arguments.
* @param string $ability_name Ability ID.
* @return array Modified ability registration arguments.
*/
function myplugin_enable_core_abilities_mcp_access( array $args, string $ability_name ) {
// Enable MCP access for the three current core abilities.
$core_abilities = array(
'core/get-site-info',
'core/get-user-info',
'core/get-environment-info',
);
if ( in_array( $ability_name, $core_abilities, true ) ) {
$args['meta']['mcp']['public'] = true;
}
return $args;
}
Avec ça en place, tu peux connecter un client IA à ton site et appeler ces Abilities core via les tools du serveur par défaut.
Connecter des applications IA à ton site WordPress MCP
Les deux transports MCP : STDIO et HTTP
Pour parler à un site WordPress exposé en serveur MCP, MCP prévoit deux mécanismes de transport : STDIO et HTTP. Le bon choix dépend surtout d’où tourne ton site.
Pour un environnement local de dev WordPress, le plus simple est généralement STDIO. Le MCP Adapter le supporte via WP-CLI (donc WP-CLI doit être installé localement). La configuration minimale ressemble à ça :
{
"wordpress-mcp-server": {
"command": "wp",
"args": [
"--path=/path/to/your/wordpress/installation",
"mcp-adapter",
"serve",
"--server=mcp-adapter-default-server",
"--user={admin_user}"
]
}
}
À noter :
wordpress-mcp-serverest un identifiant libre (tu peux le nommer comme tu veux).- La commande est
wp(WP-CLI). - Dans
args:--pathpointe vers l’installation WordPress,mcp-adapter servedémarre le serveur,--serverchoisit quel serveur MCP utiliser (ici le serveur par défaut),--userdéfinit l’utilisateur WordPress utilisé pour s’authentifier (ex.admin).
Pour un WordPress publiquement accessible, ou si tu ne veux pas passer par STDIO, tu peux utiliser HTTP via un proxy distant : @automattic/mcp-wordpress-remote (https://www.npmjs.com/package/@automattic/mcp-wordpress-remote). Dans ce cas, il te faut Node.js : https://nodejs.org/en et une authentification basée sur les Application Passwords WordPress (ou une implémentation OAuth custom).
Configuration minimale en HTTP :
{
"wordpress-mcp-server": {
"command": "npx",
"args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
"env": {
"WP_API_URL": "https://yoursite.example/wp-json/mcp/mcp-adapter-default-server",
"WP_API_USERNAME": "{admin_user}",
"WP_API_PASSWORD": "{application-password}"
}
}
}
Détails importants :
- La commande
npxexécute des paquets Node.js. -yaccepte automatiquement l’installation du paquet.WP_API_URLdoit pointer vers l’endpoint MCP du site (namespace du serveur inclus).WP_API_USERNAMEetWP_API_PASSWORDservent à l’authentification (mot de passe d’application).- Le proxy
mcp-wordpress-remotepropose aussi des pistes de diagnostic pour les connexions HTTP en local, notamment si tu as plusieurs versions de Node.js ou des soucis de certificats SSL : https://github.com/Automattic/mcp-wordpress-remote/blob/trunk/Docs/troubleshooting.md.
Configurations spécifiques : Claude Desktop, Cursor, Claude Code, VS Code
Valeurs d’exemple
Les exemples ci-dessous utilisent un site Studio “WordPress MCP” dans /Users/jonathanbossenger/Studio/wordpress-mcp, accessible via http://localhost:8885/, et un user admin admin. Remplace avec ton chemin et ton utilisateur.
Claude Desktop
Claude Desktop (Anthropic) a supporté MCP très tôt. Pour ajouter un serveur MCP : va dans l’onglet Developer (Claude → Settings → Developer), puis sous “Local MCP servers” clique Edit config. Cela ouvre l’emplacement du fichier claude_desktop_config.json.

Les serveurs se déclarent dans un objet mcpServers :
{
"mcpServers": {
}
}
Exemple en transport STDIO :
{
"mcpServers": {
"wordpress-mcp-server": {
"command": "wp",
"args": [
"--path=/Users/jonathanbossenger/Studio/wordpress-mcp",
"mcp-adapter",
"serve",
"--server=mcp-adapter-default-server",
"--user=admin"
]
}
}
}
Exemple en transport HTTP :
{
"mcpServers": {
"wordpress-mcp-server": {
"command": "npx",
"args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
"env": {
"WP_API_URL": "http://localhost:8885/wp-json/mcp/mcp-adapter-default-server",
"WP_API_USERNAME": "admin",
"WP_API_PASSWORD": "2SEB qW5j D7CW fpsh pbmN RGva"
}
}
}
}
Après sauvegarde, il faut redémarrer Claude Desktop (il ne recharge la conf MCP qu’au démarrage). Ensuite tu dois voir le serveur dans Developer → Local MCP servers, idéalement avec le statut running.
Cursor
Dans Cursor : va dans Cursor → Settings → Cursor Settings, puis ouvre la section Tools and MCP.

Clique sur Add Custom MCP : Cursor ouvre alors le fichier mcp.json. La structure de configuration est la même que pour Claude Desktop. Après sauvegarde, reviens dans Tools and MCP : le serveur doit apparaître et tu peux l’activer pour tes sessions.
Claude Code
Pour Claude Code, tu as deux options :
- Déclarer
mcpServersdans~/.claude.json(disponible globalement). - Créer un fichier
.mcp.jsonà la racine de ton projet (config spécifique à un projet).
Dans les deux cas, tu utilises le même format que Cursor/Claude Desktop (objet mcpServers).
VS Code
VS Code se configure via un fichier JSON décrivant les serveurs MCP (doc VS Code : https://code.visualstudio.com/docs/copilot/customization/mcp-servers). En pratique, tu crées souvent un mcp.json dans un dossier .vscode au sein du workspace.
Différence notable : VS Code attend un objet servers (et non mcpServers). Le reste (command/args/env) est identique.
{
"servers": {
// MCP server definitions go here
}
}
Une fois en place, VS Code affiche une barre de contrôle MCP pour démarrer/arrêter/redémarrer le serveur. Quand tout est OK, VS Code indique aussi le nombre de tools disponibles (dans l’exemple présenté : 3 tools).

.vscode/mcp.json, pilote le serveur MCP, et affiche le nombre de tools disponibles. — Forrás: WordPress Developer BlogUtiliser les MCP tools exposés par WordPress
Une fois ton serveur MCP connecté, tu peux commencer à exploiter les tools exposés par l’adapter. Exemple simple dans Claude Desktop : demander “Get the site info from my WordPress site”.

Dans ce scénario, le client IA :
- Détecte qu’un serveur MCP est disponible.
- Appelle
mcp-adapter-discover-abilitiespour lister les Abilities accessibles. - Déduit que
core/get-site-infocorrespond à la demande. - Appelle
mcp-adapter-execute-abilityen lui passantcore/get-site-info. - Récupère les données et formule une réponse avec les infos du site.
Aller plus loin : créer un serveur MCP personnalisé dans ton plugin
Le serveur par défaut couvre déjà beaucoup de cas, mais tu peux vouloir un serveur MCP spécifique à ton plugin. L’intérêt : contrôler finement quelles Abilities deviennent des tools (et comment), sans dépendre du flag meta.mcp.public.
Pour faire ça, il faut installer le package via Composer, puis créer/enregistrer ton serveur MCP.
1) Installer le package via Composer
Depuis le dossier de ton plugin :
composer require wordpress/mcp-adapter
2) Charger l’autoloader Composer
Dans le fichier principal du plugin :
if ( file_exists( __DIR__ . '/vendor/autoload.php' ) ) {
require_once __DIR__ . '/vendor/autoload.php';
}
Si plusieurs plugins risquent de dépendre de l’Abilities API ou du MCP Adapter sur le même site, il est recommandé d’utiliser Jetpack Autoloader pour éviter les conflits de versions (doc du dépôt) : https://github.com/WordPress/mcp-adapter/blob/trunk/docs/getting-started/installation.md#using-jetpack-autoloader-highly-recommended.
3) Initialiser le MCP Adapter
if ( ! class_exists( WPMCPCoreMcpAdapter::class ) ) {
// check if the MCP Adapter class is available, if not show some sort of error or admin notice
return;
}
// Initialize MCP Adapter and its default server.
WPMCPCoreMcpAdapter::instance();
4) Déclarer un serveur MCP custom avec mcp_adapter_init
Tu peux maintenant créer un serveur sur le hook mcp_adapter_init. Le callback reçoit l’instance McpAdapter, et tu appelles create_server() avec la configuration souhaitée.
add_action( 'mcp_adapter_init', 'myplugin_create_custom_mcp_server' );
function myplugin_create_custom_mcp_server( $adapter ) {
$adapter = WPMCPCoreMcpAdapter::instance();
$adapter->create_server(
'custom-mcp-server', // Unique server identifier.
'custom-mcp-server', // REST API namespace.
'mcp', // REST API route.
'Custom MCP Server', // Server name.
'Custom MCP Server', // Server description.
'v1.0.0', // Server version.
array( // Transport methods.
WPMCPTransportHttpTransport::class, // Recommended: MCP 2025-06-18 compliant.
),
WPMCPInfrastructureErrorHandlingErrorLogMcpErrorHandler::class, // Error handler.
WPMCPInfrastructureObservabilityNullMcpObservabilityHandler::class, // Observability handler.
array( 'namespace/ability-name' ), // Abilities to expose as tools
array(), // Resources (optional).
array(), // Prompts (optional).
);
}
Paramètres à bien comprendre :
- (1) Identifiant unique du serveur : utilisé notamment quand tu démarres le serveur via WP-CLI.
- (2) et (3) Namespace et route REST API de ton serveur MCP.
- (4) et (5) Nom et description affichés côté applications IA.
- (6) Version du serveur.
- (10) Liste des Abilities à exposer en tant que tools (tu peux en mettre plusieurs).
- Les autres paramètres couvrent la méthode de transport, la gestion d’erreurs, et l’observabilité. Tu peux utiliser ceux fournis, ou implémenter tes propres handlers pour intégrer ton transport/logging/monitoring.
Exemple complet : ajouter un serveur MCP au plugin “List All URLs”
Pour un exemple réaliste de serveur MCP custom, on peut partir du plugin “List All URLs” : https://github.com/wptrainingteam/list-all-urls.
Important
Avant de tester ce scénario, désactive le plugin MCP Adapter si tu l’avais activé, afin de bien valider l’exécution via la dépendance Composer dans le plugin d’exemple.
1) Cloner le plugin dans wp-content/plugins
cd wp-content/plugins
git clone git@github.com:wptrainingteam/list-all-urls.git
2) Basculer sur la branche qui intègre l’Abilities API
cd list-all-urls
git checkout abilities
3) Installer les dépendances Composer du plugin
composer install
4) Ajouter wordpress/mcp-adapter
composer require wordpress/mcp-adapter
5) Modifier list-all-urls.php : init + serveur custom
Dans list-all-urls.php, ajoute en bas du fichier :
if ( ! class_exists( WPMCPCoreMcpAdapter::class ) ) {
return;
}
// Initialize MCP Adapter and its default server.
WPMCPCoreMcpAdapter::instance();
add_action( 'mcp_adapter_init', 'list_all_urls_create_custom_mcp_server' );
/**
* Create a custom MCP server for the List All URLs plugin.
*
* @param object $adapter WPMCPCoreMcpAdapter The MCP Adapter instance.
* @return void
*/
function list_all_urls_create_custom_mcp_server( $adapter ) {
$adapter = WPMCPCoreMcpAdapter::instance();
$adapter->create_server(
'list-all-urls-mcp-server',
'list-all-urls-mcp-server',
'mcp',
'List All URLS MCP Server',
'Custom MCP Server for the List All URLs plugin. Currently exposes only the list-all-urls/urls ability as an MCP Tool.',
'v1.0.0',
array(
WPMCPTransportHttpTransport::class,
),
WPMCPInfrastructureErrorHandlingErrorLogMcpErrorHandler::class,
WPMCPInfrastructureObservabilityNullMcpObservabilityHandler::class,
array( 'list-all-urls/urls' ),
);
}
Détail intéressant : ici, tu n’as pas besoin d’ajouter meta.mcp.public sur l’Ability list-all-urls/urls, parce que tu l’exposes explicitement via ton serveur MCP custom.
6) Activer le plugin et configurer ton client IA sur le nouveau serveur
Active le plugin “List All URLs” dans l’admin WordPress. Ensuite, mets à jour la configuration MCP de ton application IA pour utiliser le nouveau serveur.
Exemple de configuration VS Code qui déclare à la fois le serveur par défaut et celui du plugin “List All URLs”, en STDIO :
{
"servers": {
"wordpress-mcp-server": {
"command": "wp",
"args": [
"--path=/Users/jonathanbossenger/Studio/wordpress-mcp",
"mcp-adapter",
"serve",
"--server=mcp-adapter-default-server",
"--user=admin"
]
},
"list-all-urls-mcp-server": {
"command": "wp",
"args": [
"--path=/Users/jonathanbossenger/Studio/wordpress-mcp",
"mcp-adapter",
"serve",
"--server=list-all-urls-mcp-server",
"--user=admin"
]
}
}
}
Le fait d’avoir plusieurs serveurs MCP dans la même application est un gros plus : tu peux basculer entre plusieurs sites WordPress, ou isoler des groupes d’Abilities par plugin/usage.
Après mise à jour de la config : redémarre l’application (ou démarre explicitement le serveur MCP dans l’UI quand l’app le permet). Tu devrais voir le nouveau serveur et pouvoir demander à l’IA “List all URLs on my WordPress site” : elle appellera alors le tool list-all-urls-urls via l’adapter.
Sécurité : les règles à appliquer avant d’ouvrir la porte aux agents
Un point à garder en tête : un client MCP agit comme un utilisateur WordPress connecté. Il faut donc considérer l’intégration MCP comme une extension de ta surface applicative.
- Soigne le
permission_callback: chaque Ability doit vérifier la capability minimale requise (manage_options,edit_posts, etc.). Évite__return_truesur les opérations destructrices (suppression de contenu, modifications sensibles…). - Utilise des comptes dédiés pour l’accès MCP : en production, crée un user/role spécifique avec des droits limités. N’expose pas des Abilities puissantes à des clients IA non auditables.
- Privilégie le read-only pour les endpoints MCP publics : si tu exposes du HTTP sur Internet, reste d’abord sur du diagnostic, du reporting et de l’accès contenu en lecture.
- Authentification sur mesure si nécessaire : le mode par défaut passe par les application passwords, mais tu peux implémenter OAuth ou un autre schéma pour durcir la sécurité.
- Surveille et journalise l’usage : exploite des handlers d’erreur et d’observabilité personnalisés pour brancher ton stack de logs/monitoring.
Démarrer aujourd’hui : le chemin “hello IA” minimal
Pour expérimenter sans se perdre : le minimum côté dev WordPress consiste à (1) enregistrer une Ability, (2) ajouter/initialiser le MCP Adapter, (3) connecter un client IA compatible MCP.
Si tu as déjà des plugins basés sur l’Abilities API, l’adapter transforme ces Abilities en API prêtes pour des agents IA avec très peu d’effort additionnel. La stratégie la plus saine : commencer petit, exposer d’abord quelques Abilities non destructrices et en lecture seule, tester en local (Claude Desktop, Cursor), puis élargir progressivement vers des workflows plus ambitieux.
Pour aller plus loin : documentation Abilities API https://developer.wordpress.org/apis/abilities/ et dépôt du MCP Adapter https://github.com/WordPress/mcp-adapter.
Références / Sources
- From Abilities to AI Agents: Introducing the WordPress MCP Adapter
- Abilities API in WordPress 6.9
- Introducing the WordPress Abilities API
- Model Context Protocol: Intro
- Model Context Protocol: Architecture (Primitives & Transport Layer)
- Model Context Protocol: Transport layer
- MCP Adapter
- AI Building Blocks for WordPress
- MCP Adapter GitHub repository
- MCP Adapter Releases
- @automattic/mcp-wordpress-remote
- mcp-wordpress-remote troubleshooting
- WP-CLI
- Application Passwords Integration Guide
- VS Code MCP servers documentation
- List All URLs plugin
- Using Jetpack Autoloader (highly recommended)
- Build MCP tools like ogres with layers
Camille Dubois
Rédactrice en chef de l'équipe française, experte Symfony et Laravel. Je suis convaincue que le code élégant et la bonne documentation vont de pair.
Tous les articlesPlus d’articles de Camille Dubois
Faille critique dans WPvivid Backup : un upload de fichiers arbitraires touche jusqu’à 800 000 sites WordPress (CVE-2026-1357)
HelloBlog.io débarque : un blog tech multilingue (22 langues), sans pub, orienté WordPress et open source
WP-Bench : un benchmark officiel pour mesurer les IA sur WordPress (et pas sur du code générique)