YouTube MCP Server
Un servidor MCP para interactuar con contenido de YouTube, que permite a los modelos de IA acceder y gestionar datos de YouTube a través de su API.
Documentación
YouTube MCP Server
Servidor del Protocolo de Contexto de Modelo (MCP) que permite a los modelos de IA interactuar con el contenido de YouTube a través de una interfaz estandarizada. Este servidor proporciona un conjunto de herramientas para búsqueda de videos, análisis de contenido, procesamiento de comentarios y más.
🌟 Características
-
🔍 Búsqueda y Descubrimiento de Videos
- Buscar videos de YouTube
- Obtener videos en tendencia
- Encontrar contenido relacionado
- Información de canales
-
📊 Análisis de Contenido
- Información detallada de videos
- Estadísticas de canales
- Transcripciones de videos
- Resúmenes completos
-
💬 Funciones Sociales
- Recuperación de comentarios
- Análisis de comentarios
- Datos de interacción de usuarios
🚀 Inicio Rápido
Requisitos Previos
1. Instalación de Python
macOS:
# Using Homebrew (recommended)
brew install python@3.11
# Verify installation
python3 --version # Should show Python 3.11.x
Linux (Ubuntu/Debian):
# Update package list
sudo apt update
# Install Python
sudo apt install python3.11 python3.11-venv
# Verify installation
python3 --version # Should show Python 3.11.x
Windows:
- Descarga el instalador de Python desde python.org
- Ejecuta el instalador
- Marca "Agregar Python al PATH" durante la instalación
- Abre el Símbolo del sistema y verifica:
python --version # Should show Python 3.11.x
2. Instalación de uv
macOS/Linux:
# Install uv using the official installer
curl -LsSf https://astral.sh/uv/install.sh | sh
# Verify installation
uv --version
Windows (PowerShell):
# Install uv using the official installer
(Invoke-WebRequest -Uri "https://astral.sh/uv/install.ps1" -UseBasicParsing).Content | pwsh -Command -
# Verify installation
uv --version
Métodos de Instalación Alternativos:
Usando pip (si lo prefieres):
# Install uv using pip
pip install uv
# Verify installation
uv --version
3. Configuración de Credenciales de Google Cloud
-
Crea un Proyecto en Google Cloud:
# Go to Google Cloud Console https://console.cloud.google.com # Click on "Select a Project" at the top # Click "New Project" # Name it (e.g., "youtube-mcp-server") # Click "Create" -
Habilita la API de Datos de YouTube:
# In the Google Cloud Console: # 1. Go to "APIs & Services" > "Library" # 2. Search for "YouTube Data API v3" # 3. Click "Enable" -
Crea Credenciales OAuth 2.0:
# In the Google Cloud Console: # 1. Go to "APIs & Services" > "Credentials" # 2. Click "Create Credentials" > "OAuth client ID" # 3. Select "Desktop app" as application type # 4. Name it (e.g., "YouTube MCP Client") # 5. Click "Create" -
Descarga y Almacena las Credenciales:
# 1. After creating credentials, click "Download JSON" # 2. Rename the downloaded file to 'credentials.json' # 3. Move it to your project root: mv ~/Downloads/client_secret_*.json ./credentials.json # Verify the file exists and has correct permissions ls -l credentials.json # Should show -rw------- (readable only by you) -
Autenticación por Primera Vez:
# Run the server once to authenticate python mcp_videos.py # This will: # 1. Open your browser # 2. Ask you to sign in to Google # 3. Grant permissions to the application # 4. Create a token.pickle file (automatically ignored by git)
⚠️ Notas de Seguridad Importantes:
- Nunca hagas commit de
credentials.jsonotoken.pickleen git - Mantén tus credenciales seguras y no las compartas
- Si las credenciales se ven comprometidas:
- Ve a la Consola de Google Cloud
- Elimina las credenciales comprometidas
- Crea nuevas credenciales
- Actualiza tu
credentials.jsonlocal
Instalación
- Clona el repositorio:
git clone https://github.com/yourusername/youtube-mcp-server.git
cd youtube-mcp-server
- Crea y activa un entorno virtual:
# Create virtual environment
python -m venv .venv
# Activate virtual environment
# On macOS/Linux:
source .venv/bin/activate
# On Windows (Command Prompt):
.venv\Scripts\activate
# On Windows (PowerShell):
.venv\Scripts\Activate.ps1
- Instala las dependencias usando uv:
# Install project in editable mode
uv pip install -e .
# If you encounter any SSL errors on macOS, you might need to:
export SSL_CERT_FILE=/etc/ssl/cert.pem
- Configura las credenciales de la API de YouTube:
- Ve a Consola de Google Cloud
- Crea un nuevo proyecto
- Habilita la API de Datos de YouTube v3
- Crea credenciales (ID de Cliente OAuth 2.0)
- Descarga las credenciales y guárdalas como
client_secrets.json
Configuración de Desarrollo
Para desarrollo, es posible que quieras instalar herramientas adicionales:
# Install development dependencies
uv pip install -e ".[dev]"
# Install pre-commit hooks
pre-commit install
Configuración
- Crea un archivo
.enven la raíz del proyecto:
# Required environment variables
YOUTUBE_API_KEY=your_api_key_here
# Optional configuration
YOUTUBE_API_QUOTA_LIMIT=10000 # Daily quota limit
YOUTUBE_API_REGION=US # Default region
- Verifica tu configuración:
# Check if credentials are properly set up
ls -l credentials.json # Should exist and be readable
ls -l .env # Should exist and be readable
ls -l token.pickle # Should exist after first authentication
# Test the server
python mcp_videos.py
🛠️ Uso
Iniciar el Servidor
python mcp_videos.py
Herramientas Disponibles
- Buscar Videos
@mcp.tool()
async def get_videos(search: str, max_results: int)
- Obtener Información del Video
@mcp.tool()
async def get_video_info(video_id: str)
- Obtener Detalles del Canal
@mcp.tool()
async def get_channel_details(channel_id: str)
- Obtener Comentarios del Video
@mcp.tool()
async def get_video_comments_tool(video_id: str, max_results: int = 100)
- Obtener Videos en Tendencia
@mcp.tool()
async def get_trending_videos_tool(region_code: str = "US", max_results: int = 50)
- Obtener Videos Relacionados
@mcp.tool()
async def get_related_videos_tool(video_id: str, max_results: int = 25)
- Resumir Video
@mcp.tool()
async def summarize_video(video_id: str, include_comments: bool = True)
- Generar Tarjetas de Estudio del Video
@mcp.tool()
async def generate_video_flashcards(
video_id: str,
max_cards: int = 10,
categories: Optional[List[str]] = None,
difficulty: Optional[str] = None
)
Esta herramienta genera tarjetas de estudio educativas a partir del contenido del video:
- Crea diferentes tipos de tarjetas (Completar el espacio en blanco, Pregunta y respuesta, Definición)
- Incluye marcas de tiempo para referencia del video
- Clasifica las tarjetas por tipo y dificultad
- Proporciona estadísticas de las tarjetas
Ejemplo de uso:
# Generate 15 flash cards from a video
cards = generate_video_flashcards(
video_id="dQw4w9WgXcQ",
max_cards=15,
categories=["Q&A", "Definition"],
difficulty="Medium"
)
# Generate all types of cards
cards = generate_video_flashcards(
video_id="dQw4w9WgXcQ",
max_cards=20
)
Tipos de Tarjetas:
- Completar el espacio en blanco: Evalúa el recuerdo de términos o conceptos específicos
- Pregunta y respuesta: Preguntas sobre puntos clave del video
- Definición: Explica conceptos importantes
Niveles de Dificultad:
- Fácil: Recuerdo básico y comprensión
- Medio: Aplicación de conceptos
- Difícil: Conceptos complejos y relaciones
- Generar Cuestionario del Video
@mcp.tool()
async def generate_video_quiz(video_id: str) -> str
Esta herramienta genera un cuestionario completo a partir del contenido del video:
- Crea preguntas de opción múltiple
- Genera afirmaciones de verdadero/falso
- Incluye preguntas de completar el espacio en blanco
- Utiliza metadatos del video, transcripción y descripción
- Proporciona respuestas y explicaciones
Ejemplo de uso:
# Generate a quiz from a video
quiz = generate_video_quiz("dQw4w9WgXcQ")
Características del Cuestionario:
-
Preguntas de Opción Múltiple
- Basadas en el contenido del video
- Incluyen metadatos del video
- Evalúan la comprensión de conceptos clave
-
Preguntas de Verdadero/Falso
- Evalúan el conocimiento factual
- Basadas en estadísticas del video
- Verifican la comprensión de afirmaciones
-
Completar el Espacio en Blanco
- Evalúa el recuerdo de términos específicos
- Utiliza el contenido de la transcripción
- Se centra en conceptos clave
Formato del Cuestionario:
=== Video Quiz ===
Title: [Video Title]
Channel: [Channel Name]
URL: [Video URL]
Question 1 (Multiple Choice):
[Question text]
1. [Option 1]
2. [Option 2]
3. [Option 3]
4. [Option 4]
Answer: [Correct answer]
------------------
Question 2 (True/False):
[Statement]
Answer: True/False
------------------
Question 3 (Fill in the blank):
[Question with blank]
Answer: [Correct answer]
------------------
La herramienta de cuestionario:
- Genera exactamente 10 preguntas
- Mezcla diferentes tipos de preguntas
- Incluye contexto del video
- Proporciona retroalimentación inmediata
- Utiliza metadatos del video para las preguntas
- Incorpora contenido de la transcripción
- Evalúa diferentes niveles de comprensión
📊 Arquitectura
El proyecto sigue una arquitectura modular:
graph TD
A[LLM Client] --> B[MCP Client]
B --> C[MCP Server]
C --> D[YouTube API]
C --> E[Tool Registry]
C --> F[Data Formatter]
subgraph "Tools"
E --> E1[Video Tools]
E --> E2[Channel Tools]
E --> E3[Comment Tools]
E --> E4[Analysis Tools]
end
🔧 Desarrollo
Estructura del Proyecto
youtube-mcp-server/
├── mcp_videos.py # Main server implementation
├── youtube_api.py # YouTube API client
├── yt_helper.py # Helper functions
├── requirements.txt # Project dependencies
├── .env # Environment variables
├── .gitignore # Git ignore rules
└── README.md # This file
Agregar Nuevas Herramientas
- Crea una nueva función asíncrona en
mcp_videos.py - Decórala con
@mcp.tool() - Implementa la lógica de la herramienta
- Agrega el manejo de errores apropiado
- Actualiza la documentación
📝 Documentación de la API
Formatos de Respuesta
- Formato de Video
{
"title": str,
"channel_title": str,
"duration": str,
"description": str,
"view_count": int,
"like_count": int,
"comment_count": int,
"url": str,
"published_at": str
}
- Formato de Canal
{
"title": str,
"subscriber_count": int,
"video_count": int,
"view_count": int,
"description": str,
"published_at": str
}
- Formato de Comentario
{
"author": str,
"text": str,
"like_count": int,
"published_at": str
}
🤝 Contribuciones
- Haz un fork del repositorio
- Crea una rama de características
- Haz commit de tus cambios
- Haz push a la rama
- Crea una Solicitud de Extracción (Pull Request)
📄 Licencia
Este proyecto está licenciado bajo la Licencia MIT: consulta el archivo LICENSE para más detalles.
🙏 Agradecimientos
- FastMCP por el framework MCP
- API de Datos de YouTube por la API
- Todos los contribuyentes y usuarios de este proyecto
📞 Soporte
Para soporte, por favor:
- Consulta la documentación
- Abre un issue
- Contacta a los mantenedores
🔄 Actualizaciones
Mantente al día con el proyecto:
- Observa el repositorio
- Consulta los lanzamientos
- Sigue el registro de cambios
🔒 Seguridad
Manejo de Datos Sensibles
⚠️ IMPORTANTE: Nunca hagas commit de archivos sensibles al repositorio:
token.pickleclient_secrets.json- Archivos
.env - Cualquier otro archivo de credenciales
Estos archivos se ignoran automáticamente mediante .gitignore, pero si accidentalmente haces commit de ellos:
- Elimínalos del seguimiento de git:
git rm --cached token.pickle
git rm --cached client_secrets.json
- Revoca y regenera cualquier credencial expuesta
- Actualiza tu archivo
.envlocal con las nuevas credenciales - Nunca compartas ni expongas estos archivos públicamente
Mejores Prácticas
- Usa siempre variables de entorno para datos sensibles
- Mantén las credenciales en el archivo
.env(ya está en.gitignore) - Rota regularmente las claves de API y los tokens
- Usa OAuth 2.0 para la autenticación
- Supervisa las alertas de escaneo de secretos de GitHub
🖥️ Configuración de Claude Desktop
1. Instalar Claude Desktop
-
Descargar Claude Desktop:
- Visita Claude Desktop
- Descarga la versión apropiada para tu sistema operativo:
- macOS: archivo
.dmg - Windows: instalador
.exe - Linux: paquete
.AppImageo.deb
- macOS: archivo
-
Instalar la Aplicación:
# macOS # 1. Open the .dmg file # 2. Drag Claude to Applications folder # 3. Open from Applications # Windows # 1. Run the .exe installer # 2. Follow the installation wizard # 3. Launch from Start Menu # Linux (Ubuntu/Debian) sudo dpkg -i claude-desktop_*.deb # For .deb package # OR chmod +x Claude-*.AppImage # For AppImage ./Claude-*.AppImage
2. Configurar el Cliente MCP
-
Abrir la Configuración de Claude Desktop:
- Haz clic en el ícono de engranaje (⚙️) o
- Usa el atajo de teclado:
- macOS:
Cmd + , - Windows/Linux:
Ctrl + ,
- macOS:
-
Agregar la Configuración MCP:
- Navega a "Configuración MCP" o "Configuración Avanzada"
- Agrega la siguiente configuración:
{ "mcpServers": { "youtube_videos": { "command": "uv", "args": [ "--directory", "<your base directory>/youtube-mcp-server", "run", "mcp_videos.py" ] } } } -
Reemplazar la Ruta:
-
Reemplaza
<your base directory>con la ruta real de tu proyecto -
Ejemplo para diferentes sistemas operativos:
// macOS/Linux "/Users/username/Documents/youtube-mcp-server" // Windows "C:\\Users\\username\\Documents\\youtube-mcp-server"
-
-
Verificar la Configuración:
# Test the MCP server path cd "<your base directory>/youtube-mcp-server" uv run mcp_videos.py
3. Usar Claude con MCP
-
Inicia Claude Desktop
-
Conéctate al Servidor MCP:
- El servidor debería iniciarse automáticamente
- Verás un indicador de estado de conexión
- Las herramientas disponibles se listarán en la interfaz
-
Prueba la Conexión:
# Try a simple command get_videos("python programming", max_results=5)
Solución de Problemas de Conexión MCP
-
El Servidor No Inicia:
# Check if the path is correct pwd # Should show your project directory # Verify Python environment which python # Should point to your virtual environment # Check uv installation uv --version -
Problemas de Conexión:
- Verifica que el servidor esté en ejecución
- Comprueba la ruta de configuración
- Asegúrate de que todas las dependencias estén instaladas
- Revisa los registros en Claude Desktop
-
Errores Comunes:
# Path not found # Solution: Use absolute path in configuration # Permission denied # Solution: Check file permissions chmod +x mcp_videos.py # Module not found # Solution: Verify virtual environment source .venv/bin/activate # or appropriate activation command