npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mcp-wordpress-publisher

v1.0.0

Published

MCP server for publishing and managing WordPress articles via the WordPress REST API.

Downloads

172

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.