HasData TikTok MCP Server
Perfiles públicos de TikTok, videos, comentarios y búsqueda por palabras clave en videos o creadores, como JSON.
Documentación
Servidor MCP de TikTok
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 TikTok. Consulta un perfil público, recorre los videos de una cuenta, lee los comentarios de un video y busca en TikTok videos o creadores, todo como JSON estructurado, sin cuenta de desarrollador de TikTok y sin OAuth.
Lee datos públicos que un visitante sin sesión puede ver. No inicia sesión, publica ni actúa como una cuenta.
https://mcp.hasdata.com/api/mcp?apis=tiktok
Contenido
- Lo que necesitas
- Inicio rápido
- Ejemplos de indicaciones
- 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 y una clave de API de HasData desde el panel de control, gratis de crear. Este es un servidor remoto, por lo que la ruta más simple es una URL y un encabezado x-api-key, sin contenedor que ejecutar y sin cuenta de desarrollador de TikTok en ningún punto del flujo. Un cliente que solo habla stdio lo alcanza a través de un lanzador ligero, publicado como @hasdata/tiktok-mcp en npm y hasdata-tiktok-mcp en PyPI, como se muestra a continuación.
Inicio rápido
La URL del servidor es la misma para todos los clientes. 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/api/mcp?apis=tiktok |
| 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 tiktok "https://mcp.hasdata.com/api/mcp?apis=tiktok" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
Configuración, luego Conectores, luego Agregar conector personalizado, luego pega https://mcp.hasdata.com/api/mcp?apis=tiktok e inicia sesión.
Para la ruta de archivo de configuración, Claude Desktop solo carga servidores locales (stdio), por lo que alcanza un servidor remoto a través de un lanzador stdio. El paquete @hasdata/tiktok-mcp es ese lanzador, y lee la clave del entorno. Agrega esto a claude_desktop_config.json:
{
"mcpServers": {
"tiktok": {
"command": "npx",
"args": ["-y", "@hasdata/tiktok-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
¿Python en lugar de Node? Cambia el lanzador por el paquete de PyPI, que uvx ejecuta sin instalación manual:
{
"mcpServers": {
"tiktok": {
"command": "uvx",
"args": ["hasdata-tiktok-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Cursor
~/.cursor/mcp.json para cada proyecto, o .cursor/mcp.json para uno solo:
{
"mcpServers": {
"tiktok": {
"url": "https://mcp.hasdata.com/api/mcp?apis=tiktok",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json. Windsurf llama al campo serverUrl, no url:
{
"mcpServers": {
"tiktok": {
"serverUrl": "https://mcp.hasdata.com/api/mcp?apis=tiktok",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Cline
{
"mcpServers": {
"tiktok": {
"url": "https://mcp.hasdata.com/api/mcp?apis=tiktok",
"type": "streamableHttp",
"headers": { "x-api-key": "HASDATA_API_KEY" },
"disabled": false
}
}
}
VS Code
.vscode/mcp.json en el espacio de trabajo:
{
"servers": {
"tiktok": {
"type": "http",
"url": "https://mcp.hasdata.com/api/mcp?apis=tiktok",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Codex CLI
~/.codex/config.toml:
[mcp_servers.tiktok]
url = "https://mcp.hasdata.com/api/mcp?apis=tiktok"
[mcp_servers.tiktok.headers]
"x-api-key" = "HASDATA_API_KEY"
Gemini CLI
~/.gemini/settings.json:
{
"mcpServers": {
"tiktok": {
"httpUrl": "https://mcp.hasdata.com/api/mcp?apis=tiktok",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Ejemplos de indicaciones
Indicaciones, no código. Pega una y el agente elige la herramienta por sí mismo. Cada una está anotada con las llamadas que requiere, porque en MCP el modelo decide cuántas llamadas hacer y cada llamada exitosa cuesta 10 créditos.
Toma @mrbeast. Obtén el perfil, luego recorre las dos primeras páginas de videos y dame el recuento medio de reproducciones entre ellos.
Tres llamadas, 30 créditos. El perfil es una llamada, y cada página de videos es otra.
Busca en TikTok creadores sobre "café cold brew" y clasifica a los diez primeros por seguidores, cada uno con su biografía.
Una llamada, 10 créditos. Una búsqueda de usuarios ya incluye el recuento de seguidores y la biografía, por lo que no se necesita seguimiento por perfil.
Aquí hay una URL de video. Lee sus comentarios principales y dime el sentimiento general y las tres respuestas con más me gusta.
Una llamada, 10 créditos. El id numérico en la URL es todo lo que necesita la herramienta de comentarios.
Toma ese mismo video, luego expande las respuestas bajo su comentario con más me gusta.
Dos llamadas, 20 créditos. Primero los comentarios de nivel superior, luego una segunda llamada con el id de ese comentario para sus respuestas.
Busca videos de "asmr", luego obtén el perfil del autor de los tres con mayor recuento de reproducciones.
Cuatro llamadas, 40 créditos. Una búsqueda, luego un perfil por cada uno. Cada autor en un resultado de búsqueda lleva un enlace directo a su endpoint de perfil, por lo que el agente nunca tiene que adivinar un nombre de usuario.
Paginación cuesta una llamada cada vez. Una auditoría de creador que lee un perfil y luego recorre cinco páginas de videos son seis llamadas y 60 créditos. La prueba llega más lejos en preguntas específicas que en rastreos abiertos.
Herramientas
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 TikTok 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 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, analizada, luego .json. Un cliente de chat lo desenvuelve por ti, y el código que habla directamente con el endpoint no lo hace.
Los nombres de usuario, ids de video e ids de comentarios se encadenan. Un perfil enlaza a sus publicaciones, cada publicación lleva su propio id de video para la herramienta de comentarios, y cada autor en comentarios y resultados de búsqueda lleva un hasdataLink a su perfil y un hasdataPostsLink a sus videos. Un agente camina desde una palabra clave hasta un creador, hasta un video, hasta sus comentarios sin construir nunca una URL.
Obtener perfil de TikTok
hasdata_tiktok_profile_getTikTokProfile
Una cuenta pública por nombre de usuario.
| Parámetro | Tipo | Obligatorio | Notas |
|---|---|---|---|
handle | string | sí | El nombre de usuario, con o sin el @ inicial |
Devuelve username, nickname, biography, bioLink, verified, language, createTime, las URLs del avatar, y los recuentos de followers, follows, likes, videos y friends como enteros. Los recuentos ya están analizados, por lo que followers > 1000000 compara números, no cadenas de visualización.
Un nombre de usuario que no existe aún regresa con
requestMetadata.statusestablecido enok, el objetoprofilesimplemente ausente. Verifica que el objeto esté allí antes de leerusernameo cualquier otro campo, o un agente que hagaprofile.usernamelanzará un error sobre nada.
{
"username": "mrbeast",
"nickname": "MrBeast",
"verified": true,
"biography": "Checkout My New Book!👇",
"bioLink": "http://themostdangerousgames.com",
"createTime": "2018-10-20T19:26:16.000Z",
"followers": 138387571,
"follows": 354,
"likes": 1427086888,
"videos": 466,
"friends": 285
}
Obtener publicaciones de TikTok
hasdata_tiktok_posts_getTikTokPosts
Una página de los videos de una cuenta por nombre de usuario, más recientes primero.
| Parámetro | Tipo | Obligatorio | Notas |
|---|---|---|---|
handle | string | sí | El nombre de usuario, con o sin el @ inicial |
nextPageToken | string | El pagination.nextPageToken de la respuesta anterior. Omítelo para la primera página |
Una llamada devuelve alrededor de treinta videos más pagination, que lleva hasMore y el nextPageToken que introduces de nuevo para recorrer el historial de la cuenta una página a la vez. Cada video lleva id, description, url, duration, las URLs de portada y video reproducible, music, y los recuentos de likes, comments, shares, plays, collects y reposts como enteros.
hashtagsymentionsestán presentes solo en videos que los usan. En una página real de 27 videos, 4 llevaban un arrayhashtagsy 10 llevabanmentions. Prueba la clave antes de leerla, en lugar de asumir que cada video tiene ambos.
{
"id": "7677375185028271391",
"description": "would you take the car or nah?",
"url": "https://www.tiktok.com/@mrbeast/video/7677375185028271391",
"createTime": "2026-08-23T23:36:59.000Z",
"duration": 41,
"likes": 129500,
"comments": 6670,
"shares": 2033,
"plays": 1100000,
"collects": 4986,
"music": { "title": "original sound", "authorName": "MrBeast", "original": true }
}
Obtener comentarios de TikTok
hasdata_tiktok_comments_getTikTokComments
Los comentarios en un video público, o las respuestas bajo un comentario.
| Parámetro | Tipo | Obligatorio | Notas |
|---|---|---|---|
videoId | string | sí | El id numérico, la parte después de /video/ en una URL de TikTok. Mantenlo como string. El id es un número de 64 bits que pierde sus últimos dígitos si alguna vez pasa por un Number de JavaScript |
commentId | string | Pásalo para obtener las respuestas a ese comentario en lugar de los comentarios de nivel superior del video. Un string, por la misma razón de 64 bits que videoId | |
nextPageToken | string | Token de la respuesta anterior. Omítelo para la primera página |
Cada comentario lleva text, likes, createTime, replyCount y un author, y cada autor lleva un hasdataLink a su perfil y un hasdataPostsLink a sus videos. pagination.total informa el recuento total de comentarios del video, por lo que sabes la profundidad antes de paginar. Un comentario con un replyCount distinto de cero tiene respuestas que alcanzas llamando de nuevo con su id como commentId.
{
"id": "7677377150003053325",
"text": "How could someone turn down a car",
"createTime": "2026-08-23T23:45:06.000Z",
"likes": 3802,
"replyCount": 22,
"author": {
"username": "hohce.verggr",
"nickname": "Sasori",
"hasdataLink": "https://api.hasdata.com/scrape/tiktok/profile?handle=hohce.verggr",
"hasdataPostsLink": "https://api.hasdata.com/scrape/tiktok/posts?handle=hohce.verggr"
}
}
Buscar en TikTok
hasdata_tiktok_search_getTikTokSearch
Una búsqueda por palabra clave sobre videos o creadores.
| Parámetro | Tipo | Obligatorio | Notas |
|---|---|---|---|
keyword | string | sí | La frase a buscar |
type | string | video por defecto, o user para buscar creadores | |
nextPageToken | string | Token de la respuesta anterior. Omítelo para la primera página |
Con type: video la respuesta contiene videos en la misma forma que devuelve la herramienta de publicaciones, cada uno con su autor. Con type: user contiene creadores, cada uno con username, nickname, signature (la biografía), avatarUrl, followers, y los mismos hasdataLink y hasdataPostsLink para encadenar a un perfil o sus videos. Un indicador verified está presente en cuentas que lo llevan.
{
"username": "la.mooncoldbrew",
"nickname": "lamoon cold brew coffee",
"signature": "อยากได้สูตรชงเมนูไหน Comment ไว้เลยน้า",
"followers": 48000,
"hasdataLink": "https://api.hasdata.com/scrape/tiktok/profile?handle=la.mooncoldbrew",
"hasdataPostsLink": "https://api.hasdata.com/scrape/tiktok/posts?handle=la.mooncoldbrew"
}
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 la razón 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 luego regresa con isError: true y el texto HasData API error: 401 Unauthorized. Vigila esa cadena, porque nada antes en el flujo informa el problema.
Una clave faltante es el único error HTTP real. La autorización se ejecuta antes de cualquier herramienta, y la conexión misma falla con 401. Los encabezados 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 un raspado. 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.
Una llamada que tiene éxito y no encuentra nada es el caso que confunde a la gente. Un identificador que no existe devuelve un resultado ordinario con requestMetadata.status establecido en ok y la clave de datos simplemente ausente. Nada en el cuerpo indica que el resultado estaba vacío. Verifica el campo que necesitas, no un error.
Un identificador que la plataforma rechaza devuelve 400 con requestMetadata.status establecido en error.
Los resultados que contienen datos también incluyen un requestMetadata.id que vale la pena citar en el soporte.
Precios, nivel gratuito y límites
Cada herramienta de TikTok cuesta 10 créditos por llamada exitosa. El tamaño de la respuesta no cambia el precio. Una página completa de videos cuesta lo mismo que un perfil con un solo campo.
La prueba gratuita es de 1,000 créditos durante 30 días sin tarjeta, lo que equivale a 100 llamadas de TikTok. Después de eso, una cuenta activa sigue recibiendo 100 créditos recargados cada día cuando su saldo baja de 100, por lo que un agente de bajo volumen funciona indefinidamente en el nivel gratuito.
Los planes de pago comienzan 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 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 más grandes.
Tu plan también establece 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 de forma defensiva en cualquier cosa desatendida, porque un agente que se expande alcanzará el límite antes que tú.
Una solicitud que devuelve un estado 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 use la incorrecta.
?apis=tiktok the four tools in this repo
?apis=tiktok,instagram a social bundle
?apis=tiktok,google_serp add Google search
El parámetro acepta nombres de proveedores como tiktok y nombres de API individuales como tiktok_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. Omite el parámetro y el mismo endpoint expone las 57 herramientas de HasData.
Cómo se compara
El propio programa de desarrolladores de TikTok no cubre la lectura general de contenido público. La API de investigación está restringida detrás de una solicitud y abierta a investigadores académicos y sin fines de lucro aprobados en un conjunto limitado de regiones. La API Display devuelve solo el contenido de la cuenta que inicia sesión mediante OAuth. Ninguna de las dos se adapta a un agente que necesita leer un perfil público arbitrario, sus videos o los comentarios de un video.
| APIs oficiales de TikTok | Este servidor | |
|---|---|---|
| Acceso | API de investigación mediante solicitud, o API Display para tu propia cuenta | Una clave y una URL |
| Alcance | Investigadores aprobados, o tu propia cuenta autenticada | Cualquier perfil público, video o búsqueda |
| Autenticación | Revisión de solicitud u OAuth | Un encabezado x-api-key |
| Comentarios de videos que no posees | Restringido | Sí, con hilos de respuestas |
| Configuración | Cuenta de desarrollador y aprobación | Ninguna |
| Escrituras y datos privados | Publicación y datos de tu propia cuenta mediante OAuth | Solo lectura, solo datos públicos |
La mayoría de los otros servidores MCP de TikTok envuelven un único endpoint no oficial. Este cubre las cuatro lecturas que un agente realmente encadena, perfil a publicaciones a comentarios, más búsqueda, por lo que un pase de investigación completo se ejecuta contra un solo servidor.
Lo que este servidor no hace. Sin publicaciones, sin mensajes directos, sin contenido solo para seguidores o privado, sin análisis para cuentas que no posees. Lee lo que un visitante sin sesión puede ver.
Preguntas frecuentes
¿Existe un servidor MCP oficial de TikTok?
TikTok no publica uno. Cada opción está construida por otra persona. Este está mantenido por HasData y lee páginas públicas, por lo que no necesita una cuenta de desarrollador de TikTok.
¿Qué es un servidor MCP de TikTok?
Un servidor que expone datos de TikTok como herramientas que un cliente de IA puede llamar. El cliente envía una llamada de herramienta a través del Protocolo de Contexto de Modelo, 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 TikTok o una cuenta de desarrollador?
No. La única credencial es tu clave de HasData. No hay solicitud de desarrollador que presentar ni pantalla de consentimiento de OAuth, porque las herramientas leen páginas públicas de TikTok y no las API de desarrollador de TikTok.
¿Necesito alojar o ejecutar algo?
No. Este es un servidor MCP remoto en HTTP transmisible. Nada que instalar, ningún contenedor que mantener activo, ningún proceso que reiniciar.
¿Los datos son en vivo o en caché?
En vivo. Cada llamada obtiene datos en el momento de la solicitud y lleva su propio requestMetadata.id. Contadores como reproducciones y me gusta siguen la página, por lo que se mueven a medida que la página se mueve.
¿Puedo leer una cuenta privada?
No. Las herramientas devuelven lo que un visitante sin sesión ve. Los videos de una cuenta privada no son públicos, por lo que no están en ninguna respuesta.
¿Puedo leer respuestas a comentarios, no solo comentarios de nivel superior?
Sí. Llama a la herramienta de comentarios con el id de un comentario como commentId y devuelve las respuestas de ese comentario. El replyCount de un comentario te indica si hay alguna.
¿Puedo usar esto junto con otras APIs de HasData?
Sí. El parámetro apis acepta una lista, y ?apis=tiktok,instagram le da a tu agente las cuatro herramientas de TikTok más Instagram. Omite el parámetro y obtienes todo.
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 bajo GDPR, CCPA o las reglas equivalentes en tu jurisdicción.
Enlaces de HasData
| Página de producto y constructor de solicitudes | API de scraping de TikTok |
| 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 scrapeamos | API de scraping de TikTok 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/tiktok-mcp |
| Lanzador de Python en PyPI | hasdata-tiktok-mcp |
Desarrollo
Este repositorio es configuración y documentación para un servidor remoto. No hay paso de compilación ni nada que contener.
Las pruebas en test/ verifican el contrato de herramientas, la parte que puede romperse sin un commit aquí. Comprueban que ?apis=tiktok devuelve exactamente cuatro herramientas, que cada herramienta aún declara su parámetro requerido, que ningún nombre cambió y que la clave en uso realmente se acepta. Esa última verificació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 a la semana en 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 las muestras de respuesta 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 de bifurcaciones ejecutan la suite sin clave, y las verificaciones en vivo se omiten en lugar de ponerse en rojo.
Licencia
MIT. Ver LICENCIA.