Skip to main content
Glama
HasData

YouTube MCP Server

by HasData

Servidor MCP de YouTube

Un servidor de Model Context Protocol (MCP) alojado que ofrece a Claude, Cursor, Windsurf y cualquier otro cliente MCP cuatro herramientas de solo lectura para YouTube. Busca en YouTube, lee datos de vídeos y canales, y extrae transcripciones, sin proyecto de Google Cloud ni clave de YouTube Data API.

https://mcp.hasdata.com/api/mcp?apis=youtube

tool contract MCP Tools License

Contenido

Related MCP server: YouTube MCP Server

Qué necesitas

Un cliente MCP que hable HTTP transmisible con cabeceras personalizadas. Una clave de API de HasData desde el panel de control, gratuita de crear. Nada más. Este es un servidor remoto. No hay paquete que instalar, ni contenedor que ejecutar, ni cuenta de Google en ningún punto del flujo.

Inicio rápido

La URL del servidor es la misma para todos los clientes. Probada con las configuraciones siguientes usando Claude Code, Claude Desktop, Cursor, Windsurf y Cline.

Campo

Valor

URL

https://mcp.hasdata.com/api/mcp?apis=youtube

Transporte

HTTP, transmisible

Cabecera de autenticación

x-api-key: tu_clave_aquí

Los clientes con soporte OAuth pueden añadir la misma URL como conector e iniciar sesión sin poner una clave en un archivo de configuración.

claude mcp add --transport http youtube "https://mcp.hasdata.com/api/mcp?apis=youtube" \
  --header "x-api-key: your_key_here"

Ajustes, luego Conectores, luego Añadir conector personalizado, y pega https://mcp.hasdata.com/api/mcp?apis=youtube e inicia sesión.

Para la ruta de archivo de configuración, añade esto a claude_desktop_config.json:

{
  "mcpServers": {
    "youtube": {
      "type": "http",
      "url": "https://mcp.hasdata.com/api/mcp?apis=youtube",
      "headers": { "x-api-key": "your_key_here" }
    }
  }
}

~/.cursor/mcp.json para cada proyecto, o .cursor/mcp.json para uno solo:

{
  "mcpServers": {
    "youtube": {
      "url": "https://mcp.hasdata.com/api/mcp?apis=youtube",
      "headers": { "x-api-key": "your_key_here" }
    }
  }
}

~/.codeium/windsurf/mcp_config.json. Windsurf llama al campo serverUrl, no url:

{
  "mcpServers": {
    "youtube": {
      "serverUrl": "https://mcp.hasdata.com/api/mcp?apis=youtube",
      "headers": { "x-api-key": "your_key_here" }
    }
  }
}
{
  "mcpServers": {
    "youtube": {
      "url": "https://mcp.hasdata.com/api/mcp?apis=youtube",
      "type": "streamableHttp",
      "headers": { "x-api-key": "your_key_here" },
      "disabled": false
    }
  }
}

.vscode/mcp.json en el espacio de trabajo:

{
  "servers": {
    "youtube": {
      "type": "http",
      "url": "https://mcp.hasdata.com/api/mcp?apis=youtube",
      "headers": { "x-api-key": "your_key_here" }
    }
  }
}

~/.codex/config.toml:

[mcp_servers.youtube]
url = "https://mcp.hasdata.com/api/mcp?apis=youtube"

[mcp_servers.youtube.headers]
"x-api-key" = "your_key_here"

~/.gemini/settings.json:

{
  "mcpServers": {
    "youtube": {
      "httpUrl": "https://mcp.hasdata.com/api/mcp?apis=youtube",
      "headers": { "x-api-key": "your_key_here" }
    }
  }
}

Ejemplos de prompts

Prompts, no código. Pega uno y el agente elige la herramienta por sí mismo. Cada uno está anotado con las llamadas que requiere, porque en MCP el modelo decide cuántas llamadas hacer y cada llamada exitosa cuesta 10 créditos.

