WordPress MCP Adapter: как Abilities API превръща плъгините ти в инструменти за AI агенти
Ако следиш накъде върви WordPress екосистемата, вероятно си усетил, че AI автоматизацията вече не е „някъде там“, а започва да става част от реалните dev workflows. Ключовият елемент тук е Abilities API (в WordPress 6.9) – начин да регистрираш функционалности, които са стандартизирани, откриваеми, типизирани и изпълними. А когато добавиш към това Model Context Protocol (MCP), получаваш мост между WordPress и AI агенти.
Точно тук влиза WordPress MCP Adapter – пакет/плъгин, който позволява AI инструменти (Claude Desktop, Claude Code, Cursor, VS Code) да намират и извикват WordPress Abilities директно като MCP tools. В този материал ще минем през инсталация, конфигурация, свързване на AI клиенти, използване на MCP tools, създаване на custom MCP server за плъгин и важните security практики.
Бърз контекст: Abilities API като основа
Abilities API дава на WordPress „first-class“ функционален API, който работи cross-context и стандартизира как Core и плъгините описват „какво могат да правят“.
Една ability се дефинира еднократно с:
- Уникално име (
namespace/ability-name) - Типизирана input schema и output schema
- permission_callback, който прилага права/капабилитита
- execute_callback, който реално изпълнява действието
Логиката в execute_callback може да е всичко: извличане на данни, ъпдейт на постове, диагностика, отчети – всяка отделна, добре дефинирана unit-of-work.
След регистрация ability-то става discoverable и executable от PHP, JavaScript и REST API.
Трите Core abilities в WordPress 6.9
WordPress 6.9 идва с 3 стандартни abilities, които са удобни за първи тестове с MCP Adapter:
core/get-site-info: връща информация за сайта (по подразбиране всички полета или опционално филтриран под-набор).core/get-user-info: връща базови профилни детайли за текущия автентикиран потребител – полезно за персонализация, одитиране и access-aware поведение.core/get-environment-info: връща данни за runtime контекста – среда, PHP runtime, информация за DB сървъра, версия на WordPress (за диагностика/съвместимост).
Какво представлява WordPress MCP Adapter?
WordPress MCP Adapter е официален пакет в инициативата AI Building Blocks for WordPress. Целта му е да „адаптира“ abilities, регистрирани през Abilities API, към примитивите (primitives) на Model Context Protocol (MCP), така че AI агентите:
- да откриват и изпълняват функционалност като MCP tools
- да четат WordPress данни като MCP resources
На практика това означава: ако плъгинът ти вече регистрира abilities, си на една стъпка от това AI агент да ги използва.
MCP накратко: tools, resources и prompts
MCP организира взаимодействията през три основни примитива:
- Tools: изпълними функции, които AI извиква, за да направи действие.
- Resources: пасивни източници на данни (като файлове или редове от база данни), които AI чете като контекст.
- Prompts: предварително конфигурирани шаблони, които насочват конкретни workflow-и.
С MCP Adapter обичайният случай е abilities да се експонират като tools, защото представляват изпълнима логика (fetch, update, diagnostics). Но ако ability-то е read-only и връща контекст (примерно статична конфигурация или debug log), може да се конфигурира и като resource, за да може моделът да „погълне“ информацията без активно извикване.
Инсталиране на MCP Adapter
Най-бързият старт е като инсталираш MCP Adapter като плъгин от GitHub Releases страницата:
https://github.com/WordPress/mcp-adapter/releases
След активиране плъгинът регистрира default MCP server с име mcp-adapter-default-server и три custom abilities:
mcp-adapter/discover-abilitiesmcp-adapter/get-ability-infomcp-adapter/execute-ability
Тези abilities автоматично се експонират и като MCP tools:
mcp-adapter-discover-abilitiesmcp-adapter-get-ability-infomcp-adapter-execute-ability
Трите инструмента са замислени като „на слоеве“ достъп до Abilities: агентът първо открива какво е налично, после взима информация за конкретна ability, и накрая изпълнява ability-то.
Как да позволиш Abilities в default MCP server-а
По подразбиране abilities са достъпни през default MCP server-а само ако изрично ги маркираш като публични за MCP. Това става с флаг meta.mcp.public в аргументите при wp_register_ability().
'meta' => array(
'mcp' => array(
'public' => true, // Required for MCP default server access
),
)За Core abilities (или за чужди abilities, които искаш да „ъпдейтнеш“ при регистрацията им) можеш да използваш филтъра wp_register_ability_args и да добавиш 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;
}
След това вече можеш да свържеш AI клиент към сайта си през MCP Adapter и да извикваш core abilities през MCP tools на default server-а.
Свързване на AI приложения към WordPress MCP server
Transport методи: STDIO и HTTP
За връзка към MCP server има два transport механизма: STDIO и HTTP. Изборът обикновено зависи от това къде ти е WordPress инсталацията.
За локална разработка най-директният вариант е STDIO транспорт. MCP Adapter го поддържа чрез WP-CLI (командния инструмент на WordPress), така че трябва да имаш WP-CLI инсталиран локално.
Минимална конфигурация за STDIO изглежда така:
"wordpress-mcp-server": {
"command": "wp",
"args": [
"--path=/path/to/your/wordpress/installation",
"mcp-adapter",
"serve",
"--server=mcp-adapter-default-server",
"--user={admin_user}"
]
}Детайлите тук са важни:
- Името на server-а в конфигурацията е
wordpress-mcp-server– може да е каквото решиш. commandеwp(WP-CLI).argsвключва:--pathкъм WordPress инсталацията.mcp-adapter serveза стартиране на MCP Adapter server.--serverза избор на MCP server (тук default).--user– WordPress потребителят, като който ще се автентикира (примерно admin).
За публично достъпни инсталации (или ако не искаш STDIO) можеш да минеш по HTTP чрез remote proxy пакета @automattic/mcp-wordpress-remote. Това изисква Node.js и автентикация през WordPress application passwords или custom OAuth имплементация.
Минимална конфигурация за 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}"
}
}Ключовите елементи:
commandеnpx(изпълнява Node.js packages).-yприема автоматично инсталацията на пакета.WP_API_URLсочи MCP endpoint-а на сайта.WP_API_USERNAMEе потребителят.WP_API_PASSWORDе application password за този потребител.
Ако ползваш HTTP remote proxy и се свързваш към локална инсталация, пакетът има troubleshooting насоки (често проблемите са от множество Node версии или локални SSL сертификати): https://github.com/Automattic/mcp-wordpress-remote/blob/trunk/Docs/troubleshooting.md
Конфигурация по приложения
Най-честите клиенти в dev среда в момента са Claude Desktop, Cursor, Claude Code и VS Code. По-долу са местата, където се настройва MCP server.
Claude Desktop
В Claude Desktop MCP server-ите се добавят от Developer таба: Claude → Settings → Developer. В секцията Local MCP servers избери Edit config. Това ще отвори claude_desktop_config.json, където се добавят конфигурации в mcpServers обект.

