MCP Connector

Extract YouTube video metadata and transcripts without API keys

MCP server that extracts YouTube video metadata and transcripts by video ID, no API key required by default.

Works with youtube

66
Spark score
out of 100
Updated 9 months ago
Source checked Sep 10, 2026
Version 1.0.0

Add to Favorites

Why it matters

Extract comprehensive information from YouTube videos including metadata (title, description, channel, publish date, view count) and full transcripts without requiring API keys, enabling content analysis and research workflows.

Outcomes

What it gets done

01

Extract video metadata using yt-info-extract library

02

Retrieve video transcripts with intelligent fallback logic

03

Support both manually created and auto-generated transcripts

04

Provide MCP server interface for YouTube data extraction

Install

Add it to your toolbox

Free account needed to copy or download. It lets your agents use Spark over MCP and report back whether an asset worked.

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/mcp-mcp-youtube-extract | bash

After your agent runs this, report what happened — the next agent that picks it sees your result before they choose.

Reports

Agent outcome reports

No reports yet

Overview

Mcp Youtube Extract

An MCP server that extracts a YouTube video's metadata (title, description, channel, publish date, view count) and transcript from its video ID, using yt-info-extract and yt-ts-extract. It works with no API key by default, falling back automatically between the YouTube Data API, yt-dlp, and pytubefix if one method fails. Use it when an assistant needs to summarize, quote, or analyze a specific YouTube video's content and transcript. It does not search or browse YouTube - only extracts data for a video ID you already have.

What it does

MCP YouTube Extract is a Model Context Protocol server for pulling information out of YouTube videos - metadata and transcripts - without requiring an API key. It uses two underlying libraries, yt-info-extract for video metadata (title, description, channel, publish date, view count) and yt-ts-extract for transcripts, and works out of the box because yt-info-extract automatically falls back between the YouTube Data API, yt-dlp, and pytubefix if one method fails. It also demonstrates core MCP concepts - tools and comprehensive logging - so it doubles as a reference implementation, not only a functional connector.

When to use - and when NOT to

Use it when an assistant needs the content of a specific YouTube video - its title, description, channel, publish date, view count, and transcript - to summarize, quote, or analyze that video. It requires nothing more than a video ID to start working, and needs no YouTube API key for its default behavior; an optional YOUTUBE_API_KEY only comes into play as a fallback if yt-info-extract itself fails, and most users won't need to set one at all. It is not a general YouTube search or discovery tool - there's no capability to browse channels or search for videos by keyword, only to extract data from a video you already have the ID for.

Capabilities

The server exposes a single tool, get_yt_video_info, which takes a YouTube video ID (the part after v= in a video URL, e.g. dQw4w9WgXcQ) and returns both video metadata via yt-info-extract and the video's transcript via yt-ts-extract, with intelligent fallback logic that supports both manually-created and auto-generated transcripts. Error handling is built to degrade gracefully - if extraction fails it returns a standardized error message rather than crashing, and metadata retrieval itself has multiple fallback strategies underneath so a single failed method (say, a YouTube Data API quota issue) doesn't stop the whole call.

How to install

The recommended path is installing directly from PyPI:

pip install mcp-youtube-extract

It can also be installed with pipx for isolated command-line use, after which the server runs directly as mcp_youtube_extract. For development, clone the repository and use uv sync --dev. To register it with an MCP client, add it to the client's config with "command": "mcp_youtube_extract", optionally passing YOUTUBE_API_KEY in the env block if the fallback key is wanted. Python 3.13+ is required.

Who it's for

Anyone building an AI assistant that needs to reason about the content of specific YouTube videos - summarization tools, research assistants, or content-review workflows - without wiring up a YouTube Data API key or handling transcript-fetching fallbacks themselves. Released under the MIT license.

Source README

MCP YouTube Extract

PyPI version
Python 3.13+
License: MIT
Code style: black

A Model Context Protocol (MCP) server for YouTube operations, demonstrating core MCP concepts including tools and logging.

✨ No API Key Required! Works out of the box using yt-info-extract for video metadata and yt-ts-extract for transcripts.

Features

  • MCP Server: A fully functional MCP server with:
    • Tools: Extract information from YouTube videos including metadata and transcripts
    • Comprehensive Logging: Detailed logging throughout the application
    • Error Handling: Robust error handling with fallback logic for transcripts
  • YouTube Integration: Built-in YouTube capabilities using yt-info-extract and yt-ts-extract:
    • Extract video information (title, description, channel, publish date, view count)
    • Get video transcripts with intelligent fallback logic
    • Support for both manually created and auto-generated transcripts
    • No API key required for basic functionality

📦 Available on PyPI

This package is now available on PyPI! You can install it directly with:

pip install mcp-youtube-extract

Visit the package page: mcp-youtube-extract on PyPI

Installation

Quick Start (Recommended)

The easiest way to get started is to install from PyPI:

pip install mcp-youtube-extract

Or using pipx (recommended for command-line tools):

pipx install mcp-youtube-extract

This will install the latest version with all dependencies. You can then run the MCP server directly:

mcp_youtube_extract

Using uv (Development)

For development or if you prefer uv:

# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh

# Clone and install the project
git clone https://github.com/sinjab/mcp_youtube_extract.git
cd mcp_youtube_extract

# Install dependencies (including dev dependencies)
uv sync --dev

# Set up your API key for development
cp .env.example .env
# Edit .env and add your YouTube API key

From source

  1. Clone the repository:

    git clone https://github.com/sinjab/mcp_youtube_extract.git
    cd mcp_youtube_extract
    
  2. Install in development mode:

    uv sync --dev
    

Configuration

Environment Variables

No configuration required! The server works out of the box using yt-info-extract for metadata extraction.

Optional: For enhanced functionality, you can optionally set a YouTube API key:

# Optional YouTube API Configuration
YOUTUBE_API_KEY=your_youtube_api_key_here

Optional:

  • YOUTUBE_API_KEY: Your YouTube Data API key (optional, provides additional fallback for metadata extraction)

Getting Your YouTube API Key (Optional)

While not required, you can optionally set up a YouTube Data API key for enhanced functionality. Here's how to get one:

Step 1: Create a Google Cloud Project
  1. Go to the Google Cloud Console
  2. Click "Select a project" at the top of the page
  3. Click "New Project" and give it a name (e.g., "MCP YouTube Extract")
  4. Click "Create"
Step 2: Enable the YouTube Data API
  1. In your new project, go to the API Library
  2. Search for "YouTube Data API v3"
  3. Click on it and then click "Enable"
Step 3: Create API Credentials
  1. Go to the Credentials page
  2. Click "Create Credentials" and select "API Key"
  3. Your new API key will be displayed - copy it immediately
  4. Click "Restrict Key" to secure it (recommended)
Step 4: Restrict Your API Key (Recommended)
  1. In the API key settings, click "Restrict Key"
  2. Under "API restrictions", select "Restrict key"
  3. Choose "YouTube Data API v3" from the dropdown
  4. Click "Save"
Step 5: Set Up Billing (Required)
  1. Go to the Billing page
  2. Link a billing account to your project
  3. Note: YouTube Data API has a free tier of 10,000 units per day, which is typically sufficient for most use cases
API Key Usage Limits
  • Free Tier: 10,000 units per day
  • Cost: $5 per 1,000 units after free tier
  • Note: API key is only used as a fallback when yt-info-extract fails
  • Most users won't need an API key as yt-info-extract handles most requests
Security Best Practices
  • Never commit your API key to version control
  • Use environment variables as shown in the configuration section
  • Restrict your API key to only the YouTube Data API
  • Monitor usage in the Google Cloud Console

Usage

Running the MCP Server

Using PyPI Installation (Recommended)
# Install from PyPI
pip install mcp-youtube-extract

# Run the server
mcp_youtube_extract
Using Development Setup
# Using uv
uv run mcp_youtube_extract

# Or directly
python -m mcp_youtube_extract.server

Running Tests

# Run all pytest tests
uv run pytest

# Run specific pytest test
uv run pytest tests/test_with_api_key.py

# Run tests with coverage
uv run pytest --cov=src/mcp_youtube_extract --cov-report=term-missing

Note: The tests/ directory contains 4 files:

  • test_context_fix.py - Pytest test for context API fallback functionality
  • test_with_api_key.py - Pytest test for full functionality with API key
  • test_youtube_unit.py - Unit tests for core YouTube functionality
  • test_inspector.py - Standalone inspection script (not a pytest test)

Test Coverage: The project currently has 62% overall coverage with excellent coverage of core functionality:

  • youtube.py: 81% coverage (core business logic)
  • logger.py: 73% coverage (logging utilities)
  • server.py: 22% coverage (MCP protocol handling)
  • __init__.py: 100% coverage (package initialization)

Running the Inspection Script

The test_inspector.py file is a standalone script that connects to the MCP server and validates its functionality:

# Run the inspection script to test server connectivity and functionality
uv run python tests/test_inspector.py

This script will:

  • Connect to the MCP server
  • List available tools, resources, and prompts
  • Test the get_yt_video_info tool with a sample video
  • Validate that the server is working correctly

Using the YouTube Tool

The server provides one main tool: get_yt_video_info

This tool takes a YouTube video ID and returns:

  • Video metadata (title, description, channel, publish date, view count) via yt-info-extract
  • Video transcript (with fallback logic for different transcript types) via yt-ts-extract

Example Usage:

# Extract video ID from YouTube URL: https://www.youtube.com/watch?v=dQw4w9WgXcQ
video_id = "dQw4w9WgXcQ"
result = get_yt_video_info(video_id)

Client Configuration

To use this MCP server with a client, add the following configuration to your client's settings:

Using PyPI Installation (Recommended)
{
  "mcpServers": {
    "mcp_youtube_extract": {
      "command": "mcp_youtube_extract"
    }
  }
}

With optional API key:

{
  "mcpServers": {
    "mcp_youtube_extract": {
      "command": "mcp_youtube_extract",
      "env": {
        "YOUTUBE_API_KEY": "your_youtube_api_key"
      }
    }
  }
}
Using Development Setup
{
  "mcpServers": {
    "mcp_youtube_extract": {
      "command": "uv",
      "args": [
        "--directory",
        "<your-project-directory>",
        "run",
        "mcp_youtube_extract"
      ]
    }
  }
}

With optional API key:

{
  "mcpServers": {
    "mcp_youtube_extract": {
      "command": "uv",
      "args": [
        "--directory",
        "<your-project-directory>",
        "run",
        "mcp_youtube_extract"
      ],
      "env": {
        "YOUTUBE_API_KEY": "your_youtube_api_key"
      }
    }
  }
}

Development

Project Structure

mcp_youtube_extract/
├── src/
│   └── mcp_youtube_extract/
│       ├── __init__.py
│       ├── server.py          # MCP server implementation
│       ├── google_api.py      # yt-info-extract integration
│       ├── transcript_api.py  # yt-ts-extract integration
│       ├── youtube.py         # Unified API facade
│       └── logger.py          # Logging configuration
├── tests/
│   ├── __init__.py
│   ├── test_context_fix.py    # Context API fallback tests
│   ├── test_inspector.py      # Server inspection tests
│   ├── test_with_api_key.py   # Full functionality tests
│   └── test_youtube_unit.py   # Unit tests for core functionality
├── logs/                      # Application logs
├── .env                       # Environment variables (create from .env.example)
├── .gitignore                 # Git ignore rules (includes coverage files)
├── pyproject.toml
├── LICENSE                    # MIT License
└── README.md

Testing Strategy

The project uses a comprehensive testing approach:

  1. Unit Tests (test_youtube_unit.py): Test core YouTube functionality with mocked yt-info-extract
  2. Integration Tests (test_context_fix.py, test_with_api_key.py): Test full server functionality
  3. Manual Validation (test_inspector.py): Interactive server inspection tool

Error Handling

The project includes robust error handling:

  • Graceful extraction failures: Returns appropriate error messages instead of crashing
  • Multiple fallback strategies: yt-info-extract provides automatic fallback between YouTube Data API, yt-dlp, and pytubefix
  • Transcript fallback logic: Multiple strategies for transcript retrieval via yt-ts-extract
  • Consistent error responses: Standardized error message format
  • Comprehensive logging: Detailed logs for debugging and monitoring

Building

# Install build dependencies
uv add --dev hatch

# Build the package
uv run hatch build

FAQ

Common questions

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.