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

Glama score tool contract MCP Tools

Contenido

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.

CampoValor
URLhttps://mcp.hasdata.com/mcp?apis=youtube
TransporteHTTP, transmisible
Encabezado de autenticaciónx-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

HerramientaQué devuelve
hasdata_youtube_channel_getYoutubeChannelIdentidad 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_getYoutubeSearchResultsBusca 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_getYoutubeTranscriptLa 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_getYoutubeVideoTí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ámetroTipoRequeridoNotas
qstringsíConsulta de texto libre, exactamente como un usuario la escribiría
sortBystringrelevance por defecto, más date, views, rating y popularity
datestringVentana de subida relativa a ahora
lengthstringRango de duración, por ejemplo under4
videoTypestringRestringir a un tipo de contenido
filters__arrayBanderas de características, combinables
spstringToken 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
paginationTokenstringEl pagination.nextPageToken de la respuesta anterior
gl / hl / deviceTypestringCó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ámetroTipoRequeridoNotas
vstringsíEl id de video de 11 caracteres de v=
gl / hl / deviceTypestringCó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 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ámetroTipoRequeridoNotas
channelIdstringsíId canónico UC… o un @handle
tabstringfeatured 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
paginationTokenstringToken de la respuesta anterior
gl / hl / deviceTypestringCó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 availableTabs en el ejemplo siguiente contiene etiquetas de visualización, y no son los valores que tab acepta. Home, Live, Courses y Search no 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ámetroTipoObligatorioNotas
vstringsíEl id de video de 11 caracteres
languageCodestringCódigo BCP-47 de la pista que quieres
typestringEstablécelo en asr para la pista generada automáticamente

Comprueba selected en la respuesta antes de confiar en el idioma. Pedir un languageCode que el video no tiene no falla ni devuelve vacío; silenciosamente recurre a la pista predeterminada. Cada entrada de la lista lleva languageName y languageCode, y un idioma puede aparecer dos veces, una vez con autoría humana y otra con type establecido en 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" }
  ]
}

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.

PromptQué hace
youtube_searchEncuentra videos y canales de YouTube sobre un tema.
youtube_transcriptResume 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ámetroValoresQué selecciona
tab11Pestañ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
gl245El código de país de dos letras para el país al que quieres limitar la búsqueda.
hl159El código de idioma de dos letras para el idioma que quieres usar en la búsqueda.
deviceType2Tipo de dispositivo para la solicitud.
sortBy5Orden 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.
date5Limita los resultados a videos subidos dentro de esta ventana de tiempo relativa a ahora.
videoType5Restringe los resultados a un solo tipo de contenido de YouTube: videos normales, Shorts, canales, listas de reproducción o películas.
length3Filtra 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__11Marcas 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
type1Establé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 v3Este servidor
ConfiguraciónProyecto de Google Cloud y una clave de APIUna 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 GoogleLos créditos de tu plan, 10 por llamada
Transcripciones de videos que no poseescaptions.download "requiere que el usuario tenga permiso para editar el video", según la referencia de GoogleSí, con la lista de idiomas
Capítulos en resultados de búsquedaNoSí
Vistas y me gusta en resultados de búsquedaAusentes, y una segunda llamada videos.list los devuelve como cadenasCadena de visualización y entero en la misma respuesta
CostoGratis dentro de la cuota diariaDe pago más allá del nivel gratuito, 10 créditos por llamada
Escrituras y datos privadosSubidas, listas de reproducción, comentarios y tus propios análisis mediante OAuthSolo 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 solicitudesYouTube Scraper API
Documentación del servidorDocumentación del servidor MCP
Las 57 herramientas en un solo servidorHasData/hasdata-mcp
Guías de clientesClientes e integraciones MCP
Todo lo demás que extraemosYouTube Scraper API y 54 más
Planes y costos de créditosPlanes y costos de créditos
Claves y usoPanel de HasData
Lanzador de Node en npm@hasdata/youtube-mcp
Lanzador de Python en PyPIhasdata-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.