Naar de inhoud

Je WordPress-site aan een AI-assistent koppelen met MCP

Met MCP kan een AI-assistent je WordPress-site lezen en bijwerken. Zo zet je het op met de Abilities API, de MCP Adapter en een application password, zonder de deur open te zetten.

Gecontroleerd 18 september 2026 6 min lezen

Je vraagt een AI-assistent om een paginatekst te herschrijven. Je kopieert de tekst uit WordPress, plakt hem in de chat, kopieert het antwoord en plakt het terug. Bij één pagina is dat te doen. Bij veertig productomschrijvingen zit je een middag te knippen en te plakken, en ergens onderweg plak je de verkeerde tekst op de verkeerde pagina.

MCP haalt die tussenstap weg. Het Model Context Protocol is een open standaard waarmee een assistent zoals Claude rechtstreeks functies van een systeem kan aanroepen. Sinds versie 6.9 heeft WordPress daar de basis voor in huis. Je bepaalt zelf welke functies je openzet, en dat is meteen het belangrijkste van dit hele verhaal.

Hoe het in elkaar zit

Drie lagen. De Abilities API in WordPress, waarmee je een functie registreert met een naam, een beschrijving, een invoerschema en een rechtencontrole. De MCP Adapter, een plugin van het WordPress-project die zulke abilities aanbiedt als MCP-tools op een REST-endpoint. En je client, bijvoorbeeld Claude Code of Claude Desktop, die via een kleine proxy met dat endpoint praat.

De assistent ziet dus geen database en geen wp-admin. Hij ziet een lijstje tools met een beschrijving, en kan alleen dat.

Wat je nodig hebt

  • WordPress 6.9 of nieuwer, voor de Abilities API.
  • De MCP Adapter. Sommige plugins leveren hem al mee. Staat hij er nog niet, dan installeer je hem als losse plugin.
  • HTTPS. Application passwords werken niet over een onbeveiligde verbinding.
  • Node op je werkplek, voor de proxy tussen je client en de site.

Stap 1: registreer een ability

Begin met iets dat alleen leest. Een ability heeft een categorie nodig, en beide registreer je op hun eigen hook. De beschrijving is geen formaliteit: dat is de tekst waarop de assistent beslist of hij deze tool nodig heeft.

add_action( 'wp_abilities_api_categories_init', function () {
	wp_register_ability_category( 'mijn-site', array(
		'label'       => 'Mijn site',
		'description' => 'Content van deze site lezen.',
	) );
} );

add_action( 'wp_abilities_api_init', function () {
	wp_register_ability( 'mijn-site/laatste-berichten', array(
		'label'               => 'Laatste berichten',
		'description'         => 'Geeft titel en link van de laatst gepubliceerde berichten.',
		'category'            => 'mijn-site',
		'input_schema'        => array(
			'type'       => 'object',
			'properties' => array(
				'aantal' => array( 'type' => 'integer', 'default' => 5 ),
			),
		),
		'output_schema'       => array( 'type' => 'array' ),
		'permission_callback' => function () {
			return current_user_can( 'edit_posts' );
		},
		'execute_callback'    => function ( $input ) {
			$aantal = min( 20, (int) ( $input['aantal'] ?? 5 ) );

			return array_map( function ( $post ) {
				return array(
					'titel' => $post->post_title,
					'url'   => get_permalink( $post ),
				);
			}, get_posts( array( 'numberposts' => $aantal ) ) );
		},
		'meta'                => array(
			'show_in_rest' => true,
			'mcp'          => array( 'public' => true ),
		),
	) );
} );

Met mcp.public op true verschijnt de ability op de standaardserver van de adapter. Laat je dat weg, dan bestaat hij wel in WordPress, maar ziet je client hem niet.

Stap 2: maak een apart account met een application password

