Skip to main content
Glama

youtube-mcp

YouTube MCP с аутентификацией OAuth для владельцев каналов. Редактируйте метаданные видео, отвечайте на комментарии и модерируйте их, управляйте плейлистами, запрашивайте аналитику канала, а также создавайте или устанавливайте AI-превью через мост с ComfyUI. Выходит далеко за рамки обычных оберток Data API v3 с доступом только для чтения, которые доминируют в этой сфере.

youtube-mcp MCP server

GitHub Sponsors Ko-fi

Основная идея

Большинство существующих 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 мин)

  1. Аккаунт Google и YouTube-канал. Используйте личный аккаунт, а не рабочий, к которому вы можете потерять доступ.

  2. Проект Google Cloud на https://console.cloud.google.com. Назовите его как угодно (например, youtube-mcp).

  3. Включите API:

    • YouTube Data API v3

    • YouTube Analytics API

  4. Экран согласия OAuth: Внешний (External), название приложения, контактный email. В разделе Scopes (Области доступа) добавьте:

    • youtube.upload

    • youtube.force-ssl

    • yt-analytics.readonly

  5. Оставайтесь в режиме Тестирования (Testing). Добавьте себя в качестве тестового пользователя (обязательно). Поскольку вы являетесь владельцем проекта, ваш токен обновления (refresh token) не истечет.

  6. Создайте идентификатор клиента OAuth: Тип приложения = Desktop app. Скачайте JSON-файл.

  7. Запустите интерактивный процесс авторизации:

    npx @miller-joe/youtube-mcp --auth --client-secret-file ./client_secret.json

    Откроется браузер, вы войдете в аккаунт Google, привязанный к вашему YouTube-каналу, и предоставите запрошенные права доступа. В случае успеха токен обновления будет сохранен в ~/.config/youtube-mcp/token.json.

  8. Запустите сервер:

    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

Переменная окружения

По умолчанию

Примечания

--client-secret-file

YOUTUBE_CLIENT_SECRET_FILE

(нет)

Путь к JSON-файлу Google OAuth

--client-id

YOUTUBE_CLIENT_ID

(нет)

Альтернатива файлу секретов

--client-secret

YOUTUBE_CLIENT_SECRET

(нет)

Альтернатива файлу секретов

--token-file

YOUTUBE_TOKEN_FILE

~/.config/youtube-mcp/token.json

Хранилище токенов обновления

--host

MCP_HOST

0.0.0.0

Хост привязки (только HTTP)

--port

MCP_PORT

9120

Порт привязки (только HTTP)

--stdio

MCP_TRANSPORT=stdio

(не задано)

Использовать MCP через stdio вместо HTTP. Используйте при запуске в качестве подпроцесса MCP-клиентом (Claude Desktop, mcp-inspector).

--comfyui-url

COMFYUI_URL

(не задано, мост отключен)

HTTP URL для инструментов моста ComfyUI

(нет флага)

COMFYUI_DEFAULT_CKPT

sd_xl_base_1.0.safetensors

Чекпоинт по умолчанию для инструмента моста

Транспорты

По умолчанию сервер использует 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

Поддержка

Если это экономит ваше время, рассмотрите возможность поддержки разработки:

GitHub Sponsors Ko-fi

Available Tools

15 tools
add_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

    A3.8/5.0

    Scored across 15 tools

    Disambiguation5/5

    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.

    Naming Consistency5/5

    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.

    Tool Count5/5

    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.

    Completeness3/5

    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

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers