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.
1,000 créditos gratis cada mes, sin necesidad de tarjeta, lo que equivale a 100 llamadas a TikTok.
https://mcp.hasdata.com/mcp?apis=tiktok
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 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 demás bloques siguen el formato documentado de cada cliente para un servidor remoto.
| Campo | Valor |
|---|---|
| URL | https://mcp.hasdata.com/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/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/mcp?apis=tiktok e inicia sesión.
Para la ruta de archivo de configuración, Claude Desktop carga solo 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/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/mcp?apis=tiktok",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Cline
{
"mcpServers": {
"tiktok": {
"url": "https://mcp.hasdata.com/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/mcp?apis=tiktok",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Codex CLI
~/.codex/config.toml:
[mcp_servers.tiktok]
url = "https://mcp.hasdata.com/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/mcp?apis=tiktok",
"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.
Toma @mrbeast. Obtén el perfil, luego recorre las dos primeras páginas de videos y dame el recuento de reproducciones mediano 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 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 los tres comentarios 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. El nivel gratuito rinde más en preguntas específicas que en rastreos abiertos.
Herramientas
| Herramienta | Qué devuelve |
|---|---|
hasdata_tiktok_comments_getTikTokComments | Obtiene los comentarios de un video público de TikTok por su id numérico de video, o las respuestas a un comentario específico cuando se proporciona commentId. 10 créditos por llamada |
hasdata_tiktok_posts_getTikTokPosts | Una página de ~35 videos más un nextPageToken; pasa ese token de vuelta para recorrer el historial de la cuenta página por página. 10 créditos por llamada |
hasdata_tiktok_profile_getTikTokProfile | Obtiene un perfil público de TikTok por nombre de usuario (handle) y devuelve apodo, biografía, enlace de biografía, URLs de avatar, indicadores de verificado/privado, tiempo de creación de la cuenta, y…. 10 créditos por llamada |
hasdata_tiktok_search_getTikTokSearch | Busca en TikTok por palabra clave y devuelve videos (con descripción, hashtags, menciones, recuentos de me gusta/comentarios/compartidos/reproducciones, URLs de portada y video reproducible, música, y…. 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 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, analizado, luego .json. Un cliente de chat desenvuelve eso por ti, y el código que habla directamente con el endpoint no lo hace.
Los handles, 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 handle.
| Parámetro | Tipo | Requerido | Notas |
|---|---|---|---|
handle | string | sí | El nombre de usuario, con o sin el @ inicial |
Devuelve username, nickname, biography, bioLink, verified, language, createTime, las URLs de 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 handle que no existe aún devuelve
requestMetadata.statusestablecido enok, con el objetoprofilesimplemente ausente. Verifica que el objeto esté presente 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 handle, del más reciente al más antiguo.
| Parámetro | Tipo | Requerido | 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 vuelta para recorrer el historial de la cuenta página por página. 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 llevan, y con qué frecuencia ocurre eso sigue a la cuenta más que al endpoint. Las fuentes muestreadas variaron desde ninguna publicación etiquetada hasta todas etiquetadas. Prueba la clave antes de leerla, y trata un array ausente como una cuenta que no etiqueta.
{
"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 | Requerido | 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 | Requerido | 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 hacia un perfil o sus videos. Un indicador verified está presente en cuentas que llevan uno.
{
"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"
}
Prompts y recursos
El servidor incluye 2 prompts, flujos de trabajo listos que un cliente puede ofrecer en lugar de hacer que el usuario componga una llamada de herramienta.
| Prompt | Qué hace |
|---|---|
tiktok_trend | Ver qué se está publicando en TikTok sobre un tema. |
tiktok_profile | Consultar un perfil público de TikTok. |
| Junto a ellos, el servidor expone un recurso: los valores aceptados del único parámetro que toma una lista fija. Leerlo es más barato que aprender el vocabulario a partir de una llamada rechazada, y no cuesta créditos. |
| Parámetro | Valores | Qué selecciona |
|---|---|---|
type | 2 | Qué buscar: videos o usuarios. El valor predeterminado es video. |
Su URI es hasdata://tiktok/type.
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
Su cliente casi nunca ve un código de error HTTP de una llamada a una herramienta. La capa MCP responde con 200 y coloca el fallo dentro del resultado, con isError establecido en true y el motivo como texto. El agente lee un mensaje donde usted podría 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 a una herramienta regresa entonces con isError: true y el texto HasData API error: 401 Unauthorized. Esté atento a 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 de cualquier herramienta, y la conexión en sí 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 regresa 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. Pruebe el campo que necesita, no un error.
Un identificador que la plataforma rechaza devuelve 400 con requestMetadata.status establecido en error.
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 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.
El nivel gratuito es 1,000 créditos cada mes sin tarjeta, lo que equivale a 100 llamadas de TikTok. Se renueva con el ciclo de facturación, por lo que un agente de bajo volumen funciona en 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 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.
Su 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. Maneje el caso de desbordamiento de forma defensiva en cualquier cosa desatendida, porque un agente que se expande alcanzará el techo antes que usted.
Una solicitud que regresa con 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 su agente. Menos herramientas significa menos contexto gastado en definiciones de herramientas y menos oportunidades de que el modelo elija 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. Elimine 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 a través de OAuth. Ninguna encaja para 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 por solicitud, o API Display para su propia cuenta | Una clave y una URL |
| Alcance | Investigadores aprobados, o su 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 posee | Restringido | Sí, con hilos de respuestas |
| Configuración | Cuenta de desarrollador y aprobación | Ninguna |
| Escrituras y datos privados | Publicación y datos de su propia cuenta a través de 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 posee. 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 su clave de HasData. No hay solicitud de desarrollador que presentar ni pantalla de consentimiento 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í. Llame a la herramienta de comentarios con el id de un comentario como commentId y devolverá las respuestas de ese comentario. El replyCount de un comentario le indica si hay alguna.
¿Puedo usar esto junto con otras API de HasData?
Sí. El parámetro apis acepta una lista, y ?apis=tiktok,instagram le da a su agente las cuatro herramientas de TikTok más Instagram. Elimine el parámetro y obtiene 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 usted es responsable de su propio cumplimiento. Cuando los datos que recopila incluyen información personal, asegúrese de tener una base legal para ello bajo GDPR, CCPA o las reglas equivalentes en su jurisdicción.
Enlaces de HasData
| Página de producto y constructor de solicitudes | API de raspado 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 raspamos | API de raspado 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 contenerizar.
Las pruebas en test/ verifican el contrato de las 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 ascendente 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 era inalcanzable, y el mensaje de la aserción dice 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. Incluya la llamada que hizo y la respuesta que obtuvo. 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. Consulte LICENCIA.