Skip to main content

Convert any YouTube video into an AI-queryable MCP server

Project description

๐ŸŽฌ mcptube

Convert any YouTube video into an AI-queryable MCP server.

PyPI Python License: MIT

mcptube extracts metadata, transcripts, and frames from YouTube videos, indexes them for semantic search, and exposes everything as both a CLI tool and an MCP (Model Context Protocol) server. Ask questions, generate reports, discover new videos, and synthesize themes โ€” all from your terminal or AI assistant.


โœจ Features

Feature CLI MCP Server
Add/remove YouTube videos โœ… โœ…
List library with tags โœ… โœ…
Full video details + transcript โœ… โœ…
Semantic search (single/cross-video) โœ… โœ…
Frame extraction by timestamp โœ… โœ…
Frame extraction by query โœ… โœ…
Ask questions about videos โœ… (BYOK) โœ… (passthrough)
LLM classification/tagging โœ… (BYOK) โœ… (passthrough)
Illustrated reports (single video) โœ… (BYOK) โœ… (passthrough)
Cross-video reports โœ… (BYOK) โœ… (passthrough)
YouTube discovery + clustering โœ… (BYOK) โœ…
Cross-video synthesis โœ… (BYOK) โœ… (passthrough)
Smart video resolver (ID/index/text) โœ… โ€”

BYOK = Bring Your Own Key (Anthropic, OpenAI, or Google) Passthrough = The MCP client's own LLM does the analysis โ€” zero API key required on the server


๐Ÿ“ฆ Installation

Prerequisites

  • Python 3.12 or 3.13 (ChromaDB is not yet compatible with Python 3.14)
  • ffmpeg โ€” required for frame extraction (install guide)

Recommended: pipx (CLI + MCP server)

pipx install mcptube --python python3.12

This installs mcptube globally and makes it available to all MCP clients without activating a virtual environment.

Alternative: pip (virtual environment)

python3.12 -m venv venv
source venv/bin/activate
pip install mcptube

โš ๏ธ macOS/Homebrew users: Global pip install will fail with "externally-managed-environment". Use pipx or a virtual environment instead.

Verify installation

mcptube --help

๐Ÿš€ Quick Start

# 1. Add a YouTube video
mcptube add "https://www.youtube.com/watch?v=dQw4w9WgXcQ"

# 2. List your library
mcptube list

# 3. Search the transcript
mcptube search "main topic"

# 4. Extract a frame at 30 seconds
mcptube frame 1 30

# 5. Ask a question about it
mcptube ask "What is this video about?" -v 1

๐Ÿ’ก Always wrap multi-word arguments in double quotes โ€” e.g. mcptube search "neural networks", not mcptube search neural networks.


๐Ÿ“– CLI Reference

Library Management

Command Description Example
mcptube add "<url>" Ingest a YouTube video mcptube add "https://youtu.be/dQw4w9WgXcQ"
mcptube list List all videos with tags mcptube list
mcptube info <query> Show full video details mcptube info 1 or mcptube info "dQw4w9WgXcQ"
mcptube remove <query> Remove a video mcptube remove 1

Search & Frames

Command Description Example
mcptube search "<query>" Semantic search across all videos mcptube search "machine learning"
mcptube search "<query>" --video <id> Search within a specific video mcptube search "intro" --video 1
mcptube frame <video> <timestamp> Extract frame at timestamp mcptube frame 1 30
mcptube frame-query <video> "<query>" Extract frame by transcript match mcptube frame-query 1 "key moment"

Ask Questions (BYOK)

Command Description Example
mcptube ask "<question>" -v <video> Ask about a single video mcptube ask "What are the main points?" -v 1
mcptube ask "<question>" -v <id1> -v <id2> Ask across multiple videos mcptube ask "What do they agree on?" -v 1 -v 2

Analysis & Reports (BYOK)

Command Description Example
mcptube classify <video> LLM classification/tagging mcptube classify 1
mcptube report <video> [--focus] [--format] [-o] Single-video illustrated report mcptube report 1 --format html -o report.html
mcptube report-query "<topic>" [--tag] [--format] [-o] Cross-video report mcptube report-query "AI trends" --format html -o report.html
mcptube discover "<topic>" YouTube search + LLM clustering mcptube discover "prompt engineering"
mcptube synthesize-cmd "<topic>" -v <id1> -v <id2> Cross-video synthesis mcptube synthesize-cmd "AI" -v abc123 -v xyz789 --format html -o synthesis.html

Server

Command Description Example
mcptube serve Start MCP server (Streamable HTTP) mcptube serve
mcptube serve --stdio Start MCP server (stdio transport) mcptube serve --stdio
mcptube serve --host 0.0.0.0 --port 8080 Custom host/port mcptube serve --host 0.0.0.0 --port 8080

Smart Video Resolver

All commands that accept a <video> or <query> argument support the smart resolver:

Input Resolution
dQw4w9WgXcQ Exact YouTube video ID
1 Index number from mcptube list (1-based)
"prompting" Case-insensitive substring match on title or channel

๐Ÿ”Œ MCP Server

mcptube exposes 17 MCP tools that any MCP-compatible AI assistant can use.

Transport Modes

Mode Command Use Case
Streamable HTTP mcptube serve Claude Code, remote clients
stdio mcptube serve --stdio VS Code Copilot, Claude Desktop, Cursor

MCP Tools

Tool Description API Key Required
add_video(url) Ingest a YouTube video No
remove_video(video_id) Remove from library No
list_videos() List all videos No
get_info(video_id) Full details + transcript No
search(query, video_id?, limit) Semantic search (single video) No
search_library(query, tags?, limit) Semantic search (all videos) No
get_frame(video_id, timestamp) Extract frame (returns image) No
get_frame_by_query(video_id, query) Search + extract frame No
get_frame_data(video_id, timestamp) Frame as base64 No
ask_video(video_id, question) Ask about a video (passthrough) No
ask_videos(video_ids, question) Ask across videos (passthrough) No
classify_video(video_id) Get metadata for classification No
save_tags(video_id, tags) Save classification tags No
generate_report(video_id, query?) Report data (passthrough) No
generate_report_from_query(query, tags?) Cross-video report data No
discover_videos(topic) YouTube search results No
synthesize(video_ids, topic) Cross-video synthesis data No

Passthrough tools return raw data (transcripts, metadata) for the connected AI to analyze. This means zero API key cost on the server โ€” the client's own LLM does the work.


๐Ÿ–ฅ๏ธ MCP Client Setup

Claude Code (Streamable HTTP)

  1. Start the mcptube server:
mcptube serve
  1. In a separate terminal, add the MCP server to Claude Code:
claude mcp add --transport http mcptube http://127.0.0.1:9093/mcp
  1. Start using it:
> Use mcptube to add this video: https://www.youtube.com/watch?v=dQw4w9WgXcQ
> Search mcptube for "main topic"
> Generate a report for the first video

๐Ÿ’ก Claude Code has terminal access, so it can also run CLI commands directly for better report quality.

VS Code Copilot (stdio)

  1. Open MCP configuration (Cmd+Shift+P โ†’ "MCP: Open User Configuration") or create .vscode/mcp.json in your workspace:
{
  "servers": {
    "mcptube": {
      "command": "mcptube",
      "args": ["serve", "--stdio"]
    }
  }
}
  1. Click the Start button next to the server entry.

  2. Open Copilot Chat in Agent Mode and start using mcptube tools.

โš ๏ธ If you installed mcptube in a virtual environment (not via pipx), you'll need the full path to the executable. Find it with which mcptube.

Claude Desktop (stdio)

  1. Open the config file:
open ~/Library/Application\ Support/Claude/claude_desktop_config.json
  1. Add the mcptube server:
{
  "mcpServers": {
    "mcptube": {
      "command": "/Users/<your-username>/.local/bin/mcptube",
      "args": ["serve", "--stdio"]
    }
  }
}

๐Ÿ’ก Use the full path to mcptube (find it with which mcptube). If you used pipx, it's typically at ~/.local/bin/mcptube.

  1. Restart Claude Desktop. You should see a tools icon (๐Ÿ”จ) in the chat input.

Cursor (stdio)

  1. Open Cursor Settings โ†’ MCP Servers, or edit .cursor/mcp.json:
{
  "mcpServers": {
    "mcptube": {
      "command": "mcptube",
      "args": ["serve", "--stdio"]
    }
  }
}
  1. Restart Cursor and use mcptube tools in Agent mode.

๐Ÿ”‘ API Keys (BYOK)

Some CLI features require an LLM API key. Set one of:

export ANTHROPIC_API_KEY=sk-ant-...
# or
export OPENAI_API_KEY=sk-...
# or
export GOOGLE_API_KEY=AI...

What requires a key?

Feature CLI MCP
Add video No (auto-classifies if key set) No
Search / Frames No No
Ask questions โœ… Key required No (passthrough)
Classify โœ… Key required No (passthrough)
Reports โœ… Key required No (passthrough)
Discover โœ… Key required No (via yt-dlp)
Synthesize โœ… Key required No (passthrough)

MCP passthrough = The connected AI assistant (Claude, Copilot, etc.) analyzes the data using its own model. No API key needed on the mcptube server.


โš–๏ธ CLI (BYOK) vs MCP: When to Use Which

CLI with BYOK MCP Passthrough
Speed Faster โ€” direct API call Slower โ€” client processes raw data
Accuracy More deterministic โ€” fine-tuned prompts per task Depends on client LLM interpretation
Frame selection Guided by specialized prompts Client may hallucinate timestamps
Context limits No limit (streams to LLM API) May exceed client context window on long videos
Cost Uses your API key Zero cost โ€” uses client's own model
Output Markdown or HTML files Inline in chat