Encuentra los diez vídeos más vistos sobre el Model Context Protocol del último mes, luego extrae la transcripción del primero y dame las tres afirmaciones que hace sobre la llamada a herramientas.

Dos llamadas, 20 créditos.

Toma el canal @GoogleDevelopers. Enumera las pestañas que publica, luego resume las últimas cinco subidas y dime qué temas se repiten.

Dos llamadas, 20 créditos. Leer una pestaña que no has visto requiere una segunda llamada, porque la lista de pestañas llega dentro de la primera respuesta.

Toma este id de vídeo, dQw4w9WgXcQ. Obtén sus estadísticas, luego comprueba cuáles de sus vídeos relacionados provienen del mismo canal.

Una llamada, 10 créditos. Los vídeos relacionados viajan en la misma respuesta.

Busca en YouTube "tutorial de web scraping", ordenado por fecha de subida, solo vídeos de menos de cuatro minutos, y dame los títulos de los capítulos de cada resultado que los tenga.

Una llamada, 10 créditos.

Extrae la transcripción en alemán de este vídeo si existe, y dime en qué idiomas está disponible.

Una llamada, 10 créditos.

La búsqueda acepta los tokens de filtro propios de YouTube, y un agente reduce por duración, fecha de subida y tipo de contenido sin post-procesamiento. Las transcripciones llegan con la lista de pistas de idioma disponibles, lo que permite al agente elegir una sin adivinar.

Paginación cuesta una llamada cada vez. Un prompt de investigación que busca, pagina dos veces y luego extrae tres transcripciones son seis llamadas y 60 créditos. La prueba llega más lejos con preguntas concretas que con rastreos abiertos.

Herramientas

Cuatro herramientas, todas de solo lectura. Las muestras siguientes están recortadas de llamadas reales, y los números en ellas cambian a medida que YouTube se actualiza. Léelas como formas. Cada nombre de herramienta enlaza a su referencia de endpoint, que incluye la lista completa de campos.

Las muestras son el payload, no la respuesta completa. Un resultado de tools/call lleva un bloque de texto, y ese texto es en sí mismo JSON que contiene url, status, text y json, con los datos extraídos bajo json. Desde una respuesta JSON-RPC cruda, la ruta es result.content[0].text, parseado, luego .json. Un cliente de chat lo desenvuelve por ti, y el código que habla directamente con el endpoint no lo hace.

Obtener resultados de búsqueda de YouTube

hasdata_youtube_search_getYoutubeSearchResults

Busca en YouTube y devuelve la página completa de resultados, dividida por tipo de resultado.

Parámetro

Tipo

Obligatorio

Notas

q

string

Consulta de texto libre, exactamente como la escribiría un usuario

sortBy

string

relevance por defecto, más date, views, rating y popularity

date

string

Ventana de subida relativa a ahora

length

string

Rango de duración, por ejemplo under4

videoType

string

Restringe a un tipo de contenido

filters__

array

Marcas de características, combinables

sp

string

Token sp crudo de YouTube copiado de una URL de búsqueda. Sobrescribe sortBy, date, videoType, length y filters__ sin aviso, así que déjalos vacíos cuando pases un token

paginationToken

string

El pagination.nextPageToken de la respuesta anterior

gl / hl / deviceType

string

Códigos de país e idioma de dos letras, y dispositivo

Una página de resultados se divide en videoResults, shortsResults, inlineShortsResults, playlistResults, channelResults y shelves, con colocaciones de pago en adsResults y sponsoredResults. Qué bloques aparecen depende de la consulta, y un bloque sin nada que informar está ausente, no vacío. Comprueba la clave antes de iterar. searchInformation lleva el total y pagination.nextPageToken es lo que devuelves como paginationToken. Los anuncios nunca se mezclan en los arrays orgánicos, aunque hay dos de ellos que saltar.

