Spring til indhold
WordPress MCP Adapter: sådan gør Abilities dine plugins AI-klar via MCP
Freja Hansen
Freja Hansen 17. February 2026 · 17 min læsetid

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-abilities
  • mcp-adapter/get-ability-info
  • mcp-adapter/execute-ability

De tre abilities bliver samtidig automatisk eksponeret som MCP tools:

  • mcp-adapter-discover-abilities
  • mcp-adapter-get-ability-info
  • mcp-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-remote via 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.
  • command er wp (WP-CLI).
  • --path peger på din WordPress-installation.
  • mcp-adapter serve starter MCP Adapter-serveren.
  • --server vælger MCP server (her default-serveren).
  • --user angiver 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:

  • command er npx (kører Node.js packages).
  • -y accepterer automatisk installation af pakken.
  • WP_API_URL peger på MCP endpointet på dit site.
  • WP_API_USERNAME og WP_API_PASSWORD bruges 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.

Claude Desktop viser WordPress MCP server som running under Local MCP servers
Forrás: developer.wordpress.org

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.

Cursor Tools & MCP settings panel med WordPress MCP Server tilføjet
Forrás: developer.wordpress.org

Claude Code

I Claude Code kan du enten:

  • tilføje mcpServers med dine server-configs i .claude.json i din home directory (globalt)
  • eller oprette en .mcp.json i 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
  }
}
VS Code mcp.json med MCP-konfiguration for WordPress MCP server
Forrás: developer.wordpress.org

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-abilities for at se, hvilke Abilities der er tilgængelige.
  • Den vurderer, at core/get-site-info matcher opgaven.
  • Den kalder mcp-adapter-execute-ability og sender ability-navnet core/get-site-info som 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-adapter

2) 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.git

2) Skift til branch med Abilities-implementeringen

cd list-all-urls
git checkout abilities

3) Installer dependencies

Plugin’et bruger allerede Composer, så installér først:

composer install

4) Tilføj mcp-adapter pakken

composer require wordpress/mcp-adapter

5) 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.publiclist-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_callback med omtanke
  • Hver ability bør tjekke den mindst nødvendige capability (manage_options, edit_posts, osv.).
  • Undgå __return_true for 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.public på 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:

Bliv en del af HelloWP-communityet!

Chat med os om WordPress og webudvikling, og del erfaringer med andre udviklere.

- medlemmer
- online
Deltag

Vi bruger cookies til at forbedre din oplevelse. Ved at fortsætte accepterer du vores Cookiepolitik.