Skip to main content
Glama

wp-mcp-gateway (версия для Cloudflare Workers)

Та же идея, что и в Node-версии: один MCP-эндпоинт, каждый вызов инструмента принимает site_id, так что один коннектор Claude покрывает весь ваш парк WordPress. Эта версия работает на Cloudflare Workers вместо VPS — не нужно патчить сервер, бесплатного тарифа с запасом хватает, и она доступна по URL на workers.dev через пару минут после запуска wrangler deploy.

Она построена на текущем рекомендуемом подходе Cloudflare: обработчик без состояния createMcpHandler из SDK agents (старый подход с сохранением состояния — McpAgent / Durable Objects — объявлен устаревшим для новых серверов; этому шлюзу состояние сессии всё равно не нужно, так как каждый вызов инструмента независим).

Проверено локально от начала до конца перед сдачей: Worker запускается, /health отвечает, рукопожатие MCP initialize работает, аутентификация по bearer-токену корректно отклоняет отсутствующие/неверные токены и пропускает правильный, а list_sites возвращает реальные данные из тестового SITES_JSON.

1. Предварительные требования

npm install -g wrangler   # or just use npx wrangler as shown below
wrangler login            # opens a browser to authenticate with your Cloudflare account

Если у вас ещё нет аккаунта Cloudflare, зарегистрируйтесь бесплатно на https://dash.cloudflare.com/sign-up — бесплатного тарифа (100 000 запросов в день) более чем достаточно для этого.

2. Установка зависимостей

cd wp-mcp-gateway-cf
npm install

3. Настройка ваших сайтов

В отличие от Node-версии, у Workers нет файловой системы, поэтому реестр сайтов хранится в секрете (SITES_JSON), а не в файле. Формат прежний — одна запись на сайт:

{
  "town-green": {
    "label": "Town Green",
    "baseUrl": "https://town-green.org",
    "username": "mcp-agent",
    "appPassword": "xxxx xxxx xxxx xxxx xxxx xxxx",
    "host": "wpengine"
  },
  "cra": {
    "label": "CRA",
    "baseUrl": "https://cra.com",
    "username": "mcp-agent",
    "appPassword": "xxxx xxxx xxxx xxxx xxxx xxxx",
    "host": "gridpane"
  }
}

Соберите такой JSON для всех ваших сайтов (скрипт для преобразования электронной таблицы в JSON легко написать, как только вы сгенерируете Application Passwords для каждого сайта — спросите, если нужен такой скрипт), затем установите его как секрет:

npx wrangler secret put SITES_JSON
# paste the whole JSON blob when prompted, then press Ctrl+D

Application Passwords: в wp-admin: Users → your user → Application Passwords. Рекомендация прежняя — используйте отдельного пользователя WP с низкими привилегиями для каждого сайта, а не ваш личный админ-аккаунт, чтобы утёкший токен не мог сделать больше, чем позволяет эта роль.

4. Установите токен аутентификации шлюза

npx wrangler secret put GATEWAY_TOKEN
# paste a long random value, e.g. output of: openssl rand -hex 32

Без этого значения эндпоинт работает без аутентификации — это нормально для первого локального теста, но никогда для развёрнутой версии.

5. Локальное тестирование

npx wrangler dev

Это запускает локальный dev-сервер (по умолчанию http://localhost:8787). Для локального тестирования поместите ваши секреты в файл .dev.vars (никогда не коммитьте его):

GATEWAY_TOKEN=some-local-test-token
SITES_JSON={"town-green":{"label":"Town Green","baseUrl":"https://town-green.org","username":"mcp-agent","appPassword":"xxxx"}}

Проверьте, что он жив:

curl http://localhost:8787/health

6. Деплой

npx wrangler deploy

Wrangler выведет ваш рабочий URL, примерно так:

https://wp-mcp-gateway.<your-subdomain>.workers.dev

Ваш MCP-эндпоинт: https://wp-mcp-gateway.<your-subdomain>.workers.dev/mcp.

7. Добавьте его как коннектор в Claude

Добавьте кастомный коннектор, указывающий на URL /mcp, с заголовком Authorization: Bearer <GATEWAY_TOKEN> (то же значение, которое вы задали в шаге 4).

С этого момента для запроса «покажи черновики записей на cra.com» Клоду достаточно вызвать list_sites (или уже знать id), а затем list_posts с site_id: "cra" — поведение то же, что и в Node-версии, только размещено на edge.

Обновление сайтов позже

Чтобы добавить новый сайт или изменить учётные данные, выполните повторно:

npx wrangler secret put SITES_JSON

Повторный деплой не нужен — секреты обновляются независимо от кода Worker.

Примечания, характерные для этого развёртывания

  • Ни файловой системы, ни долгоживущих процессов — весь реестр хранится в секрете SITES_JSON и разбирается заново при каждом запросе. Стоимость ничтожна даже при ~80 сайтах.

  • Без состояния по построению — каждый MCP-запрос создаёт свежий экземпляр сервера (согласно текущим рекомендациям Cloudflare); нет межзапросной сессии, которую можно потерять.

  • WAF-флаги на управляемых хостингах — та же оговорка, что и в Node-версии: WP Engine в особенности может помечать трафик с незнакомого диапазона IP-адресов, обращающийся к REST API. Если сайт возвращает 403 только при обращении через этот шлюз, это первое, что стоит проверить в поддержке WP Engine — если нужно, имеет смысл добавить исходящие диапазоны Cloudflare в белый список.

  • Охват инструментов — этот шлюз общается только с основным WP REST API (/wp/v2/...). Никаких операций через WP-CLI, SSH или на уровне базы данных — Workers в любом случае не может устанавливать исходящие SSH-соединения, так что для этого понадобится совершенно другой компонент, если он вам понадобится позже.

Чек-лист безопасности перед подключением Claude к развёрнутому URL

  • GATEWAY_TOKEN установлен через wrangler secret put, длинный и случайный

  • SITES_JSON использует отдельного пользователя WP с низкими привилегиями для каждого сайта

  • .dev.vars (если вы использовали его локально) находится в .gitignore и никогда не коммитится

  • Вы протестировали на 2–3 сайтах, прежде чем масштабировать секрет на все ~80

Related MCP Connectors