Extracts information from YouTube videos and channels using the YouTube Data API.
A Model Context Protocol (MCP) server for YouTube operations, demonstrating core MCP concepts including tools and logging.
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
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
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
Clone the repository:
git clone https://github.com/sinjab/mcp_youtube_extract.git
cd mcp_youtube_extract
Install in development mode:
uv sync --dev
For development, create a .env
file in the project root with your YouTube API key:
# YouTube API Configuration
YOUTUBE_API_KEY=your_youtube_api_key_here
For production, set the environment variable directly in your system:
export YOUTUBE_API_KEY=your_youtube_api_key_here
Required:
YOUTUBE_API_KEY
: Your YouTube Data API key (required for video metadata)To use this MCP server, you'll need a YouTube Data API key. Here's how to get one:
# Install from PyPI
pip install mcp-youtube-extract
# Run the server
mcp_youtube_extract
# Using uv
uv run mcp_youtube_extract
# Or directly
python -m mcp_youtube_extract.server
# 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 functionalitytest_with_api_key.py
- Pytest test for full functionality with API keytest_youtube_unit.py
- Unit tests for core YouTube functionalitytest_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)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:
get_yt_video_info
tool with a sample videoThe server provides one main tool: get_yt_video_info
This tool takes a YouTube video ID and returns:
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)
To use this MCP server with a client, add the following configuration to your client's settings:
{
"mcpServers": {
"mcp_youtube_extract": {
"command": "mcp_youtube_extract",
"env": {
"YOUTUBE_API_KEY": "your_youtube_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"
}
}
}
}
mcp_youtube_extract/
āāā src/
ā āāā mcp_youtube_extract/
ā āāā __init__.py
ā āāā server.py # MCP server implementation
ā āāā youtube.py # YouTube API utilities
ā āāā 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
The project uses a comprehensive testing approach:
test_youtube_unit.py
): Test core YouTube functionality with mocked APIstest_context_fix.py
, test_with_api_key.py
): Test full server functionalitytest_inspector.py
): Interactive server inspection toolThe project includes robust error handling:
# Install build dependencies
uv add --dev hatch
# Build the package
uv run hatch build
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.
git checkout -b feature/amazing-feature
)git commit -m 'Add some amazing feature'
)git push origin feature/amazing-feature
)If you encounter any issues or have questions, please:
Playwright MCP server
Fetch and extract web content using a Playwright headless browser, with support for intelligent extraction and flexible output.
Enable AI agents to get structured data from unstructured web with AgentQL.
Provides browser automation capabilities using Playwright. Interact with web pages, take screenshots, and execute JavaScript in a real browser environment.
Provides real-time financial market data from Yahoo Finance.
Scrape websites with Oxylabs Web API, supporting dynamic rendering and parsing for structured data extraction.
A web crawling framework that integrates the Model Context Protocol (MCP) with the Colly web scraping library.
Hyperbrowser is the next-generation platform empowering AI agents and enabling effortless, scalable browser automation.
Automate Chrome via its debugging port with session persistence. Requires Chrome to be started with remote debugging enabled.
Access Outscraper's data extraction services for business intelligence, location data, reviews, and contact information from various online platforms.