wp-mcp-gateway
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 install3. Настройка ваших сайтов
В отличие от 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+DApplication 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/health6. Деплой
npx wrangler deployWrangler выведет ваш рабочий 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
This server cannot be deployed
Maintenance
Related MCP Connectors
Manage hosts, redirects, SSL, and traffic analytics from Claude and other AI assistants.
Manage WordPress blogs and WooCommerce shops from Claude, ChatGPT, Cursor and other MCP apps.
Read, write, translate and sync WordPress and Webflow blog articles from Claude.
Let Claude, ChatGPT or any MCP client run your WordPress site, Pinterest and Search Console.