Remote-HTTP MCP-сервер: AI-агент сам собирает слайды, запускает рендер и получает готовый MP4. Тот же контракт слайдов, что и у REST API.
Доступ
MCP доступен на тарифах Pro и Plus. Пользователям на тарифе Base ключи не выдаются. До 100 слайдов и 10 000 символов на слайд.
- Endpoint:
https://reeltype.ru/mcp/video— Streamable HTTP, толькоPOST. - Протокол:
2025-11-25. Отдельныйinitializeне нужен — одинtools/callуже валиден. - Сервер не хранит сессии: каждый вызов читает состояние из базы.
Аутентификация
- Откройте Профиль → Интеграции.
- Нажмите Создать MCP-ключ и скопируйте токен — он показывается один раз.
- Передавайте токен в заголовке каждого запроса.
Authorization: Bearer <MCP-токен>
MCP-ключ один на пользователя, не привязан к домену и работает только с MCP. REST-ключи для MCP не подходят (и наоборот).
Подключение клиента
Клиенты с поддержкой remote-HTTP подключаются по URL и заголовку:
{
"mcpServers": {
"video": {
"type": "http",
"url": "https://reeltype.ru/mcp/video",
"headers": { "Authorization": "Bearer <MCP-токен>" }
}
}
}
Проверка через инспектор из репозитория:
php artisan mcp:inspector mcp/video \
--header="Authorization: Bearer <MCP-токен>"
Инструменты
generate_video— создать видео из спецификации слайдов или пересобрать существующий проект. Возвращается сразу со статусомpending.get_render_status— статус, прогресс, ссылка на видео и подсказка опросаretry_after_seconds.list_projects/get_project— проекты и их сохранённая спецификация.list_videos/get_video— готовые версии видео и срок их хранения.upload_image— принять картинку поhttps-URL илиbase64и вернуть непрозрачную ссылку для поля слайда.upload_music— принять фоновую музыку поhttps-URL илиbase64и вернуть ссылку дляdefaults.default_music_track.upload_audio— принять озвучку слайда поhttps-URL илиbase64и вернуть ссылку дляslides[].slide_audio; нуженconsent: true.
Рабочий процесс
- Агент собирает слайды и вызывает
generate_video— ответ приходит сразу, рендер идёт в фоне. - Агент опрашивает
get_render_statusкаждыеretry_after_secondsсекунд (10, пока рендер активен). - Когда
retry_after_secondsстал0— рендер завершён: при успехе отдайте пользователюvideo_url, при сбое —error.
Рендер завершается независимо от опроса. Результат всегда доступен через get_project и list_videos — опрос сокращает задержку, а не гарантирует результат.
Картинки для слайдов
Фото-слайд — это слайд с картинкой (slide_background_image) и необязательным текстом. Загрузка отдельным инструментом:
{ "name": "upload_image", "arguments": { "url": "https://example.com/photo.jpg" } }
Ответ: { "reference": "..." }. Передайте значение reference в поле slides[].slide_background_image при вызове generate_video.
- По
url— толькоhttps; приватные, петлевые и служебные адреса отклоняются. - По
base64— байты файла, допускается префиксdata:. - Форматы: jpeg, png, gif, webp; до 10 МБ.
Озвучка слайдов
Запись голоса загружается отдельным инструментом и привязывается к слайду полем slides[].slide_audio:
{ "name": "upload_audio", "arguments": { "url": "https://example.com/voice.mp3", "consent": true } }
Ответ: { "reference": "...", "duration_seconds": 12.34 }. Передайте значение reference в поле slides[].slide_audio при вызове generate_video; сырые пути хранилища не принимаются.
- По
url— толькоhttps; приватные, петлевые и служебные адреса отклоняются. - По
base64— байты файла, допускается префиксdata:. - Форматы: mp3, m4a, aac, ogg, webm, wav; до 20 МБ и 5 минут. Сервер нормализует запись в MP3.
consent: trueобязателен: это ваш голос или у вас есть согласие человека, чей голос записан. Без него —consent_required.- На слайде с записью TTS не используется; длительность ролика подстраивается под озвучку.
Ошибки
Ошибка инструмента приходит с HTTP 200 и флагом isError: true:
{ "code": "validation_failed", "message": "Unknown field \"slides[0].duration\".", "field": "slides[0].duration" }
validation_failed— невалидная спецификация, лишнее поле, неподходящая картинка или аудио.not_found— проект/видео не найдены или принадлежат другому пользователю.render_rejected— рендер этого проекта уже выполняется.fetch_failed— картинку или аудио не удалось получить по URL.consent_required— для озвучки не переданconsent: true.rate_limited— слишком много одновременных обработок аудио; повторите черезretry_afterсекунд.internal_error— внутренний сбой.401— нет/неверный ключ или тариф ниже Pro.429— превышен лимит запросов.
Лимиты
60 запросов в минуту на пользователя. При превышении — 429.