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

Glama score tool contract MCP Tools npm PyPI License

Conteúdo

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.

CampoValor
URLhttps://mcp.hasdata.com/api/mcp?apis=tiktok
TransporteHTTP, transmissível
Cabeçalho de autenticaçãox-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âmetroTipoObrigatórioObservações
handlestringsimO 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.status definido como ok, com o objeto profile simplesmente ausente. Verifique se o objeto está lá antes de ler username ou qualquer outro campo, ou um agente fazendo profile.username lanç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âmetroTipoObrigatórioObservações
handlestringsimO nome de usuário, com ou sem o @ inicial
nextPageTokenstringO 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.

hashtags e mentions estão presentes apenas em vídeos que os usam. Em uma página real de 27 vídeos, 4 carregavam um array hashtags e 10 carregavam mentions. 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âmetroTipoObrigatórioObservações
videoIdstringsimO 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
commentIdstringPasse-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
nextPageTokenstringToken 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âmetroTipoObrigatórioObservações
keywordstringsimA frase a pesquisar
typestringvideo por padrão, ou user para pesquisar criadores
nextPageTokenstringToken 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 TikTokEste servidor
AcessoResearch API por aplicação, ou Display API para sua própria contaUma chave e uma URL
EscopoPesquisadores aprovados, ou sua própria conta autenticadaQualquer perfil público, vídeo ou busca
AutenticaçãoRevisão de aplicação ou OAuthUm cabeçalho x-api-key
Comentários de vídeos que você não possuiRestritoSim, com threads de respostas
ConfiguraçãoConta de desenvolvedor e aprovaçãoNenhuma
Escritas e dados privadosPublicação e dados da sua própria conta via OAuthSomente 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çõesTikTok Scraper API
Documentação do servidorDocumentação do servidor MCP
Todas as 57 ferramentas em um servidorHasData/hasdata-mcp
Tutoriais de clientesClientes e integrações MCP
Tudo o mais que extraímosTikTok Scraper API e mais 54
Planos e custos de créditosPlanos e custos de créditos
Chaves e usoPainel HasData
Lançador Node no npm@hasdata/tiktok-mcp
Lançador Python no PyPIhasdata-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.