Gebruik niet je eigen beheerdersaccount. Maak een gebruiker aan met precies de rol die nodig is. Ga naar het profiel van die gebruiker, scroll naar Applicatiewachtwoorden, geef het een naam en klik op toevoegen. Je ziet het wachtwoord één keer. Trek je het later in, dan is de koppeling dicht zonder dat iemand zijn gewone wachtwoord hoeft te wijzigen.

Stap 3: koppel je client

In Claude Code zet je een bestand .mcp.json in de map van je project. De proxy van Automattic vertaalt tussen je client en het REST-endpoint van de adapter.

{
  "mcpServers": {
    "mijn-site": {
      "command": "npx",
      "args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
      "env": {
        "WP_API_URL": "https://jouwsite.nl/wp-json/mcp/mcp-adapter-default-server",
        "WP_API_USERNAME": "mcp-gebruiker",
        "WP_API_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx"
      }
    }
  }
}

Start je client daarna opnieuw. MCP-servers worden bij het opstarten geladen, niet tussendoor. Vraag de assistent vervolgens om de laatste berichten van je site. Krijg je titels en links terug, dan staat de verbinding.

Stap 4: schrijven, maar dan met een rem erop

Lezen is onschuldig. Schrijven is waar het nuttig wordt, en waar je moet nadenken. Dit zijn de regels die ik in mijn eigen koppeling heb ingebouwd.

  • Op live standaard alleen lezen. Schrijftools bestaan op de live site niet eens in de lijst, tenzij ik ze met een constante in wp-config bewust aanzet. Op staging staan ze wel aan.
  • Nieuwe content is een concept. Publiceren is een aparte schakelaar. Een mens leest het na.
  • Elke ability controleert zelf de rechten. De permission_callback kijkt naar de capability die bij die actie hoort, niet naar een algemeen ja of nee.
  • Na het schrijven teruglezen. De tool geeft terug wat er werkelijk in de database staat. Zo ziet de assistent het als een waarde niet is aangekomen.
  • Geen tool die willekeurige PHP of SQL uitvoert. Hoe handig het ook lijkt. Een ability doet één afgebakend ding.

Waar het meestal misgaat

  • Een 401 op het endpoint. Zonder inlog is dat juist goed: het endpoint bestaat. Met inlog betekent het meestal dat een beveiligingsplugin application passwords of de REST API blokkeert.
  • Een 404 op het endpoint. De adapter is niet actief, of de site draait een WordPress-versie zonder Abilities API. Dan registreert er niets, en dat gebeurt zonder foutmelding.
  • De tools verschijnen niet in je client. Je hebt de client niet opnieuw gestart, of de ability staat niet open voor MCP. Controleer mcp.public.
  • Twee plugins leveren elk hun eigen adapter mee. De eerste die laadt wint. Is dat een oudere versie, dan kan de registratie van je server stil mislukken. Werk de adapter bij.
  • Het wachtwoord staat in git. .mcp.json bevat een werkende inlog. Zet het bestand in je .gitignore en commit alleen een voorbeeld zonder wachtwoord.
  • Een vage beschrijving. Staat er alleen “haalt data op”, dan weet de assistent niet wanneer hij de tool moet gebruiken. Schrijf op wat hij doet, wat hij teruggeeft en wanneer je hem eerst moet aanroepen.

Tot slot

MCP maakt van een AI-assistent geen beheerder van je site. Het maakt er een collega van die precies mag wat jij hebt vastgelegd, en niets daarbuiten. Begin met lezen, zet schrijven pas aan op staging, en laat publiceren bij een mens. Wil je dit op je eigen site of die van een klant inrichten en kom je er niet uit, dan denk ik als WordPress specialist graag mee.

Loop je hier alsnog op vast?

Stuur me een bericht met wat je precies ziet gebeuren. Meestal weet ik binnen een paar minuten waar het zit.

Kom in contact
Contact

Stel je technische vraag

Vertel wat er speelt op je site; ik laat weten wat er nodig is.

Dit veld is bedoeld voor validatiedoeleinden en moet niet worden gewijzigd.
Hoe concreter, hoe beter ik kan inschatten wat er nodig is.