Skip to main content
Glama

YouTube MCP Server

Python-сервер на базе Model Context Protocol (MCP), который извлекает образовательный контент из видео YouTube — транскрипты и визуально значимые кадры — и предоставляет его ИИ-ассистентам, таким как Claude, ChatGPT и любому MCP-совместимому клиенту.

Python 3.11 License: MIT FastMCP


Что он делает

Дайте ИИ-ассистенту URL видео YouTube, и он сможет:

  1. Прочитать транскрипт — Полные субтитры с таймкодами, готовые для суммаризации, Q&A или анализа контента.

  2. Увидеть видео — Конвейер компьютерного зрения из 5 этапов извлекает наиболее информативные кадры, оценивает их качество, удаляет дубликаты и возвращает их в виде JPEG-изображений в кодировке base64, которые ИИ может «увидеть».

Без ручного скачивания. Без копирования и вставки. Просто вставьте URL и задавайте вопросы.


Инструменты

get_transcript

Получает субтитры видео с помощью youtube-transcript-api.

Параметры:

  • url (обязательный) — URL видео YouTube

  • language (необязательный, по умолчанию: "en") — Предпочитаемый язык субтитров

  • prefer_manual (необязательный, по умолчанию: true) — Предпочитать субтитры, созданные вручную, автоматически сгенерированным

Возвращает: Чистый блок транскрипта с таймкодами:

[00:00:00] So I want to start by offering you a free ...
[00:00:15] The key insight here is that ...

get_video_frames

Запускает полный конвейер анализа видео, чтобы выявить наиболее значимые визуальные моменты.

Параметры:

  • url (обязательный) — URL видео YouTube

  • max_frames (необязательный, по умолчанию: 20) — Максимальное количество возвращаемых кадров (жёсткий лимит: 40)

  • scene_threshold (необязательный, по умолчанию: 0.25) — Чувствительность обнаружения смены сцен FFmpeg

  • output_width (необязательный, по умолчанию: 640) — Ширина возвращаемых JPEG-изображений (высота пропорциональна)

  • min_importance_score (необязательный, по умолчанию: 0.35) — Минимальный совокупный балл качества

Возвращает:

  • Метаданные: video_id, duration_seconds, pipeline_stats, fallback_used

  • Блоки кадров: каждый содержит timestamp_ms, composite_score и JPEG-изображение в кодировке base64

  • Индекс всех возвращённых кадров с их таймкодами и баллами


Конвейер обработки кадров (5 этапов)

Этап

Модуль

Что делает

1. Загрузка

downloader.py

Загружает видео через yt-dlp с ограничением длительности и защитой от превышения лимитов запросов

2. Извлечение

frame_extractor.py

Обнаруживает смену сцен с помощью ffmpeg и извлекает кандидатные кадры

3. Оценка

scorer.py

Оценивает каждый кадр по 5 сигналам: стабильность движения, энтропия, плотность краёв, прямоугольная плотность и количество слов в OCR

4. Дедупликация

deduplicator.py

Удаляет почти идентичные кадры с помощью DCT-перцептивного хеширования (pHash) с порогом по расстоянию Хэмминга

5. Загрузка

frame_loader.py

Изменяет размер кадров, сжимает в JPEG (качество 85) и кодирует в base64 для передачи через MCP


Быстрый старт

Предварительные требования

  • Python 3.11

  • ffmpeg — обработка видео

  • Tesseract OCR — распознавание текста на кадрах

macOS:

brew install ffmpeg tesseract

Ubuntu / Linux:

sudo apt-get install ffmpeg tesseract-ocr tesseract-ocr-eng

Windows: Скачайте ffmpeg и Tesseract, затем добавьте оба в переменную PATH.

Проверка:

ffmpeg -version
tesseract --version

Установка

# Clone the repository
git clone https://github.com/Ayush-Mamgain/youtube-mcp-server.git
cd youtube-mcp-server

# Create a virtual environment
python3 -m venv venv
source venv/bin/activate        # macOS / Linux
# venv\Scripts\activate      # Windows

# Install dependencies
pip install -r requirements.txt

Конфигурация

Создайте файл .env в корне проекта:

LOG_LEVEL=DEBUG
MCP_HTTP_PORT=8000

Дополнительная настройка (используются значения по умолчанию из config.py, если параметры не указаны):

Переменная

Значение по умолчанию

Описание

MAX_VIDEO_DURATION

3600

Отклонять видео длиннее этого значения (секунды)

MAX_FRAMES_HARD_LIMIT

40

Жёсткий лимит на количество возвращаемых кадров

SCENE_THRESHOLD_DEFAULT

0.25