{
  "positionOnPage": 1,
  "videoId": "GuTcle5edjk",
  "title": "you need to learn MCP RIGHT NOW!! (Model Context Protocol)",
  "viewsOriginal": "1.6M views",
  "views": 1653824,
  "length": "38:40",
  "publishedDate": "11 months ago",
  "extensions": ["4K"],
  "chapters": [
    { "title": "Intro", "time": "0:00" },
    { "title": "Problem: LLMs Suck at Accessing Code", "time": "0:40" }
  ],
  "channel": { "name": "NetworkChuck", "verified": true }
}

Dos cosas allí merecen mención. views es un entero parseado junto a la cadena de visualización 1.6M views y no necesita un parser de sufijos. Y chapters vienen dentro de los resultados de búsqueda, no solo en el vídeo en sí, aunque solo algunos vídeos los llevan.

La referencia del endpoint de búsqueda enumera todos los tokens sp y filters__ que acepta el endpoint.

Obtener datos de vídeo de YouTube

hasdata_youtube_video_getYoutubeVideo

Un vídeo por id.

Parámetro

Tipo

Obligatorio

Notas

v

string

El id de vídeo de 11 caracteres de v=

gl / hl / deviceType

string

Códigos de país e idioma de dos letras, y dispositivo

Devuelve title, thumbnail, channel, publishedDate, lengthSeconds, category, isFamilySafe y isUnlisted, más los arrays relatedVideos, endScreenVideos, keywords, captions, music y socialLinks. description es un objeto que contiene el texto completo en content y un array links donde cada enlace y hashtag lleva startIndex, length, text y url. El campo text contiene el enlace tal como lo escribió el autor y url contiene el envoltorio de redirección de YouTube, lo que importa si estás extrayendo destinos de patrocinadores o afiliados de las descripciones.

Lee el campo parseado por nombre según la herramienta antes de copiar la muestra siguiente. Los resultados de búsqueda y canal ponen el número parseado en views y la cadena de visualización en viewsOriginal. Esta respuesta lo invierte, manteniendo la cadena en views y el número en extractedViews, y la misma inversión se aplica a likes y subscribers. Si lo haces mal, item.views > 100000 compara una cadena aquí sin lanzar nunca una excepción.

{
  "title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
  "views": "1,806,075,152 views",
  "extractedViews": 1806075152,
  "likes": "19M",
  "extractedLikes": 19344370,
  "publishedDate": "Oct 24, 2009",
  "lengthSeconds": 214,
  "category": "Music",
  "channel": { "name": "Rick Astley", "subscribers": "4.53M subscribers", "extractedSubscribers": 4530000 }
}

Obtener datos de canal de YouTube

hasdata_youtube_channel_getYoutubeChannel

Un canal por id o handle, una pestaña a la vez.

Parámetro

Tipo

Obligatorio

Notas

channelId

cadena

Identificador canónico UC… o un @handle

tab

cadena

featured por defecto, más videos, shorts, streams, playlists, posts, community, podcasts, releases, about y store. Toma un valor de esta lista, no de availableTabs en la respuesta.

paginationToken

cadena

Token de la respuesta anterior.

gl / hl / deviceType

cadena

Códigos de país e idioma de dos letras, y tipo de dispositivo.

Devuelve channelInfo, featuredVideo y sections en la pestaña predeterminada. Otras pestañas devuelven su propia forma. channelInfo incluye el identificador, el avatar, el banner, la descripción, las palabras clave del canal y su rssUrl, suficiente para seguir viendo un canal sin hacer sondeos.

La matriz availableTabs en el ejemplo siguiente contiene etiquetas visibles, y no son los valores que acepta tab. Home, Live, Courses y Search no se corresponden con ningún valor de parámetro, y el resto deben escribirse en minúsculas. Un agente que lea la lista y recorra cada entrada fallará en la primera.

{
  "channelInfo": {
    "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
    "name": "Google for Developers",
    "handle": "@GoogleDevelopers",
    "rssUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UC_x5XG1OV2P6uZZ5FSM9Ttw",
    "isFamilySafe": true,
    "availableTabs": ["Home", "Videos", "Shorts", "Live", "Courses", "Playlists", "Posts", "Search"]
  }
}

