Почему MCP теперь мультисайтовый

Раньше один MCP-процесс в Cursor был привязан к одному хосту: один CMS_URL, один токен, один сайт. Это нормально для первого production, но ломается, как только у вас появляются два живых инстанса — например официальный сайт продукта и портфолио на той же платформе.

Multi-site MCP решает именно это: один агент, несколько установок Jasefly. Не multi-tenant база внутри одного сайта, а оркестрация нескольких независимых хостов из одного MCP-сервера.

Зачем это нужно

Как устроено

Источник правды для списка сайтов — только переменные окружения:

CMS_SITES=jasefly,iia3uk

CMS_SITE_JASEFLY_URL=https://jasefly.com
CMS_SITE_JASEFLY_TOKEN=…
CMS_SITE_JASEFLY_RUNTIME=php-shared
CMS_SITE_JASEFLY_DEPLOYMENT=shared

CMS_SITE_IIA3UK_URL=https://iia3uk.ru
CMS_SITE_IIA3UK_TOKEN=…

Файл sites.js — парсер env, а не каталог доменов. Добавить хост = править .env и перезапустить MCP. Никогда не «регистрируйте» сайт правкой исходников MCP.

Правила агента

  1. Сначала cms_sites — список id/alias/доменов без токенов.
  2. Если сайтов ≥ 2 и пользователь не сказал куда — спросить, не угадывать.
  3. В каждый remote-tool передавать site: id, alias или домен.
  4. Нет fan-out «залить на всех»: один вызов → один хост.
  5. Опасные операции по-прежнему с confirm: true.

Что меняется на практике

Деплой выглядит так:

cms_sites
→ cms_release({ summary: "…", changes: ["…"], site: "jasefly" })
→ cms_release({ summary: "…", changes: ["…"], site: "iia3uk" })

Троттлинг, кэш GET и hosting guard работают per site. Агент не долбит два хоста одним списком запросов.

Чего multi-site MCP не делает

Это не общая БД и не «мультитенант из коробки». Каждый сайт — своя установка, свой токен, свой runtime (php-shared или node-vps). MCP только даёт одному оператору (человеку или агенту) единый пульт.

Итог

Multi-site появился не ради маркетинга, а потому что один продукт уже живёт на нескольких хостах. Один агент, явный site, секреты в env — меньше хаоса и меньше случайных деплоев «не туда».

К блогу