Як підключити WordPress до Claude через MCP з повними правами на контент
Марко Федоренко За одну сесію Claude Desktop отримав доступ до мого сайту на WordPress. За кілька хвилин він вивантажив усі 443 статті, знайшов дублі й переніс нетематичні записи в кошик. Нижче розповідаю, як ми це налаштували.
Гайд для тих, хто веде сайт на WordPress і хоче керувати контентом через Claude. Claude зможе читати, редагувати, створювати й видаляти записи, сторінки, медіа, рубрики й меню. Приклади команд наведено для Windows (PowerShell), а відмінності для macOS описано в кроці 3.
Перед початком перевірте, що у вас є:
- доступ до адмінки WordPress 6.9 або новішого;
- FTP або файловий менеджер хостингу;
- Claude Desktop і Node.js на комп’ютері.
Налаштування перевірено на WordPress 7.1.2, MCP Adapter 0.7.0, PHP 8.3 і mcp-remote 0.14.x у жовтні 2026 року. На інших версіях назви меню й полів можуть відрізнятися.
Як це влаштовано
Claude не працює із сайтом напряму. Його запити проходять через п’ять ланок: Claude Desktop → mcp-remote → MCP Adapter → дія mysite/rest-request → WordPress REST API. Доступ до контенту відкриває четверта ланка, наш мініплагін з дією mysite/rest-request.

