Skip to main content
Glama

yt-mcp

Полностью локальный сервер MCP (Model Context Protocol), который дает ИИ-ассистентам глубокое мультимодальное понимание видео на YouTube. API-ключи не требуются. Вся обработка выполняется на устройстве с помощью yt-dlp, OpenAI Whisper, FFmpeg, PySceneDetect и librosa.

Примечание: Этот репозиторий также содержит экспериментальный сервер на TypeScript (src/), использующий API Gemini. Этот сервер не находится в активной разработке — основной реализацией является локальный сервер на Python (server/).


Содержание


Related MCP server: YT-NINJA

Как это работает

YouTube URL
    │
    ▼
yt-dlp ──────────────── download video.mp4
    │                   extract audio.wav (16 kHz mono)
    ▼
Whisper ─────────────── timestamped transcript (word-level)
    │
    ▼
PySceneDetect ────────── detect scene-cut timestamps
    │
    ▼
FFmpeg ──────────────── extract keyframe JPEGs at scene cuts
    │
    ▼
OpenCV ──────────────── pixel-diff animation detection
    │
    ▼
librosa ─────────────── energy · tempo · music vs speech
    │
    ▼
timeline.py ─────────── unified JSON timeline (all signals, time-aligned)

Все результаты кэшируются в /tmp/yt-analysis-cache/<video_id>/. Повторный вызов того же URL происходит мгновенно.


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

# macOS
brew install ffmpeg

# Ubuntu / Debian
sudo apt install ffmpeg

# Verify
ffmpeg -version
python3 --version   # must be 3.10+

Установка

git clone https://github.com/yourusername/yt-mcp.git
cd yt-mcp

# Create and activate a virtual environment (recommended)
python3 -m venv .venv
source .venv/bin/activate        # macOS / Linux
# .venv\Scripts\activate         # Windows

pip install -r requirements.txt

Веса модели Whisper загружаются автоматически при первом вызове транскрибации (~75 МБ для base, ~1.5 ГБ для large).


Интеграция с MCP

Клиенты MCP запускают сервер как подпроцесс — они не активируют вашу оболочку или venv автоматически. Вы должны указать им путь напрямую к интерпретатору Python внутри venv, используя его абсолютный путь.

Найдите путь к вашему интерпретатору после активации venv:

source .venv/bin/activate
which python   # e.g. /Users/you/repos/yt-mcp/.venv/bin/python

Claude Code:

claude mcp add -s user yt-mcp -- /path/to/yt-mcp/.venv/bin/python /path/to/yt-mcp/server/main.py

Claude Desktop — добавьте в ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "yt-mcp": {
      "command": "/path/to/yt-mcp/.venv/bin/python",
      "args": ["/path/to/yt-mcp/server/main.py"]
    }
  }
}

Замените /path/to/yt-mcp на абсолютный путь к месту, куда вы клонировали репозиторий. В Windows интерпретатор находится по адресу .venv\Scripts\python.exe.


Инструменты

get_video_transcript

Транскрибирует видео с YouTube с помощью OpenAI Whisper (работает полностью локально).

Параметр

Тип

По умолчанию

Описание

youtube_url

string

Полный URL видео YouTube

model_size

string

base

tiny · base · small · medium · large

Ответ:

{
  "title": "Video Title",
  "duration": 847,
  "language": "en",
  "full_text": "Welcome to this video...",
  "segments": [
    {
      "t_start": 0.0,
      "t_end": 4.5,
      "text": "Welcome to this video.",
      "words": [{ "word": "Welcome", "start": 0.0, "end": 0.6 }]
    }
  ]
}

get_video_frames

Извлекает ключевые кадры в виде JPEG, закодированных в base64. Использует PySceneDetect для обнаружения сцен и FFmpeg для извлечения.

Параметр

Тип

По умолчанию

Описание

youtube_url

string

Полный URL видео YouTube

strategy

string

scene

scene · interval · both

interval

integer

30

Секунды между кадрами (для стратегий interval или both)

Ответ:

{
  "title": "Video Title",
  "duration": 847,
  "duration_formatted": "14:07",
  "frame_count": 12,
  "strategy": "scene",
  "frames": [
    {
      "t": 0.0,
      "t_formatted": "0:00",
      "keyframe": "<base64 JPEG>",
      "scene_change": false,
      "animation_detected": false
    }
  ],
  "summary": [ /* same list without keyframe bytes — for quick review */ ]
}

get_audio_features

Анализирует характеристики аудио с помощью librosa (работает локально).

Параметр

Тип

По умолчанию

Описание

youtube_url

string

Полный URL видео YouTube

segment_duration

integer

30

Размер окна анализа в секундах

Ответ:

{
  "title": "Video Title",
  "duration": 847,
  "segment_duration": 30,
  "segments": [
    {
      "t_start": 0.0,
      "t_end": 30.0,
      "energy": "medium",
      "music": false,
      "tempo_bpm": 95.0,
      "rms_db": -22.1
    }
  ]
}

get_full_context

Основной инструмент. Возвращает полный синхронизированный мультимодальный таймлайн — транскрипт + границы сцен + обнаружение анимации + аудиохарактеристики, все выровнено по времени.

Параметр

Тип

По умолчанию

Описание

youtube_url

string

Полный URL видео YouTube

include_frames

boolean

false

Внедрить ключевые кадры base64 для каждого сегмента

model_size

string

base

Размер модели Whisper

Ответ:

{
  "title": "How Transformers Work",
  "channel": "AI Explained",
  "duration": 847,
  "duration_formatted": "14:07",
  "language": "en",
  "description": "In this video...",
  "segments": [
    {
      "t_start": 0.0,
      "t_end": 12.0,
      "transcript": "Welcome to this video on transformers...",
      "keyframe": null,
      "scene_change": false,
      "animation_detected": false,
      "audio": {
        "energy": "low",
        "speech_rate": "normal",
        "music": true,
        "tempo_bpm": 0.0,
        "rms_db": -28.4
      }
    }
  ]
}

Совет по контекстному окну: Сначала вызовите get_full_context с include_frames=false, чтобы понять структуру видео, а затем вызовите get_video_frames для конкретных интересующих вас временных меток.


Поддерживаемые форматы URL

https://www.youtube.com/watch?v=VIDEO_ID
https://youtu.be/VIDEO_ID
https://youtube.com/shorts/VIDEO_ID

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

Переменная

По умолчанию

Описание

YT_CACHE_DIR

/tmp/yt-analysis-cache

Директория кэша для загруженных видео и аудио


Разработка

# Activate the venv first
source .venv/bin/activate

# Run the server directly (stdio mode — same as MCP clients use)
python server/main.py

# Quick smoke test
python -c "
from server.utils.downloader import VideoDownloader
from server.tools.transcript import get_transcript
d = VideoDownloader()
vp, ap, info = d.download('https://www.youtube.com/watch?v=jNQXAC9IVRw')
print(get_transcript(ap)['language'])
"

Тестирование

Python-сервер имеет полный набор модульных тестов — 164 теста в 6 модулях. Все тесты выполняются без доступа к сети или загрузки моделей; каждая внешняя зависимость (Whisper, librosa, FFmpeg, PySceneDetect, OpenCV, yt-dlp) имитируется (mocked).

Установка зависимостей для тестирования

pip install -r requirements-dev.txt

Запуск полного набора тестов

python -m pytest

Ожидаемый вывод: 164 passed in ~4s

Запуск тестов для конкретного модуля

python -m pytest tests/test_downloader.py   # VideoDownloader + VideoInfo
python -m pytest tests/test_transcript.py   # Whisper wrapper + range helpers
python -m pytest tests/test_frames.py       # FFmpeg, PySceneDetect, OpenCV
python -m pytest tests/test_audio.py        # librosa AudioAnalyzer
python -m pytest tests/test_timeline.py     # build_timeline + speech rate
python -m pytest tests/test_main.py         # all 4 MCP tool handlers

Запуск одного теста по имени

python -m pytest tests/test_timeline.py::TestBuildTimeline::test_rapid_cuts_below_min_merged -v

Дымовое тестирование на реальном видео

В примере ниже используется プリマドンナ / 星街すいせい (Hoshimachi Suisei · Suisei Channel, 2:52) — японский музыкальный клип, который задействует каждый уровень конвейера: многоязычная транскрипция Whisper, обнаружение музыки через librosa HPSS, быстрые склейки сцен через PySceneDetect и обнаружение анимации через разницу пикселей OpenCV.

from server.utils.downloader import VideoDownloader
from server.tools.transcript import get_transcript
from server.tools.audio import AudioAnalyzer
from server.tools.frames import detect_scene_timestamps

URL = "https://www.youtube.com/watch?v=M1GYqy0tHV0"

d = VideoDownloader()
video_path, audio_path, info = d.download(URL)

print(f"Title:    {info.title}")        # プリマドンナ / 星街すいせい(official)
print(f"Duration: {info.duration:.0f}s")  # 172

transcript = get_transcript(audio_path, model_size="base")
print(f"Language: {transcript['language']}")  # ja

cuts = detect_scene_timestamps(video_path)
print(f"Scene cuts detected: {len(cuts)}")    # typically 30–60 for a music video

analyzer = AudioAnalyzer(audio_path)
seg = analyzer.analyze_segment(0, 30)
print(f"First 30s — energy: {seg['energy']}, music: {seg['music']}")
# energy: 'medium' or 'high', music: True

Полное руководство по тестированию — фикстуры, шаблоны имитации, написание тестов для новых инструментов — см. в docs/testing.md.


Архитектура

Для подробного объяснения проектирования системы, потоков данных и того, как добавлять новые инструменты:

  • docs/architecture.md — диаграммы конвейера и ключевые проектные решения

  • docs/python-server.md — справочник компонентов для всех модулей

  • docs/extending.md — как добавлять новые инструменты

  • docs/testing.md — структура набора тестов, фикстуры и написание новых тестов


Сервер на TypeScript (архив)

Директория src/ содержит экспериментальный сервер на TypeScript, который делегирует анализ видео API Gemini. Он не находится в активной разработке и сохранен только для справки.

Если вы ищете быстрые облачные ответы на вопросы по видео, подход сервера на TypeScript (передача URL YouTube напрямую в Gemini) хорошо работает для быстрого прототипа, но сервер на Python — это единственная реализация, которая будет получать постоянную поддержку.

См. docs/typescript-server.md для получения справочной информации по его API.


Лицензия

MIT

Install Server
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
41dResponse 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 Servers

  • F
    license
    B
    quality
    D
    maintenance
    Enables AI-powered YouTube video analysis including transcript management, video summaries, chapter generation, keyword extraction, and playback control. Supports searching videos, retrieving channel/playlist information, and translating transcripts using Google Gemini AI.
    14
  • F
    license
    A
    quality
    C
    maintenance
    Enables analysis of YouTube videos using the Gemini API to generate summaries and answer specific questions via direct URLs. It supports standard videos and shorts, allowing users to interact with video content without requiring manual downloads.
    5
    4

View all related MCP servers

Related MCP Connectors

  • AI-powered YouTube to flashcards with spaced repetition and Anki export

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

  • Multimodal video analysis MCP — transcription, vision, and OCR for any video URL.

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/PakmanGames/yt-mcp'

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