{
"mcpServers": {
}
}Пример за STDIO транспорт:
{
"mcpServers": {
"wordpress-mcp-server": {
"command": "wp",
"args": [
"--path=/Users/jonathanbossenger/Studio/wordpress-mcp",
"mcp-adapter",
"serve",
"--server=mcp-adapter-default-server",
"--user=admin"
]
}
}
}Пример за 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"
}
}
}
}Важно: след промяна на файла трябва рестарт на Claude Desktop, защото чете конфиговете само при старт.

Cursor
В Cursor настройката е от Cursor → Settings → Cursor Settings, секция Tools and MCP. Натисни Add Custom MCP – това отваря mcp.json. Форматът е същият като при Claude Desktop. След запис Cursor ще покаже server-а в Tools and MCP и можеш да го включиш за coding sessions.


Claude Code
В Claude Code имаш два пътя:
- Добавяш
mcpServersс нужните конфигурации в.claude.jsonв home директорията (глобално за всички проекти). - Или създаваш
.mcp.jsonв директорията на проекта (различни MCP server-и за различни проекти).
И в двата случая форматът на конфигурацията е същият като при Cursor/Claude Desktop.
VS Code
В VS Code се използва JSON файл (обичайно mcp.json) в .vscode директорията на workspace-а. Разликата е, че server-ите се дефинират в servers обект (не mcpServers). Останалото е идентично.
{
"servers": {
// MCP server definitions go here
}
}След като файлът е наличен, VS Code показва MCP контролна лента за start/stop/restart на server-а. При успешен старт виждаш и колко tools са налични.

