Артефакты
Артефакты обеспечивают хостинг статического HTML для результатов workflow. Загружайте HTML-контент (отчёты, дашборды, визуализации) и получайте публичные URL для распространения. Артефакты могут содержать JavaScript: каждый артефакт работает на собственном изолированном origin внутри песочницы (sandbox) без доступа к сети и обслуживается с панелью брендинга Moira.
Применение
Заголовок раздела «Применение»- Отчёты: Генерация аналитических отчётов с доступом по URL
- Дашборды: Создание интерактивных HTML-дашбордов (JavaScript работает в странице)
- Визуализации: Хостинг графиков и визуализаций данных со встроенными в HTML данными (без доступа к сети в рантайме)
- Документация: Публикация сгенерированной документации
- Превью: Демонстрация промежуточных результатов
MCP Tool
Заголовок раздела «MCP Tool»MCP tool artifacts предоставляет 6 действий:
artifacts({ action: "upload", name: "report.html", content: "<html>...</html>" })artifacts({ action: "update", uuid: "abc-123", content: "<html>...</html>" })artifacts({ action: "delete", uuid: "abc-123" })artifacts({ action: "list", limit: 10 })artifacts({ action: "stats" })artifacts({ action: "token", ttlMinutes: 60 })| Действие | Назначение |
|---|---|
upload | Создать артефакт, получить URL |
update | Обновить содержимое артефакта |
delete | Удалить артефакт |
list | Список артефактов с пагинацией |
stats | Статистика использования квоты |
token | Сгенерировать одноразовый токен |
Создание нового HTML-артефакта. Артефакты доступны по адресу https://static.moira-mcp.com.
artifacts({ action: "upload", name: "analysis-report.html", content: "<html><body><h1>Отчёт</h1></body></html>"})→ { uuid: "d0a925d6-7dd8-49ba-b90c-d03b43062d20", url: "https://d0a925d6-7dd8-49ba-b90c-d03b43062d20.static.moira-mcp.com/", name: "analysis-report.html", size: 52, expiresAt: "2024-03-01T10:00:00Z" }Опциональный executionId связывает артефакт с выполнением workflow.
Замена содержимого существующего артефакта:
artifacts({ action: "update", uuid: "d0a925d6-7dd8-49ba-b90c-d03b43062d20", content: "<html><body><h1>Обновлённый отчёт</h1></body></html>"})Получение списка артефактов с пагинацией:
artifacts({ action: "list", limit: 10, offset: 0 })→ { artifacts: [{ uuid: "d0a925d6-...", url: "https://d0a925d6-....static.moira-mcp.com/", name: "report.html", size: 1024, createdAt: "2024-01-15T10:00:00Z" }], total: 5 }| Лимит | Значение |
|---|---|
| Макс. размер файла | 5 МБ |
| Всего хранилища | 100 МБ на юзера |
| Макс. артефактов | 50 на юзера |
| TTL по умолчанию | 30 дней |
Проверка использования квоты через stats:
artifacts({ action: "stats" })→ { totalArtifacts: 5, totalSize: 51200, storageLimit: 104857600, countLimit: 50, storageUsedPercent: 0.05, countUsedPercent: 10 }Токены загрузки
Заголовок раздела «Токены загрузки»Генерация одноразовых токенов для HTTP API загрузки. Полезно для CI/CD пайплайнов или внешних инструментов, которые не могут использовать MCP напрямую.
artifacts({ action: "token", ttlMinutes: 30 })→ { token: "xyz-789", expiresAt: "2024-01-15T10:30:00Z", uploadUrl: "https://{MOIRA_HOST}/api/public/artifacts/upload/xyz-789" }Загрузка через HTTP:
curl -X POST "https://{MOIRA_HOST}/api/public/artifacts/upload/xyz-789" \ -H "Content-Type: application/json" \ -d '{"name": "report.html", "content": "<html>...</html>"}'Токены одноразовые и истекают после указанного TTL.
Безопасность
Заголовок раздела «Безопасность»Артефакты могут содержать JavaScript, поэтому каждый изолируется на нескольких уровнях:
- Отдельный origin — каждый артефакт обслуживается на собственном поддомене (
{uuid}.{STATIC_DOMAIN}), поэтому браузер изолирует storage, cookies и Service Workers между артефактами. Это единственный способ отдачи контента — доступа по пути нет; запрос без поддомена артефакта не отдаёт контент. (В локальной разработке это работает по HTTP через*.localhost, который браузеры резолвят в loopback без сертификата.) - Песочница (sandbox) — контент артефакта работает внутри
<iframe sandbox="allow-scripts">(безallow-same-origin, без форм, без навигации верхнего уровня, без popup) на странице-обёртке под контролем Moira. Скрипты выполняются, но не могут добраться до обёртки. - Нет доступа к сети — фрейм артефакта обслуживается с
connect-src 'none', поэтому JavaScript не может выполнятьfetch/XHR/WebSocket. Данные нельзя никуда отправить; визуализации должны встраивать данные прямо в HTML. - Предупреждение при первом визите — зрители видят промежуточный экран о том, что контент создан пользователем и не одобрен Moira, перед показом артефакта.
| Защита | Значение |
|---|---|
| CSP фрейма | скрипты разрешены; connect-src 'none', form-action 'none', base-uri 'none' |
| Sandbox фрейма | только allow-scripts |
| X-Content-Type-Options | nosniff |
| Изоляция origin | отдельный поддомен на артефакт |
Брендинг и жалобы
Заголовок раздела «Брендинг и жалобы»Каждый артефакт показывается на странице-обёртке с фиксированной нижней панелью:
- Атрибуция — ссылка «Created with Moira». Поскольку футер находится в обёртке (отдельный документ от артефакта), контент артефакта не может его перекрыть или удалить.
- Жалоба — ссылка «Report» позволяет зрителям пожаловаться на вредоносный контент для проверки. Уведомление получают администраторы (у кого настроен Telegram в настройках).
Обёртка (предупреждение при первом открытии и футер) отображается на английском или русском языке в зависимости от языка браузера зрителя, с переключателем EN/RU в правом нижнем углу. Это касается только обёртки Moira, но не самого контента артефакта.
Вредоносные артефакты могут быть заблокированы администраторами, после чего они немедленно перестают обслуживаться.
Интеграция с Workflow
Заголовок раздела «Интеграция с Workflow»Паттерн Workspace
Заголовок раздела «Паттерн Workspace»Используйте артефакты с паттерном workspace для организации результатов workflow:
./project-analysis/├── step-1/│ └── data-collection.md├── step-2/│ └── analysis.md└── artifacts/ ├── dashboard.html # → загрузить как артефакт └── summary-report.html # → загрузить как артефактСвязь с Execution
Заголовок раздела «Связь с Execution»Передайте executionId при загрузке для связи артефактов с выполнением workflow:
artifacts({ action: "upload", name: "execution-report.html", content: "...", executionId: "exec-abc-123"})Связанные артефакты отображаются в UI инспектора выполнений.
Артефакты управляются через веб-интерфейс на странице /app/artifacts:
- Просмотр всех артефактов с именем, размером, URL и датой истечения
- Загрузка новых артефактов с HTML-редактором
- Редактирование содержимого существующих артефактов
- Копирование публичного URL в буфер обмена
- Открытие артефактов в новой вкладке
- Удаление артефактов
- Мониторинг использования квоты с визуальным индикатором
Связанные темы
Заголовок раздела «Связанные темы»- Справочник MCP Tools — tool
artifactsсо всеми 6 действиями - Создание Workflow — паттерн Workspace для организации результатов