Facebook MCP Server

Páginas e perfis públicos do Facebook com curtidas, seguidores, detalhes de contato e publicações, em JSON.

Documentação

Facebook MCP Server

Um servidor de Model Context Protocol (MCP) hospedado que dá ao Claude, Cursor, Windsurf e qualquer outro cliente MCP uma ferramenta somente leitura do Facebook. Consulte uma página ou perfil público pelo seu identificador e obtenha o registro da página com a contagem exata de curtidas, detalhes de contato e proprietário, além do feed de postagens com reações, comentários e compartilhamentos, tudo como JSON estruturado, sem aplicativo de desenvolvedor Meta e sem nada para hospedar.

Ele lê páginas públicas do Facebook que um visitante desconectado pode ver. Grupos e contas pessoais privadas estão fora do escopo.

1.000 créditos grátis todo mês, sem cartão de crédito, o que equivale a 100 chamadas do Facebook na taxa de 10 créditos.

https://mcp.hasdata.com/api/mcp?apis=facebook

Glama score tool contract MCP Tools npm PyPI License

Conteúdo

O que você precisa

Um cliente MCP e uma chave de API HasData do painel, gratuita para criar sem cartão, e o plano gratuito cobre cerca de 100 chamadas por mês na taxa de 10 créditos. Este é um servidor remoto, então o caminho mais simples é uma URL e um cabeçalho x-api-key, sem contêiner para executar. Um cliente que só fala stdio o alcança por meio de um lançador leve, publicado como @hasdata/facebook-mcp no npm e hasdata-facebook-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=facebook
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 facebook "https://mcp.hasdata.com/api/mcp?apis=facebook" \
  --header "x-api-key: HASDATA_API_KEY"
Claude Desktop

Configurações, depois Conectores, depois Adicionar conector personalizado, e então cole https://mcp.hasdata.com/api/mcp?apis=facebook e entre.

Para o caminho do arquivo de configuração, o Claude Desktop carrega apenas servidores locais (stdio), então ele alcança um servidor remoto por meio de um lançador stdio. O pacote @hasdata/facebook-mcp é esse lançador, e ele lê a chave do ambiente. Adicione isto ao claude_desktop_config.json:

