YouTube через API и MCP: 83 действия, три Google-скоупа и как загружать файлы
Разбираем связку YouTube Data API v3, YouTube Analytics API и YouTube Reporting API: почему обычное подключение не видит отчётность, как загружать видео и картинки через multipart-запрос и как весь канал становится доступен Claude через MCP-сервер Mira без единой строки кода.
Обзор
YouTube — не один API, а три под общим брендом: Data API v3 отвечает за канал, видео, плейлисты, комментарии и трансляции; Analytics API считает просмотры, удержание и деньги; Reporting API формирует массовые CSV-отчёты по расписанию. У всех трёх — общая авторизация через Google OAuth, но, как выяснилось при подключении, не общие права доступа.
Mira разбирает эту связку целиком — 83 действия, включая загрузку файлов multipart-запросом, — и отдаёт их в Claude через MCP. Ниже — что доступно на практике, где авторизация Google устроена не так, как ожидаешь, и как устроена загрузка видео и картинок, ради которой обычно и заводят интеграцию с YouTube.
Что доступно владельцу канала
| Раздел | Действий | Что даёт |
|---|---|---|
| Видео | 10 | Список, изменение метаданных, оценка, жалоба, удаление, пакетная статистика, загрузка |
| Трансляции (liveBroadcasts) | 7 | Создание, привязка к потоку, смена статуса, рекламные паузы |
| Разделы канала | 4 | Полки на странице канала: создание, порядок, содержимое |
| Плейлисты | 4 | Создание, изменение, удаление |
| Элементы плейлиста | 4 | Добавление и порядок видео внутри плейлиста |
| Картинки плейлиста | 4 | Список, добавление, замена, удаление обложки плейлиста |
| Видеопотоки (liveStreams) | 4 | Технические параметры трансляции: cdn, разрешение, ключ |
| Комментарии | 6 | Ответы, модерация, спам, удаление |
| Отчётность (Reporting API) | 8 | Регулярные CSV-задания, список и скачивание готовых отчётов |
| Аналитика (Analytics API) | 8 | Отчёты по метрикам, группы для собственных срезов |
| Подписки | 3 | Список, подписка, отписка |
| Цепочки комментариев | 2 | Новые комментарии верхнего уровня, список |
| Дорожки субтитров | 5 | Список, метаданные, скачивание, удаление, загрузка файла |
| Канал | 2 | Список, брендинг (обложка, локализации) |
| Водяной знак | 2 | Установка и снятие |
| Обложка видео, баннер канала | 2 | Загрузка картинки |
| Прочее | 8 | Поиск, лента событий, спонсорство, Super Chat, справочники |
Итого 83, из них 50 меняют данные — деньги YouTube не берёт напрямую (квота API не тратит рубли), но изменение, удаление и публикация видны снаружи или необратимы, и барьер записи одинаков что для платного, что для «просто заметного».
Ловушки, которые стоит знать заранее
Аналитика недоступна на обычном чтении — и это не баг
Казалось бы естественным: подключил канал на чтение — получил и видео, и статистику. У YouTube не так. Скоупы yt-analytics.readonly и yt-analytics-monetary.readonly — своё, отдельное пространство доступа, не входящее ни в youtube.readonly, ни даже в полный youtube. Источник, подключённый в режиме «только чтение», физически не сможет вызвать ни один метод Analytics или Reporting API — не потому что мы это запретили, а потому что в его токене нет нужного скоупа вовсе.
Единственный способ получить отчётность — подключить источник с правом записи, даже если писать вы ничего не планируете. Мы прямо называем это в подсказке при подключении: без этого человек десять минут перечитывает сообщение об ошибке 403, пытаясь понять, какое право на запись ему не хватает, хотя вопрос вообще не про запись.
Загрузка видео — не JSON-запрос, а два куска в одном теле
videos.insert, captions.insert, thumbnails.set, watermarks.set, channelBanners.insert, а также добавление и замена картинки плейлиста — семь действий, и все требуют не обычное тело с полями, а multipart/related: один HTTP-запрос с ДВУМЯ частями — JSON-метаданные ресурса (заголовок видео, описание, теги) и сами байты файла. Формат старше JSON API и почти нигде, кроме загрузки в Google, не встречается.
Модель не умеет передать байты файла напрямую — в её распоряжении только текст. Поэтому содержимое называется ссылкой (file_url, инструмент сам скачивает — с проверкой, что ссылка не ведёт в служебную сеть) или строкой base64 (file_base64, когда файл уже под рукой). У самого видео свой, увеличенный предел размера: общий лимит на файл в Mira — 25 МБ, для videos_insert — 500 МБ, потому что короткий ролик в 25 МБ почти никогда не помещается.
part — обязательный параметр почти везде, и про него легко забыть
Возврат данных в Data API устроен не как «отдай мне видео», а как «отдай мне ЧАСТИ видео» — snippet, status, contentDetails, statistics запрашиваются отдельно, и не названная часть просто не появится в ответе, без предупреждения. То же самое при изменении: обновить видео без part=snippet в запросе — значит не тронуть заголовок, даже если он передан в теле.
Разумное умолчание подставляется само: для списка видео это snippet,contentDetails,statistics, для канала — snippet,contentDetails,statistics. Не пришлось бы объяснять модели устройство параметра part, чтобы получить простой список видео.
Идентификатор ресурса — почти всегда параметр запроса, а не часть адреса
В отличие от многих REST API, DELETE /videos/{id} у YouTube не существует. Удаление видео — это DELETE /videos?id=VIDEO_ID, то есть идентификатор в query-строке, а не в пути. Из 83 действий путь как часть адреса использует лишь шестёрка: скачивание файла субтитров и вся работа с задачами массовой отчётности (Reporting API нумерует задачи и отчёты как вложенные ресурсы — /jobs/{id}/reports/{id}).
У одного из двух путевых параметров — буквальные слэши внутри значения
Скачивание готового отчёта (media.download) адресуется строкой вида jobs/<id>/reports/<id> — и Google прямо просит не кодировать в ней «/»: они не разделяют разные параметры, они часть ОДНОГО идентификатора ресурса. Обычная защита от обхода адреса (кодировать каждый спецсимвол) здесь ломает сам запрос — закодированный %2F адресует несуществующий ресурс. Это ровно тот редкий случай, ради которого в общем помощнике Mira для сборки адресов есть настройка «этому полю разрешено содержать буквальный слэш» — как у номера счёта в API Точка Банка.
Квота считается не запросами, а «единицами», и стоимость разная
10 000 единиц в день на проект в Google Cloud — это не 10 000 вызовов. Простое чтение стоит 1 единицу, search.list — 100, а любая запись — от 50. Опрос ленты поиска в цикле «на всякий случай» способен исчерпать дневную квоту меньше чем за сотню вызовов, и Google ответит на это своим отказом 403, не нашим.
Как это выглядит через MCP
MCP — открытый протокол, по которому Claude подключается к внешним данным и действиям. Вместо написания клиента для трёх разных Google API вы подключаете YouTube в кабинете Mira одной авторизацией и спрашиваете обычными словами.
Какие видео у меня получили больше всего просмотров за последний месяц?
Claude вызывает отчёт YouTube Analytics с нужными метриками и диапазоном дат — при условии, что канал подключён с правом записи: без него, как описано выше, у токена нет скоупа аналитики.
Есть новые комментарии, требующие модерации?
Список цепочек комментариев приходит с состоянием модерации по каждой, а не общим счётчиком.
Ответь на этот комментарий от имени канала: "..."
Публикация ответа — действие под барьером записи: источник должен быть подключён с разрешением, и подтверждение спрашивается явно, потому что ответ увидят все зрители видео.
Что защищено от случайного действия
Барьер записи выведен из той же таблицы, что описывает адреса и параметры — разойтись им негде: разрешение на запись хранится в том же месте, что метод и путь, а не отдельным списком, который можно забыть обновить. Источник без права записи физически не отправит POST, PUT или DELETE — запрос обрывается раньше похода к Google.
Что это даёт на практике
Автору канала. Не нужно открывать YouTube Studio, чтобы узнать, какие видео растут, а какие комментарии ждут ответа, — можно спросить прямо в чате.
Медиа-команде. Планирование трансляций, модерация комментариев и обновление плейлистов — одним доступом, без переключения между вкладками Studio.
Разработчику. Готовый клиент вместо разбора трёх разных Discovery-документов Google: приведённые ошибки, известные пределы квоты, разведённые уровни доступа между чтением и аналитикой.
Как подключить
- В Mira: проект → источники → YouTube → «Подключить».
- Авторизоваться через Google и выбрать канал.
- Если нужна аналитика и отчётность — отметить «Разрешить запись» уже на этом шаге: добавить её позже можно только повторной авторизацией.
Дальше YouTube доступен и в чате Mira, и через MCP-сервер в Claude, Cursor или другом клиенте с поддержкой протокола.
Новости в Telegram
Подпишитесь на каналы — новые статьи и обзоры каждый день.
Источники
Ещё по теме «MCP-серверы»
1С через OData: как достать данные учётной базы без единой строки кода на встроенном языке
Разбираем стандартный OData-интерфейс 1С:Предприятие: чем он отличается от API конкретного сервиса, как узнать, что вообще опубликовано на конкретной базе, как проводить и отменять проведение документов и как всё это работает через MCP-сервер Mira без единой строки кода на встроенном языке.
3 сентября 2026 г.Admitad через MCP: отчёты партнёрской программы без выгрузки в Excel
Разбираем advertiser API партнёрской сети Admitad: отчёты по действиям, публикаторам, площадкам и баннерам, данные программы для интеграции — и почему у рекламодателя весь этот API устроен на чтение. Как устроена выдача токена по client_id/client_secret со скоупом и как всё это работает через MCP-сервер Mira.
3 сентября 2026 г.Adv.Cake через MCP: заказы и визиты партнёрской сети без захода в кабинет
Разбираем API рекламодателя Adv.Cake — партнёрской сети: список заказов и визитов, которые привели партнёры и вебмастеры, с суммой, комиссией и ДРР, плюс валидация рефералов. Три метода вместо привычных полусотни — и почему один из них, несмотря на GET, требует разрешения на запись. Всё это работает через MCP-сервер Mira без единой строки кода.
3 сентября 2026 г.