Obtener transcripción de vídeo de YouTube

hasdata_youtube_transcript_getYoutubeTranscript

La transcripción cronometrada de un vídeo.

Parámetro

Tipo

Obligatorio

Notas

v

cadena

El identificador de 11 caracteres del vídeo

languageCode

cadena

Código BCP-47 de la pista que quieres

type

cadena

Pon asr para la pista generada automáticamente

Comprueba selected en la respuesta antes de confiar en el idioma. Pedir un languageCode que el vídeo no tiene no falla ni devuelve vacío: simplemente cae a la pista predeterminada. Cada entrada de la lista incluye languageName y languageCode, y un mismo idioma puede aparecer dos veces, una con autoría humana y otra con type asr.

{
  "transcript": [
    { "startMs": 320, "endMs": 18800, "snippet": "[Music]", "startTimeText": "0:00" },
    { "startMs": 18800, "endMs": 21800, "snippet": "We're no strangers to", "startTimeText": "0:18" }
  ],
  "availableTranscripts": [
    { "languageName": "English", "languageCode": "en" },
    { "languageName": "English", "languageCode": "en", "type": "asr", "selected": true },
    { "languageName": "German (Germany)", "languageCode": "de-DE" },
    { "languageName": "Japanese", "languageCode": "ja" }
  ]
}

Errores y caminos de fallo

Tu cliente casi nunca ve un código de error HTTP en una llamada de herramienta. La capa MCP responde con 200 y coloca el fallo dentro del resultado, con isError en true y el motivo como texto. El agente lee un mensaje donde esperarías una línea de estado.

Una clave incorrecta aparece como salida de herramienta, no como conexión fallida. tools/list acepta cualquier clave no vacía y devuelve las cuatro herramientas, así que el cliente completa el apretón de manos y se muestra en verde. La primera llamada de herramienta devuelve entonces isError: true con el texto HasData API error: 401 Unauthorized. Presta atención a esa cadena, porque nada antes en el flujo informa del problema.

Una clave ausente es el único error HTTP real. La autorización ocurre antes de cualquier herramienta, y la conexión falla con 401. Las cabeceras CORS están presentes, y un cliente de navegador lee el estado y no un fallo opaco de red.

Un argumento que rompe el esquema de una herramienta se rechaza antes de convertirse en una extracción. El servidor responde con isError: true y el texto MCP error -32602: Input validation error, nombrando el campo problemático. No se obtiene nada y no se cobra nada. El mensaje indica el campo, pero no los valores aceptados, así que las tablas de parámetros anteriores son la referencia.

Una llamada que tiene éxito y no encuentra nada es el caso que suele despistar. Llega como un resultado ordinario con requestMetadata.status en ok y la clave de datos simplemente ausente. Nada en el cuerpo dice que el resultado esté vacío. Comprueba el campo que necesitas, no un error.

Un identificador que la plataforma rechaza devuelve 400 con requestMetadata.status en error. Un identificador de canal que no existe es la forma habitual de verlo.

Los resultados que llevan datos también llevan un requestMetadata.id que vale la pena citar en el soporte.

Precios, plan gratuito y límites

Cada herramienta de YouTube cuesta 10 créditos por llamada con éxito. El tamaño de la respuesta no cambia el precio. Una página completa de resultados de búsqueda cuesta lo mismo que una página con un solo vídeo.

La prueba gratuita es de 1.000 créditos durante 30 días sin tarjeta, lo que equivale a 100 llamadas a YouTube. Después, una cuenta activa recibe 100 créditos adicionales cada día siempre que su saldo baje de 100, de modo que un agente de bajo volumen funciona indefinidamente en el plan gratuito.

Los planes de pago empiezan en 49 $ al mes por 200.000 créditos, lo que equivale a 20.000 llamadas. El precio unitario baja con el volumen, desde 2,45 $ por cada 1.000 llamadas en el plan inicial hasta 0,99 $ en Business, 0,83 $ en Growth y 0,75 $ en los planes de alto volumen.

