mcp-wordpress-publisher
v1.0.0
Published
MCP server for publishing and managing WordPress articles via the WordPress REST API.
Downloads
172
Maintainers
Readme
MCP WordPress Publisher
MCP-сервер на TypeScript (@modelcontextprotocol/sdk) для публикации и управления статьями на сайте WordPress через WordPress REST API (/wp-json/wp/v2).
Сервер даёт любому MCP-клиенту (Cursor, Claude Desktop и др.) набор инструментов: создать/опубликовать статью, обновить, удалить, получить список, управлять категориями и метками.
Целевой сайт
- URL: https://blog.sellerix.ru (REST API: https://blog.sellerix.ru/wp-json/)
- Логин:
cursor - Пароль: используется Application Password (пароль приложения), задаётся через переменную окружения
WORDPRESS_APP_PASSWORD. В коде и репозитории пароль не хранится.
Application Password создаётся в WordPress: Пользователи → Профиль → Application Passwords. Это отдельный пароль для API, не равный паролю от админки.
Возможности (MCP-инструменты)
| Инструмент | Назначение |
|-----------|-----------|
| wp_verify_connection | Проверить URL/логин/пароль (/users/me) |
| wp_create_post | Создать/опубликовать статью (draft по умолчанию) |
| wp_update_post | Обновить статью по id (в т.ч. draft → publish) |
| wp_get_post | Получить статью по id |
| wp_list_posts | Список статей (фильтры: статус, поиск, пагинация) |
| wp_delete_post | Удалить статью (в корзину или навсегда) |
| wp_list_categories | Список категорий с id |
| wp_create_category | Создать категорию |
| wp_list_tags | Список меток с id |
| wp_create_tag | Создать метку |
Требования
- Node.js >= 18 (используется встроенный
fetch) - npm
Структура проекта
MCP WP/
├── src/
│ ├── index.ts # Точка входа: MCP-сервер + stdio-транспорт
│ ├── config.ts # Загрузка и валидация переменных окружения (.env)
│ ├── logger.ts # Логгер (stderr + опциональный файл, уровни)
│ ├── wordpress.ts # Клиент WordPress REST API + логирование запросов
│ └── tools.ts # Регистрация MCP-инструментов
├── package.json # Метаданные, скрипты, bin для npx, publishConfig
├── tsconfig.json # Настройки компиляции TypeScript
├── .env.example # Шаблон переменных окружения
├── mcp.config.example.json # Примеры конфигурации MCP-клиента
├── .npmignore # Что не публиковать в npm
├── .gitignore
├── LICENSE # MIT
└── README.md # Этот файлУстановка и настройка
# 1. Установить зависимости
npm install
# 2. Создать .env из шаблона и заполнить пароль
cp .env.example .env
# затем впишите WORDPRESS_APP_PASSWORDПеременные окружения (.env):
| Переменная | Обязательна | Описание |
|-----------|:-----------:|----------|
| WORDPRESS_URL | да | Базовый URL сайта, напр. https://blog.sellerix.ru |
| WORDPRESS_USERNAME | да | Имя пользователя, напр. cursor |
| WORDPRESS_APP_PASSWORD | да | Application Password |
| LOG_LEVEL | нет | error | warn | info | debug (по умолчанию info) |
| LOG_FILE | нет | Путь к файлу логов; без него логи только в stderr |
Запуск
Вариант A — локальное тестирование БЕЗ компиляции (tsx)
Запускает src/index.ts напрямую, без сборки в dist/:
npm run devДля отладки протокола удобно через инспектор:
npm run inspect # поднимает @modelcontextprotocol/inspector над tsx src/index.tsВариант B — сборка и запуск скомпилированной версии
npm run build # tsc -> dist/
npm start # node dist/index.jsВариант C — через npx (после публикации в npm)
npx -y mcp-wordpress-publisherПодключение к MCP-клиенту
Готовые примеры — в mcp.config.example.json. Скопируйте нужный блок в конфигурацию клиента.
Локальный запуск без компиляции (tsx):
{
"mcpServers": {
"wordpress": {
"command": "npx",
"args": ["-y", "tsx", "C:\\Users\\USER\\Desktop\\MCP WP\\src\\index.ts"],
"env": {
"WORDPRESS_URL": "https://blog.sellerix.ru",
"WORDPRESS_USERNAME": "cursor",
"WORDPRESS_APP_PASSWORD": "пароль-приложения",
"LOG_LEVEL": "debug"
}
}
}
}Через npx (после публикации):
{
"mcpServers": {
"wordpress": {
"command": "npx",
"args": ["-y", "mcp-wordpress-publisher"],
"env": {
"WORDPRESS_URL": "https://blog.sellerix.ru",
"WORDPRESS_USERNAME": "cursor",
"WORDPRESS_APP_PASSWORD": "пароль-приложения"
}
}
}
}Логирование
- Все логи пишутся в stderr (stdout зарезервирован под JSON-RPC протокол MCP).
- Уровни:
error,warn,info,debug— черезLOG_LEVEL. - Опционально — дублирование в файл через
LOG_FILE. - Логируются: старт сервера, загрузка конфигурации, каждый HTTP-запрос к WordPress (метод, путь, статус, время), тела запросов/ответов (на
debug), все ошибки с HTTP-статусом и телом ответа WordPress.
Публикация в npm
# 1. Проверка сборки
npm run build
# 2. Логин в npm (однократно)
npm login
# 3. Публикация (prepublishOnly соберёт проект автоматически)
npm publishГотовность к публикации обеспечена:
bin→ запуск черезnpx mcp-wordpress-publisher;files+.npmignore→ в пакет попадает толькоdist/, README, LICENSE,.env.example;prepublishOnly/prepare→ автоматическая сборка перед публикацией;publishConfig.access = public→ публичный пакет.
Перед публикацией задайте уникальное
nameвpackage.json(еслиmcp-wordpress-publisherзанято, используйте scope, напр.@ваш-ник/mcp-wordpress-publisher) и заполните поляauthor/repository.
Чек-лист готовности проекта
Файл-ориентир для проверки, что всё реализовано:
- [x] MCP-сервер на TypeScript SDK (
@modelcontextprotocol/sdk, stdio-транспорт) - [x] Публикация статей на WordPress через REST API (
wp_create_post,wp_update_post) - [x] Данные сайта вынесены в env (
WORDPRESS_URL,WORDPRESS_USERNAME,WORDPRESS_APP_PASSWORD) - [x] Полный набор инструментов: создание/обновление/чтение/список/удаление статей, категории, метки
- [x] Логирование везде (конфиг, HTTP-запросы, инструменты, ошибки) с уровнями и опциональным файлом
- [x] README с описанием проекта и инструкциями
- [x] Конфигурация для запуска через
npx(binв package.json + пример вmcp.config.example.json) - [x] Подготовка к публикации в npm (
files,.npmignore,prepublishOnly,publishConfig) - [x] Конфиг для локального тестирования без компиляции (
npm run devчерезtsx, блокwordpress-local-dev) - [x] Валидация обязательных переменных окружения с понятными ошибками
- [x] Указан реальный
WORDPRESS_APP_PASSWORD(пароль приложения, не пароль от админки!) - [x] Выполнен
npm install, сборкаtsc, провереныwp_verify_connection(200 OK) иwp_create_post(201 Created)
Устранение неполадок
| Симптом | Причина / решение |
|---------|-------------------|
| Отсутствуют обязательные переменные окружения | Не заполнен .env или env в конфиге клиента |
| HTTP 401 | Неверный логин или Application Password; проверьте wp_verify_connection |
| HTTP 403 | У пользователя нет прав на публикацию; проверьте роль в WordPress |
| Сетевая ошибка | Недоступен WORDPRESS_URL или блокирует firewall/Cloudflare |
| Клиент не видит сервер | Проверьте абсолютные пути в конфиге и что установлен Node.js >= 18 |
Лицензия
MIT — см. LICENSE.
