by sinjab
mcp_youtube_extract is a Model Context Protocol (MCP) server designed for extracting YouTube video information and transcripts, featuring robust error handling and comprehensive logging.
mcp_youtube_extract is an MCP (Model Context Protocol) server that facilitates the extraction of information from YouTube videos. It acts as a backend service that can be integrated with various clients to retrieve video metadata and transcripts, including both manually created and auto-generated ones. The project emphasizes comprehensive logging, robust error handling, and intelligent fallback logic for transcript retrieval.
The easiest way to install is via PyPI:
pip install mcp-youtube-extract
Alternatively, you can use pipx
for command-line tools:
pipx install mcp-youtube-extract
For development, you can install from source using uv
:
git clone https://github.com/sinjab/mcp_youtube_extract.git
cd mcp_youtube_extract
uv sync --dev
You need a YouTube Data API key. Create a .env
file in the project root for development, or set the YOUTUBE_API_KEY
environment variable for production.
After installation and configuration, run the server:
mcp_youtube_extract
The server provides one main tool: get_yt_video_info
. This tool takes a YouTube video ID and returns video metadata and transcripts.
To use with a client, configure your client's mcpServers
settings. For PyPI installation:
{
"mcpServers": {
"mcp_youtube_extract": {
"command": "mcp_youtube_extract",
"env": {
"YOUTUBE_API_KEY": "your_youtube_api_key"
}
}
}
}
Q: Do I need a YouTube API key? A: Yes, a YouTube Data API key is required to use this MCP server. Instructions for obtaining one are provided in the documentation.
Q: Is there a free tier for the YouTube Data API? A: Yes, the YouTube Data API has a free tier of 10,000 units per day, which is generally sufficient for most use cases.
Q: How can I restrict my API key for security? A: It is highly recommended to restrict your API key to only the YouTube Data API v3 in the Google Cloud Console.
Q: How do I run tests for mcp_youtube_extract?
A: You can run tests using uv run pytest
. There are unit tests, integration tests, and a standalone inspection script.
Q: What kind of transcripts can be extracted? A: The tool supports extracting both manually created and auto-generated transcripts with intelligent fallback logic.
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:
Reviews feature coming soon
Stay tuned for community discussions and feedback