Recommendation: Use CLI commands for reports, synthesis, and discovery. Use MCP tools for quick queries, search, and frame extraction.


๐Ÿ”„ Workflows

Discovery โ†’ Add โ†’ Synthesize

# 1. Scout YouTube for relevant videos
mcptube discover "transformer architecture"

# 2. Add interesting videos to your library
mcptube add "https://www.youtube.com/watch?v=..."
mcptube add "https://www.youtube.com/watch?v=..."

# 3. Synthesize themes across them
mcptube synthesize-cmd "attention mechanisms" -v <id1> -v <id2> --format html -o synthesis.html

๐Ÿ“Œ discover results are NOT in your library. You must add them before you can search, ask, or synthesize.

Ask โ†’ Deep Dive โ†’ Report

# 1. Ask a quick question
mcptube ask "What are the main arguments?" -v 1

# 2. Search for specific moments
mcptube search "key conclusion" --video 1

# 3. Extract a frame at that moment
mcptube frame 1 245

# 4. Generate a full illustrated report
mcptube report 1 --format html -o report.html

โš™๏ธ Environment Variables

Variable Default Description
MCPTUBE_DATA_DIR ~/.mcptube Root directory for all data (DB, frames, ChromaDB)
MCPTUBE_FRAMES_DIR <data_dir>/frames Directory for cached extracted frames
MCPTUBE_HOST 127.0.0.1 Server bind host
MCPTUBE_PORT 9093 Server bind port
ANTHROPIC_API_KEY โ€” Anthropic API key (for CLI BYOK features)
OPENAI_API_KEY โ€” OpenAI API key (for CLI BYOK features)
GOOGLE_API_KEY โ€” Google API key (for CLI BYOK features)

๐Ÿ—๏ธ Architecture

CLI (Typer)  โ†โ”€โ”€โ”€โ”€โ”€โ”€โ”
                     โ”œโ”€โ”€ Service Layer (McpTubeService)
MCP Server (FastMCP) โ†โ”€โ”˜        โ”‚
                           โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”
                     Repository    VectorStore
                     (SQLite)      (ChromaDB)
                           โ”‚
                     Ingestion Layer
                     โ”œโ”€โ”€ YouTubeExtractor (yt-dlp)
                     โ”œโ”€โ”€ FrameExtractor (yt-dlp + ffmpeg)
                     โ”œโ”€โ”€ LLMClient (LiteLLM โ€” CLI only)
                     โ”œโ”€โ”€ ReportBuilder (CLI only)
                     โ””โ”€โ”€ VideoDiscovery (CLI only)

โš ๏ธ Known Issues & Limitations

  • Frame storage: Frames are cached in ~/.mcptube/frames (hidden directory). Override with MCPTUBE_FRAMES_DIR.
  • Python 3.14: ChromaDB is not yet compatible with Python 3.14. Use Python 3.12 or 3.13.
  • Long transcripts: Very long videos may exceed MCP client context limits in passthrough mode. CLI BYOK is recommended for long-form content.
  • Multi-video frame accuracy: Cross-video reports may occasionally select frames from the wrong video. CLI reports use stricter prompts for better accuracy.
  • Claude Desktop: Report generation may fail on context-heavy operations. Use shorter videos or CLI for reports.
  • get_frame_data: Returns base64-encoded frames that can exceed client token limits (50K+ characters). Prefer get_frame for inline display.
  • Concurrent access: Running CLI and MCP server simultaneously may cause SQLite conflicts.

๐Ÿงช Development

git clone https://github.com/0xchamin/mcptube.git
cd mcptube
pip install -e ".[dev]"
pytest -v

๐Ÿ“„ License

MIT License โ€” see LICENSE for details.


Built with FastMCP ยท yt-dlp ยท ChromaDB ยท LiteLLM

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcptube-0.1.2.tar.gz (2.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcptube-0.1.2-py3-none-any.whl (38.0 kB view details)

Uploaded Python 3

File details

Details for the file mcptube-0.1.2.tar.gz.

File metadata

  • Download URL: mcptube-0.1.2.tar.gz
  • Upload date:
  • Size: 2.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.9

File hashes

Hashes for mcptube-0.1.2.tar.gz
Algorithm Hash digest
SHA256 f6cb70917f2d385c6dbc00cb5b890b5daac75495879af54586526b798ecda040
MD5 807c452424a3d5a42f1ed40818547070
BLAKE2b-256 999658e8358b9f9fb5cd492b016a3ef5bc3e0b8cf9c9dadda706c6258aff6463

See more details on using hashes here.

File details

Details for the file mcptube-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: mcptube-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 38.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.9

File hashes

Hashes for mcptube-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2351017eaa772b6844db14b5c5b83dca6aceb9c80871e01be17963efcde47657
MD5 f7d88d01699657894b27dcc87db38b60
BLAKE2b-256 a0be2d6c32d4846e7bd9054e674a844413d2f99d1247b6ff7263f4f79d55c53b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page