A Model Context Protocol server for YouTube operations, extracting video information and transcripts with intelligent fallback logic. Features comprehensive logging, error handling, and support for both auto-generated and manual transcripts.
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: