TwitterAPIs MCP
112 endpoints do Twitter/X (68 leituras, 44 gravações) atrás de uma chave hospedada ou um servidor MCP para Claude e Cursor. $0,50 em créditos gratuitos no cadastro, sem necessidade de cartão.
Servidor MCP hospedado
npx add-mcp 'https://api.twitterapis.com/mcp'Instala no Claude Code, Codex, Cursor e outros
Documentação
@twitterapis/mcp
Servidor oficial do Model Context Protocol para twitterapis.com, a API do Twitter / X como ferramentas nativas para Claude, Cursor, Windsurf e qualquer cliente MCP. Leituras (busca, perfis, timelines, seguidores, DMs) além de ações de escrita (postar, curtir, retweetar, seguir).
Peça ao seu agente para buscar tweets, puxar o perfil ou a timeline de um usuário, listar seguidores/seguindo, buscar contexto de threads ou enumerar membros de listas, e ele chama a API diretamente. Cada ferramenta mapeia para um endpoint REST em https://api.twitterapis.com; o servidor não mantém estado e encaminha sua chave de API em cada chamada.
Início rápido
Não é necessária instalação. Execute com npx. Você precisa de uma coisa: uma chave de API (US$ 0,50 grátis em créditos, sem cartão de crédito): twitterapis.com/signup.
Configuração
Claude Desktop
Edite claude_desktop_config.json (Configurações → Desenvolvedor → Editar Config):
{
"mcpServers": {
"twitterapis": {
"command": "npx",
"args": ["-y", "@twitterapis/mcp@latest"],
"env": { "TWITTERAPIS_KEY": "YOUR_API_KEY" }
}
}
}
Reinicie o Claude Desktop. As ferramentas twitter_* aparecem no seletor de ferramentas.
Cursor
~/.cursor/mcp.json (ou Configurações → MCP → Adicionar Novo Servidor):
{
"mcpServers": {
"twitterapis": {
"command": "npx",
"args": ["-y", "@twitterapis/mcp@latest"],
"env": { "TWITTERAPIS_KEY": "YOUR_API_KEY" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"twitterapis": {
"command": "npx",
"args": ["-y", "@twitterapis/mcp@latest"],
"env": { "TWITTERAPIS_KEY": "YOUR_API_KEY" }
}
}
}
VS Code (Copilot / modo agente)
.vscode/mcp.json no seu workspace, ou as configurações de MCP no nível do usuário:
{
"servers": {
"twitterapis": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@twitterapis/mcp@latest"],
"env": { "TWITTERAPIS_KEY": "YOUR_API_KEY" }
}
}
}
Configuração
| Variável de ambiente | Obrigatória | Padrão | Finalidade |
|---|---|---|---|
TWITTERAPIS_KEY | Sim | (nenhum) | Chave de API do painel |
TWITTERAPIS_BASE_URL | Não | https://api.twitterapis.com | Substituir o host da API |
TWITTERAPIS_TIMEOUT_MS | Não | 30000 | Tempo limite por requisição em milissegundos |
Ferramentas
112 ferramentas: 68 leituras e 44 ações de escrita. A maioria dos endpoints de usuário aceita username (handle sem @) ou user_id (twitter_user_likes e twitter_user_tweets_complete exigem user_id); endpoints de tweets aceitam id ou url; endpoints paginados retornam um cursor que você passa de volta para obter a próxima página. Toda leitura de dados (exceto twitter_audience_summary, que sempre retorna seu resumo completo) também aceita fields (caminhos pontilhados separados por vírgula para manter, ex.: id,text,author.username; paginação e chaves de envelope sempre sobrevivem) e compact ("1" para um preset embutido de ids, texto, contagens e informações básicas do autor), para que um modelo que paga por token possa reduzir uma página ao que vai ler. Quatro das leituras são consultas gratuitas de conta (twitter_account_me, twitter_account_payments, twitter_feedback_get, twitter_feedback_list); as 14 ferramentas de monitoramento e twitter_feedback_send também são gratuitas (administração de conta, não leituras medidas).
Leituras públicas (busca, perfis, tweets, seguidores, curtidas) funcionam apenas com sua chave de API. As leituras somente de conta (bookmarks, DMs, timeline inicial, seguidores-que-você-conhece) e a maioria das ações de escrita agem COMO uma conta X autenticada, então precisam de uma sessão vinculada à sua chave primeiro (retorna HTTP 409 até então). Vincule uma sessão registrando seus cookies do x.com (twitter_customer_session) ou fazendo login com nome de usuário/senha (twitter_user_login). Alternativamente, passe credenciais inline por chamada em qualquer uma dessas ferramentas (auth_token + ct0, com proxy_url / user_agent opcionais) para agir COMO aquela conta em uma única chamada, sem pré-registrar uma sessão, permitindo que uma chave de API atue como várias contas. Para ações de escrita, defina proxy_url para um proxy residencial, já que o X bloqueia suavemente escritas que saem de IPs de datacenter. Cada ferramenta de escrita é anotada com readOnlyHint: false; ações reversas (excluir, deixar de seguir, descurtir, desfazer retweet, remover bookmark, excluir monitor/webhook) são anotadas com destructiveHint: true para que clientes MCP possam solicitar confirmação antes de executá-las. As ferramentas de monitoramento e feedback (veja abaixo) são a exceção: elas administram sua conta twitterapis.com, não uma sessão X, então precisam apenas da sua chave de API, sem sessão vinculada e sem credenciais inline.
Leituras
| Ferramenta | O que faz |
|---|---|
twitter_advanced_search | Busca tweets com operadores X (from:, min_faves:, since:, filter:links, etc.) |
twitter_user_search | Encontra contas de usuário por nome ou palavra-chave |
twitter_user_info | Perfil completo por handle (bio, contagens, verificação, localização) |
twitter_user_info_by_id | Perfil completo por id numérico de usuário |
twitter_user_status | Verifica se uma conta está ativa, suspensa ou excluída |
twitter_user_about | Objeto About estruturado de um usuário (categoria, rótulos profissionais/empresariais, verificação + sinalizadores de verificação de identidade, data de adesão e o painel de transparência 'Sobre esta conta' do X) |
twitter_user_about_batch | O mesmo objeto About para até 100 contas em uma chamada (usernames ou user_ids), cobrado por conta respondida; para avaliar uma lista por país ou histórico de conta |
twitter_audience_summary | Quem é um público: um histograma por país e a parcela provável de bots em uma amostra de até 100 seguidores ou retweeters |
twitter_user_affiliates | Contas afiliadas a um perfil de organização |
twitter_check_follow_relationship | Relação de seguir entre duas contas, por id ou username (quem segue quem) |
twitter_check_follow_relationship_batch | Uma conta contra até 100 outras em uma chamada, em qualquer direção (quais dessas contas seguem a marca) |
twitter_user_tweets | Tweets originais recentes de um usuário (respostas excluídas) |
twitter_user_tweets_and_replies | Timeline completa de um usuário (tweets + respostas) |
twitter_user_tweets_complete | Um grande lote do histórico de tweets de um usuário por chamada (veja nota de paginação) |
twitter_user_media | Imagens e vídeos que um usuário publicou |
twitter_user_mentions | Tweets públicos recentes mencionando um usuário |
twitter_user_likes | Tweets que um usuário curtiu (aba pública de Curtidas) |
twitter_user_followers | Contas que seguem um usuário |
twitter_user_following | Contas que um usuário segue |
twitter_user_followers_v2 | Seguidores com o formato de resposta v2 (campos mais ricos, cursor mais profundo) |
twitter_user_following_v2 | Seguindo com o formato de resposta v2 (campos mais ricos, cursor mais profundo) |
twitter_user_verified_followers | Apenas seguidores verificados de um usuário |
twitter_followers_you_know | Seguidores de um alvo que sua conta autenticada também segue |
twitter_tweet_detail | Tweet único: texto, autor, métricas, mídia, contexto de citação/resposta |
twitter_tweet_replies | Respostas a um tweet |
twitter_tweet_thread | Thread completa do autor (cadeia de tweets conectados do mesmo autor) |
twitter_tweet_retweeters | Contas que retweetaram um tweet |
twitter_tweet_quotes | Tweets que citam um tweet, com seu texto. Baseado em busca, então count é o que a busca retornou, não o quote_count verdadeiro do tweet |
twitter_list_members | Membros de uma Lista do Twitter/X |
twitter_list_followers | Contas que seguem uma Lista pública (um conjunto diferente de seus membros) |
twitter_list_tweets | Posts dos membros de uma Lista, baseado em busca: filtrável por data since / until, include_replies e product (Mais recentes / Principais), sem retweets |
twitter_list_timeline | Feed nativo X de uma Lista: retweets e a própria ordenação do X incluídos, sem filtros, apenas paginação |
twitter_home_timeline | Timeline inicial da sua conta autenticada (sessão) |
twitter_bookmarks | Bookmarks da sua conta autenticada (sessão) |
twitter_blocking | Contas que sua conta autenticada bloqueou (apenas sua própria lista) (sessão) |
twitter_muting | Contas que sua conta autenticada silenciou (apenas sua própria lista) (sessão) |
twitter_bookmark_search | Busca de texto completo dentro dos seus bookmarks (sessão) |
twitter_bookmark_folders | Pastas de bookmarks da sua conta autenticada (sessão) |
twitter_bookmark_folder_timeline | Tweets dentro de uma das suas pastas de bookmarks, por folder_id (sessão) |
twitter_dm_list | Suas conversas de DM (caixa de entrada), somente leitura (sessão) |
twitter_dm_conversation | Mensagens em uma conversa de DM, somente leitura; passe o min_entry_id da página anterior como max_id para voltar de página (sessão) |
twitter_spaces_info | Metadados e lista de participantes de um X Space, ao vivo ou encerrado (por id do Space) |
twitter_community_search | Encontra Comunidades X por palavra-chave; a etapa de descoberta que produz o id numérico que o restante da família de comunidades precisa |
twitter_community_info | Uma Comunidade X por id numérico: nome, contagens, política de adesão, regras, tópico, banners, admin |
twitter_community_about | Moderadores de uma comunidade e uma prévia de membros, cada um retornado como um perfil de usuário completo, não a linha reduzida que _members/_moderators retornam |
twitter_community_members | Lista de membros de uma comunidade, cada linha carregando o papel Admin / Moderator / Member daquele membro |
twitter_community_moderators | Moderadores e admins de uma comunidade, a partir de sua própria operação upstream (não um filtro sobre a lista) |
twitter_community_tweets | Timeline de posts de uma comunidade, com o post fixado retornado como seu próprio campo pinned |
twitter_community_memberships | A consulta inversa: toda comunidade à qual um determinado user_id numérico pertence |
twitter_grok_chat | Pergunte ao Grok do próprio X, fundamentado em dados X ao vivo, e obtenha a resposta além das fontes que ele citou |
twitter_grok_config | Se a conta autenticada pode usar o Grok e quais modelos ela pode escolher |
twitter_trends | Principais tendências atuais para um local (por country ou woeid), uma aba do X Explore (por category) ou apenas as tendências que o X rotula como Negócios e finanças (category=business_and_finance) |
twitter_trends_locations | Todo local para o qual o X tem tendências, cada um com seu WOEID |
twitter_account_me | Sua conta twitterapis.com: créditos, uso, e-mail (grátis) |
twitter_account_payments | Seu histórico de pagamentos twitterapis.com (grátis) |
twitter_media_status | Estado de processamento de um media_id enviado; faça polling até succeeded antes de anexar vídeo ou GIF (sessão) |
twitter_article_get | Leia o conteúdo completo de um artigo publicado via id/url do tweet de anúncio (público, sem sessão) |
twitter_article_list | Liste seus próprios artigos, filtrados por lifecycle (draft ou published) (sessão) |
Ações de escrita (exigem uma sessão X vinculada)
| Ferramenta | O que faz |
|---|---|
twitter_create_tweet | Publica um tweet; defina reply_to para responder ou quote para citar tweet |
twitter_delete_tweet | Exclui um dos seus tweets (irreversível) |
twitter_favorite_tweet / twitter_unfavorite_tweet | Curtir / descurtir um tweet |
twitter_retweet / twitter_unretweet | Retweetar / desfazer retweet |
twitter_bookmark_tweet / twitter_unbookmark_tweet | Adicionar / remover bookmark |
twitter_follow_user / twitter_unfollow_user | Seguir / deixar de seguir um usuário por user_id ou username (exatamente um) |
twitter_dm_send | Envia uma Mensagem Direta a um usuário pelo recipient_id numérico dele |
twitter_list_create | Cria uma Lista do Twitter/X de propriedade da sua sessão (name, description / is_private opcionais) |
twitter_list_add_member / twitter_list_remove_member | Adicionar / remover uma conta em uma Lista que você possui; member_count volta como prova de que a escrita foi concluída |
twitter_media_upload | Envia uma imagem em base64, retorna um media_id para twitter_create_tweet |
twitter_update_profile | Altera seu próprio nome, bio, localização ou link. Uma atualização PARCIAL: campos omitidos mantêm seus valores, uma string vazia limpa um campo |
twitter_update_avatar | Substitui sua própria foto de perfil. Aceita bytes de imagem em base64 em image, não uma URL e não um media_id. Sem desfazer, e o X não mantém histórico |
twitter_update_banner | Substitui sua própria imagem de cabeçalho. Aceita bytes de imagem em base64 em banner, não uma URL e não um media_id. Sem desfazer, e o X não mantém histórico |
Rascunhos e posts agendados (exigem uma sessão X vinculada)
Um rascunho é privado e nunca é publicado. Um post agendado será publicado publicamente no seu execute_at a menos que você o cancele antes. Ambas as listas leem apenas a sua própria conta.
| Ferramenta | O que faz |
|---|---|
twitter_draft_create | Salva um rascunho privado na sua conta; nada é publicado |
twitter_draft_edit | Substitui o conteúdo de um rascunho por id; os campos enviados tornam-se o rascunho |
twitter_draft_delete | Exclui um rascunho por id; ele nunca foi público, então nada é retirado |
twitter_draft_list | Lista seus rascunhos, cada um com text e thread_truncated |
twitter_scheduled_create | Agenda uma postagem para um execute_at futuro em epoch segundos, não milissegundos |
twitter_scheduled_delete | Cancela uma postagem agendada pendente antes que ela seja enviada |
twitter_scheduled_list | Lista sua fila pendente; execute_at retorna em epoch segundos |
Ambas as ferramentas de listagem podem retornar partial: true, o que significa que a resposta do X foi lida, mas não totalmente compreendida. Isso não é o mesmo que uma lista vazia: em uma leitura limpa, o sinalizador está totalmente ausente, então um array vazio sem partial significa que você realmente não tem nada na fila ou como rascunho.
Artigos (recurso "Notes" de formato longo do X; gravações exigem uma sessão X vinculada)
| Ferramenta | O que faz |
|---|---|
twitter_article_create | Inicia um novo artigo rascunho, retorna seu id |
twitter_article_update_title | Define o título de um artigo rascunho ou publicado |
twitter_article_update_cover_media | Anexa uma imagem já enviada como capa de um artigo (media_id de twitter_media_upload) |
twitter_article_update_content | Substitui o corpo de um artigo rascunho ou publicado (content_state Draft.js que você constrói) |
twitter_article_publish | Publica um rascunho, postando um tweet de anúncio público real (não totalmente reversível) |
twitter_article_unpublish | Reverte um artigo publicado para rascunho (deixa o tweet de anúncio no ar) |
twitter_article_delete | Exclui um artigo (rascunho: exclusão definitiva; publicado: despublicar + excluir o tweet de anúncio), irreversível |
Veja também twitter_article_get e twitter_article_list acima.
Monitoramento (entrega de novas postagens via webhook; gratuito, não medido)
Monitore uma conta X para novas postagens e receba-as no seu próprio endpoint HTTPS, assinado com HMAC, em vez de fazer polling. Registre um webhook primeiro, depois crie um monitor; cada nova postagem de um perfil monitorado é entregue a todos os webhooks ativos na sua conta (ou a um subconjunto restrito via webhook_ids). O CRUD de monitor/webhook é administração de conta, não uma leitura medida do Twitter, então todas as ferramentas abaixo são gratuitas.
| Ferramenta | O que faz |
|---|---|
twitter_monitor_create | Começa a monitorar uma conta X (handle) para novas postagens |
twitter_monitor_list | Lista todos os monitores na sua conta |
twitter_monitor_update | Pausa/retoma um monitor ou altera sua restrição de webhook_ids |
twitter_monitor_delete | Para e remove um monitor (irreversível) |
twitter_monitor_health | Status de um monitor, sinalizador de degradação, intervalo de polling, posição do cursor |
twitter_monitor_account_health | Resumo geral da conta: status do serviço, contagens de monitores ativos/pausados, contagens de resultados de entrega em 24h, em uma chamada |
twitter_monitor_deliveries | Eventos de entrega recentes em todos os monitores, com latência de detecção + entrega |
twitter_x_user_stream_add_user | Drop-in compatível para twitter_monitor_create usando um envelope no formato x_user_stream |
twitter_x_user_stream_remove_user | Drop-in compatível para twitter_monitor_delete usando um envelope no formato x_user_stream |
twitter_x_user_stream_list_users | Drop-in compatível para twitter_monitor_list usando um envelope no formato x_user_stream |
twitter_monitor_webhook_create | Registra uma URL de entrega HTTPS; retorna o segredo de assinatura HMAC uma vez |
twitter_monitor_webhook_list | Lista todos os webhooks registrados na sua conta |
twitter_monitor_webhook_delete | Exclusão suave de um webhook por id (irreversível do lado do chamador) |
twitter_monitor_webhook_test | Envia um evento de teste assinado para um webhook agora, de forma síncrona |
twitter_monitor_webhook_redrive | Reproduz entregas que falharam enquanto seu endpoint estava fora do ar, do mais antigo para o mais recente |
Feedback (relatar um bug ou uma lacuna para a equipe do twitterapis.com sem sair da sua sessão; gratuito)
Modelado na ferramenta de feedback do próprio Claude Code. Quando uma chamada falha de uma forma que não é sua chave, créditos, sessão ou limite de taxa, quando você pede algo que nenhuma ferramenta cobre, ou quando um resultado está claramente errado, o modelo pode rascunhar um relatório em uma fila local (~/.twitterapis/feedback-queue.json, no máximo 10 rascunhos, substitua o diretório com TWITTERAPIS_FEEDBACK_DIR). Nada é enviado até que você peça para revisar a fila e nomeie os rascunhos a enviar. Cada relatório carrega o endpoint, status e id de solicitação da última chamada com falha, seu nome de cliente e a versão deste pacote, para que a equipe possa agir sem acompanhamento. Use twitter_feedback_get com o id de servidor retornado para ver se foi triado, enviado ou recusado.
| Ferramenta | O que faz |
|---|---|
twitter_feedback_send | action: "draft" (padrão) enfileira um relatório localmente e não envia nada; "list" mostra a fila; "send" posta apenas os rascunhos que você nomear para POST /feedback; "discard" os descarta |
twitter_feedback_get | Lê o status de um relatório enviado (new, triaged, shipped, declined) e a resposta da equipe |
twitter_feedback_list | Lista os relatórios que esta conta já enviou, do mais recente para o mais antigo, com filtros status/type e um cursor para paginar |
Configuração de sessão
Vincule uma conta X à sua chave uma vez, para que as leituras e ações de gravação específicas da conta atuem como ela (ou passe auth_token/ct0 por chamada).
| Ferramenta | O que faz |
|---|---|
twitter_customer_session | Registra os cookies de sessão do seu x.com (auth_token + ct0) contra sua chave |
twitter_customer_session_status | Lê a sessão registrada sem alterá-la: conta resolvida, status ativo/inativo, timestamps e qual camada de egress uma gravação usaria. Nunca retorna os cookies. Gratuito |
twitter_customer_session_delete | Revoga essa sessão armazenada, excluindo seu auth_token + ct0 do serviço. Idempotente e gratuito |
twitter_user_login | Faz login com username + password (+ totp_secret para 2FA); armazena a sessão contra sua chave. Retorna uma confirmação, nunca os cookies |
Playbooks e proveniência
Além das ferramentas, o servidor expõe recursos MCP. Um cliente os lista com resources/list e busca um com resources/read, então nada aqui custa contexto até que seja solicitado, e nada disso custa créditos.
Playbooks
Receitas curtas que um agente executa com as ferramentas acima.
| URI | O que cobre |
|---|---|
playbook://launch-day-monitor | Monitorar um lançamento em tempo quase real: configuração de monitor e webhook antes, contagens reais e amplificadores durante, perfis de amplificadores depois |
playbook://competitor-follower-outreach | Transformar os seguidores de outra conta em uma lista qualificada e depois contatá-los a partir da sua conta vinculada |
playbook://account-audit | Uma leitura reproduzível de uma conta: identidade, mix de saída, alcance, engajamento e quais números compartilham uma janela de observação |
playbook://link-x-account | A sequência de vinculação: leia o estado atual, escolha uma rota, o teto de tempo do login, os resultados que precisam de atenção no x.com e o que uma sessão desbloqueia |
playbook://residential-egress | Controle de endereço de saída: os três lugares onde uma URL de proxy se anexa, o que uma URL precisa ser e como ler qual fonte está em vigor |
Proveniência
provenance://tool/{tool_name} retorna, como JSON, de onde veio uma linha que você já possui: o endpoint REST e o método por trás dela, leitura ou gravação, se a chamada foi executada como sua conta X vinculada ou o pool de contas compartilhadas do serviço, o preço por chamada e a URL da documentação.
provenance://tool/twitter_advanced_search
{
"tool": "twitter_advanced_search",
"endpoint": "GET /twitter/tweet/advanced_search",
"kind": "read",
"destructive": false,
"served_by": "the service's shared account pool",
"cost": "$0.0008 per call",
"docs": "https://docs.twitterapis.com/docs/reference/search/tweet-advanced-search"
}
Proveniência upstream em nível de linha (quando o serviço leu do X, se um cache upstream respondeu, qual conta leu) não está em nenhuma resposta que este pacote recebe, então está ausente em vez de adivinhado.
Chamadas bloqueadas respondem com os próximos passos
Uma chamada bloqueada por chave ausente, chave rejeitada, saldo vazio ou sessão X ausente retorna um payload estruturado (em structuredContent e anexado ao texto) com uma lista ordenada de steps, o que resolvê-la unlocks e, para o caso de sessão, o URI do playbook e os resultados que uma nova tentativa não pode corrigir.
Exemplos de uso
Pesquisar tweets de IA em alta
"Encontre os tweets mais populares sobre agentes de IA postados esta semana"
O agente chama twitter_advanced_search com:
query: "AI agents min_faves:200 since:2024-01-01"
product: "Top"
count: 20
Buscar postagens recentes de um usuário
"Pegue os últimos 10 tweets de @sama"
O agente chama twitter_user_tweets com:
username: "sama"
count: 10
Ler um thread completo
"Pegue o thread completo deste tweet: https://x.com/karpathy/status/1849....."
O agente chama twitter_tweet_thread com:
url: "https://x.com/karpathy/status/1849....."
Paginar pelos seguidores
"Liste os primeiros 100 seguidores de @openai, depois os próximos 100"
Primeira chamada, twitter_user_followers: { username: "openai", count: 100 }
Segunda chamada, passe de volta o cursor da primeira resposta: { username: "openai", count: 100, cursor: "<cursor from response>" }
Paginação de twitter_user_tweets_complete
"Puxe todo o histórico de tweets de @elonmusk"
twitter_user_tweets_complete pagina automaticamente no lado do servidor e retorna um lote grande por chamada, mas não garante o histórico completo em uma chamada. Leia o resultado assim:
next_cursoré o sinal de conclusão, nãocount. Não-nulo significa que o histórico está truncado e há mais. Nulo significa que está genuinamente esgotado. A resposta também carregahas_more, o mesmo sinal como booleano.maxé um alvo mínimo, não um limite. As páginas chegam em blocos inteiros, então uma resposta pode conter até uma página (<=100) a mais do que o solicitado. Comportamento ao vivo:max=10retornou 20,max=50retornou 60,max=150retornou 161, e omitirmax(padrão do servidor 200) retornou 201. Nunca assumacount === max.- Cada chamada também tem um orçamento de tempo de parede no servidor, então uma resposta pode ser truncada mesmo quando retornou menos tweets do que o solicitado. Essa é a segunda razão pela qual
countnão pode dizer se você terminou. - A cobrança é fixa em $0,0024 por chamada, independentemente de quantos tweets retornem, então menos chamadas grandes custam menos do que muitas pequenas.
Para retomar, passe o next_cursor de volta diretamente como cursor e repita até que retorne nulo:
Primeira chamada, twitter_user_tweets_complete: { user_id: "44196397", max: 800 }
Depois, enquanto next_cursor for não-nulo: { user_id: "44196397", max: 800, cursor: "<next_cursor from previous response>" }
Monitorar menções à marca
"Mostre-me tweets recentes mencionando @twitterapis"
O agente chama twitter_user_mentions com:
username: "twitterapis"
count: 50
Solução de problemas
HTTP 401 (invalid or missing API key) Verifique se TWITTERAPIS_KEY está definido corretamente na configuração do seu cliente MCP e corresponde à chave mostrada no seu dashboard.
HTTP 402 (insufficient credits) Recarregue em twitterapis.com/dashboard. Seus primeiros $0,50 são gratuitos no cadastro.
HTTP 403 (access forbidden) A conta ou o tweet pode ser privado/protegido, ou seu plano não inclui este endpoint.
HTTP 404 (not found) O usuário, tweet ou lista pode ter sido excluído, suspenso, ou o id/handle está errado.
HTTP 429 (rate limited) Aguarde alguns segundos e tente novamente. Se isso ocorrer com frequência, adicione "TWITTERAPIS_TIMEOUT_MS": "60000" à sua configuração de ambiente e espaçe as solicitações em massa.
Request failed: timed out after 30000ms O timeout padrão é de 30 s. Para buscas paginadas grandes, defina TWITTERAPIS_TIMEOUT_MS para um valor maior (ex.: 60000).
As ferramentas não aparecem no Claude / Cursor Garanta que npx esteja no seu PATH e que o Node.js 18+ esteja instalado (node --version). Verifique os logs do cliente MCP para erros de inicialização.
Preços
As chamadas são cobradas na sua conta twitterapis.com. A maioria dos endpoints custa $0,0008/chamada: quase todas as leituras (busca, perfis, tweets, seguidores, curtidas) além das ações simples de escrita (curtir, retweetar, salvar, seguir e seus desfazimentos, excluir). Na taxa de leitura, isso equivale a $0,04 por 1.000 tweets, já que cada chamada retorna cerca de 20 tweets. Os endpoints premium custam um pouco mais: criação de tweet, envio de DM (twitter_dm_send) e leituras de DM (twitter_dm_list, twitter_dm_conversation) a $0,0016/chamada, histórico completo de tweets (twitter_user_tweets_complete) a $0,0024/chamada, um thread completo de tweets (twitter_tweet_thread) e uma resposta Grok (twitter_grok_chat) a $0,004/chamada, e as escritas de edição de artigo (twitter_article_create, twitter_article_update_title, twitter_article_update_cover_media, twitter_article_update_content, twitter_article_publish, twitter_article_unpublish) a $0,0016. A superfície de composição custa $0,0016 para twitter_draft_create, twitter_draft_edit, twitter_scheduled_create e, observe, AMBAS AS LEITURAS DE LISTA (twitter_draft_list, twitter_scheduled_list), que são as duas leituras que não estão na taxa de leitura; twitter_draft_delete e twitter_scheduled_delete custam $0,0008/chamada, enquanto twitter_article_get, twitter_article_list e twitter_article_delete permanecem na taxa padrão de $0,0008/chamada. As três escritas de perfil (twitter_update_profile, twitter_update_avatar, twitter_update_banner) custam $0,0016/chamada cada. Seus primeiros $0,50 são gratuitos. Veja twitterapis.com/pricing. twitter_user_about_batch é cobrado por conta respondida, $0,0008 cada, então uma chamada com 100 contas custa até $0,08. twitter_check_follow_relationship_batch cobra $0,0008 por par respondido, e twitter_audience_summary cobra $0,0008 por página de amostra mais por conta amostrada respondida.
Links
- Documentação: docs.twitterapis.com
- Painel / chaves de API: twitterapis.com/dashboard
- Preços: twitterapis.com/pricing
- URL base da API REST (chame diretamente, sem MCP):
https://api.twitterapis.com
FAQ
Preciso de uma conta de desenvolvedor X (Twitter)? Não. Obtenha uma chave de API em twitterapis.com/signup; não há etapa de aplicação ou aprovação.
É somente leitura? Não. 68 ferramentas de leitura funcionam apenas com sua chave de API; 44 ações de escrita (publicar, salvar ou agendar uma publicação, curtir, retweetar, seguir, DM, upload de mídia, atualizações de nome/bio/avatar/banner do perfil, criar lista/adicionar membro/remover membro, criar/editar/publicar/excluir artigo, criar/atualizar/excluir monitor/webhook, enviar feedback) atuam como uma conta X vinculada ou com credenciais inline por chamada, exceto CRUD de monitor/webhook e feedback, que são administração de conta e precisam apenas da sua chave de API.
Quais clientes são suportados? Claude Desktop, Cursor, Windsurf e VS Code (modo agente do Copilot), ou qualquer cliente Model Context Protocol.
Como é cobrado? Por requisição. Novas chaves começam com $0,50 em créditos gratuitos, sem necessidade de cartão. Veja preços.
Ele armazena minha chave ou dados? Não. O servidor não mantém estado e encaminha sua chave de API em cada chamada.
Mantenedores
src/tools.js é gerado. Não o edite. O catálogo é construído no momento da compilação a partir de duas entradas commitadas:
test/openapi.snapshot.json, uma cópia vendida da especificação OpenAPI publicada, que fornece a estrutura: quais endpoints existem, quais parâmetros cada um aceita, se um parâmetro é obrigatório e seu tipo.scripts/tools.overrides.mjs, escrita à mão, que fornece tudo o que a especificação não pode expressar: as descrições de ferramentas e argumentos que um modelo lê para decidir como chamar uma ferramenta, as regras entre campos ("forneça exatamente um deusernameouuser_id"), os argumentos de credenciais por chamada que viajam como cabeçalhosx-*, e os sinalizadores de escrita / destrutiva / corpo JSON. A fraseCost:e o linkDocs:de cada descrição são derivados da especificação.
As descrições declaram apenas fatos do produto: o que uma ferramenta retorna, recebe e custa. Elas nunca nomeiam outra ferramenta e nunca instruem o modelo; orientações sobre qual ferramenta usar quando, como a saída de uma ferramenta alimenta outra e quando redigir feedback vivem nas instruções do servidor (INSTRUCTIONS em src/server.js). test/description-compliance.mjs aplica isso em cada descrição de ferramenta e parâmetro que um cliente lista, tanto nos modos stdio quanto hospedado.
A especificação é vendida de propósito. Nada é buscado no momento da instalação ou na inicialização do servidor, então o pacote publicado é um artefato fixo, em vez de um que depende de um hostname ainda respondendo.
npm run openapi:refresh # re-vendor the spec, prints the route diff
npm run build # regenerate src/tools.js
npm test # gates, incl. "src/tools.js matches the generator"
npm test falha se src/tools.js foi editado à mão ou deixado desatualizado, se o catálogo e a especificação ao vivo discordarem, se a lista de ferramentas e este README discordarem, ou se uma descrição carregar uma instrução de modelo, o nome de outra ferramenta ou texto oculto (npm run check:description-compliance).
Licença
MIT