Как се използват MCP tools (реален flow)
След като MCP server-ът е свързан към AI приложението, можеш да ползваш tools, експонирани от MCP Adapter. Типичен пример: в Claude Desktop задаваш задача от сорта на „вземи site info от WordPress“.
Какво се случва под капака:
- Клиентът вижда, че има наличен MCP server.
- Извиква
mcp-adapter-discover-abilities, за да разбере кои abilities са налични. - Решава, че
core/get-site-infoе правилната ability за задачата. - Извиква
mcp-adapter-execute-ability, като подава иметоcore/get-site-info. - Връща се payload със site info и приложението форматира отговора.
Custom MCP server за твоя плъгин (когато default не ти стига)
Default server-ът покрива повечето случаи, но custom MCP server за плъгин ти дава по-фин контрол какви abilities да се експонират като MCP tools, както и как да се конфигурират transport, error handling и observability.
За това ти трябва MCP Adapter като dependency през Composer.
1) Инсталирай пакета
composer require wordpress/mcp-adapter2) Зареди autoloader-а
if ( file_exists( __DIR__ . '/vendor/autoload.php' ) ) {
require_once __DIR__ . '/vendor/autoload.php';
}Когато има шанс няколко плъгина да зависят от MCP Adapter или Abilities API, препоръчително е да ползваш Jetpack Autoloader, за да избегнеш version conflicts: https://github.com/WordPress/mcp-adapter/blob/trunk/docs/getting-started/installation.md#using-jetpack-autoloader-highly-recommended
3) Инициализирай 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) Създай custom server през mcp_adapter_init
Hook-ваш се в mcp_adapter_init. Callback-ът получава инстанция на McpAdapter, а ти използваш create_server() за дефиницията.
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).
);
}
Параметрите, които реално ще пипаш най-често:
- (1) Уникален идентификатор на server-а – това ползваш при стартиране през WP-CLI.
- (2) и (3) REST API namespace и route за MCP server-а.
- (4) и (5) име и описание – това се вижда в AI приложенията.
- (6) версия на server-а.
- (10) списък с ability имена, които искаш да експонираш като MCP tools (можеш да подадеш повече от едно).
- Останалото са transport methods, error handling и observability handlers – можеш да ползваш готовите от пакета или да направиш свои за собствен transport/logging/monitoring.
Пример: добавяне на MCP server към плъгина List All URLs
За конкретен пример може да се вземе плъгинът List All URLs (който вече има Abilities API имплементация) и да му се добави custom MCP server: https://github.com/wptrainingteam/list-all-urls
Важно
Преди да продължиш, деактивирай MCP Adapter плъгина, ако е активен като отделен плъгин. В този сценарий MCP Adapter ще бъде dependency на плъгина през Composer.
1) Клонирай плъгина в директорията на плъгините
cd wp-content/plugins
git clone git@github.com:wptrainingteam/list-all-urls.git2) Превключи към branch с Abilities API
cd list-all-urls
git checkout abilities3) Инсталирай зависимостите
composer install4) Добави mcp-adapter
composer require wordpress/mcp-adapter5) Добави код в list-all-urls.php за инициализация и custom server
В основния файл list-all-urls.php добави в края:
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' ),
);
}
Обърни внимание: тук не ти трябва meta.mcp.public за list-all-urls/urls, защото ability-то се експонира изрично през custom MCP server-а.
6) Активирай плъгина и обнови MCP конфигурацията в AI клиента
Активирай List All URLs от WordPress админ панела. След това обнови конфигурацията на MCP server-ите в AI приложението, за да използваш новия server.
Пример за VS Code конфигурация, в която имаш и default server-а, и custom server-а (и двата през 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"
]
}
}
}В един AI клиент можеш да имаш няколко MCP server-а – удобно е за превключване между различни WordPress сайтове или плъгини с различен набор от abilities.
След промени: рестартирай AI приложението или стартирай MCP server-а от контролите му. После можеш да поискаш от AI: „List all URLs on my WordPress site“ и то ще извика list-all-urls-urls tool през MCP Adapter.
Сигурност и добри практики
MCP клиентите действат като логнати WordPress потребители. Третирай ги като част от attack surface-а на приложението и спазвай тези практики:
- Използвай
permission_callbackвнимателно - Всяка ability трябва да проверява минимално нужните капабилитита (
manage_options,edit_postsи т.н.). - Избягвай
__return_trueза разрушителни операции като триене на съдържание. - Използвай отделни потребители за MCP достъп
- Особено в production: направи специален user/role с ограничени права.
- Не експонирай мощни abilities към неаудитирани AI клиенти.
- Предпочитай read-only abilities за публични MCP endpoints
- За HTTP transport, изложен в интернет: фокус върху диагностика, репорти и read-only content access.
- Имплементирай custom authentication при нужда
- По подразбиране автентикацията е с application passwords, но можеш да реализираш OAuth или други методи за по-добра сигурност.
- Наблюдавай и логвай употребата
- Ползвай custom error/observability handlers, за да се вържеш към собствения logging/monitoring stack.
Как да започнеш да експериментираш още днес
Най-минималният „hello AI“ път за WordPress разработчик е:
- Регистрирай една ability (в идеалния случай read-only и неразрушителна).
- Добави MCP Adapter (като плъгин или Composer dependency) и го инициализирай.
- Свържи MCP-aware AI клиент (Claude Desktop, Cursor, VS Code и т.н.).
Ако вече имаш плъгини, които използват Abilities API, MCP Adapter на практика ги превръща в AI-ready APIs с минимални допълнителни промени.
Полезни ресурси за документация и детайли по имплементацията:
- Abilities API: https://developer.wordpress.org/apis/abilities/
- MCP Adapter (repo): https://github.com/WordPress/mcp-adapter
Препратки / Източници
- 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
- AI Building Blocks for WordPress
- MCP Adapter releases
- @automattic/mcp-wordpress-remote
- mcp-wordpress-remote troubleshooting
- WP-CLI
- Application Passwords integration guide
- VS Code MCP servers documentation
- Using Jetpack Autoloader (highly recommended)
- List All URLs plugin
- Build MCP tools like ogres with layers
- Connect AI agents to WordPress OAuth 2.1
Мария Иванова
Главен редактор на българския екип, разработчик на AI и машинно обучение. PyTorch и обработката на естествен език са моите основни области. Бъдещето вече е тук.
Всички публикации