Рецепт · OpenClaw

MCP Apps в OpenClaw 2026.10.1: формы, вложения и редактор файлов рядом с чатом

Включите opt-in MCP Apps одной командой, добавьте совместимый сервер и проверьте, как выбранное в форме попадает в следующее сообщение агенту.

· 5 мин чтения

Коротко

  • MCP Apps — это мост для отображения HTML-вью от MCP-сервера в песочнице. Без явного opt-in они не запустятся.
  • Команда openclaw config set mcp.apps.enabled true --strict-json плюс перезапуск Gateway включают Apps.
  • Совместимое приложение умеет прикреплять выбранное к следующему сообщению ассистента, показывать формы и открывать файлы воркспейса в просмотрщике или редакторе.
  • Под капотом отдельный origin на порту 18790, двойной iframe-прокси и CSP. Обычные правила разрешений продолжают работать.

Сверено с документацией OpenClaw 2026.10.1, 11 октября 2026.

MCP-сервер отдаёт инструменты и ресурсы, это знакомо. Совместимое MCP-приложение идёт дальше. Оно показывает рядом с чатом HTML-вью, поддерживает формы, открывает поддержанные файлы воркспейса в просмотрщике или редакторе. Главное отличие: выбранное содержимое прикрепляется к следующему сообщению агенту. Работает это только при явном opt-in, ведь HTML приходит от MCP-сервера. Apps по умолчанию выключены. Ниже рецепт включения.

Как устроен мост Apps

  1. OpenClaw стартует отдельный HTTP(S)-слушатель только для песочницы на порту Gateway плюс один (для стандартного Gateway — 18790).
  2. Control UI грузит Apps с этого отдельного origin. Сам Control UI и авторизованные маршруты Gateway оттуда не отдаются.
  3. OpenClaw рекламирует расширение io.modelcontextprotocol/ui только когда Apps включены.
  4. Рендерятся только ресурсы ui:// с точным MIME text/html;profile=mcp-app. Лимит 2 MiB, двойной iframe-прокси, CSP из метаданных ресурса.
  5. Каждое представление App живёт в ограниченной десятиминутной аренде состояния в памяти (in-memory view lease). HTML, аргументы и сырые ответы инструментов на диск не пишутся. В превью транскрипта попадает только ограниченный дескриптор server/tool/resource, привязанный к исходному ID вызова инструмента.

Как включить и подключить приложение

openclaw config set mcp.apps.enabled true --strict-json
  1. Включите хост-мост командой выше и перезапустите Gateway.
  2. Если перед Control UI стоит обратный прокси или терминатор TLS, выделите Apps отдельный публичный origin и пробросьте его на слушатель песочницы 18790:
{
  mcp: {
    apps: {
      enabled: true,
      sandboxOrigin: "https://mcp-apps.example.com",
      sandboxPort: 18790,
    },
  },
}

Origin Apps должен отличаться от origin Control UI. На нём нельзя держать другой авторизованный или чувствительный контент.

Добавьте сервер с поддержкой MCP Apps. Официальное базовое React-демо:

{
  mcp: {
    apps: { enabled: true },
    servers: {
      "basic-react": {
        command: "npx",
        args: ["-y", "@modelcontextprotocol/server-basic-react", "--stdio"],
      },
    },
  },
}

Как выбранное попадает в сообщение агенту

  1. Прикрепите содержимое из приложения: текст, изображения и ресурсы из текущего выбора.
  2. Следующий ход ассистента использует эти вложения и очищает чипы композера. Удаление позиции обновляет и само приложение.
  3. Метаданные презентации в модель не идут. Контент от приложения остаётся данными беседы, а не системной инструкцией.
  4. Перед отправкой App показывает превью. В строке подтверждения в панели App вы нажимаете «Отправить» или «Отмена».
  5. В каналах успешное App-представление добавляет к финальному ответу ассистента одно действие «Открыть приложение». Telegram DM показывает нативную Mini App-кнопку. Slack и Discord показывают ту же переносимую ссылку. Остальные каналы добавляют понятную HTTPS-ссылку к тексту ответа.

Формы и работа с файлами воркспейса

  1. Поддержанные приложения показывают формы рядом с чатом. Если App работает через нативный Codex, интерактивным формам нужен режим с подтверждениями (Guarded или Workspace).
  2. За один сервер и одну беседу активен ровно один нативный вызов App-инструмента. Дождитесь завершения, прежде чем запускать следующий.
  3. Лимиты на каждое представление: 4 одновременных запроса, 120 запросов в минуту, 30 вызовов инструментов в минуту. На это же тратятся фоновые превью.
  4. App может запросить объявленный просмотрщик для поддержанного файла и получает непрозрачный URI ресурса, а не полный доступ к диску. Чтение, подписки и сохранение проверяют текущую сессию и запрашивающую сторону.
  5. Сохранение может нести ETag в ifMatch. Тогда сервер сообщит о конфликте, если версия устарела. Без ifMatch сохранение выполняется безусловно, то есть побеждает последний писатель.

Как проверить, что заработало

  1. Перезапустите Gateway после openclaw config set mcp.apps.enabled true --strict-json.
  2. Откройте /settings/mcp в Control UI и убедитесь, что сервер виден в списке. Сводные карточки показывают общее число серверов, число включённых, OAuth и фильтрованных.
  3. Вызовите точку входа приложения (глобальную или для треда) и дождитесь, пока приложение отрисуется в панели.
  4. Выберите что-то в приложении: выбор появится чипами в композере. Отправьте обычное сообщение — ответ ассистента должен учесть вложение, а чипы исчезнут. Если приложение само предлагает отправить сообщение, проверьте превью и нажмите Send в полосе подтверждения.
  5. Откройте поддерживаемый файл воркспейса через просмотрщик приложения, отредактируйте и сохраните. По документации App должен слать ETag из последнего чтения, чтобы защититься от устаревшего сохранения.

Где ломается и когда не применять

  1. Сервер не помечен как совместимый с MCP Apps. Без точного MIME text/html;profile=mcp-app ресурс не отрендерится.
  2. Origin Apps совпадает с Control UI или на нём лежит авторизованный или чувствительный контент. Нарушено требование изоляции.
  3. Reverse proxy пробрасывает Apps на тот же публичный origin, что и Control UI, или шлёт их на основной порт Gateway вместо 18790.
  4. App пытается вызвать инструмент до того, как представление открыто. Для таких вызовов работают только «Разрешить один раз» (Allow once) и «Отклонить» (Deny). Режим «Разрешить, пока открыто это представление» (Allow while this App is open) недоступен.
  5. Сессия Codex в режиме Full access: он соответствует нативной политике never, и Codex отклоняет формы ещё до OpenClaw. Для интерактивных форм выберите Guarded или Workspace.
  6. App запрашивает геолокацию, камеру или микрофон. Разрешения для документов на непрозрачном origin (opaque-origin) не выдаются. Успешное MCP-соединение таких прав не даёт.
  7. Ссылка запуска в канале нужна, но Gateway не опубликован через Tailscale. В режиме gateway.tailscale.mode: "serve" ссылка откроется только внутри tailnet; для доступа из интернета нужен управляемый режим "funnel" с паролем.
  8. После перезапуска Gateway Control UI не сможет сразу вызывать инструменты из пересобранного превью. Нужно отправить новое сообщение для восстановления полномочий.