{
  "mcpServers": {
    "facebook": {
      "command": "npx",
      "args": ["-y", "@hasdata/facebook-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

Para Python em vez de Node, troque o lançador pelo pacote PyPI, que o uvx executa sem instalação manual:

{
  "mcpServers": {
    "facebook": {
      "command": "uvx",
      "args": ["hasdata-facebook-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}
Cursor

~/.cursor/mcp.json para cada projeto, ou .cursor/mcp.json para um único:

{
  "mcpServers": {
    "facebook": {
      "url": "https://mcp.hasdata.com/api/mcp?apis=facebook",
      "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": {
    "facebook": {
      "serverUrl": "https://mcp.hasdata.com/api/mcp?apis=facebook",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}
VS Code

.vscode/mcp.json no espaço de trabalho:

{
  "servers": {
    "facebook": {
      "type": "http",
      "url": "https://mcp.hasdata.com/api/mcp?apis=facebook",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

Exemplos de prompts

  • Quantas pessoas curtem a página da Nike e quantas estão falando sobre ela esta semana?
  • Traga os detalhes de contato e o proprietário confirmado desta página do Facebook.
  • Leia as últimas dez postagens desta página e me diga qual teve mais compartilhamentos.
  • Compare a mistura de reações nas postagens desta marca com as do concorrente.
  • Esta página do Facebook é verificada e qual categoria ela lista?
  • Percorra o feed desta página até o início do mês e liste as postagens com vídeo.

Uma chamada retorna o registro da página e a postagem mais recente. Percorrer o feed leva mais uma chamada a cada três postagens, usando o token que a resposta anterior retorna.

Ferramentas

Uma ferramenta, 10 créditos por chamada bem-sucedida.

Obter perfil do Facebook

hasdata_facebook_profile_getFacebookProfile

Uma página ou perfil público, com seu feed.

FerramentaCréditosO que retorna
hasdata_facebook_profile_getFacebookProfile10O registro da página com curtidas, seguidores, detalhes de contato e proprietário, a postagem mais recente, a faixa de fotos e um token para as próximas três postagens
ParâmetroTipoObrigatórioObservações
handlestringsimO nome de usuário, com ou sem @, ou o id numérico de uma URL profile.php?id=…
languagestringIdioma em que a página é renderizada, um dos 32 códigos, como en, de, pt ou zh-hans
nextPageTokenstringCursor da resposta anterior, para ler as próximas três postagens

A primeira chamada retorna quatro blocos. profile é o registro da página, posts contém a postagem mais recente, photos é a faixa de imagens recentes e pagination carrega postsPerPage, nextPage e o nextPageToken para continuar.

Toda chamada feita com um token retorna apenas posts e pagination, três postagens por vez, com um token novo até o feed terminar e o token desaparecer.

{
  "profile": {
    "id": "100044541544829",
    "pageId": "15087023444",
    "name": "Nike",
    "username": "nike",
    "url": "https://www.facebook.com/nike",
    "category": "Sportswear Store",
    "biography": "Just Do It.",
    "likesCount": 39545204,
    "talkingAboutCount": 173971,
    "checkInsCount": 18299,
    "followersCount": "39M followers",
    "followingCount": "24 following",
    "verified": true,
    "website": "nike.com",
    "websiteUrl": "http://nike.com/",
    "phone": "+48 58 881 27 61",
    "owner": { "name": "NIKE, Inc.", "isConfirmed": true },
    "profilePicUrl": "https://scontent.fmex5-1.fna.fbcdn.net/v/t39.30808-1/284964043_10159903868513445_7696353984967674128_n.jpg",
    "coverPhotoUrl": "https://scontent.fmex25-1.fna.fbcdn.net/v/t39.30808-6/285211224_10159903868008445_5477337468887983165_n.png"
  },
  "posts": [
    {
      "id": "1393461115481927",
      "url": "https://www.facebook.com/reel/2166091230582141/",
      "text": "Leave your limits at the surface. #JustDoIt",
      "hashtags": ["#JustDoIt"],
      "timestamp": "2025-09-15T16:01:59.000Z",
      "reactionsCount": 7885,
      "commentsCount": 2461,
      "sharesCount": 1124,
      "reactions": [{ "type": "Like", "count": 6491 }],
      "media": [{ "id": "2166091230582141", "type": "Video" }]
    }
  ],
  "photos": [{ "id": "1095811278580247", "type": "Photo", "image": "https://scontent.fmex22-1.fna.fbcdn.net/v/t39.30808-6/471313661_18515827156020081_2460706748949541958_n.jpg" }],
  "pagination": { "postsPerPage": 3, "nextPage": 2, "nextPageToken": "eyJjdXJzb3IiOiJDZzhPYjNKbllXNXBZMTlqZFhKemIzS…" }
}

Erros e caminhos de falha

Planeje para estes casos em vez de assumir um caminho feliz.

Três das contagens são números e duas são strings, e isso não é um bug. likesCount, talkingAboutCount e checkInsCount são os números exatos que o Facebook publica. followersCount e followingCount chegam como o texto arredondado e localizado que a página mostra, "39M followers" em inglês e "39 Mio. Follower" quando language é de. Compare com os números, exiba as strings.

language muda as strings, não os números. category mudou de Sportswear Store para Sportbekleidungsgeschäft sob de, enquanto likesCount permaneceu um número. Escolha o idioma para o leitor, não para a matemática.

Uma página que não existe, foi excluída ou não é pública ainda responde 200. A resposta então carrega error em vez de profile, e a chamada é cobrada. Teste profile antes de lê-lo. Grupos e contas pessoais privadas também caem aqui.

A primeira página do feed contém uma postagem, não três. postsPerPage diz 3, e as páginas seguintes retornam três, mas a resposta inicial carrega apenas a postagem mais recente junto com o perfil e as fotos. Conte o que você recebeu em vez do que o campo promete.

Páginas posteriores removem profile e photos. Uma chamada feita com nextPageToken retorna apenas posts e pagination. Guarde o perfil da primeira resposta em vez de esperá-lo novamente.

O token é o único caminho adiante. nextPage é um número de página para seu próprio controle, e não há parâmetro que o aceite. Passe o nextPageToken anterior inalterado e pare quando uma resposta chegar sem ele.

Os detalhes de contato são o que a página mostra para a solicitação, não um registro canônico. Uma página de marca global pode exibir um número de telefone regional, e website é o texto exibido enquanto websiteUrl é o link. Leia owner.isConfirmed antes de tratar o nome do proprietário como verificado.

As URLs de imagem são links do CDN do Facebook com parâmetros assinados. Elas expiram. Busque o que você precisa prontamente e armazene o arquivo, não a URL.

Resultados que carregam dados também carregam um requestMetadata.id que vale citar no suporte.

Preços, plano gratuito e limites

A ferramenta do Facebook custa 10 créditos por chamada bem-sucedida. O tamanho da resposta não muda o preço, e uma página do feed custa o mesmo que a chamada inicial, então uma leitura de trinta postagens é uma chamada mais dez.

O plano gratuito é 1.000 créditos todo mês sem cartão, o que equivale a 100 chamadas do Facebook na taxa base. Ele renova com o ciclo de cobrança, 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$ 1,00 no Business, US$ 0,84 no Growth e US$ 0,74 nos maiores planos de alto volume.

Seu plano também define a concorrência. O plano gratuito permite 1 solicitação por vez, Startup 15, Business 30, Growth 50, e os planos de alto volume vão de 200 a 1.500. Tente novamente no 429 com backoff em qualquer coisa não supervisionada, porque um agente que enriquece uma lista de páginas atingirá o teto antes de você.

Uma solicitação que retorna não-200 não é cobrada. Uma chamada bem-sucedida que não encontra página ainda é uma chamada.

Comparação

A Graph API da Meta é o caminho oficial para dados de página, e ela é feita para uma situação diferente.

Meta Graph APIEste servidor
ElegibilidadeUm aplicativo de desenvolvedor Meta, um token de acesso e App Review para páginas que você não gerenciaUma chave de API
Páginas que você pode lerSuas próprias páginas por completo, outras apenas com permissões revisadasQualquer página ou perfil público
ConfiguraçãoCriação de aplicativo, permissões, manipulação de token, revisãoUm cabeçalho
Reações em postagensContagens por tipo em páginas que você gerenciaContagens por tipo em qualquer página pública
Idioma do registroLocalidade do seu aplicativoQualquer um dos 32, por chamada
CustoGrátis dentro dos limites de taxaPago além do plano gratuito, 10 créditos por chamada

A linha que decide é quais páginas você pode ler. A Graph API é a ferramenta certa para páginas que você administra, e sua permissão Page Public Content Access para todo o resto exige verificação de negócio e uma revisão com caso de uso declarado. Quando a página é sua, use a Graph API, ela é gratuita e completa.

FAQ

Existe um servidor MCP oficial do Facebook?

A Meta não publica um para ler páginas públicas. Este é mantido pela HasData e lê páginas públicas do Facebook.

O que é um servidor MCP do Facebook?

Um servidor MCP expõe ferramentas que um cliente de IA pode chamar. Este transforma uma página pública do Facebook e seu feed em JSON sobre o qual um agente pode raciocinar, sem navegador ou biblioteca de scraping na sua stack.

Preciso de uma conta no Facebook ou de um aplicativo de desenvolvedor Meta?

Não. A única credencial é sua chave HasData.

Posso ler um perfil pessoal ou um grupo?

Um perfil pessoal público funciona da mesma forma que uma página. Contas privadas e grupos não são suportados e retornam o erro de indisponibilidade.

Posso passar um id numérico em vez de um nome de usuário?

Sim. Tanto o id quanto o pageId que uma resposta retorna resolvem como handle, então uma página alcançada uma vez pelo nome pode ser rastreada pelo id depois.

Como leio o feed inteiro?

Chame uma vez com o identificador e continue chamando com o nextPageToken de cada resposta até que uma resposta chegue sem ele. Três postagens voltam por token.

Por que followersCount é texto enquanto likesCount é um número?

Porque é assim que o Facebook os publica. A contagem de curtidas e a contagem de pessoas falando são exatas na página, e a contagem de seguidores é mostrada arredondada e localizada. A resposta passa ambos como estão.

Posso usar isso junto com outras APIs HasData?

Sim. Uma chave cobre tudo, e um endpoint atende a todos por meio do parâmetro apis. Aponte um cliente para ?apis=facebook,instagram para obter ambos os conjuntos de ferramentas em uma conexão, ou para mcp.hasdata.com/api/mcp para o catálogo completo.

A HasData é afiliada à Meta ou ao Facebook?

Não. O HasData é um serviço independente e não é afiliado, endossado ou patrocinado pela Meta. Facebook é uma marca registrada de seu respectivo proprietário. As ferramentas trabalham apenas com dados publicamente disponíveis, e você é responsável por usar os resultados em conformidade com os termos da Meta e a lei aplicável a você.

Conformidade e dados pessoais

Um registro de página para uma empresa é um registro comercial, e um perfil pessoal público é dado pessoal no sentido mais simples, com nome, foto, biografia e feed público. A ferramenta não distingue os dois, então seu propósito precisa distinguir. Mantenha-se no que seu caso de uso precisa, não construa perfis de indivíduos com os quais você não tem relação comercial e verifique suas obrigações sob o GDPR, o CCPA e os termos da Meta antes de armazenar qualquer coisa. Dados de contato em uma página são publicados para clientes, e o marketing para eles é regulamentado separadamente novamente.

Links do HasData

Outros servidores MCP do HasData: Instagram, TikTok, YouTube, Google Search, Google Images, Google Scholar, Google Maps, Google Trends, Google Flights, Bing, DuckDuckGo, Amazon, Walmart, Shopify, Yelp, Yellow Pages, Zillow, Redfin, Airbnb, Booking.com, Indeed, Glassdoor, Web Scraping.

Desenvolvimento

O lançador é uma ponte fina de stdio para o servidor remoto, então não há nada para compilar.

npm install
HASDATA_API_KEY=your_key_here npm test

Os testes em test/ verificam o contrato da ferramenta, a parte que pode quebrar sem um commit aqui. Eles verificam que ?apis=facebook retorna a única ferramenta esperada, que seu nome não mudou, que ainda requer handle e carrega uma descrição, que language ainda oferece os códigos que este README nomeia e que a chave em uso é realmente aceita.

Um teste lê uma página ao vivo e verifica as duas coisas nas quais este README se apoia: que likesCount é um número em vez de texto de exibição, e que pagination.nextPageToken chega, porque sem o token, a caminhada de feed que este README documenta não existe. Essa chamada custa 10 créditos, que é o preço de um canário que pode falhar pelo motivo certo.

A suíte de contrato também roda semanalmente em um cronograma, porque a lista de ferramentas upstream pode mudar sem que ninguém toque neste repositório.

Contribuindo

Uma tabela de ferramentas, uma amostra de resposta ou um comportamento documentado que não corresponde à realidade vale uma issue. Há um modelo exatamente para isso. Pull requests são bem-vindos para o mesmo e para qualquer coisa no lançador.

Licença

MIT, veja LICENSE.