HasData TikTok MCP Server
Perfis públicos do TikTok, vídeos, comentários e pesquisa por palavras-chave em vídeos ou criadores, como JSON.
Documentação
Servidor MCP do TikTok
Um servidor de Model Context Protocol (MCP) hospedado que oferece ao Claude, Cursor, Windsurf e qualquer outro cliente MCP quatro ferramentas somente leitura do TikTok. Consulte um perfil público, percorra os vídeos de uma conta, leia os comentários de um vídeo e pesquise no TikTok por vídeos ou criadores, tudo como JSON estruturado, sem conta de desenvolvedor do TikTok e sem OAuth.
Ele lê dados públicos que um visitante desconectado pode ver. Não faz login, não publica e não age como uma conta.
https://mcp.hasdata.com/api/mcp?apis=tiktok
Conteúdo
- O que você precisa
- Início rápido
- Exemplos de prompts
- Ferramentas
- Erros e caminhos de falha
- Preços, plano gratuito e limites
- Seleção de ferramentas
- Como se compara
- Perguntas frequentes
- Links do HasData
- Desenvolvimento
- Contribuição
- Licença
O que você precisa
Um cliente MCP e uma chave de API do HasData do painel, gratuita para criar. Este é um servidor remoto, então o caminho mais simples é uma URL e um cabeçalho x-api-key, sem contêiner para executar e sem conta de desenvolvedor do TikTok em nenhum lugar do fluxo. Um cliente que só fala stdio o acessa por meio de um lançador leve, publicado como @hasdata/tiktok-mcp no npm e hasdata-tiktok-mcp no PyPI, mostrado abaixo.
Início rápido
A URL do servidor é a mesma para todos os clientes. Nós o executamos na prática no Claude Code e no Claude Desktop. Os outros blocos seguem o formato documentado de cada cliente para um servidor remoto.
| Campo | Valor |
|---|---|
| URL | https://mcp.hasdata.com/api/mcp?apis=tiktok |
| Transporte | HTTP, transmissível |
| Cabeçalho de autenticação | x-api-key: HASDATA_API_KEY |
Clientes com suporte a OAuth podem adicionar a mesma URL como conector e entrar sem colocar uma chave em um arquivo de configuração.
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
Configurações, depois Conectores, depois Adicionar conector personalizado, depois cole https://mcp.hasdata.com/api/mcp?apis=tiktok e entre.
Para o caminho do arquivo de configuração, o Claude Desktop carrega apenas servidores locais (stdio), então ele acessa um servidor remoto por meio de um lançador stdio. O pacote @hasdata/tiktok-mcp é esse lançador, e ele lê a chave do ambiente. Adicione isto ao claude_desktop_config.json:
{
"mcpServers": {
"tiktok": {
"command": "npx",
"args": ["-y", "@hasdata/tiktok-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Prefere Python em vez de Node? Troque o lançador pelo pacote PyPI, que o uvx executa sem instalação manual:
{
"mcpServers": {
"tiktok": {
"command": "uvx",
"args": ["hasdata-tiktok-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Cursor
~/.cursor/mcp.json para todos os projetos, ou .cursor/mcp.json para um único:
{
"mcpServers": {
"tiktok": {
"url": "https://mcp.hasdata.com/api/mcp?apis=tiktok",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json. O Windsurf chama o campo de serverUrl, não de 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 no espaço de trabalho:
{
"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" }
}
}
}
Exemplos de prompts
Prompts, não código. Cole um e o agente escolhe a ferramenta por conta própria. Cada um é anotado com as chamadas que faz, porque no MCP o modelo decide quantas chamadas fazer e cada chamada bem-sucedida custa 10 créditos.
Pegue @mrbeast. Puxe o perfil, depois percorra as duas primeiras páginas de vídeos e me dê a mediana de visualizações entre eles.
Três chamadas, 30 créditos. O perfil é uma chamada, e cada página de vídeos é outra.
Pesquise no TikTok por criadores sobre "cold brew coffee" e classifique os dez primeiros por seguidores, cada um com sua bio.
Uma chamada, 10 créditos. Uma busca por usuários já traz contagem de seguidores e bio, então não é necessário acompanhamento por perfil.
Aqui está uma URL de vídeo. Leia os principais comentários e me diga o sentimento geral e as três respostas mais curtidas.
Uma chamada, 10 créditos. O id numérico na URL é tudo o que a ferramenta de comentários precisa.
Pegue esse mesmo vídeo e expanda as respostas sob o comentário mais curtido.
Duas chamadas, 20 créditos. Primeiro os comentários de nível superior, depois uma segunda chamada com o id desse comentário para suas respostas.
Pesquise vídeos de "asmr" e depois puxe o perfil do autor dos três com mais visualizações.
Quatro chamadas, 40 créditos. Uma busca, depois um perfil para cada. Todo autor em um resultado de busca traz um link direto para seu endpoint de perfil, então o agente nunca precisa adivinhar um nome de usuário.
Paginá-lo custa uma chamada por vez. Uma auditoria de criador que lê um perfil e depois percorre cinco páginas de vídeos são seis chamadas e 60 créditos. O teste gratuito rende mais em perguntas específicas do que em rastreamentos abertos.
Ferramentas
Quatro ferramentas, todas somente leitura. As amostras abaixo são resumidas de chamadas reais, e os números nelas mudam conforme o TikTok atualiza. Leia-as como formatos. Cada nome de ferramenta leva à referência do endpoint, que traz a lista completa de campos.
As amostras são o payload, não a resposta inteira. Um resultado tools/call traz um bloco de texto, e esse texto é ele próprio JSON contendo url, status, text e json, com os dados extraídos sob json. De uma resposta JSON-RPC bruta, o caminho é result.content[0].text, analisado, depois .json. Um cliente de chat desembrulha isso para você, e código que fala diretamente com o endpoint não faz isso.
Nomes de usuário, ids de vídeo e ids de comentário se encadeiam. Um perfil leva às suas postagens, cada postagem carrega seu próprio id de vídeo para a ferramenta de comentários, e todo autor em comentários e resultados de busca carrega um hasdataLink para seu perfil e um hasdataPostsLink para seus vídeos. Um agente percorre de uma palavra-chave a um criador, a um vídeo, a seus comentários sem nunca construir uma URL.
Obter perfil do TikTok
hasdata_tiktok_profile_getTikTokProfile
Uma conta pública por nome de usuário.
| Parâmetro | Tipo | Obrigatório | Observações |
|---|---|---|---|
handle | string | sim | O nome de usuário, com ou sem o @ inicial |
Retorna username, nickname, biography, bioLink, verified, language, createTime, as URLs do avatar e as contagens de followers, follows, likes, videos e friends como inteiros. As contagens já vêm analisadas, então followers > 1000000 compara números, não strings de exibição.
Um nome de usuário que não existe ainda retorna com
requestMetadata.statusdefinido comook, com o objetoprofilesimplesmente ausente. Verifique se o objeto está lá antes de lerusernameou qualquer outro campo, ou um agente fazendoprofile.usernamelança erro em 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
}
Obter postagens do TikTok
hasdata_tiktok_posts_getTikTokPosts
Uma página dos vídeos de uma conta por nome de usuário, do mais recente para o mais antigo.
| Parâmetro | Tipo | Obrigatório | Observações |
|---|---|---|---|
handle | string | sim | O nome de usuário, com ou sem o @ inicial |
nextPageToken | string | O pagination.nextPageToken da resposta anterior. Omita-o para a primeira página |
Uma chamada retorna cerca de trinta vídeos mais pagination, que carrega hasMore e o nextPageToken que você devolve para percorrer o histórico da conta uma página por vez. Cada vídeo carrega id, description, url, duration, as URLs de capa e de vídeo reproduzível, music e as contagens de likes, comments, shares, plays, collects e reposts como inteiros.
hashtagsementionsestão presentes apenas em vídeos que os usam. Em uma página real de 27 vídeos, 4 carregavam um arrayhashtagse 10 carregavammentions. Teste a chave antes de lê-la, em vez de assumir que todo vídeo tem 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 }
}
Obter comentários do TikTok
hasdata_tiktok_comments_getTikTokComments
Os comentários em um vídeo público, ou as respostas sob um comentário.
| Parâmetro | Tipo | Obrigatório | Observações |
|---|---|---|---|
videoId | string | sim | O id numérico, a parte após /video/ em uma URL do TikTok. Mantenha-o como string. O id é um número de 64 bits que perde os últimos dígitos se passar por um Number do JavaScript |
commentId | string | Passe-o para obter as respostas àquele comentário em vez dos comentários de nível superior do vídeo. Uma string, pela mesma razão de 64 bits que videoId | |
nextPageToken | string | Token da resposta anterior. Omita-o para a primeira página |
Cada comentário carrega text, likes, createTime, replyCount e um author, e todo autor carrega um hasdataLink para seu perfil e um hasdataPostsLink para seus vídeos. pagination.total informa a contagem total de comentários do vídeo, então você sabe a profundidade antes de paginar. Um comentário com um replyCount diferente de zero tem respostas que você alcança chamando novamente com seu 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"
}
}
Pesquisar no TikTok
hasdata_tiktok_search_getTikTokSearch
Uma busca por palavra-chave em vídeos ou criadores.
| Parâmetro | Tipo | Obrigatório | Observações |
|---|---|---|---|
keyword | string | sim | A frase a pesquisar |
type | string | video por padrão, ou user para pesquisar criadores | |
nextPageToken | string | Token da resposta anterior. Omita-o para a primeira página |
Com type: video a resposta contém vídeos no mesmo formato que a ferramenta de postagens retorna, cada um com seu autor. Com type: user ela contém criadores, cada um com username, nickname, signature (a bio), avatarUrl, followers e os mesmos hasdataLink e hasdataPostsLink para encadear em um perfil ou em seus vídeos. Um sinalizador verified está presente em contas que o carregam.
{
"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"
}
Erros e caminhos de falha
Seu cliente quase nunca vê um código de erro HTTP de uma chamada de ferramenta. A camada MCP responde 200 e coloca a falha dentro do resultado, com isError definido como true e o motivo como texto. O agente lê uma mensagem onde você poderia esperar uma linha de status.
Uma chave errada aparece como saída de ferramenta, não como conexão falha. tools/list aceita qualquer chave não vazia e retorna todas as quatro ferramentas, então o cliente completa o handshake e mostra verde. A primeira chamada de ferramenta então retorna com isError: true e o texto HasData API error: 401 Unauthorized. Fique atento a essa string, porque nada antes no fluxo relata o problema.
Uma chave ausente é o único erro HTTP real. A autorização roda antes de qualquer ferramenta, e a própria conexão falha com 401. Os cabeçalhos CORS estão presentes, e um cliente de navegador lê o status e não uma falha de rede opaca.
Um argumento que quebra o esquema de uma ferramenta é rejeitado antes de virar uma extração. O servidor responde com isError: true e o texto MCP error -32602: Input validation error, nomeando o campo problemático. Nada é buscado e nada é cobrado.
Uma chamada que é bem-sucedida e não encontra nada é o caso que pega as pessoas de surpresa. Um handle que não existe retorna como um resultado comum com requestMetadata.status definido como ok e a chave de dados simplesmente ausente. Nada no corpo indica que o resultado estava vazio. Teste o campo que você precisa, não um erro.
Um identificador que a plataforma rejeita retorna 400 com requestMetadata.status definido como error.
Resultados que contêm dados também trazem um requestMetadata.id que vale a pena citar no suporte.
Preços, plano gratuito e limites
Cada ferramenta do TikTok custa 10 créditos por chamada bem-sucedida. O tamanho da resposta não altera o preço. Uma página inteira de vídeos custa o mesmo que um perfil com um único campo.
O teste gratuito é de 1.000 créditos por 30 dias, sem cartão, o que equivale a 100 chamadas ao TikTok. Depois disso, uma conta ativa continua recebendo 100 créditos por dia sempre que o saldo cair abaixo de 100, então um agente de baixo volume roda no plano gratuito indefinidamente.
Os planos pagos começam em US$ 49 por mês para 200.000 créditos, o que equivale a 20.000 chamadas. O preço unitário cai com o volume, de US$ 2,45 por 1.000 chamadas no plano inicial para US$ 0,99 no Business, US$ 0,83 no Growth e US$ 0,75 nos maiores planos de alto volume.
Seu plano também define a concorrência. O teste gratuito permite 1 requisição por vez, o Startup 15, o Business 30, o Growth 50, e os planos de alto volume vão de 200 a 1.500. Trate o caso de estouro de forma defensiva em qualquer coisa não supervisionada, porque um agente que se expande vai atingir o teto antes de você.
Uma requisição que retorna diferente de 200 não é cobrada. Uma chamada bem-sucedida que não encontra nada ainda é uma chamada.
Seleção de ferramentas
O parâmetro de consulta apis decide quais ferramentas seu agente vê. Menos ferramentas significa menos contexto gasto em definições de ferramentas e menos chances de o modelo escolher a errada.
?apis=tiktok the four tools in this repo
?apis=tiktok,instagram a social bundle
?apis=tiktok,google_serp add Google search
O parâmetro aceita nomes de provedores como tiktok e nomes individuais de APIs como tiktok_search. Nomes com erros de digitação são ignorados. Se todos os nomes estiverem errados, a requisição falha com 400, e o corpo lista tanto o que não foi reconhecido quanto todos os valores válidos. Remova o parâmetro e o mesmo endpoint expõe todas as 57 ferramentas do HasData.
Como se compara
O próprio programa de desenvolvedores do TikTok não cobre a leitura geral de conteúdo público. A Research API é restrita por uma aplicação e aberta a pesquisadores acadêmicos e sem fins lucrativos aprovados em um conjunto limitado de regiões. A Display API retorna apenas o conteúdo da conta que faz login via OAuth. Nenhuma das duas serve para um agente que precisa ler um perfil público arbitrário, seus vídeos ou os comentários de um vídeo.
| APIs oficiais do TikTok | Este servidor | |
|---|---|---|
| Acesso | Research API por aplicação, ou Display API para sua própria conta | Uma chave e uma URL |
| Escopo | Pesquisadores aprovados, ou sua própria conta autenticada | Qualquer perfil público, vídeo ou busca |
| Autenticação | Revisão de aplicação ou OAuth | Um cabeçalho x-api-key |
| Comentários de vídeos que você não possui | Restrito | Sim, com threads de respostas |
| Configuração | Conta de desenvolvedor e aprovação | Nenhuma |
| Escritas e dados privados | Publicação e dados da sua própria conta via OAuth | Somente leitura, apenas dados públicos |
A maioria dos outros servidores MCP do TikTok envolve um único endpoint não oficial. Este cobre as quatro leituras que um agente realmente encadeia, perfil para posts para comentários, além de busca, então uma passada inteira de pesquisa roda contra um único servidor.
O que este servidor não faz. Sem publicação, sem mensagens diretas, sem conteúdo exclusivo para seguidores ou privado, sem análises para contas que você não possui. Ele lê o que um visitante desconectado pode ver.
FAQ
Existe um servidor MCP oficial do TikTok?
O TikTok não publica um. Toda opção é construída por terceiros. Este é mantido pela HasData e lê páginas públicas, por isso não precisa de conta de desenvolvedor do TikTok.
O que é um servidor MCP do TikTok?
Um servidor que expõe dados do TikTok como ferramentas que um cliente de IA pode chamar. O cliente envia uma chamada de ferramenta pelo Model Context Protocol, o servidor busca os dados e retorna JSON estruturado, e o modelo trabalha com o resultado sem nunca ver uma página de HTML. Este expõe quatro ferramentas e roda remotamente. O cliente se conecta a uma URL e não inicia nenhum processo local.
Preciso de uma chave de API do TikTok ou conta de desenvolvedor?
Não. A única credencial é sua chave HasData. Não há aplicação de desenvolvedor para preencher nem tela de consentimento OAuth, porque as ferramentas leem páginas públicas do TikTok e não as APIs de desenvolvedor do TikTok.
Preciso hospedar ou executar algo?
Não. Este é um servidor MCP remoto em HTTP transmissível. Nada para instalar, nenhum contêiner para manter ativo, nenhum processo para reiniciar.
Os dados são ao vivo ou em cache?
Ao vivo. Cada chamada busca no momento da requisição e carrega seu próprio requestMetadata.id. Contadores como reproduções e curtidas acompanham a página, então eles se movem conforme a página se move.
Posso ler uma conta privada?
Não. As ferramentas retornam o que um visitante desconectado vê. Os vídeos de uma conta privada não são públicos, então não aparecem em nenhuma resposta.
Posso ler respostas de comentários, não apenas comentários de primeiro nível?
Sim. Chame a ferramenta de comentários com o id de um comentário como commentId e ela retorna as respostas desse comentário. O replyCount de um comentário informa se há respostas.
Posso usar isso junto com outras APIs HasData?
Sim. O parâmetro apis aceita uma lista, e ?apis=tiktok,instagram dá ao seu agente as quatro ferramentas do TikTok mais o Instagram. Remova o parâmetro e você obtém tudo.
Conformidade e dados pessoais
A HasData acessa apenas dados publicamente disponíveis. Os termos de uma plataforma podem restringir o acesso automatizado, e você é responsável pela sua própria conformidade. Onde os dados que você coleta incluírem informações pessoais, certifique-se de ter uma base legal para isso sob o GDPR, CCPA ou as regras equivalentes na sua jurisdição.
Links HasData
| Página do produto e construtor de requisições | TikTok Scraper API |
| Documentação do servidor | Documentação do servidor MCP |
| Todas as 57 ferramentas em um servidor | HasData/hasdata-mcp |
| Tutoriais de clientes | Clientes e integrações MCP |
| Tudo o mais que extraímos | TikTok Scraper API e mais 54 |
| Planos e custos de créditos | Planos e custos de créditos |
| Chaves e uso | Painel HasData |
| Lançador Node no npm | @hasdata/tiktok-mcp |
| Lançador Python no PyPI | hasdata-tiktok-mcp |
Desenvolvimento
Este repositório é configuração e documentação para um servidor remoto. Não há etapa de build e nada para containerizar.
Os testes em test/ verificam o contrato das ferramentas, a parte que pode quebrar sem um commit aqui. Eles verificam que ?apis=tiktok retorna exatamente quatro ferramentas, que toda ferramenta ainda declara seu parâmetro obrigatório, que nenhum nome mudou e que a chave em uso é realmente aceita. Essa última verificação chama uma ferramenta de verdade e custa 10 créditos, que é o preço de um canário que pode falhar pelo motivo certo.
# macOS and Linux
HASDATA_API_KEY=your_key_here npm test
# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test
A mesma suíte roda em CI a cada push e uma vez por semana em um cronograma, porque a lista de ferramentas upstream pode mudar sem ninguém tocar neste repositório. Uma falha significa que a lista de ferramentas mudou, a chave parou de funcionar ou o endpoint estava inacessível, e a mensagem de asserção diz qual.
Contribuindo
Correções nas tabelas de ferramentas e nos exemplos de resposta são a contribuição mais útil, porque são as partes que se desatualizam. Inclua a chamada que você fez e a resposta que obteve. Pull requests de forks rodam a suíte sem chave, e as verificações ao vivo são puladas em vez de ficarem vermelhas.
Licença
MIT. Veja LICENSE.