HasData YouTube MCP Server
Busca en YouTube y lee datos de videos, canales y transcripciones como JSON, sin necesidad de un proyecto de Google Cloud.
Documentación
Servidor MCP de YouTube
Un servidor de Protocolo de Contexto de Modelo (MCP) alojado que brinda a Claude, Cursor, Windsurf y cualquier otro cliente MCP cuatro herramientas de solo lectura para YouTube. Busca en YouTube, lee datos de videos y canales, y obtén transcripciones, sin proyecto de Google Cloud ni clave de API de YouTube Data.
1,000 créditos gratis cada mes, sin necesidad de tarjeta, lo que equivale a 100 llamadas a YouTube.
https://mcp.hasdata.com/mcp?apis=youtube
Contenido
- Lo que necesitas
- Inicio rápido
- Ejemplos de prompts
- Herramientas
- Errores y rutas de fallo
- Precios, nivel gratuito y límites
- Selección de herramientas
- Cómo se compara
- Preguntas frecuentes
- Enlaces de HasData
- Desarrollo
- Contribuciones
- Licencia
Lo que necesitas
Un cliente MCP que hable HTTP transmisible con encabezados personalizados. Una clave de API de HasData desde el panel de control, gratis de crear. Nada más. Este es un servidor remoto, por lo que la ruta más simple es una URL y un encabezado, sin contenedor que ejecutar y sin cuenta de Google en ningún lugar del flujo. Un cliente solo stdio puede usar el lanzador @hasdata/youtube-mcp (npm) o hasdata-youtube-mcp (PyPI) en su lugar.
Inicio rápido
La URL del servidor es la misma para cada cliente. Lo ejecutamos de forma práctica en Claude Code y Claude Desktop. Los otros bloques siguen el formato documentado de cada cliente para un servidor remoto.
| Campo | Valor |
|---|---|
| URL | https://mcp.hasdata.com/mcp?apis=youtube |
| Transporte | HTTP, transmisible |
| Encabezado de autenticación | x-api-key: HASDATA_API_KEY |
Los clientes con soporte OAuth pueden agregar la misma URL como conector e iniciar sesión sin poner una clave en un archivo de configuración.
Claude Code
claude mcp add --transport http youtube "https://mcp.hasdata.com/mcp?apis=youtube" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
Configuración, luego Conectores, luego Agregar conector personalizado, luego pega https://mcp.hasdata.com/mcp?apis=youtube e inicia sesión.
Para la ruta de archivo de configuración, Claude Desktop carga solo servidores locales (stdio), por lo que llega a un servidor remoto a través de un lanzador stdio. El paquete @hasdata/youtube-mcp es ese lanzador, y lee la clave del entorno. Agrega esto a claude_desktop_config.json:
{
"mcpServers": {
"youtube": {
"command": "npx",
"args": ["-y", "@hasdata/youtube-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
¿Python en lugar de Node? Cambia el lanzador por el paquete PyPI, que uvx ejecuta sin instalación manual:
{
"mcpServers": {
"youtube": {
"command": "uvx",
"args": ["hasdata-youtube-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Cursor
~/.cursor/mcp.json para cada proyecto, o .cursor/mcp.json para uno solo:
{
"mcpServers": {
"youtube": {
"url": "https://mcp.hasdata.com/mcp?apis=youtube",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json. Windsurf llama al campo serverUrl, no url:
{
"mcpServers": {
"youtube": {
"serverUrl": "https://mcp.hasdata.com/mcp?apis=youtube",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Cline
{
"mcpServers": {
"youtube": {
"url": "https://mcp.hasdata.com/mcp?apis=youtube",
"type": "streamableHttp",
"headers": { "x-api-key": "HASDATA_API_KEY" },
"disabled": false
}
}
}
VS Code
.vscode/mcp.json en el espacio de trabajo:
{
"servers": {
"youtube": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=youtube",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Codex CLI
~/.codex/config.toml:
[mcp_servers.youtube]
url = "https://mcp.hasdata.com/mcp?apis=youtube"
[mcp_servers.youtube.headers]
"x-api-key" = "HASDATA_API_KEY"
Gemini CLI
~/.gemini/settings.json:
{
"mcpServers": {
"youtube": {
"httpUrl": "https://mcp.hasdata.com/mcp?apis=youtube",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
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 videos más vistos sobre el Protocolo de Contexto de Modelo 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 video, dQw4w9WgXcQ. Obtén sus estadísticas, luego verifica cuáles de sus videos relacionados provienen del mismo canal.
Una llamada, 10 créditos. Los videos relacionados viajan en la misma respuesta.
Busca en YouTube "tutorial de web scraping", ordenado por fecha de subida, solo videos de menos de cuatro minutos, y dame los títulos de capítulos de cada resultado que los tenga.
Una llamada, 10 créditos.
Extrae la transcripción en alemán de este video si existe, y dime en qué idiomas está disponible.
Una llamada, 10 créditos.
La búsqueda toma los propios tokens de filtro 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 idiomas disponibles, lo que permite al agente elegir una sin adivinar.
La 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. El nivel gratuito rinde más en preguntas específicas que en rastreos abiertos.
Herramientas
| Herramienta | Qué devuelve |
|---|---|
hasdata_youtube_channel_getYoutubeChannel | Identidad del canal (título, descripción, avatar, banner, país, fecha de unión), recuentos de suscriptores y vistas totales, enlaces sociales y los elementos de la pestaña solicitada (videos…). 10 créditos por llamada |
hasdata_youtube_search_getYoutubeSearchResults | Busca en YouTube una consulta y devuelve la página de resultados completa dividida en videoResults (videoId, título, vistas, duración, fecha de publicación, capítulos, información del canal, extensiones…). 10 créditos por llamada |
hasdata_youtube_transcript_getYoutubeTranscript | La transcripción con marcas de tiempo (subtítulos) de un video de YouTube por su videoId de 11 caracteres. 10 créditos por llamada |
hasdata_youtube_video_getYoutubeVideo | Título, miniatura, vistas y me gusta crudos + normalizados, lengthSeconds, fecha de publicación, categoría, palabras clave/etiquetas, banderas isFamilySafe / isUnlisted, el canal que subió… 10 créditos por llamada |
Cuatro herramientas, todas de solo lectura. Las muestras a continuación 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 contiene la lista completa de campos.
Las muestras son el payload, no la respuesta completa. Un resultado 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, analizado, 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 de resultados completa, dividida por tipo de resultado.
| Parámetro | Tipo | Requerido | Notas |
|---|---|---|---|
q | string | sí | Consulta de texto libre, exactamente como un usuario la escribiría |
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 | Restringir a un tipo de contenido | |
filters__ | array | Banderas 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 advertencia, 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 ubicaciones pagadas en adsResults y sponsoredResults. Qué bloques aparecen depende de la consulta, y un bloque sin nada que reportar está ausente, no vacío. Prueba 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 arreglos orgánicos, aunque hay dos de ellos que omitir.
{
"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 analizado junto a la cadena de visualización 1.6M views y no necesita analizador de sufijos. Y chapters vienen dentro de los resultados de búsqueda, no solo en el video mismo, aunque solo algunos videos los llevan.
La referencia del endpoint de búsqueda enumera cada token sp y filters__ que el endpoint acepta.
Obtener datos de video de YouTube
hasdata_youtube_video_getYoutubeVideo
Un video por id.
| Parámetro | Tipo | Requerido | Notas |
|---|---|---|---|
v | string | sí | El id de video 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 arreglos relatedVideos, endScreenVideos, keywords, captions, music y socialLinks. description es un objeto que contiene el texto completo en content y un arreglo links donde cada enlace y hashtag lleva startIndex, length, text y url. El campo text contiene el enlace tal como el autor lo escribió 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 analizado por nombre por herramienta antes de copiar la muestra a continuación. Los resultados de búsqueda y canal ponen el número analizado en
viewsy la cadena de visualización enviewsOriginal. Esta respuesta lo invierte, manteniendo la cadena enviewsy el número enextractedViews, y la misma inversión se aplica alikesysubscribers. Si lo haces mal,item.views > 100000compara 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 | Requerido | Notas |
|---|---|---|---|
channelId | string | sí | Id canónico UC… o un @handle |
tab | string | 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 | string | Token de la respuesta anterior | |
gl / hl / deviceType | string | Códigos de país e idioma de dos letras, y dispositivo |
Devuelve channelInfo, featuredVideo y sections en la pestaña predeterminada. Otras pestañas devuelven su propia forma. channelInfo lleva el handle, avatar, banner, descripción, palabras clave del canal y el rssUrl del canal, suficiente para seguir viendo un canal sin sondearlo.
El array
availableTabsen el ejemplo siguiente contiene etiquetas de visualización, y no son los valores quetabacepta.Home,Live,CoursesySearchno se corresponden con ningún valor de parámetro, y el resto necesitan estar en minúsculas. Un agente que lea la lista y recorra cada entrada falla 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 la transcripción de un video de YouTube
hasdata_youtube_transcript_getYoutubeTranscript
La transcripción cronometrada de un video.
| Parámetro | Tipo | Obligatorio | Notas |
|---|---|---|---|
v | string | sí | El id de video de 11 caracteres |
languageCode | string | Código BCP-47 de la pista que quieres | |
type | string | Establécelo en asr para la pista generada automáticamente |
Comprueba
selecteden la respuesta antes de confiar en el idioma. Pedir unlanguageCodeque el video no tiene no falla ni devuelve vacío; silenciosamente recurre a la pista predeterminada. Cada entrada de la lista llevalanguageNameylanguageCode, y un idioma puede aparecer dos veces, una vez con autoría humana y otra contypeestablecido enasr.
{
"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" }
]
}
Prompts y recursos
El servidor incluye 2 prompts, flujos de trabajo listos para usar que un cliente puede ofrecer en lugar de hacer que el usuario componga una llamada de herramienta.
| Prompt | Qué hace |
|---|---|
youtube_search | Encuentra videos y canales de YouTube sobre un tema. |
youtube_transcript | Resume lo que se dice en un video de YouTube. |
Junto a ellos, el servidor expone 10 recursos, uno por parámetro cuyos valores aceptados son una lista fija. Leer uno es más barato que aprender el vocabulario a partir de una llamada rechazada, y no cuesta créditos. Cada URI es hasdata://youtube/<parameter>.
| Parámetro | Valores | Qué selecciona |
|---|---|---|
tab | 11 | Pestaña del canal a extraer. Cada pestaña devuelve una forma de contenido distinta: - featured (predeterminada) — página de inicio del canal (tráiler del canal + filas seleccionadas) - videos — videos largos subidos - shorts — feed de Shorts - streams — transmisiones en vivo pasadas y próximas - playlists — listas de reproducción creadas y guardadas - posts / community — publicaciones de la comunidad - podcasts — episodios de pódcast - releases — lanzamientos musicales - about — descripción del canal, enlaces, estadísticas - store — merchandising del canal |
gl | 245 | El código de país de dos letras para el país al que quieres limitar la búsqueda. |
hl | 159 | El código de idioma de dos letras para el idioma que quieres usar en la búsqueda. |
deviceType | 2 | Tipo de dispositivo para la solicitud. |
sortBy | 5 | Orden de clasificación aplicado a la página de resultados. relevance (predeterminado) — mejor coincidencia para la consulta; date — más recientes primero; views — más vistos primero; rating — mejor valorados primero; popularity — tendencias/más populares. |
date | 5 | Limita los resultados a videos subidos dentro de esta ventana de tiempo relativa a ahora. |
videoType | 5 | Restringe los resultados a un solo tipo de contenido de YouTube: videos normales, Shorts, canales, listas de reproducción o películas. |
length | 3 | Filtra por rango de duración del video: - under4 — menos de 4 minutos - between420 — de 4 a 20 minutos - plus20 — más de 20 minutos |
filters__ | 11 | Marcas de función que deben cumplir los resultados. Los valores múltiples se combinan con AND (todas las marcas deben aplicarse). - hd — calidad HD - k4 — calidad 4K - hdr — HDR - subtitles — tiene subtítulos/leyendas ocultas - cc — licencia Creative Commons - d3 — video 3D - d360 — video 360° - vr180 — video VR180 - live — en vivo actualmente - bought — contenido comprado/de pago - location — tiene una etiqueta de ubicación geográfica |
type | 1 | Establécelo en asr para obtener la pista generada automáticamente por YouTube (reconocimiento de voz). Omítelo para obtener la pista con autoría humana para languageCode cuando exista. |
Ambas listas se sirven sin clave de API, por lo que un cliente puede leerlas antes de que un usuario se haya registrado.
Errores y rutas de fallo
Tu cliente casi nunca ve un código de error HTTP de una llamada de herramienta. La capa MCP responde 200 y coloca el fallo dentro del resultado, con isError establecido en true y el motivo como texto. El agente lee un mensaje donde podrías esperar una línea de estado.
Una clave incorrecta aparece como salida de herramienta, no como una conexión fallida. tools/list acepta cualquier clave no vacía y devuelve las cuatro herramientas, por lo que el cliente completa su protocolo de enlace y muestra verde. La primera llamada de herramienta vuelve entonces con isError: true y el texto HasData API error: 401 Unauthorized. Vigila esa cadena, porque nada antes en el flujo informa del problema.
Una clave faltante es el único error HTTP real. La autorización se ejecuta antes que cualquier herramienta, y la conexión en sí falla con 401. Las cabeceras CORS están presentes, y un cliente de navegador lee el estado y no un fallo de red opaco.
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 infractor. No se obtiene nada y no se cobra nada. El mensaje nombra el campo pero no los valores aceptados, por lo que las tablas de parámetros anteriores son la referencia.
Una llamada que tiene éxito y no encuentra nada es el caso que confunde a la gente. Llega como un resultado ordinario con requestMetadata.status establecido en ok y la clave de datos simplemente ausente. Nada en el cuerpo dice que el resultado estaba vacío. Comprueba el campo que necesitas, no un error.
Un identificador que la plataforma rechaza devuelve 400 con requestMetadata.status establecido en error. Un identificador de canal que no existe es la forma habitual de ver esto.
Los resultados que llevan datos también llevan un requestMetadata.id que vale la pena citar en soporte.
Precios, nivel gratuito y límites
Cada herramienta de YouTube cuesta 10 créditos por llamada exitosa. 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 video.
El nivel gratuito es de 1.000 créditos cada mes sin tarjeta, lo que equivale a 100 llamadas de YouTube. Se renueva con el ciclo de facturación, por lo que un agente de bajo volumen funciona con el nivel gratuito indefinidamente.
Los planes de pago comienzan en $59 al mes por 200.000 créditos, lo que equivale a 20.000 llamadas. El precio unitario baja con el volumen, desde $2,95 por cada 1.000 llamadas en el plan de entrada hasta $1,19 en Basic y $0,83 en los niveles Growth. Las cifras actuales están en la página de precios.
Tu plan también establece la concurrencia. El nivel gratuito permite 1 solicitud a la vez, Startup 5, Basic 15, y los niveles Growth van de 50 a 500. Maneja el caso de desbordamiento de forma defensiva en cualquier cosa desatendida, porque un agente que se expanda alcanzará el límite antes que tú.
Una solicitud que devuelve un código distinto de 200 no se factura. Una llamada exitosa 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 posibilidades de que el modelo alcance la incorrecta.
?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 acepta nombres de proveedores como youtube y nombres de API individuales como google_maps_search. Los nombres mal escritos se ignoran. Si todos los nombres son incorrectos, la solicitud falla con 400, y el cuerpo enumera tanto lo que no reconoció como todos los valores válidos. Elimina el parámetro y el mismo endpoint expone las 57 herramientas de HasData.
Cómo se compara
Frente a la YouTube Data API v3 oficial:
| YouTube Data API v3 | Este servidor | |
|---|---|---|
| Configuración | Proyecto de Google Cloud y una clave de API | Una clave y una URL |
| Asignación de búsqueda | "asignación de 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 videos que no posees | captions.download "requiere que el usuario tenga permiso para editar el video", según la referencia de Google | Sí, con la lista de idiomas |
| Capítulos en resultados de búsqueda | No | Sí |
| Vistas y me gusta en resultados de búsqueda | Ausentes, y una segunda llamada videos.list los devuelve como cadenas | Cadena de visualización y entero en la misma respuesta |
| Costo | Gratis dentro de la cuota diaria | De pago más allá del nivel gratuito, 10 créditos por llamada |
| Escrituras y datos privados | Subidas, listas de reproducción, comentarios y tus propios análisis mediante OAuth | Solo lectura, solo datos públicos |
Las dos últimas filas importan. Si la cuota diaria cubre tu volumen y posees el canal que consultas, la API oficial es la respuesta más barata y deberías usarla.
La mayoría de los otros servidores MCP de YouTube solo hacen transcripciones. Este también busca, lee videos con sus cifras de participación y recorre las pestañas del canal, por lo que un agente realiza todo un pase de investigación sin un segundo servidor.
Lo que este servidor no hace. Sin comentarios, sin gestión de canales, sin subidas, sin análisis, 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 uno. YouTube no tiene un servidor MCP de primera parte. Cada opción está construida por otra persona, ya sea en torno a la YouTube Data API v3 o a las páginas públicas. Este está mantenido por HasData y lee páginas públicas, por lo que 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 a través del Model Context Protocol, el servidor obtiene los datos y devuelve JSON estructurado, y el modelo trabaja con el resultado y nunca ve 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 YouTube Data API.
¿Necesito alojar o ejecutar algo?
No. Este es un servidor MCP remoto en HTTP transmisible. Nada que instalar, ningún contenedor que mantener caliente, ningún proceso que reiniciar.
¿Los datos son en vivo o 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 la página, por lo que se mueven a medida que la página se mueve.
¿Qué sucede cuando YouTube cambia su diseño?
Nada de tu lado. Seguimos los cambios y mantenemos estable el esquema de respuesta, por lo que los nombres y tipos de campo permanecen. 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 APIs de HasData?
Sí. El parámetro apis acepta 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 video?
Solo donde el video tenga 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 clientes que lo admitan. Claude Desktop y Cursor pueden añadir el endpoint como conector e iniciar sesión. Los agentes y scripts desatendidos usan la cabecera x-api-key.
Cumplimiento y datos personales
HasData accede solo a datos disponibles públicamente. Los términos de una plataforma pueden restringir el acceso automatizado, y tú eres responsable de tu propio cumplimiento. Cuando los datos que recopilas incluyan información personal, asegúrate de tener una base legal para ello según el GDPR, la CCPA o las reglas equivalentes en tu jurisdicción.
Enlaces de HasData
| Página del producto y constructor de solicitudes | YouTube Scraper API |
| Documentación del servidor | Documentación del servidor MCP |
| Las 57 herramientas en un solo servidor | HasData/hasdata-mcp |
| Guías de 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 | Panel de HasData |
| Lanzador de Node en npm | @hasdata/youtube-mcp |
| Lanzador de Python en PyPI | hasdata-youtube-mcp |
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 las herramientas, 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 de forma programada, 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 de estos es.
Contribuciones
Las correcciones a las tablas de herramientas y a las muestras de respuestas son la contribución más útil, porque son las partes que se desvían. Incluye la llamada que hiciste y la respuesta que obtuviste. Las solicitudes de extracción desde forks ejecutan la suite sin clave, y las comprobaciones en vivo se omiten en lugar de marcarse en rojo.
Licencia
MIT. Ver LICENSE.