Архітектура підключення · 5 ланок
MCP Adapter приймає запити від Claude, але сам нічого не робить. Він лише виконує дії (abilities), зареєстровані на сайті. Наша дія mysite/rest-request передає запит у REST API з правами вашого користувача, тому Claude отримує той самий доступ до контенту, що й цей користувач.
Налаштування за чотири кроки
Спочатку підготуємо сайт і перевіримо з’єднання без Claude. Потім підключимо Claude Desktop через місток mcp-remote. Останнім кроком додамо мініплагін, який відкриває доступ до записів.
Крок 1. MCP Adapter і пароль додатка
На сайті потрібні дві речі. Перша — офіційний плагін MCP Adapter. Друга — пароль додатка (Application Password) для користувача, від імені якого працюватиме Claude.
В адмінці зробіть таке:
- Встановіть і активуйте MCP Adapter. Він створює ендпоінт
https://ваш-сайт/wp-json/mcp/mcp-adapter-default-server. Плагіну потрібен Abilities API, який є в WordPress починаючи з версії 6.9. - Відкрийте «Користувачі → Профіль» потрібного користувача. У блоці Application Passwords створіть новий пароль із будь-якою назвою.
- Збережіть пароль і запишіть логін користувача. Назва пароля для входу не знадобиться.
Claude отримає ті самі права, що й цей користувач. Для повного керування контентом достатньо ролі «Редактор». Роль «Адміністратор» додає доступ до плагінів, налаштувань і користувачів.
Крок 2. Перевірка з’єднання через curl
Перш ніж підключати Claude, переконайтеся, що сервер відповідає, а логін і пароль підходять. Запит нижче робить те саме, що й MCP-клієнт під час першого підключення. У PowerShell JSON краще покласти в окремий файл, бо PowerShell зрізає лапки всередині рядка.
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | Out-File -Encoding ascii init.json
curl.exe -X POST "https://ваш-сайт/wp-json/mcp/mcp-adapter-default-server" `
--user "ЛОГІН:xxxx xxxx xxxx xxxx xxxx xxxx" `
-H "Content-Type: application/json" `
-H "Accept: application/json, text/event-stream" `
-d "@init.json" -i
Успішна відповідь має код HTTP/1.1 200 OK, заголовок Mcp-Session-Id і JSON з "serverInfo":{"name":"MCP Adapter Default Server"}. Код 401 означає, що не підходить логін або пароль. Не переходьте до наступного кроку, поки не отримаєте 200.
Крок 3. Підключення Claude Desktop через mcp-remote
Claude Desktop запускає MCP-сервери локально, тому між ним і сайтом потрібен місток. Ми використали mcp-remote. Він приймає запити від Claude і пересилає їх на сайт із заголовком Authorization.
Спочатку закодуйте логін і пароль у Base64:
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("ЛОГІН:xxxx xxxx xxxx xxxx xxxx xxxx"))
На macOS те саме робить команда printf 'ЛОГІН:пароль' | base64.
Далі додайте сервер у конфіг Claude Desktop. На Windows файл лежить у %APPDATA%\Claude\claude_desktop_config.json, на macOS у ~/Library/Application Support/Claude/claude_desktop_config.json. Його також можна відкрити через Settings → Developer → Edit Config. Скрипт нижче створює резервну копію, додає сервер my-wp і не чіпає решту серверів.
$path = "$env:APPDATA\Claude\claude_desktop_config.json"
Copy-Item $path "$path.bak" -Force
$cfg = Get-Content $path -Raw | ConvertFrom-Json
if (-not $cfg.mcpServers) { $cfg | Add-Member mcpServers ([pscustomobject]@{}) }
$cfg.mcpServers | Add-Member -NotePropertyName "my-wp" -Force -NotePropertyValue ([pscustomobject]@{
command = "npx"
args = @("mcp-remote", "https://ваш-сайт/wp-json/mcp/mcp-adapter-default-server", "--header", "Authorization:`${WP_AUTH}")
env = [pscustomobject]@{ WP_AUTH = "Basic ВАШ_BASE64" }
})
[IO.File]::WriteAllText($path, ($cfg | ConvertTo-Json -Depth 20), (New-Object Text.UTF8Encoding $false))
У скрипті є дві деталі, які легко пропустити. Заголовок передається через змінну ${WP_AUTH} без пробілу після двокрапки, бо на Windows пробіл в аргументах ламає mcp-remote. Файл зберігається без BOM, інакше Claude не прочитає JSON.
Після цього повністю закрийте Claude Desktop через трей → Quit і відкрийте його знову. Інструменти з’являться лише в новому чаті, бо у вже відкритих чатах їхній список не оновлюється. Статус сервера видно в Settings → Developer.
Тепер Claude бачить три інструменти: discover-abilities, get-ability-info і execute-ability. Через них доступні лише три службові дії з інформацією про сайт, користувача й середовище. Щоб Claude міг читати й змінювати записи, потрібен крок 4.
Крок 4. Мініплагін для доступу до контенту
MCP Adapter показує Claude лише ті дії, які зареєстровані на сайті. Сам WordPress не реєструє дій для записів чи сторінок. Є сторонні плагіни на сотні дій, але ми написали власний мініплагін на офіційному Abilities API. Він додає одну дію, через яку Claude виконує будь-який запит до вбудованого REST API сайту.
Збережіть код як mcp-abilities.php і завантажте в папку wp-content/mu-plugins/. Якщо такої папки немає, створіть її. Плагіни з mu-plugins працюють без активації, і їх не можна випадково вимкнути в адмінці.
<?php
/**
* Plugin Name: MCP REST Ability
* Description: Дає MCP Adapter доступ до REST API з правами поточного користувача.
*/
if ( ! defined( 'ABSPATH' ) ) exit;
add_action( 'wp_abilities_api_init', function () {
if ( ! function_exists( 'wp_register_ability' ) ) return;
wp_register_ability( 'mysite/rest-request', array(
'label' => 'WordPress REST request',
'description' => 'Runs any WordPress REST API request as the current user. '
. 'GET /wp/v2/posts lists posts; POST /wp/v2/posts creates; POST /wp/v2/posts/123 updates; '
. 'DELETE /wp/v2/posts/123 trashes. Same for pages, media, categories, tags, comments, menus. '
. 'GET / lists all routes.',
'category' => 'site',
'input_schema' => array(
'type' => 'object',
'properties' => array(
'method' => array( 'type' => 'string', 'enum' => array( 'GET', 'POST', 'PUT', 'PATCH', 'DELETE' ), 'default' => 'GET' ),
'path' => array( 'type' => 'string', 'description' => 'REST route, e.g. /wp/v2/posts' ),
'params' => array( 'type' => 'object', 'additionalProperties' => true ),
),
'required' => array( 'path' ),
'additionalProperties' => false,
),
'execute_callback' => function ( $input ) {
$method = strtoupper( $input['method'] ?? 'GET' );
$params = is_array( $input['params'] ?? null ) ? $input['params'] : array();
$request = new WP_REST_Request( $method, '/' . ltrim( $input['path'], '/' ) );
in_array( $method, array( 'GET', 'DELETE' ), true )
? $request->set_query_params( $params )
: $request->set_body_params( $params );
$response = rest_do_request( $request );
$headers = $response->get_headers();
return array(
'status' => $response->get_status(),
'total' => isset( $headers['X-WP-Total'] ) ? (int) $headers['X-WP-Total'] : null,
'total_pages' => isset( $headers['X-WP-TotalPages'] ) ? (int) $headers['X-WP-TotalPages'] : null,
'data' => rest_get_server()->response_to_data( $response, false ),
);
},
'permission_callback' => function () { return is_user_logged_in(); },
'meta' => array(
'mcp' => array( 'public' => true ),
'annotations' => array( 'readonly' => false, 'destructive' => true, 'idempotent' => false ),
),
) );
} );
У коді варто звернути увагу на три місця:
meta.mcp.public = trueробить дію видимою для MCP Adapter. Без цього прапорця Claude її не побачить.rest_do_request()виконує запит усередині WordPress, тому права перевіряє сам REST API. Claude не зможе зробити більше, ніж користувач в адмінці.totalіtotal_pagesпотрібні для пагінації, бо REST віддає за раз не більше 100 записів.
Щоб перевірити плагін, відкрийте новий чат і попросіть Claude показати список записів. Перезапускати Claude Desktop цього разу не треба. Дія з’являється в discover-abilities одразу, щойно файл опиниться на сервері.
Безпека
Повний доступ означає, що Claude може видалити все, що може видалити його користувач. Тому права варто обмежити ще до першої масової операції. Ось що для цього зробити:
- Окремий користувач для Claude. У журналах буде видно, що зробив саме Claude. Доступ можна відкликати, не змінюючи власного пароля.
- Редактор замість Адміністратора. Редактору вистачає прав для роботи з контентом, а до плагінів і налаштувань він доступу не має.
- Спочатку тільки читання. Залиште в
enumпараметраmethodлишеGET, і MCP Adapter відхилятиме інші методи ще до виконання. Анотаціюreadonly => trueтеж варто поставити. Вона лише повідомляє клієнту, що дія читає дані, і сама нічого не забороняє. - Видалення лише в кошик. Кошик є тільки в записів, сторінок і коментарів. Запит
DELETEбезforce=trueпереносить їх туди на 30 днів. Рубрики, теги й медіа (якщо не ввімкненоMEDIA_TRASH) кошика не мають: безforce=trueREST поверне помилку, а з ним видалить назавжди. - Резервна копія перед масовими змінами. Особливо якщо зміни зачіпають десятки записів одночасно.
- Пароль у конфігу не зашифрований. Base64 легко декодувати, тому
claude_desktop_config.jsonфактично зберігає пароль відкритим текстом. Не публікуйте цей файл і не синхронізуйте його через хмарні сервіси.
Щоб замінити пароль, створіть новий пароль додатка, відкличте старий і оновіть WP_AUTH у конфігу, як описано в кроці 3.
Що можна робити далі
Перші задачі на своєму сайті я поставив звичайними словами, без жодного коду. Ось що з цього вийшло:
- «Дай список усіх статей». Claude пройшов 5 сторінок вибірки й зібрав Excel-файл з ID, датами, статусами й заголовками 443 записів.
- «Видали нетематичні записи». П’ять статей потрапили в кошик.
- «Які статті застаріли?» Claude знайшов канібалізацію між серіями статей різних років і старі заголовки з назвою блогу в кінці.
Через той самий доступ зручно робити й іншу рутинну роботу з контентом:
- проводити контент-аудит: шукати застарілі факти, дублі й записи без рубрик;
- шукати місця для внутрішніх посилань і вставляти їх у текст;
- писати чернетки зі статусом
draft, які ви потім вичитуєте й публікуєте самі; - масово правити title і meta description.
Для title і meta description з Yoast SEO потрібне одне доопрацювання. Поле yoast_head_json віддає їх лише для читання. Щоб Claude міг їх змінювати, мета-поля _yoast_wpseo_title і _yoast_wpseo_metadesc треба зареєструвати з show_in_rest. Додайте код нижче в кінець файлу wp-content/mu-plugins/mcp-abilities.php з кроку 4, після останнього рядка } );:
add_action( 'init', function () {
foreach ( array( '_yoast_wpseo_title', '_yoast_wpseo_metadesc' ) as $key ) {
register_post_meta( 'post', $key, array(
'show_in_rest' => true,
'single' => true,
'type' => 'string',
'auth_callback' => function () { return current_user_can( 'edit_posts' ); },
) );
}
} );
Після цього Claude змінює title і description тим самим запитом, що й текст запису: POST /wp/v2/posts/123 з параметром meta. Код відкриває ці поля лише для записів. Для сторінок додайте такий самий виклик з 'page' замість 'post'.
Універсальна дія з кроку 4 відкриває все, що дозволяє роль користувача. Якщо потрібні вужчі права, замініть її кількома окремими діями. Наприклад, «список статей», «прочитати статтю» й «оновити чернетку» без права публікувати чи видаляти. У цьому й перевага MCP над прямим REST API. Пароль додатка завжди дає всі права ролі, а дії MCP можуть бути вужчими: скажімо, редактор, який через Claude нічого не може видалити.
Документація
Якщо на вашій версії щось працює інакше, звіртеся з офіційною документацією. Нижче зібрано посилання на всі компоненти з цього гайду. Версії, на яких я перевіряв налаштування, вказано на початку статті.
- MCP Adapter: плагін, що підключає WordPress до MCP.
- Abilities API: реєстрація дій у WordPress.
- Application Passwords: паролі додатків.
- REST API Handbook: маршрути й параметри REST API.
- mcp-remote: місток між Claude Desktop і віддаленим MCP-сервером.
- Model Context Protocol: специфікація протоколу MCP.