Tu plan también fija la concurrencia. La prueba gratuita permite 1 solicitud a la vez, Startup 15, Business 30, Growth 50, y los planes de alto volumen van de 200 a 1.500. Maneja el caso de desbordamiento con defensa en cualquier entorno desatendido, porque un agente que se ramifica puede alcanzar el techo antes de que te des cuenta.

Una solicitud que vuelve con un código distinto de 200 no se factura. Una llamada con éxito que no encuentra nada sigue siendo una llamada.

Selección de herramientas

El parámetro de consulta apis decide qué herramientas ve tu agente. Menos herramientas significa menos contexto gastado en definiciones de herramientas y menos oportunidades de que el modelo alcance la herramienta equivocada.

?apis=youtube                    the four tools in this repo
?apis=youtube,google_serp        add Google search
?apis=youtube,tiktok,instagram   a social research bundle

El parámetro admite nombres de proveedor como youtube y nombres de API individuales como google_maps_search. Los nombres mal escritos se ignoran. Si todos los nombres están mal, la solicitud falla con 400 y el cuerpo indica tanto lo que no se reconoció como todos los valores válidos. Si omites el parámetro, el mismo punto de conexión expone las 57 herramientas de HasData.

Comparativa

Frente a la API de datos de YouTube v3 oficial:

API de datos de YouTube v3

Este servidor

Configuración

Proyecto de Google Cloud y una clave de API

Una clave y una URL

Cuota de búsqueda

"cuota predeterminada de 100 llamadas search.list" al día, según la guía de inicio de Google

Los créditos de tu plan, 10 por llamada

Transcripciones de vídeos ajenos

captions.download "requiere que el usuario tenga permiso para editar el vídeo", según la referencia de Google

Sí, con la lista de idiomas

Capítulos en los resultados

No

Vistas y me gusta en los resultados

Ausentes, y una segunda llamada a videos.list los devuelve como cadenas

Cadena visible y entero en la misma respuesta

Coste

Gratis dentro de la cuota

De pago pasado el periodo de prueba, 10 créditos por llamada

Escrituras y datos privados

Subidas, listas de reproducción, comentarios y tus propias analíticas mediante OAuth

Solo lectura, únicamente datos públicos

Las dos últimas filas importan. Si la cuota diaria cubre tu volumen y eres dueño del canal que consultas, la API oficial es la opción más barata y deberías elegirla.

La mayoría de los otros servidores MCP de YouTube solo hacen transcripciones. Este además busca, lee vídeos con sus métricas de participación y recorre las pestañas de un canal, de modo que un agente completa un pase de investigación completo sin un segundo servidor.

Lo que este servidor no hace. Sin comentarios, sin gestión de canales, sin subidas, sin analíticas, sin datos privados. Lee lo que un visitante sin sesión puede ver.

Preguntas frecuentes

¿Existe un servidor MCP oficial de YouTube?

Google no publica ninguno. YouTube no tiene un servidor MCP de primera parte. Todas las opciones las construye alguien más, ya sea alrededor de la API de datos de YouTube v3 o de las páginas públicas. Este lo mantiene HasData y lee páginas públicas, por eso no necesita credenciales de Google.

¿Qué es un servidor MCP de YouTube?

Un servidor que expone datos de YouTube como herramientas que un cliente de IA puede llamar. El cliente envía una llamada de herramienta mediante el Protocolo de Contexto de Modelo, el servidor obtiene los datos y devuelve JSON estructurado, y el modelo trabaja con el resultado sin ver nunca una página de HTML. Este expone cuatro herramientas y se ejecuta de forma remota. El cliente se conecta a una URL y no inicia ningún proceso local.

¿Necesito una clave de API de YouTube o un proyecto de Google Cloud?

