HasData Facebook

com.hasdata由 hasdata.com 發布官方發布者v1.0.3更新於 Nov 2, 2026

Public Facebook pages and profiles with likes, followers, contact details and posts, as JSON.

發布方自己的服務:HasData Airbnb

已驗證Streamable HTTP可網頁執行網頁搜尋與抓取資料與分析商業與電商

概覽

AI 產生的概覽

HasData Facebook 提供一個唯讀工具,把公開的 Facebook 粉絲專頁或個人檔案及其貼文串轉成結構化 JSON,供 AI 助理使用。

可以做什麼
  • 依 handle、@使用者名稱或數字 ID 查詢公開的 Facebook 粉絲專頁或個人檔案,取得名稱、類別、簡介、精確按讚數、討論人數與打卡數、追蹤者文字、驗證狀態、網站、電話與擁有者。
  • 讀取最新一則貼文,包含內文、主題標籤、時間、各類型表情回應、留言與分享數,以及近期圖片列表。
  • 透過每次回應中的 nextPageToken 逐頁讀取貼文串,每次三則,直到權杖消失。
  • 可從 32 種語言代碼中選擇頁面呈現語言,並透過一個不消耗額度的資源讀取可用語言清單。
適用情境
適合助理需要公開 Facebook 粉絲專頁的指標、聯絡資訊、驗證狀態或近期貼文互動資料,用於研究、競品比較或報告,且不想申請 Meta 開發者應用程式或使用瀏覽器時。不適用於社團與私密帳號。
執行需求
需要 HasData API 金鑰:遠端端點以 x-api-key 標頭傳送,npm 或 PyPI 的 stdio 啟動器則透過 HASDATA_API_KEY 環境變數提供。需要 MCP 用戶端;使用 npx 需 Node.js,使用 Python 套件需 uv/uvx。需能連線至託管端點。免費額度每月 1,000 點,約 100 次呼叫。
安裝前請注意
每次成功呼叫消耗 10 點,查無頁面的呼叫同樣計費,因此逐頁讀取貼文串與批次補齊清單會快速用掉額度;付費方案每月 59 美元起。金鑰屬於機密。結果可能包含公開的個人檔案,屬於個人資料,聯絡資訊另受行銷法規規範;儲存前請確認 GDPR、CCPA 與 Meta 條款。圖片連結是帶簽章的 CDN 網址,會過期。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 HasData Facebook,將其新增到工作區。
  2. 連接 x-api-key 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/com.hasdata%2Ffacebook/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "hasdata-facebook": {
      "type": "http",
      "url": "https://mcp.hasdata.com/mcp?apis=facebook",
      "headers": {
        "x-api-key": "<YOUR_API_KEY>"
      }
    }
  }
}

README

Facebook MCP Server

A hosted Facebook MCP server that gives Claude, Cursor, Windsurf and any other MCP client one read-only Facebook tool. Look up a public page or profile by its handle and get the page record with its exact like count, contact details and owner, plus the post feed with reactions, comments and shares, all as structured JSON, with no Meta developer app and nothing to host.

It reads public Facebook pages that a signed-out visitor can see. Groups and private personal accounts are out of scope.

1,000 free credits every month, no card required, which is 100 Facebook calls at the 10-credit rate.

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

[Glama score] [tool contract] [MCP] [Tools]

Contents

What you need

An MCP client and a HasData API key from the dashboard, free to create with no card, and the free tier covers about 100 calls a month at the 10-credit rate. This is a remote server, so the simplest path is a URL and an x-api-key header, with no container to run. A client that only speaks stdio reaches it through a thin launcher, published as @hasdata/facebook-mcp on npm and hasdata-facebook-mcp on PyPI, shown below.

Quick start

The server URL is the same for every client. We run it hands-on in Claude Code and Claude Desktop. The other blocks follow each client's own documented format for a remote server.

FieldValue
URLhttps://mcp.hasdata.com/mcp?apis=facebook
TransportHTTP, streamable
Auth headerx-api-key: HASDATA_API_KEY

Clients with OAuth support can add the same URL as a connector and sign in without putting a key in a config file.

Claude Code
bash
claude mcp add --transport http facebook "https://mcp.hasdata.com/mcp?apis=facebook" \  --header "x-api-key: HASDATA_API_KEY"
Claude Desktop

Settings, then Connectors, then Add custom connector, then paste https://mcp.hasdata.com/mcp?apis=facebook and sign in.

For the config-file route, Claude Desktop loads only local (stdio) servers, so it reaches a remote server through a stdio launcher. The @hasdata/facebook-mcp package is that launcher, and it reads the key from the environment. Add this to claude_desktop_config.json:

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

