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
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
- Comparação
- FAQ
- Links HasData
- Desenvolvimento
- Contribuição
- Licença
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.
| Campo | Valor |
|---|---|
| URL | https://mcp.hasdata.com/api/mcp?apis=facebook |
| 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 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.
| Ferramenta | Créditos | O que retorna |
|---|---|---|
hasdata_facebook_profile_getFacebookProfile | 10 | O 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âmetro | Tipo | Obrigatório | Observações |
|---|---|---|---|
handle | string | sim | O nome de usuário, com ou sem @, ou o id numérico de uma URL profile.php?id=… |
language | string | Idioma em que a página é renderizada, um dos 32 códigos, como en, de, pt ou zh-hans | |
nextPageToken | string | Cursor 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 API | Este servidor | |
|---|---|---|
| Elegibilidade | Um aplicativo de desenvolvedor Meta, um token de acesso e App Review para páginas que você não gerencia | Uma chave de API |
| Páginas que você pode ler | Suas próprias páginas por completo, outras apenas com permissões revisadas | Qualquer página ou perfil público |
| Configuração | Criação de aplicativo, permissões, manipulação de token, revisão | Um cabeçalho |
| Reações em postagens | Contagens por tipo em páginas que você gerencia | Contagens por tipo em qualquer página pública |
| Idioma do registro | Localidade do seu aplicativo | Qualquer um dos 32, por chamada |
| Custo | Grátis dentro dos limites de taxa | Pago 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
- Documentação da API de Perfil do Facebook, o endpoint REST por trás desta ferramenta
- Documentação do servidor MCP
- Preços
- Painel
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.