No. La única credencial es tu clave de HasData. No hay ningún proyecto de Google Cloud que crear, ningún formulario de cuota que rellenar ni ninguna pantalla de consentimiento OAuth, porque las herramientas leen páginas públicas de YouTube y no la API de datos de YouTube.

¿Necesito alojar o ejecutar algo?

No. Es un servidor MCP remoto sobre HTTP continuo. Nada que instalar, ningún contenedor que mantener caliente, ningún proceso que reiniciar.

¿Los datos son en vivo o están en caché?

En vivo. Cada llamada obtiene la página en el momento de la solicitud y lleva su propio requestMetadata.id. Dos llamadas idénticas son dos obtenciones separadas y no una reproducción de una copia almacenada. Contadores como vistas y me gusta siguen a la página, así que se mueven cuando la página se mueve.

¿Qué ocurre cuando YouTube cambia su diseño?

Nada por tu parte. Seguimos los cambios y mantenemos estable el esquema de respuesta, de modo que los nombres de campo y los tipos permanecen fijos. Un campo sin valor está ausente del elemento, no presente y nulo. Lee los campos opcionales con un valor predeterminado.

¿Puedo usar esto junto con otras API de HasData?

Sí. El parámetro apis admite una lista, y ?apis=youtube,google_serp le da a tu agente las cuatro herramientas de YouTube más la búsqueda de Google. Elimina el parámetro y obtienes todo.

¿Puedo obtener una transcripción de cualquier vídeo?

Solo si el vídeo tiene una, y availableTranscripts te dice qué existe antes de que preguntes.

¿Puedo iniciar sesión con OAuth en lugar de pegar una clave?

Sí, en los clientes que lo admiten. Claude Desktop y Cursor pueden añadir el punto de conexión como conector e iniciar sesión. Los agentes y scripts desatendidos usan la cabecera x-api-key.

Cumplimiento y datos personales

HasData solo accede a datos disponibles públicamente. Los términos de una plataforma pueden restringir el acceso automatizado, y usted es responsable de su propio cumplimiento. Cuando los datos que recopila incluyan información personal, asegúrese de tener una base legal para ello según el RGPD, la CCPA o las normas equivalentes en su jurisdicción.

Enlaces de HasData

Página del producto y generador de solicitudes

YouTube Scraper API

Documentación del servidor

Documentación del servidor MCP

Las 57 herramientas en un solo servidor

HasData/hasdata-mcp

Tutoriales para clientes

Clientes e integraciones MCP

Todo lo demás que extraemos

YouTube Scraper API y 54 más

Planes y costos de créditos

Planes y costos de créditos

Claves y uso

HasData dashboard

Desarrollo

Este repositorio es configuración y documentación para un servidor remoto. No hay paso de compilación ni nada que contenerizar.

Las pruebas en test/ verifican el contrato de la herramienta, la parte que puede romperse sin un commit aquí. Comprueban que ?apis=youtube devuelve exactamente cuatro herramientas, que cada herramienta sigue declarando su parámetro requerido, que ningún nombre ha cambiado y que la clave en uso es realmente aceptada. Esa última comprobación llama a una herramienta de verdad y cuesta 10 créditos, que es el precio de un canario que puede fallar por la razón correcta.

# macOS and Linux
HASDATA_API_KEY=your_key_here npm test

# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test

La misma suite se ejecuta en CI en cada push y una vez por semana según un horario, porque la lista de herramientas upstream puede cambiar sin que nadie toque este repositorio. Un fallo significa que la lista de herramientas se movió, la clave dejó de funcionar o el endpoint no era accesible, y el mensaje de aserción indica cuál.

Contribuciones

Las correcciones a las tablas de herramientas y a los ejemplos de respuesta son la contribución más útil, porque son las partes que se desvían. Incluya la llamada que hizo y la respuesta que obtuvo. Las solicitudes de extracción de bifurcaciones ejecutan la suite sin clave, y las comprobaciones en vivo se omiten en lugar de ponerse en rojo.

Licencia

MIT. Consulte LICENSE.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/HasData/youtube-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server