For Python instead of Node, swap the launcher for the PyPI package, which uvx runs without a manual install:

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

~/.cursor/mcp.json for every project, or .cursor/mcp.json for one:

json
{  "mcpServers": {    "facebook": {      "url": "https://mcp.hasdata.com/mcp?apis=facebook",      "headers": { "x-api-key": "HASDATA_API_KEY" }    }  }}
Windsurf

~/.codeium/windsurf/mcp_config.json. Windsurf calls the field serverUrl, not url:

json
{  "mcpServers": {    "facebook": {      "serverUrl": "https://mcp.hasdata.com/mcp?apis=facebook",      "headers": { "x-api-key": "HASDATA_API_KEY" }    }  }}
VS Code

.vscode/mcp.json in the workspace:

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

Example prompts

  • How many people like the Nike page, and how many are talking about it this week?
  • Pull the contact details and the confirmed owner of this Facebook page.
  • Read the last ten posts on this page and tell me which got the most shares.
  • Compare the reaction mix on this brand's posts with its competitor's.
  • Is this Facebook page verified, and what category does it list?
  • Walk this page's feed back to the start of the month and list the posts with video.

One call returns the page record and the newest post. Walking the feed takes one more call per three posts, using the token the previous response returns.

Tools

ToolWhat it returns
hasdata_facebook_profile_getFacebookProfileFetches a public Facebook page or profile by handle (username, @username or numeric profile id) and returns page id, name, username, category, bio, exact likes and…. 10 credits a call

One tool, 10 credits per successful call.

Get Facebook profile

hasdata_facebook_profile_getFacebookProfile

A public page or profile, with its feed.

ParameterTypeRequiredNotes
handlestringyesThe username, with or without @, or the numeric id from a profile.php?id=… URL
languagestringLanguage the page is rendered in, one of 32 codes such as en, de, pt or zh-hans
nextPageTokenstringCursor from the previous response, to read the next three posts

The first call returns four blocks. profile is the page record, posts holds the newest post, photos is the strip of recent images, and pagination carries postsPerPage, nextPage and the nextPageToken to continue with.

Every call made with a token returns posts and pagination only, three posts at a time, with a fresh token until the feed ends and the token disappears.

json
{  "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…" }}

Prompts and resources

The server exposes one resource, the accepted values of the single parameter that takes a fixed list. Reading it is cheaper than learning the vocabulary from a rejected call, and it costs no credits.

ParameterValuesWhat it selects
language32Language the page is rendered in. Facebook serves a page in the language of the request, so this changes the localised strings (followersCount, followingCount, category) while the exact figures (likesCount, talkingAboutCount) stay numeric in every language.

Its URI is hasdata://facebook/language.

The list is served without an API key, so a client can read it before a user has signed up.

Errors and failure paths

Plan for these rather than assuming a happy path.

Three of the counts are numbers and two are strings, and that is not a bug. likesCount, talkingAboutCount and checkInsCount are the exact figures Facebook publishes. followersCount and followingCount arrive as the rounded, localised text the page shows, "39M followers" in English and "39 Mio. Follower" when language is de. Compare with the numbers, display the strings.

language changes the strings, not the numbers. category moved from Sportswear Store to Sportbekleidungsgeschäft under de, while likesCount stayed a number. Pick the language for the reader, not for the maths.

A page that does not exist, was deleted or is not public still answers 200. The response then carries error instead of profile, and the call is billed. Test for profile before you read it. Groups and private personal accounts land here too.

The first page of the feed holds one post, not three. postsPerPage says 3, and pages two onward do return three, but the opening response carries the newest post alone alongside the profile and photos. Count what you got rather than what the field promises.

Later pages drop profile and photos. A call made with nextPageToken returns posts and pagination only. Keep the profile from the first response instead of expecting it again.

The token is the only way forward. nextPage is a page number for your own bookkeeping, and there is no parameter that takes it. Pass the previous nextPageToken unchanged, and stop when a response arrives without one.

Contact details are what the page shows to the request, not a canonical record. A global brand page can surface a regional phone number, and website is the display text while websiteUrl is the link. Read owner.isConfirmed before you treat the owner name as verified.

Image URLs are Facebook CDN links with signed parameters. They expire. Fetch what you need promptly and store the file, not the URL.

Results that carry data also carry a requestMetadata.id worth quoting in support.

Pricing, free tier and limits

The Facebook tool costs 10 credits per successful call. Response size does not change the price, and a page of the feed costs the same as the opening call, so a thirty-post read is one call plus ten more.

The free tier is 1,000 credits every month with no card, which is 100 Facebook calls at the base rate. It renews with the billing cycle, so a low-volume agent runs on the free tier indefinitely.

Paid plans start at $59 a month for 200,000 credits, which is 20,000 calls. The unit price falls with volume, from $2.95 per 1,000 calls on the entry plan to $1.19 on Basic and $0.83 across the Growth tiers. Current figures live on the pricing page.

Your plan also sets concurrency. The free tier allows 5 requests at a time, Startup 5, Basic 15, and the Growth tiers run from 50 to 500. Retry on the 429 with a backoff in anything unattended, because an agent that enriches a list of pages will reach the ceiling before you do.

A request that comes back non-200 is not billed. A successful call that finds no page is still a call.

How it compares

Meta's Graph API is the official route to page data, and it is built for a different situation.

Meta Graph APIThis server
EligibilityA Meta developer app, an access token, and App Review for pages you do not manageAn API key
Pages you can readYour own pages in full, others only through reviewed permissionsAny public page or profile
SetupApp creation, permissions, token handling, reviewOne header
Post reactionsPer-type counts on pages you managePer-type counts on any public page
Language of the recordYour app's localeAny of 32, per call
CostFree within rate limitsPaid past the free tier, 10 credits a call

The row that decides it is which pages you can read. The Graph API is the right tool for pages you administer, and its Page Public Content Access permission for everything else needs a business verification and a review with a stated use case. When the page is yours, use the Graph API, it is free and complete.

FAQ

Is there an official Facebook MCP server?

Meta does not publish one for reading public pages. This one is maintained by HasData and reads public Facebook pages.

What is a Facebook MCP server?

An MCP server exposes tools an AI client can call. This one turns a public Facebook page and its feed into JSON an agent can reason over, without a browser or a scraping library in your stack.

Do I need a Facebook account or a Meta developer app?

No. The only credential is your HasData key.

Can I read a personal profile or a group?

A public personal profile works the same way as a page. Private accounts and groups are not supported and come back with the not-available error.

Can I pass a numeric id instead of a username?

Yes. Both the id and the pageId a response returns resolve as handle, so a page reached once by name can be tracked by id afterwards.

How do I read the whole feed?

Call once with the handle, then keep calling with the nextPageToken from each response until a response arrives without one. Three posts come back per token.

Why is followersCount text while likesCount is a number?

Because that is how Facebook publishes them. The like count and the talking-about count are exact on the page, and the follower count is shown rounded and localised. The response passes both through as they are.

Can I use this together with other HasData APIs?

Yes. One key covers everything, and one endpoint serves them all through the apis parameter. Point a client at ?apis=facebook,instagram to get both tool sets in one connection, or at mcp.hasdata.com/mcp for the full catalogue.

Is HasData affiliated with Meta or Facebook?

No. HasData is an independent service and is not affiliated with, endorsed by, or sponsored by Meta. Facebook is a trademark of its respective owner. The tools work with publicly available data only, and you are responsible for using the results in line with Meta's terms and the law that applies to you.

Compliance and personal data

A page record for a business is a business record, and a public personal profile is personal data in the plainest sense, with a name, a photo, a bio and a public feed. The tool does not tell the two apart, so your purpose has to. Keep to what your use case needs, do not build profiles of individuals you have no business with, and check your obligations under the GDPR, the CCPA and Meta's terms before storing anything. Contact details on a page are published for customers, and marketing to them is regulated separately again.

HasData links

Other HasData MCP servers: 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.

Development

The launcher is a thin stdio bridge to the remote server, so there is nothing to build.

bash
npm installHASDATA_API_KEY=your_key_here npm test

The tests in test/ assert the tool contract, the part that can break without a commit here. They check that ?apis=facebook returns the one expected tool, that its name has not changed, that it still requires handle and carries a description, that language still offers the codes this README names, and that the key in use is actually accepted.

One test reads a live page and asserts the two things this README leans on: that likesCount is a number rather than display text, and that pagination.nextPageToken arrives, because without the token the feed walk this README documents does not exist. That call costs 10 credits, which is the price of a canary that can fail for the right reason.

The contract suite also runs weekly on a schedule, because the upstream tool list can change without anyone touching this repository.

Contributing

A tool table, a response sample or a documented behaviour that does not match reality is worth an issue. There is a template for exactly that. Pull requests are welcome for the same, and for anything in the launcher.

License

MIT, see LICENSE.

來源:README.md,提交 0043c4d

工具

0
SourceWeft 尚未讀取此伺服器的工具。

版本歷史

3
  1. v1.0.3最新Sep 24, 2026
  2. v1.0.2Sep 22, 2026
  3. v1.0.1Sep 16, 2026

評分

已滿足適用檢查項的 85%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Hasdata 整合