MITNode ≥ 20MCP stdio Gemini auto-rotation15 tools

Paste a YouTube playlist. Get structured lessons.

Edutube is an MCP server + CLI that turns YouTube videos and playlists into LMS-ready lessons — verbatim dialogue with Arabic translations, key expressions, vocabulary, cultural notes and a 10-question quiz — extracted from real audio and visuals, not captions.

Get it on GitHub See real extracted lessons ↓
1 · Paste URLPlaylist, playlist id, or single video
2 · EdutubeLong-pass → 150s window fallback · model rotation
3 · lessons-all.jsonDialogue · expressions · vocab · notes · quiz

Features

Everything runs locally except the Gemini calls; resume-safe and quota-aware.

🔗 Playlist import by URL

YouTube Data API when a key is set, otherwise keyless yt-dlp flat-playlist. Resume skips finished lessons.

🧠 Audio + vision, not captions

Gemini processes the actual media: spoken dialogue, on-screen expressions, scenes and sounds.

🔁 Automatic model rotation

On 429 the request retries on the next model. Live discovery adds future models (3.6/3.7-flash…) automatically.

🎬 Long VODs

Task-based long analysis, reusable sessions, compatibility background jobs for fixed-timeout clients.

🖼️ Exact frames

High-res JPEG at any timestamp via yt-dlp + ffmpeg, with optional Gemini timestamp refinement.

⌨️ CLI mode

edutube-mcp extract <url> --out DIR — clean JSON stdout for scripts and LMS importers.

MCP tools

15 tools over stdio; works with Claude Code, Cursor, Codex and any MCP client.

ToolPurpose
start_edutube_extractionPlaylist/video URL → background lesson-extraction job (lesson-NN.json + lessons-all.json)
get_edutube_job_status / _result / cancel_edutube_jobPoll, fetch and cancel edutube jobs
analyze_youtube_videoMultimodal analysis with custom prompts and JSON schemas; clip windows
analyze_youtube_video_audioSpeech-first analysis with transcript segments
get_youtube_video_frameExact high-res JPEG frame at a timestamp
get_youtube_video_metadataNormalized metadata via YouTube Data API
analyze_long_youtube_video / continue_long_video_analysisLong VODs as MCP tasks with reusable sessions
start_long_youtube_analysis + status/result/cancelCompatibility job workflow for fixed-timeout clients

Quick start

Three ways to run it. GEMINI_API_KEY is the only required secret.

MCP client
CLI
From source
{
  "mcpServers": {
    "edutube": {
      "command": "npx",
      "args": ["-y", "@engmohammeda/edutube-mcp"],
      "env": { "GEMINI_API_KEY": "…", "YOUTUBE_API_KEY": "optional" }
    }
  }
}
# extract a whole playlist
edutube-mcp extract "https://www.youtube.com/playlist?list=PL…" --out ./lessons --max 20

# single video, pipe-safe JSON
edutube-mcp extract "https://www.youtube.com/watch?v=…" --out ./lessons | jq .totals
git clone https://github.com/engmohammeda/edutube-mcp.git
cd edutube-mcp && npm install && npm run build
cp .env.example .env   # add GEMINI_API_KEY
npm start              # MCP stdio server
Free-tier friendly: each Gemini model has its own quota pool; Edutube rotates across them automatically and discovers new models live, so batches keep running where single-model tools stop.

Lesson explorer — real output

Nine lessons extracted live from the “المحادثة” playlist (ZAmericanEnglish) using this exact project. Browse what Edutube produced.

Teacher notes

    Key expressions

    Vocabulary

    Quiz sample