DeepSRT
Resume YouTube videos using the DeepSRT API.
Documentación
Servidor MCP DeepSRT
Un servidor de Model Context Protocol (MCP) que proporciona funcionalidad de resumen de videos de YouTube y extracción de transcripciones mediante la integración con la API de DeepSRT y el acceso directo a los subtítulos de YouTube.
TL;DR
{
"mcpServers": {
"deepsrt": {
"type": "stdio",
"command": "bunx",
"args": [
"@deepsrt/deepsrt-mcp@latest",
"--server"
]
}
}
}
Arquitectura
graph TB
subgraph "MCP Client"
Client[Claude Desktop / Cline]
end
subgraph "DeepSRT MCP Server"
Server[MCP Server]
SummaryTool[get_summary]
TranscriptTool[get_transcript]
Server --> SummaryTool
Server --> TranscriptTool
end
subgraph "External APIs"
YouTube[YouTube InnerTube API]
DeepSRT[DeepSRT Worker API]
Captions[YouTube Caption API]
end
Client --> Server
SummaryTool --> YouTube
SummaryTool --> DeepSRT
TranscriptTool --> YouTube
TranscriptTool --> Captions
Flujo de Secuencia
sequenceDiagram
participant User
participant MCP as MCP Client
participant Server as DeepSRT MCP Server
participant YouTube as YouTube InnerTube API
participant DeepSRT as DeepSRT Worker API
participant Captions as YouTube Caption API
Note over User,Captions: Summary Generation Flow
User->>MCP: Request video summary
MCP->>Server: get_summary(videoId, lang, mode)
Server->>Server: Extract video ID from URL
Server->>YouTube: POST /youtubei/v1/player
Note right of YouTube: Get video metadata<br/>and caption tracks
YouTube-->>Server: Video details + caption tracks
Server->>Server: Select best caption track<br/>(manual > auto-generated)
Server->>Server: Extract transcript argument<br/>from caption URL
par Summary Request
Server->>DeepSRT: GET /transcript2?action=summarize
Note right of DeepSRT: X-Transcript-Arg header<br/>contains caption URL params
DeepSRT-->>Server: Generated summary
and Title Translation
Server->>DeepSRT: GET /transcript2?action=translate
DeepSRT-->>Server: Translated title
end
Server->>Server: Format markdown response<br/>with metadata + summary
Server-->>MCP: Formatted summary response
MCP-->>User: Display summary
Note over User,Captions: Transcript Extraction Flow
User->>MCP: Request video transcript
MCP->>Server: get_transcript(videoId, lang)
Server->>Server: Extract video ID from URL
Server->>YouTube: POST /youtubei/v1/player
YouTube-->>Server: Video details + caption tracks
Server->>Server: Select best caption track<br/>for preferred language
Server->>Captions: GET caption XML from baseUrl
Captions-->>Server: Raw XML transcript
Server->>Server: Parse XML transcript<br/>- Extract timestamps<br/>- Decode HTML entities<br/>- Format text
Server->>Server: Generate markdown response<br/>with timestamps
Server-->>MCP: Formatted transcript
MCP-->>User: Display transcript with timestamps
Arquitectura Técnica
Componentes Principales
1. Capa del Servidor MCP
- Soporte de Ejecución: Ejecución tanto en Node.js como en Bun
- Manejo de Protocolo: Gestión de solicitudes/respuestas del Model Context Protocol (MCP)
- Registro de Herramientas: herramientas
get_summaryyget_transcript - Manejo de Errores: Gestión integral de errores con mensajes amigables para el usuario
2. Canal de Procesamiento de Video
- Analizador de URL: Soporta múltiples formatos de URL de YouTube e IDs de video directos
- Integración con InnerTube: Acceso directo a la API de YouTube sin claves de API
- Detección de Subtítulos: Detección automática de pistas de subtítulos disponibles
- Selección de Calidad: Prioriza subtítulos manuales sobre los generados automáticamente
3. Procesamiento de Transcripciones
- Analizador XML: Maneja el formato
<timedtext>de YouTube - Decodificador de Entidades: Convierte entidades HTML a texto legible
- Formateador de Marca de Tiempo: Convierte milisegundos al formato
[MM:SS] - Filtro de Contenido: Elimina notación musical y segmentos vacíos
4. Generación de Resúmenes
- Integración con DeepSRT: Llamadas directas a la API de
worker.deepsrt.com - Soporte Multilingüe: Soporta zh-tw, en, ja y otros idiomas
- Selección de Modo: Formatos de resumen narrativo y de viñetas
- Traducción de Título: Traducción automática del título al idioma de destino
Características Clave
Sin necesidad de precaché
- Funciona inmediatamente para cualquier video de YouTube con subtítulos
- Extracción y procesamiento de transcripciones en tiempo real
- Sin dependencia de sistemas de caché externos
Selección Inteligente de Subtítulos
- Orden de Prioridad: Manual > Generado automáticamente > Cualquier disponible
- Preferencia de Idioma: Respeta el idioma preferido del usuario
- Estrategia de Respaldo: Degradación elegante a opciones disponibles
Manejo Robusto de Errores
- Gestión de tiempo de espera de red (tiempo de espera de 30 segundos)
- Traducción de errores de API a mensajes amigables
- Manejo elegante de videos sin subtítulos
- Validación integral de parámetros de entrada
Salida Multiformato
- Formato Markdown: Texto enriquecido con encabezados y metadatos
- Datos Estructurados: Información del video, duración, detalles del autor
- Transcripciones con Marca de Tiempo: Información precisa de tiempo
- Resúmenes Localizados: Contenido en el idioma preferido del usuario
Características de Rendimiento
- Inicio Rápido: Inicialización del servidor en menos de 1 segundo
- Procesamiento Eficiente: Llamadas API paralelas para resumen + traducción de título
- Eficiente en Memoria: Análisis XML en streaming, sin almacenamiento en búfer de grandes datos
- Optimizado para Red: Una sola solicitud por video para metadatos + subtítulos
Actualizaciones Recientes
v0.1.9 (Última)
- ✅ Corregidos fallos críticos en la lógica de pruebas: Las pruebas ahora validan correctamente las respuestas de la API en lugar de verificar propiedades inexistentes
success - ✅ Mejorado el manejo de errores: Mejor manejo elegante de la limitación de velocidad de la API de YouTube (HTTP 429)
- ✅ Suite de pruebas robusta: Las 56 pruebas ahora pasan de manera consistente con una resiliencia adecuada a errores
- ✅ Integración API verificada: Confirmado que las APIs de DeepSRT y YouTube funcionan correctamente cuando no hay limitación de velocidad
- ✅ Soporte multilingüe: Validada la generación de resúmenes en zh-tw, en, ja
- ✅ Listo para producción: La suite de pruebas maneja las limitaciones reales de la API de manera profesional
v0.1.3
- ✅ Corregido el análisis de argumentos de CLI: Ahora soporta formatos
--key=valuey--key value - ✅ Corregido el modo viñetas:
--mode bulletahora funciona correctamente y genera resúmenes con viñetas - ✅ Mejorada la compatibilidad con bunx: La ejecución directa con
bunx @deepsrt/deepsrt-mcpfunciona sin instalación
v0.1.2
- ✅ Corregida la ejecución de CLI: Se hizo que CLI sea el binario predeterminado para la ejecución directa con npx/bunx
- ✅ Configuración de paquete actualizada: Resolución binaria adecuada para diferentes métodos de ejecución
v0.1.1
- ✅ Pruebas integrales añadidas: Pruebas unitarias, de integración y de extremo a extremo
- ✅ Herramienta CLI mejorada: Interfaz de línea de comandos completa con ayuda y ejemplos
- ✅ Extracción directa de transcripciones: Sin necesidad de precaché, funciona con cualquier video de YouTube
Características
- Generar resúmenes para videos de YouTube
- Extraer transcripciones completas con marcas de tiempo de videos de YouTube
- Soporte para modos de resumen narrativo y de viñetas
- Soporte multilingüe (predeterminado: zh-tw)
- Acceso directo a subtítulos de YouTube (sin necesidad de clave de API)
- Integración perfecta con entornos habilitados para MCP
Cómo Funciona
Generación de Resúmenes
-
Integración Directa con YouTube
- Extrae información del video y subtítulos directamente de YouTube usando la API de InnerTube
- Obtiene el contenido de la transcripción del sistema de subtítulos de YouTube
- Envía los datos de la transcripción a la API de DeepSRT para el resumen
-
Procesamiento en Tiempo Real
- Sin necesidad de precaché: funciona inmediatamente para cualquier video con subtítulos
- Selecciona automáticamente los mejores subtítulos disponibles (manuales preferidos sobre los generados automáticamente)
- Soporta múltiples idiomas y modos de resumen
Extracción de Transcripciones
-
Acceso Directo a YouTube
- Las transcripciones se extraen directamente del sistema de subtítulos de YouTube usando la API de InnerTube
- Sin necesidad de precaché: funciona inmediatamente para cualquier video con subtítulos
-
Selección de Subtítulos
- Selecciona automáticamente los mejores subtítulos disponibles (subtítulos manuales preferidos sobre los generados automáticamente)
- Soporta selección de preferencia de idioma
- Recurre elegantemente a alternativas disponibles
-
Formato de Marcas de Tiempo
- Proporciona transcripciones limpias y formateadas con marcas de tiempo en formato [MM:SS]
- Maneja subtítulos manuales y generados automáticamente
- Incluye metadatos del video e información de subtítulos
%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#2496ED', 'secondaryColor': '#38B2AC', 'tertiaryColor': '#1F2937', 'mainBkg': '#111827', 'textColor': '#E5E7EB', 'lineColor': '#4B5563', 'noteTextColor': '#E5E7EB'}}}%%
sequenceDiagram
participant User
participant MCP as MCP Client
participant YouTube as YouTube API
participant DeepSRT as DeepSRT API
Note over User,DeepSRT: Summary Generation Flow (Direct Processing)
User->>MCP: Request video summary
MCP->>YouTube: Get video info & captions via InnerTube API
YouTube-->>MCP: Return video details & caption tracks
MCP->>YouTube: Fetch transcript XML from caption URL
YouTube-->>MCP: Return raw transcript content
MCP->>DeepSRT: Send transcript + metadata for summarization
DeepSRT-->>MCP: Return generated summary
MCP-->>User: Return formatted summary
Note over User,DeepSRT: Transcript Extraction Flow (Direct)
User->>MCP: Request video transcript
MCP->>YouTube: Get video info & captions via InnerTube API
YouTube-->>MCP: Return video details & caption tracks
MCP->>YouTube: Fetch transcript XML from caption URL
YouTube-->>MCP: Return raw transcript content
MCP->>MCP: Parse & format transcript with timestamps
MCP-->>User: Return formatted transcript with metadata
Uso de CLI
El servidor MCP DeepSRT proporciona una interfaz unificada que maneja tanto el modo de servidor MCP como los comandos CLI.
Interfaz Unificada
# MCP Server Mode (default - for Claude Desktop/Cline)
bunx @deepsrt/deepsrt-mcp # Starts MCP server on stdio
bunx @deepsrt/deepsrt-mcp --server # Explicit server mode
# CLI Commands (direct usage)
bunx @deepsrt/deepsrt-mcp get-transcript <video-url> [options]
bunx @deepsrt/deepsrt-mcp get-summary <video-url> [options]
# Help
bunx @deepsrt/deepsrt-mcp --help
Comandos CLI Directos (Sin Instalación Requerida)
# Extract transcript with timestamps
bunx @deepsrt/deepsrt-mcp get-transcript https://www.youtube.com/watch?v=dQw4w9WgXcQ
bunx @deepsrt/deepsrt-mcp get-transcript dQw4w9WgXcQ --lang=en
# Generate video summary
bunx @deepsrt/deepsrt-mcp get-summary dQw4w9WgXcQ --lang=zh-tw --mode=bullet
bunx @deepsrt/deepsrt-mcp get-summary https://youtu.be/dQw4w9WgXcQ --lang=ja
Instalación Global
Para un acceso más fácil, instale globalmente:
# Install globally
npm install -g @deepsrt/deepsrt-mcp
# MCP Server Mode
deepsrt-mcp # Starts MCP server
deepsrt-mcp --server # Explicit server mode
# CLI Commands
deepsrt-mcp get-transcript https://youtu.be/dQw4w9WgXcQ --lang=en
deepsrt-mcp get-summary dQw4w9WgXcQ --lang=zh-tw --mode=narrative
Opciones de CLI
get-transcript
bunx @deepsrt/deepsrt-mcp get-transcript <video-url> [options]
Options:
--lang=<language> Preferred language code for captions (default: en)
--lang <language> Alternative format
Examples: en, zh-tw, ja, es, fr
Examples:
bunx @deepsrt/deepsrt-mcp get-transcript https://www.youtube.com/watch?v=dQw4w9WgXcQ
bunx @deepsrt/deepsrt-mcp get-transcript dQw4w9WgXcQ --lang=zh-tw
bunx @deepsrt/deepsrt-mcp get-transcript https://youtu.be/dQw4w9WgXcQ --lang ja
get-summary
bunx @deepsrt/deepsrt-mcp get-summary <video-url> [options]
Options:
--lang=<language> Target language for summary (default: zh-tw)
--lang <language> Alternative format
Examples: zh-tw, en, ja, es, fr
--mode=<mode> Summary format (default: narrative)
--mode <mode> Alternative format
Options: narrative, bullet
Examples:
bunx @deepsrt/deepsrt-mcp get-summary https://www.youtube.com/watch?v=dQw4w9WgXcQ
bunx @deepsrt/deepsrt-mcp get-summary dQw4w9WgXcQ --lang=en --mode=bullet
bunx @deepsrt/deepsrt-mcp get-summary https://youtu.be/dQw4w9WgXcQ --lang ja --mode narrative
Formatos de URL Soportados
El CLI acepta múltiples formatos de URL de YouTube:
# Full YouTube URLs
https://www.youtube.com/watch?v=dQw4w9WgXcQ
https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=30s
# Short URLs
https://youtu.be/dQw4w9WgXcQ
# Embed URLs
https://www.youtube.com/embed/dQw4w9WgXcQ
# Direct video IDs
dQw4w9WgXcQ
Características de CLI
- Ejecución directa: Sin instalación requerida con
bunx - Múltiples formatos de URL: URLs completas, URLs cortas o IDs de video directos
- Formatos de argumento flexibles: Se soportan formatos
--key=valuey--key value - Soporte de idioma: Especifique el idioma de destino para resúmenes y preferencias de transcripción
- Modos de resumen: Elija entre formatos narrativos o de viñetas
- Salida enriquecida: Salida de consola con colores e indicadores de progreso
- Manejo de errores: Mensajes de error claros con sugerencias
Ejemplo de Salida
Salida de Transcripción
# Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)
**Author:** Rick Astley
**Duration:** 3:33
**Captions:** English (manual)
## Transcript
[00:18] ♪ We're no strangers to love ♪
[00:22] ♪ You know the rules and so do I ♪
[00:27] ♪ A full commitment's what I'm thinking of ♪
...
Salida de Resumen (Modo Narrativo)
# 瑞克·艾斯利 - 永遠不會放棄你
**Author:** Rick Astley
**Duration:** 3:33
**Language:** zh-tw
**Mode:** narrative
## Summary
這是一首經典的流行歌曲,表達了對愛情的承諾和忠誠...
Salida de Resumen (Modo Viñetas)
# How Robots Are Helping Amazon Deliver on Prime Day
**Author:** Bloomberg Television
**Duration:** 5:45
**Language:** zh-tw
**Mode:** bullet
## Summary
本影片主要探討亞馬遜如何運用機器人技術來提升倉儲效率...
# 機器人技術在亞馬遜倉儲的應用與效益
- 亞馬遜已部署了第一百萬個機器人,並在Prime Day等高峰期用於滿足訂單需求 [00:00:00]
- 機器人旨在為員工提供安全且高生產力的工作環境 [00:00:30]
- 移動機器人可以搬運超過一千磅的貨物,並移動貨架以減少員工的行走距離 [00:00:54]
...
Instalación
Opción 1: Uso Directo con bunx (Recomendado - Sin Instalación Requerida)
Use la interfaz unificada directamente sin ninguna instalación:
# MCP Server Mode (for Claude Desktop/Cline)
bunx @deepsrt/deepsrt-mcp # Default: starts MCP server
bunx @deepsrt/deepsrt-mcp --server # Explicit server mode
# CLI Commands (direct usage)
bunx @deepsrt/deepsrt-mcp get-transcript https://www.youtube.com/watch?v=dQw4w9WgXcQ
bunx @deepsrt/deepsrt-mcp get-summary dQw4w9WgXcQ --lang=zh-tw --mode=bullet
# Always uses latest version automatically
bunx @deepsrt/deepsrt-mcp@latest get-transcript dQw4w9WgXcQ --lang=en
Opción 2: Instalación Global (Para Uso Frecuente)
# Install globally for easier access
npm install -g @deepsrt/deepsrt-mcp
# Then use directly with shorter command
deepsrt-mcp get-transcript https://www.youtube.com/watch?v=dQw4w9WgXcQ
deepsrt-mcp get-summary dQw4w9WgXcQ --lang zh-tw --mode bullet
Opción 3: Instalación para Claude Desktop (Recomendado)
Agregue esta configuración a su archivo de configuración de Claude Desktop:
- En macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - En Windows:
%APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"deepsrt": {
"type": "stdio",
"command": "bunx",
"args": [
"@deepsrt/deepsrt-mcp@latest",
"--server"
]
}
}
}
Este enfoque:
- ✅ Sin instalación local requerida
- ✅ Siempre usa la última versión
- ✅ Actualizaciones automáticas al reiniciar Claude
- ✅ Compatibilidad multiplataforma
- ✅ Configuración simple y limpia
Opción 4: Instalación para Cline
Agregue esta configuración a su cline_mcp_settings.json:
{
"mcpServers": {
"deepsrt": {
"type": "stdio",
"command": "bunx",
"args": [
"@deepsrt/deepsrt-mcp@latest",
"--server"
]
}
}
}
O simplemente pídale a Cline que instale en el chat:
"Oye, instala este servidor MCP para mí desde https://github.com/DeepSRT/deepsrt-mcp"
Opción 5: Usando bunx (Ejecución Directa)
Puede ejecutar el servidor directamente con bunx sin instalación:
# Run from the project directory
bunx --bun src/index.ts
# Or use npm scripts
npm run start:bun # Uses Bun
npm run start:node # Uses Node.js
npm run dev # Development mode with Bun
Uso
Integración MCP
El servidor proporciona las siguientes herramientas para clientes MCP:
get_summary
Obtiene un resumen para un video de YouTube.
Parámetros:
videoId(obligatorio): ID del video de YouTubelang(opcional): Código de idioma (por ejemplo, zh-tw) - predeterminado a zh-twmode(opcional): Modo de resumen ("narrative" o "bullet") - predeterminado a narrative
get_transcript
Obtiene una transcripción para un video de YouTube con marcas de tiempo.
Parámetros:
videoId(obligatorio): ID del video de YouTube o URL completa de YouTubelang(opcional): Código de idioma preferido para subtítulos (por ejemplo, en, zh-tw) - predeterminado a en
Ejemplo de Uso
Usando Claude Desktop:
// Get video summary
const summaryResult = await mcp.use_tool("deepsrt", "get_summary", {
videoId: "dQw4w9WgXcQ",
lang: "zh-tw",
mode: "narrative"
});
// Get video transcript
const transcriptResult = await mcp.use_tool("deepsrt", "get_transcript", {
videoId: "dQw4w9WgXcQ",
lang: "en"
});
Usando Cline:
// Get video summary
const summaryResult = await mcp.use_tool("deepsrt", "get_summary", {
videoId: "dQw4w9WgXcQ",
lang: "zh-tw",
mode: "bullet"
});
// Get video transcript
const transcriptResult = await mcp.use_tool("deepsrt", "get_transcript", {
videoId: "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
lang: "en"
});
Desarrollo
Instale las dependencias:
npm install
Ejecución de Pruebas
# Run unit tests (fast, no network calls)
npm test
# Run unit tests only
npm run test:unit
# Run network tests (requires internet, may be slower)
npm run test:network
# Run all tests including network tests
npm run test:all
# Run tests in watch mode
npm run test:watch
# Run tests with CI reporter (for CI/CD)
npm run test:ci
Tipos de Pruebas:
- Pruebas Unitarias (
src/index.test.ts,src/integration.test.ts) - Pruebas rápidas con datos simulados - Pruebas de Red (
src/transcript.test.ts,src/e2e.test.ts) - Pruebas de integración reales con la API de YouTube
Ejemplos
Consulte el directorio examples/ para implementaciones de referencia:
examples/standalone-summarizer.ts- Script independiente que muestra patrones de uso directo de la API
Ejecución del Servidor
Con Bun (Recomendado para desarrollo - inicio más rápido):
# Development mode (runs TypeScript directly)
npm run dev
# or
bun src/index.ts
# Using npm script
npm run start:bun
Con Node.js (Producción):
# Build first
npm run build
# Then run
npm run start:node
# or
node build/index.js
Pruebas del Servidor
Puede probar el servidor usando el inspector MCP:
npm run inspector
O probar manualmente con JSON-RPC:
# List available tools
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | bun src/index.ts
# Test get_transcript
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "get_transcript", "arguments": {"videoId": "dQw4w9WgXcQ", "lang": "en"}}}' | bun src/index.ts
Compilación para Producción
Compile para producción:
npm run build
Modo de observación para desarrollo:
npm run watch
Demo
Preguntas Frecuentes
P: Estoy obteniendo el error 404, ¿por qué?
R: Esto se debe a que el resumen del video no está almacenado en caché en la ubicación perimetral de la CDN; debe abrir este video usando la extensión de Chrome de DeepSRT para que se almacene en caché en la red CDN antes de poder obtener ese resumen usando MCP.
Puede verificar el estado de la caché usando cURL de la siguiente manera
curl -s 'https://worker.deepsrt.com/transcript' \
-i --data '{"arg":"v=VafNvIcOs5w","action":"summarize","lang":"zh-tw","mode":"narrative"}' | grep -i "^cache-status"
cache-status: HIT
Si ve cache-status: HIT, el contenido está almacenado en caché en la ubicación perimetral de la CDN y su servidor MCP no debería obtener 404.