Порог смены сцен FFmpeg

MIN_IMPORTANCE_SCORE_DEFAULT

0.35

Минимальный совокупный балл кадра

OUTPUT_WIDTH_DEFAULT

640

Ширина возвращаемых JPEG-изображений

Запуск сервера

python server.py

Сервер запускается по адресу http://localhost:8000.


Подключение к Claude.ai (локально)

  1. Запустите сервер: python server.py

  2. Перейдите в Claude.ai → Настройки → Интеграции → Добавить MCP-сервер

  3. Введите: http://localhost:8000/mcp

Чтобы облачный Claude мог получить доступ к вашему серверу, необходимо опубликовать его в открытом доступе (см. раздел «Развёртывание» ниже).


API-эндпоинты

Эндпоинт

Метод

Описание

GET /healthz

GET

Проверка работоспособности — проверяет наличие ffmpeg, tesseract, yt-dlp и готовность сервера. Возвращает {"status": "ok"} или {"status": "error", "detail": "..."}

POST /mcp

POST

Потоковый HTTP-эндпоинт для вызовов инструментов MCP


Структура проекта

youtube-mcp-server/
├── server.py              # MCP entry point — FastMCP + Starlette HTTP server
├── config.py              # Loads and validates environment variables
├── logger.py              # stderr-only logging
├── url_parser.py          # Validates YouTube URLs and extracts video IDs
├── transcript.py          # Fetches captions via youtube-transcript-api
├── downloader.py          # Phase 1 — video download with yt-dlp
├── frame_extractor.py     # Phase 2 — scene-change frame extraction via ffmpeg
├── scorer.py              # Phase 3 — multi-signal frame scoring (OpenCV + Tesseract)
├── deduplicator.py        # Phase 4 — perceptual-hash deduplication
├── frame_loader.py        # Phase 5 — resize, JPEG encode, base64
├── video_frames.py        # Orchestrates Phases 1–5 with semaphore and cleanup
├── requirements.txt       # Pinned Python dependencies
└── .gitignore             # Excludes .env, venv, caches, test artifacts

Процесс разработки

Проект создавался в 9 самостоятельных этапов, каждый со своим тестовым файлом и шагом проверки:

Этап

Содержание

Тестовый файл

1

Каркас проекта, конфигурация, логирование

test_stage1.py

2

Парсер и валидатор URL YouTube

test_stage2.py

3

Получение транскриптов

test_stage3.py

4

Загрузчик видео с ограничением длительности

test_stage4.py

5

Извлечение кадров через ffmpeg

test_stage5.py

6

Многосигнальная оценка важности

test_stage6.py

7

Дедупликация pHash + загрузка base64

test_stage7.py

8

Полная оркестрация конвейера

test_stage8.py

9

Точка входа MCP-сервера + проверки здоровья

test_stage9.py

Золотое правило: Каждый этап проверяется перед переходом к следующему. Запустите python test_stage{N}.py для проверки.


Развёртывание

Поддержка Docker запланирована, но пока не настроена. Этот раздел будет обновлён после завершения контейнеризации.

Пока сервер запускается напрямую на любой машине с установленными Python 3.11, ffmpeg и Tesseract. Рекомендуемые варианты хостинга после готовности Docker:

После развёртывания обновите URL интеграции в Claude.ai на:

https://YOUR-DEPLOYMENT-URL/mcp

Принципы проектирования

  • Все логи пишутся только в stderr. stdout зарезервирован исключительно для связи через MCP.

  • Потокобезопасность: Конвейер get_video_frames использует threading.Semaphore(1), чтобы предотвратить перегрузку системы параллельными загрузками.

  • Автоматическая очистка: Временные файлы, создаваемые при обработке видео, удаляются после каждого запуска.

  • Строгая валидация: Идентификаторы видео проверяются по шаблону ^[A-Za-z0-9_-]{11}$. URL только с плейлистами, URL каналов и некорректные входные данные отклоняются с понятными сообщениями об ошибках.

  • Плавная деградация: Если все кадры набрали балл ниже минимального порога важности, конвейер возвращает 5 лучших кадров и устанавливает флаг fallback_used: true.


Лицензия

MIT © Ayush Mamgain


Благодарности

Создано с использованием FastMCP, Starlette, yt-dlp, youtube-transcript-api и OpenCV.

-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Fetch transcripts, subtitles, chapters, metadata and frames from YouTube and 10+ video platforms

  • Provide token-optimized, structured YouTube data to enhance your LLM applications. Access efficien…

  • Search YouTube transcripts and read a video's frames; answers cite clickable timestamps.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/chaitanyapandey09/YouTube-MCP-Server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server