by sinjab

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.
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
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)While not required, you can optionally set up a YouTube Data API key for enhanced functionality. 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:
*Configuration content*
With optional API key:
*Configuration content*
*Configuration content*
With optional API key:
*Configuration content*
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
The project uses a comprehensive testing approach:
test_youtube_unit.py
): Test core YouTube functionality with mocked yt-info-extracttest_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:
No version information available