WordPress MCP Adapter: sådan gør Abilities dine plugins AI-klar via MCP
WordPress’ Abilities API (introduceret i WordPress 6.9) er et af de mest spændende skift i, hvordan vi som plugin-udviklere kan eksponere funktionalitet på en måde, der er standardiseret, discoverable, typed og eksekverbar. Det er allerede nyttigt i klassiske integrationer (PHP/JS/REST) – men det bliver for alvor interessant, når man kobler det på AI-automation.
Her kommer Model Context Protocol (MCP) ind i billedet. MCP handler om at give AI-modeller mere kontekst og sikre integrationspunkter, så en AI-klient kan læse data og udføre handlinger gennem veldefinerede “primitives”. WordPress’ svar på det er WordPress MCP Adapter: et officielt byggesten i initiativet AI Building Blocks for WordPress, der gør det muligt for AI-værktøjer at discover og eksekvere WordPress Abilities direkte.
I denne artikel får du en praktisk gennemgang af, hvordan MCP Adapteren hænger sammen med Abilities, hvordan du installerer den, hvordan du eksponerer Abilities som MCP tools, hvordan du forbinder populære AI-klienter (lokalt og remote), samt hvilke sikkerheds-overvejelser du bør tage seriøst fra dag ét.
Hurtig opsummering: Abilities som fundamentet
Hvis du ikke har arbejdet med Abilities endnu, er kernen ret enkel: Abilities API giver WordPress en first-class, cross-context functional API, der standardiserer, hvordan Core og plugins fortæller omverdenen, hvad de kan.
En ability defineres én gang med:
- Et unikt navn (
namespace/ability-name) - Et typed input schema og output schema
- En permission_callback, der håndhæver capabilities
- En execute_callback, der udfører den konkrete funktionalitet
Det, der sker i execute_callback, kan i praksis være alt fra at hente data, opdatere posts, køre diagnostik eller andre afgrænsede units of work.
Når en ability er registreret, kan den både findes og eksekveres fra PHP, JavaScript og via REST API.
De tre Core Abilities i WordPress 6.9
WordPress 6.9 leverer tre default abilities, som er oplagte at bruge til at teste MCP Adapteren med:
core/get-site-info: Returnerer site-information konfigureret i WordPress. Som standard alle felter, eller en filtreret subset.core/get-user-info: Returnerer basale profildetaljer for den nuværende autentificerede bruger (til personalisering, auditing og access-aware adfærd).core/get-environment-info: Returnerer runtime-kontekst til diagnostik og kompatibilitet (environment, PHP runtime, database server info, WordPress version).
Hvad er WordPress MCP Adapteren?
WordPress MCP Adapter er en pakke, der adapterer Abilities registreret via Abilities API til de primitives, som MCP forstår. Det gør, at AI-agenter kan:
- discover og eksekvere site-funktionalitet som MCP tools
- læse WordPress-data som MCP resources
I praksis betyder det: hvis din plugin-kode allerede registrerer Abilities, er du meget tæt på at lade en AI-agent bruge dem på en kontrolleret måde.
MCP-primitives: tools, resources og prompts
MCP organiserer integrationer i tre hovedkategorier:
- Tools: eksekverbare funktioner, som AI’en kalder for at udføre handlinger.
- Resources: passive datakilder (fx filer eller database-rækker), som AI’en læser som kontekst.
- Prompts: foruddefinerede templates, der guider specifikke workflows.
I WordPress-sammenhæng vil Abilities typisk blive eksponeret som tools, fordi de repræsenterer aktiv logik (hent data, opdater content, kør diagnostik). Adapteren er dog fleksibel: hvis en Ability reelt bare leverer read-only data (fx en debug log eller statisk konfiguration), kan den også mappes til en resource, så AI’en kan indlæse det som baggrundskontekst uden at “kalde” funktionen aktivt.
Installation: den hurtige vej (plugin)
Den hurtigste måde at komme i gang er at installere MCP Adapteren som plugin via GitHub releases:
https://github.com/WordPress/mcp-adapter/releases
Når plugin’et er installeret og aktiveret, registrerer det en default MCP server med navnet mcp-adapter-default-server, samt tre custom abilities:
mcp-adapter/discover-abilitiesmcp-adapter/get-ability-infomcp-adapter/execute-ability
De tre abilities bliver samtidig automatisk eksponeret som MCP tools:
mcp-adapter-discover-abilitiesmcp-adapter-get-ability-infomcp-adapter-execute-ability
Det giver AI-agenter en “lagdelt” måde at arbejde på: først kan de discover, så kan de hente detaljer om en ability, og til sidst kan de eksekvere den.
Gør Abilities tilgængelige på default-serveren (meta.mcp.public)
Som standard er Abilities ikke tilgængelige via MCP Adapterens default-server, medmindre du eksplicit markerer dem som offentlige for MCP-adgang. Det gør du ved at tilføje et meta.mcp.public flag i argumenterne, når du registrerer din ability via wp_register_ability():
'meta' => array(
'mcp' => array(
'public' => true, // Required for MCP default server access
),
)For Core Abilities kan du ikke redigere registreringen direkte, men du kan hooke ind i filteret wp_register_ability_args og tilføje flaget.
<?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;
}
Når det er på plads, kan AI-klienter forbinde til din WordPress-installation via MCP Adapteren og kalde Core Abilities gennem default-serverens MCP tools.
Forbind AI-applikationer til din WordPress MCP server
Transport-lag: STDIO vs HTTP
MCP definerer to transport-mekanismer: STDIO og HTTP. Valget handler typisk om, hvor din WordPress-installation kører:
- STDIO: oplagt til lokale dev-miljøer. MCP Adapteren understøtter det via WP-CLI, så du skal have WP-CLI installeret lokalt.
- HTTP: oplagt til offentligt tilgængelige sites – eller hvis du ikke vil bruge STDIO. Her bruges en remote proxy:
@automattic/mcp-wordpress-remotevia Node.js. Autentificering sker typisk via Application Passwords eller en custom OAuth-løsning.
Minimums-konfiguration: STDIO (lokalt)
Ved STDIO er minimums-konfigurationen (i MCP-klientens server-definition) typisk:
{
"wordpress-mcp-server": {
"command": "wp",
"args": [
"--path=/path/to/your/wordpress/installation",
"mcp-adapter",
"serve",
"--server=mcp-adapter-default-server",
"--user={admin_user}"
]
}
}Noter til felterne:
- Servernavnet (
wordpress-mcp-server) er valgfrit og kan være hvad som helst. commanderwp(WP-CLI).--pathpeger på din WordPress-installation.mcp-adapter servestarter MCP Adapter-serveren.--servervælger MCP server (her default-serveren).--userangiver hvilken WordPress-bruger, der autentificeres som (ofte en admin i dev).
Minimums-konfiguration: HTTP (remote proxy)
Til HTTP transport bruges den remote proxy, der ligger som npm-pakke: https://www.npmjs.com/package/@automattic/mcp-wordpress-remote. Det kræver Node.js: https://nodejs.org/en
Minimums-konfigurationen ser sådan ud:
{
"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}"
}
}
}Noter:
commandernpx(kører Node.js packages).-yaccepterer automatisk installation af pakken.WP_API_URLpeger på MCP endpointet på dit site.WP_API_USERNAMEogWP_API_PASSWORDbruges til autentificering (typisk Application Passwords).
Hvis du forbinder til en lokal WordPress over HTTP via remote proxy, er der fejlsøgningsnoter her (ofte handler det om flere Node-versioner eller lokale SSL-certifikater): https://github.com/Automattic/mcp-wordpress-remote/blob/trunk/Docs/troubleshooting.md
App-specifik opsætning (Claude Desktop, Cursor, Claude Code, VS Code)
Værdier i eksempler
Eksemplerne her bruger en Studio-installation i /Users/jonathanbossenger/Studio/wordpress-mcp med URL http://localhost:8885/ og admin-brugeren admin. Udskift med dine egne værdier.
Claude Desktop
I Claude Desktop finder du MCP-konfigurationen under Developer fanen (Claude → Settings → Developer). Under Local MCP servers vælger du Edit config. Det åbner claude_desktop_config.json, hvor MCP servers defineres i et mcpServers-objekt:
{
"mcpServers": {
}
}STDIO-opsætning:
{
"mcpServers": {
"wordpress-mcp-server": {
"command": "wp",
"args": [
"--path=/Users/jonathanbossenger/Studio/wordpress-mcp",
"mcp-adapter",
"serve",
"--server=mcp-adapter-default-server",
"--user=admin"
]
}
}
}HTTP-opsætning:
{
"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"
}
}
}
}Efter du har gemt filen, skal Claude Desktop genstartes, fordi den kun læser MCP server-konfiguration ved startup.

Cursor
I Cursor går du til Settings (Cursor → Settings → Cursor Settings) og vælger sektionen Tools and MCP.
Klik på Add Custom MCP, som åbner Cursors mcp.json. Formatet er det samme som i Claude Desktop, og når du har gemt, kan du gå tilbage til Tools and MCP og aktivere serveren til dine coding sessions.

Claude Code
I Claude Code kan du enten:
- tilføje
mcpServersmed dine server-configs i.claude.jsoni din home directory (globalt) - eller oprette en
.mcp.jsoni projektmappen (projektspecifikt)
Formatet for server-definitionerne kan være det samme som i Cursor/Claude Desktop.
VS Code
I VS Code opsætter du MCP servers via en JSON-konfigfil (typisk mcp.json) i en .vscode-mappe i workspace. VS Code beskriver formatet her: https://code.visualstudio.com/docs/copilot/customization/mcp-servers
Den væsentlige forskel er, at VS Code bruger et servers-objekt (ikke mcpServers). Resten er samme struktur:
{
"servers": {
// MCP server definitions go here
}
}
Når filen findes i workspace, viser VS Code en MCP-kontroltoolbar, hvor du kan starte/stoppe/restarte serveren. Når serveren kører korrekt, vises også hvor mange tools AI’en har adgang til (i eksemplet: tre).
Brug MCP tools i praksis
Når din AI-klient er forbundet til MCP serveren, kan du begynde at bruge tools eksponeret af MCP Adapteren.
Et simpelt eksempel i Claude Desktop er at bede om: “Get the site info from my WordPress site”.
Typisk flow i klienten:
- AI’en ser, at der findes en MCP server og kalder
mcp-adapter-discover-abilitiesfor at se, hvilke Abilities der er tilgængelige. - Den vurderer, at
core/get-site-infomatcher opgaven. - Den kalder
mcp-adapter-execute-abilityog sender ability-navnetcore/get-site-infosom input. - WordPress returnerer data, og klienten præsenterer det som et svar.
Custom MCP server i dit plugin (Composer-vej)
Default-serveren dækker meget, men i plugins kan det være en fordel at lave en custom MCP server, så du styrer præcist, hvilke Abilities der eksponeres som MCP tools (og evt. resources/prompts).
Det kræver, at du installerer MCP Adapteren som dependency via Composer og registrerer din egen server.
1) Installer pakken
Kør i din plugin-mappe:
composer require wordpress/mcp-adapter2) Load Composer autoloader
I dit main plugin-file:
if ( file_exists( __DIR__ . '/vendor/autoload.php' ) ) {
require_once __DIR__ . '/vendor/autoload.php';
}Hvis flere plugins på samme site kan afhænge af MCP Adapteren eller Abilities API, anbefales det at bruge Jetpack Autoloader for at undgå version-konflikter. (Se dokumentationen her: https://github.com/WordPress/mcp-adapter/blob/trunk/docs/getting-started/installation.md#using-jetpack-autoloader-highly-recommended)
3) Initialisér MCP Adapteren
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) Opret og registrér en custom server (mcp_adapter_init)
Du hooker ind i mcp_adapter_init. Callbacken får en adapter-reference, og du bruger create_server() til at definere konfigurationen:
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).
);
}
De parametre, der typisk betyder mest i praksis:
- (1) Unikt server-id: bruges når du starter serveren via WP-CLI.
- (2) + (3) REST API namespace og route: bestemmer MCP endpointets URL.
- (4) + (5) Navn og beskrivelse: vises i AI-applikationer, når de lister MCP servers.
- (6) Version for serveren.
- (10) Liste over ability-navne, der skal eksponeres som MCP tools (du kan have flere).
- Transport, error handling og observability handlers kan være standard – eller du kan implementere dine egne til eksisterende transport/logging/monitoring-stack.
Eksempel: tilføj en MCP server til “List All URLs”
Et konkret eksempel er at udvide plugin’et List All URLs med en custom MCP server, der eksponerer ability’en list-all-urls/urls som MCP tool.
0) Forberedelse
Hvis du har MCP Adapter plugin’et aktiveret, så deaktivér det først (i dette eksempel bruges Composer-varianten i plugin’et selv).
1) Clone repo’et ind i plugins-mappen
cd wp-content/plugins
git clone git@github.com:wptrainingteam/list-all-urls.git2) Skift til branch med Abilities-implementeringen
cd list-all-urls
git checkout abilities3) Installer dependencies
Plugin’et bruger allerede Composer, så installér først:
composer install4) Tilføj mcp-adapter pakken
composer require wordpress/mcp-adapter5) Initialisér MCP Adapter og opret custom server i list-all-urls.php
Åbn list-all-urls.php og tilføj dette nederst i filen:
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' ),
);
}
Vigtigt: her behøver du ikke sætte meta.mcp.public på list-all-urls/urls, fordi den bliver eksponeret direkte via din custom server-konfiguration.
6) Aktivér plugin’et og opdatér MCP-konfiguration i din AI-klient
Aktivér List All URLs fra WordPress admin. Opdatér derefter din AI-klients MCP-konfiguration til også at starte den nye server.
Her er et VS Code eksempel med både default-serveren og den nye plugin-server, begge via 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"
]
}
}
}Det er helt legitimt at have flere MCP servers i samme AI-applikation – fx for at skifte mellem forskellige sites eller plugins, der eksponerer forskellige Abilities.
Husk at genstarte applikationen eller starte MCP serveren fra UI’et efter ændringer. Når den nye server er synlig, kan du bede AI’en om at “List all URLs on my WordPress site”, og den vil kalde tool’et list-all-urls-urls via MCP Adapteren.
Sikkerhed og best practices
MCP-klienter agerer som loggede WordPress-brugere. Det betyder, at du bør betragte dem som en reel del af din applikations angrebsflade. Her er de centrale best practices:
- Brug
permission_callbackmed omtanke - Hver ability bør tjekke den mindst nødvendige capability (
manage_options,edit_posts, osv.). - Undgå
__return_truefor destruktive operationer som fx sletning af content. - Brug dedikerede brugere til MCP-adgang
- Særligt i produktion: opret en specifik rolle/bruger med begrænsede capabilities.
- Eksponér ikke kraftfulde abilities til AI-klienter, du ikke har auditeret.
- Foretræk read-only abilities til public MCP endpoints
- Hvis du eksponerer HTTP transport over internettet, så fokusér på read-only diagnostik, rapportering og content access.
- Implementér custom autentificering hvis nødvendigt
- Standard-setup bruger application passwords, men OAuth eller andre metoder kan give bedre sikkerhed.
- Overvåg og log forbrug
- Brug custom error- og observability-handlers til at koble på din egen logging/monitoring-stack.
WordPress.com vs self-hosted: samme byggeklodser, forskellig auth
Der er et interessant overlap mellem WordPress.com og self-hosted: MCP tools på WordPress.com er drevet af den samme Abilities API og MCP Adapter, så idéen om at registrere capabilities én gang og få dem til at fungere på tværs er teoretisk mulig. Den største forskel lige nu ligger i autentificering: WordPress.com bruger OAuth 2.1 (se: https://wordpress.com/blog/2026/01/22/connect-ai-agents-to-wordpress-oauth-2-1/), mens self-hosted typisk må læne sig op ad JWT tokens eller Application Passwords, indtil en mere standard OAuth-løsning er tilgængelig i praksis.
Sådan kommer du i gang med at eksperimentere i dag
En minimalistisk “hello AI”-vej som WordPress-udvikler kan koges ned til:
- Registrér en ability (med skemaer,
permission_callback,execute_callback). - Installér MCP Adapter (som plugin eller via Composer), og initialisér den.
- Eksponér ability’en: enten via
meta.mcp.publicpå default-serveren eller ved at oprette en custom MCP server, der eksplicit lister den. - Forbind en MCP-aware AI-klient (Claude Desktop, Cursor, VS Code, Claude Code) via STDIO eller HTTP.
Hvis du allerede har plugins, der bruger Abilities API, kan MCP Adapteren gøre dem til AI-ready API’er med overraskende lidt ekstra arbejde. Start småt: eksponér et par ikke-destruktive, read-only Abilities som tools, test lokalt, og udvid gradvist, når du har styr på permissions, logging og driftsrisiko.
Dokumentation, der er værd at have åbent undervejs:
- Abilities API: https://developer.wordpress.org/apis/abilities/
- MCP Adapter repo: https://github.com/WordPress/mcp-adapter
Referencer / Kilder
- 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)
- Model Context Protocol – Transport layer
- MCP Adapter (Make WordPress AI)
- AI Building Blocks for WordPress
- wordpress/mcp-adapter
- MCP Adapter releases
- @automattic/mcp-wordpress-remote
- mcp-wordpress-remote troubleshooting
- WP-CLI
- Node.js
- Application Passwords integration guide
- VS Code MCP servers configuration
- List All URLs plugin
- Build MCP tools like ogres with layers
- Connect AI agents to WordPress (OAuth 2.1)
Freja Hansen
Developer relations og community manager. At bygge tech-fællesskaber og forbedre udvikleroplevelsen er min passion. Fællesskabets kraft er uendelig.
Alle indlæg