youtube-mcp
youtube-mcp
YouTube MCP с аутентификацией OAuth для владельцев каналов. Редактируйте метаданные видео, отвечайте на комментарии и модерируйте их, управляйте плейлистами, запрашивайте аналитику канала, а также создавайте или устанавливайте AI-превью через мост с ComfyUI. Выходит далеко за рамки обычных оберток Data API v3 с доступом только для чтения, которые доминируют в этой сфере.
Основная идея
Большинство существующих MCP для YouTube используют API-ключ для работы с Data API v3. Поиск видео, получение публичных метаданных — только чтение. Этот сервер использует OAuth 2.0 (Authorization Code + PKCE), поэтому он может реально вносить изменения на ваш канал: обновлять названия, описания и теги видео, отвечать на комментарии, модерировать спам, управлять плейлистами. Он также обращается к отдельному YouTube Analytics API для получения статистики канала и генерирует превью через ComfyUI, отправляя его на YouTube одним вызовом MCP.
Claude, use generate_and_set_thumbnail on video abc123:
prompt: "cyberpunk hacker at keyboard, neon blue and pink, high contrast"ComfyUI выполняет рендеринг в 1280×720, youtube-mcp получает байты и отправляет их через POST в thumbnails.set. Готово.
Related MCP server: yt-fetch
Установка
# npx, no install
npx @miller-joe/youtube-mcp --help
# Docker
docker run -p 9120:9120 \
-e YOUTUBE_CLIENT_ID=... \
-e YOUTUBE_CLIENT_SECRET=... \
-e YOUTUBE_TOKEN_FILE=/token/token.json \
-v $PWD/token:/token \
ghcr.io/miller-joe/youtube-mcp:latestНастройка: Google Cloud (однократно, ~10 мин)
Аккаунт Google и YouTube-канал. Используйте личный аккаунт, а не рабочий, к которому вы можете потерять доступ.
Проект Google Cloud на https://console.cloud.google.com. Назовите его как угодно (например,
youtube-mcp).Включите API:
YouTube Data API v3
YouTube Analytics API
Экран согласия OAuth: Внешний (External), название приложения, контактный email. В разделе Scopes (Области доступа) добавьте:
youtube.uploadyoutube.force-sslyt-analytics.readonly
Оставайтесь в режиме Тестирования (Testing). Добавьте себя в качестве тестового пользователя (обязательно). Поскольку вы являетесь владельцем проекта, ваш токен обновления (refresh token) не истечет.
Создайте идентификатор клиента OAuth: Тип приложения = Desktop app. Скачайте JSON-файл.
Запустите интерактивный процесс авторизации:
npx @miller-joe/youtube-mcp --auth --client-secret-file ./client_secret.jsonОткроется браузер, вы войдете в аккаунт Google, привязанный к вашему YouTube-каналу, и предоставите запрошенные права доступа. В случае успеха токен обновления будет сохранен в
~/.config/youtube-mcp/token.json.Запустите сервер:
npx @miller-joe/youtube-mcp --client-secret-file ./client_secret.jsonИли передайте учетные данные клиента через переменные окружения:
YOUTUBE_CLIENT_SECRET_FILEилиYOUTUBE_CLIENT_ID+YOUTUBE_CLIENT_SECRET.
Подключение MCP-клиента
claude mcp add --transport http youtube http://localhost:9120/mcpИли укажите вашему MCP-шлюзу Streamable HTTP-эндпоинт.
Конфигурация
Флаг CLI | Переменная окружения | По умолчанию | Примечания |
|
| (нет) | Путь к JSON-файлу Google OAuth |
|
| (нет) | Альтернатива файлу секретов |
|
| (нет) | Альтернатива файлу секретов |
|
|
| Хранилище токенов обновления |
|
|
| Хост привязки (только HTTP) |
|
|
| Порт привязки (только HTTP) |
|
| (не задано) | Использовать MCP через stdio вместо HTTP. Используйте при запуске в качестве подпроцесса MCP-клиентом (Claude Desktop, mcp-inspector). |
|
| (не задано, мост отключен) | HTTP URL для инструментов моста ComfyUI |
(нет флага) |
|
| Чекпоинт по умолчанию для инструмента моста |
Транспорты
По умолчанию сервер использует streamable HTTP (отлично подходит для Claude Code, MetaMCP, обычного fetch). Передайте --stdio (или установите MCP_TRANSPORT=stdio), чтобы переключиться в режим stdio, который ожидают клиенты, работающие преимущественно через stdio, такие как Claude Desktop и MCP Inspector:
// claude_desktop_config.json
{
"mcpServers": {
"youtube": {
"command": "npx",
"args": ["-y", "@miller-joe/youtube-mcp", "--stdio"],
"env": {
"YOUTUBE_CLIENT_SECRET_FILE": "/path/to/client_secret.json",
"YOUTUBE_TOKEN_FILE": "/path/to/token.json"
}
}
}
}Режим Stdio пропускает предварительную проверку OAuth-токена — сервер запускается даже без сохраненного токена и выдает ошибки авторизации во время вызова инструмента. Запустите youtube-mcp --auth --client-secret-file <path> один раз в режиме HTTP, чтобы сохранить токен обновления перед подключением Claude Desktop.
Инструменты
Видео
list_my_videos: постраничный список загруженных видео на канале.get_video: полная информация об одном видео.update_video_metadata: название, описание, теги, категория, конфиденциальность.delete_video: безвозвратное удаление видео. Требует, чтобыconfirm_video_titleточно совпадал с текущим названием, в качестве защиты от случайного удаления не того видео.
Субтитры
list_captions: список дорожек субтитров к видео (язык, название, статус, флаг черновика).upload_caption: загрузка дорожки субтитров в формате SRT или WebVTT к видео.delete_caption: удаление дорожки субтитров.
Shorts
list_my_shorts: поиск Shorts среди недавних загрузок (фильтрация по длительности ≤60с).get_shorts_analytics: запрос к YouTube Analytics, ограниченный только Shorts (creatorContentType==SHORTS).
Плейлисты
create_playlist: создание плейлиста (по умолчанию приватного).add_to_playlist: добавление видео в существующий плейлист.
Комментарии
list_comments: ветки комментариев верхнего уровня к видео.reply_to_comment: ответ на комментарий верхнего уровня.moderate_comment: удержание, одобрение или отклонение комментария.
Аналитика
query_channel_analytics: метрики за выбранный период с опциональными измерениями и фильтрами.
Мост (когда настроен COMFYUI_URL)
generate_and_set_thumbnail: генерация превью через ComfyUI и установка его для видео одним вызовом.
Примечания по квотам
Бесплатный уровень YouTube Data API = 10 000 единиц в день. Стоимость ключевых операций:
videos.list,commentThreads.list: 1 единица каждая.videos.update,comments.insert,thumbnails.set: 50 единиц каждая.videos.insert(загрузка): 1 600 единиц, то есть около 6 загрузок в день на бесплатном уровне.
Большинство рабочих процессов создателей контента остаются значительно ниже этого лимита.
Архитектура
┌────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ MCP client │────▶│ youtube-mcp │────▶│ YouTube APIs │
│ (Claude etc.) │◀────│ (this server) │◀────│ (Data/Analytics)│
└────────────────┘ └────────┬─────────┘ └─────────────────┘
│
│ (bridge tools only)
▼
┌──────────────────┐
│ ComfyUI │
│ (txt2img) │
└──────────────────┘Токены обновления OAuth кэшируются локально и обновляются непосредственно перед истечением срока действия. Инструмент моста загружает байты изображения из ComfyUI внутренне, поэтому ComfyUI не обязательно должен быть доступен извне.
Разработка
git clone https://github.com/miller-joe/youtube-mcp
cd youtube-mcp
npm install
npm run dev
npm run build
npm testТребуется Node 20+.
Дорожная карта
Реализовано:
Видео: список, получение, обновление метаданных, удаление с подтверждением названия.
Субтитры: загрузка, список, удаление.
Shorts:
list_my_shorts(фильтр по длительности) иget_shorts_analytics(creatorContentType==SHORTS).Плейлисты: создание, добавление.
Комментарии: список, ответ, модерация.
Аналитика: запрос аналитики канала.
Мост превью ComfyUI:
generate_and_set_thumbnail.
Запланировано:
Загрузка видео (
video_upload) с поддержкой возобновляемой загрузки.Reporting API для массового экспорта исторических данных.
Лицензия
MIT © Joe Miller
Поддержка
Если это экономит ваше время, рассмотрите возможность поддержки разработки:
Available Tools
15 toolsadd_to_playlistB
Add a video to an existing playlist. Both playlist_id and video_id are YouTube IDs (not URLs).
Inputs: playlist_id (required), video_id (required).
create_playlistB
Create a new playlist on the authenticated channel. Default privacy is 'private'.
Inputs: title (required), description, privacy_status.
delete_captionA
Delete a caption track by ID. Use list_captions to find the track ID first.
Inputs: caption_id (required).
delete_videoA
Permanently delete a video. Requires confirm_video_title to match the video's current title exactly — guards against deleting the wrong video by ID. Deletion is irreversible.
Inputs: video_id (required), confirm_video_title (required).
get_shorts_analyticsA
Query YouTube Analytics restricted to Shorts for the authenticated channel. Applies filters=creatorContentType==SHORTS on top of the usual start_date/end_date/metrics/dimensions knobs.
Inputs: start_date (required), end_date (required), metrics, dimensions, +2 more.
get_videoA
Fetch full details for one video by ID — snippet, status, statistics, duration.
Inputs: video_id (required).
list_captionsA
List caption tracks on a video with their language, name, status, and whether they are drafts.
Inputs: video_id (required).
list_commentsB
List top-level comment threads on a video (newest first). Returns comment IDs, authors, text, and like counts.
Inputs: video_id (required), max_results.
list_my_shortsA
List your recent Shorts — scans the most recent uploads and filters to videos ≤60s. Useful when the Data API doesn't expose a direct Shorts filter.
Inputs: max_candidates.
list_my_videosA
List videos on the authenticated channel (newest first via the uploads playlist). Returns video IDs, titles, view counts, and privacy status.
Inputs: max_results, page_token.
moderate_commentA
Change the moderation status of a comment: heldForReview (hide pending approval), published (approve), or rejected (delete).
Inputs: comment_id (required), moderation_status (required).
query_channel_analyticsA
Query YouTube Analytics for the authenticated channel. Returns tabular data — useful for views/watch-time/retention/traffic-source reports. Date-ranged and optionally grouped by dimensions.
Inputs: start_date (required), end_date (required), metrics, dimensions, +3 more.
reply_to_commentB
Reply to a top-level comment. Requires youtube.force-ssl scope.
Inputs: parent_id (required), text (required).
update_video_metadataA
Update a video's metadata — title, description, tags, category, or privacy. Only provide fields you want changed.
Inputs: video_id (required), title, description, tags, +2 more.
upload_captionA
Upload a caption track (SRT or WebVTT) to a video. Creates a new track — use a distinct name per language/track, or is_draft=true while iterating.
Inputs: video_id (required), language (required), caption_text (required), name, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 15 tools
Each tool targets a distinct resource and action. Analytics tools are clearly differentiated (general vs Shorts-specific), and video list vs Shorts list is scoped by content type. Comments, captions, and playlists each have their own dedicated tools with no overlap.
All tool names follow a consistent verb_noun snake_case pattern (list_, get_, create_, update_, delete_, upload_, reply_to_, add_to_, moderate_, query_). There are no mixed conventions or cryptic abbreviations, making the naming predictable and easy to reason about.
15 tools cover a broad YouTube management surface without feeling bloated. The set is well-scoped for the server's purpose—video, playlist, caption, comment, and analytics operations—and each tool has a clear role within that scope.
The coverage has significant gaps, especially for playlists: there is no way to list, retrieve, delete, or remove items from playlists, creating dead ends after creation. Caption updates are also absent (only create and delete), although video CRUD and comment moderation are well covered.
Maintenance
Related MCP Connectors
Create and refine AI YouTube thumbnails with the ThumblifyAI MCP server.
An MCP server that gives any LLM or agent clean YouTube transcripts on demand: a single video, a whole channel, or a playlist, plus AI cleanup of auto-generated captions. API-key auth, credit-based, same backend as the public v1 API. Get a free API key with 25 free credits at youtubetranscriptdownload.com/account.
MCP server for Google Veo AI video generation
Hosted MCP for YouTube Studio: uploads, metadata, playlists, comments, analytics, captions.
Related MCP Servers
- FlicenseAqualityDmaintenanceA Model Context Protocol server that enables Claude to interact with YouTube data and functionality through the Claude Desktop application.112-
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables interaction with the YouTube Data API, allowing users to search videos, get video and channel details, analyze trends, and fetch video transcripts.-
- AlicenseAqualityDmaintenanceMCP server for ComfyUI — text-to-image, variations, img2img refine, upscale, image proxy, and workflow runner.15120 npm2MIT
- AlicenseAqualityBmaintenanceA comprehensive MCP server integrating YouTube Data, Analytics, and Reporting APIs, providing 40 tools for channel management, analytics, video publishing, transcripts, SEO, and comments.4031MIT