Facebook MCP Server
Размещённый сервер Model Context Protocol (MCP), который предоставляет Claude, Cursor, Windsurf и любому другому MCP-клиенту один инструмент для чтения данных Facebook. Найдите публичную страницу или профиль по имени пользователя и получите запись о странице с точным количеством отметок «Нравится», контактными данными и информацией о владельце, а также ленту публикаций с реакциями, комментариями и репостами — всё в виде структурированного JSON. Приложение разработчика Meta и собственный хостинг не нужны.
Сервер получает данные публичных страниц Facebook, доступных незарегистрированным посетителям. Группы и личные аккаунты с ограниченным доступом не поддерживаются.
1 000 бесплатных кредитов каждый месяц, карта не требуется — этого хватит на 100 вызовов Facebook по 10 кредитов за вызов.
https://mcp.hasdata.com/mcp?apis=facebook
Содержание
-
Требования
-
Быстрый старт
-
Примеры запросов
-
Инструменты
-
Ошибки и сценарии сбоев
-
Стоимость, бесплатный тариф и ограничения
-
Сравнение с альтернативами
-
Часто задаваемые вопросы
-
Ссылки HasData
-
Разработка
-
Участие в проекте
-
Лицензия
Требования
Вам понадобятся MCP-клиент и API-ключ HasData из панели управления. Создать ключ можно бесплатно, карта не требуется. Бесплатного тарифа хватает примерно на 100 вызовов в месяц по 10 кредитов за вызов. Это удалённый сервер, поэтому самый простой способ подключения — указать URL и заголовок x-api-key; запускать контейнер не нужно. Клиент, который поддерживает только stdio, может подключиться к серверу через лёгкий launcher. Он опубликован на npm как @hasdata/facebook-mcp и на PyPI как hasdata-facebook-mcp. Примеры приведены ниже.
Быстрый старт
URL сервера одинаков для всех клиентов. Мы проверили подключение в Claude Code и Claude Desktop. Примеры для остальных клиентов приведены в формате, указанном в их документации для удалённых серверов.
| Поле | Значение |
|---|---|
| URL | https://mcp.hasdata.com/mcp?apis=facebook |
| Транспорт | HTTP, с потоковой передачей |
| Заголовок авторизации | x-api-key: HASDATA_API_KEY |
Клиенты с поддержкой OAuth можно подключить по тому же URL, а затем выполнить вход, не указывая ключ в файле конфигурации.
Claude Code
claude mcp add --transport http facebook "https://mcp.hasdata.com/mcp?apis=facebook" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
Откройте Settings, затем Connectors, выберите Add custom connector, вставьте https://mcp.hasdata.com/mcp?apis=facebook и выполните вход.
Если вы настраиваете подключение через файл конфигурации, учтите: Claude Desktop загружает только локальные серверы stdio. Поэтому для подключения к удалённому серверу нужен launcher stdio. Эту роль выполняет пакет @hasdata/facebook-mcp; он получает ключ из переменной окружения. Добавьте этот фрагмент в claude_desktop_config.json:
{
"mcpServers": {
"facebook": {
"command": "npx",
"args": ["-y", "@hasdata/facebook-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Если вместо Node вы используете Python, замените launcher на пакет PyPI. Команда uvx запускает его без предварительной установки:
{
"mcpServers": {
"facebook": {
"command": "uvx",
"args": ["hasdata-facebook-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Cursor
Используйте ~/.cursor/mcp.json, чтобы настроить подключение для всех проектов, или .cursor/mcp.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 поле называется serverUrl, а не url:
{
"mcpServers": {
"facebook": {
"serverUrl": "https://mcp.hasdata.com/mcp?apis=facebook",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
VS Code
Добавьте настройки в .vscode/mcp.json в рабочей области:
{
"servers": {
"facebook": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=facebook",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Примеры запросов
-
Сколько людей отметили страницу Nike, и сколько человек обсуждали её на этой неделе?
-
Получи контактные данные и подтверждённую информацию о владельце этой страницы Facebook.
-
Изучи последние десять публикаций на этой странице и укажи, какая из них набрала больше всего репостов.
-
Сравни распределение реакций на публикациях этого бренда и его конкурента.
-
Подтверждена ли эта страница Facebook и какая категория на ней указана?
-
Просмотри ленту страницы до начала месяца и перечисли публикации с видео.
Один вызов возвращает запись о странице и последнюю публикацию. Чтобы просмотреть ленту глубже, нужен ещё один вызов на каждые три публикации; для продолжения используется токен из предыдущего ответа.
Инструменты
| Инструмент | Что возвращает |
|---|---|
hasdata_facebook_profile_getFacebookProfile | Получает данные публичной страницы или профиля Facebook по имени пользователя, @username или числовому идентификатору и возвращает идентификатор страницы, имя, имя пользователя, категорию, описание, точное количество отметок «Нравится» и… 10 кредитов за вызов |
Один инструмент, 10 кредитов за успешный вызов.
Получение профиля Facebook
hasdata_facebook_profile_getFacebookProfile
Публичная страница или профиль вместе с лентой публикаций.
| Параметр | Тип | Обязательный | Примечания |
|---|---|---|---|
handle | string | да | Имя пользователя с @ или без него либо числовой идентификатор из URL вида profile.php?id=… |
language | string | Язык отображения страницы. Можно указать один из 32 кодов, например en, de, pt или zh-hans | |
nextPageToken | string | Курсор из предыдущего ответа для получения следующих трёх публикаций |
Первый вызов возвращает четыре блока. profile содержит запись о странице, posts — последнюю публикацию, photos — подборку недавних изображений, а pagination — поля postsPerPage, nextPage и nextPageToken для продолжения просмотра.
Каждый вызов с токеном возвращает только posts и pagination, по три публикации за раз. Новый токен приходит в ответе, пока лента не закончится; после этого токен больше не возвращается.
{
"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…" }
}
Ошибки и нештатные ситуации
Учитывайте возможные ошибки и не рассчитывайте, что всё всегда будет работать по идеальному сценарию.
Три счётчика возвращаются числами, а два — строками, и это не ошибка. likesCount, talkingAboutCount и checkInsCount — точные значения, которые публикует Facebook. followersCount и followingCount возвращаются в виде округлённого локализованного текста, который отображается на странице: "39M followers" на английском и "39 Mio. Follower" при language со значением de. Сравнивайте числовые значения, а строки показывайте пользователям.
Параметр language меняет строки, но не числа. При значении de категория Sportswear Store меняется на Sportbekleidungsgeschäft, а likesCount остаётся числом. Выбирайте язык для читателя, а не для математических операций.
Страница, которая не существует, была удалена или закрыта, всё равно возвращает ответ со статусом 200. Вместо profile в ответе будет поле error, при этом вызов оплачивается. Прежде чем обращаться к данным профиля, проверьте наличие profile. К этой же категории относятся группы и закрытые личные аккаунты.
На первой странице ленты будет одна публикация, а не три. В поле postsPerPage указано значение 3, и на последующих страницах действительно возвращается по три публикации. Но в первом ответе, помимо профиля и фотографий, содержится только самая новая публикация. Учитывайте фактическое количество полученных публикаций, а не только значение этого поля.
На следующих страницах поля profile и photos отсутствуют. В ответе на вызов с nextPageToken будут только posts и pagination. Сохраните профиль из первого ответа — не ожидайте, что он появится снова.
Для перехода к следующей странице используйте только токен. nextPage — это номер страницы для вашего учёта; параметра, принимающего это значение, нет. Передавайте nextPageToken из предыдущего ответа без изменений и завершайте запросы, когда в ответе больше нет этого токена.
Контактные данные отражают то, что страница показывает в ответ на запрос, а не каноническую запись. На странице глобального бренда может отображаться региональный номер телефона, а website содержит текст ссылки, тогда как websiteUrl — её URL. Прежде чем считать имя владельца подтверждённым, проверьте owner.isConfirmed.
URL изображений ведут на CDN Facebook и содержат подписанные параметры. Срок их действия ограничен. Загрузите нужные изображения как можно скорее и сохраните сами файлы, а не URL.
В ответах с данными также есть requestMetadata.id. Укажите его при обращении в службу поддержки.
Стоимость, бесплатный тариф и ограничения
Использование инструмента Facebook стоит 10 кредитов за успешный вызов. Размер ответа на стоимость не влияет: загрузка страницы ленты обходится так же, как и первый вызов. Поэтому для чтения тридцати публикаций потребуется один начальный вызов и ещё десять.
Бесплатный тариф включает 1 000 кредитов в месяц без привязки карты — это 100 вызовов Facebook по базовой ставке. Кредиты обновляются с началом расчётного периода, поэтому агент с небольшим объёмом запросов может пользоваться бесплатным тарифом постоянно.
Платные тарифы начинаются от $59 в месяц за 200 000 кредитов — этого хватит на 20 000 вызовов. При большем объёме стоимость единицы снижается: от $2.95 за 1 000 вызовов на начальном тарифе до $1.19 на тарифе Basic и $0.83 на тарифах Growth. Актуальные цены указаны на странице тарифов.
Тариф также определяет максимальное количество одновременных запросов. На бесплатном тарифе можно выполнять 1 запрос за раз, на Startup — 5, на Basic — 15, а на тарифах Growth — от 50 до 500. Для автоматических запросов при получении ответа 429 используйте повторные попытки с увеличивающейся задержкой: агент, обрабатывающий список страниц, достигнет ограничения раньше, чем вы успеете заметить проблему.
Неуспешный запрос, получивший ответ со статусом, отличным от 200, не оплачивается. Успешный вызов, который не нашёл страницу, всё равно считается вызовом.
Сравнение с альтернативами
Meta Graph API — официальный способ получать данные о страницах, но он рассчитан на другие сценарии.
| Meta Graph API | Этот сервер | |
|---|---|---|
| Требования для доступа | Приложение разработчика Meta, токен доступа и App Review для страниц, которыми вы не управляете | API-ключ |
| Доступные страницы | Ваши собственные страницы — полностью, чужие — только при наличии проверенных разрешений | Любые общедоступные страницы и профили |
| Настройка | Создание приложения, настройка разрешений, работа с токеном и прохождение проверки | Один заголовок |
| Реакции на публикации | Количество реакций каждого типа для страниц, которыми вы управляете | Количество реакций каждого типа для любых общедоступных страниц |
| Язык данных | Локаль вашего приложения | Любой из 32 языков, задаётся для каждого вызова |
| Стоимость | Бесплатно в пределах ограничений на частоту запросов | Платно после исчерпания бесплатного лимита, 10 кредитов за вызов |
Главное различие — страницы, к которым можно получить доступ. Graph API подходит для страниц, которыми вы управляете. Для доступа к остальным нужна разрешённая функция Page Public Content Access, а также подтверждение бизнеса и проверка с указанием цели использования. Если страница принадлежит вам, используйте Graph API: он бесплатный и предоставляет полный доступ.
Часто задаваемые вопросы
Есть ли у Facebook официальный MCP-сервер?
Meta не выпускает MCP-сервер для чтения общедоступных страниц. Этот сервер поддерживается HasData и позволяет получать данные с общедоступных страниц Facebook.
Что такое MCP-сервер Facebook?
MCP-сервер предоставляет инструменты, которые может вызывать AI-клиент. Этот сервер преобразует данные общедоступной страницы Facebook и её ленты в JSON, с которым может работать агент, — без браузера и библиотеки для скрейпинга в вашей инфраструктуре.
Нужны ли мне аккаунт Facebook или приложение разработчика Meta?
Нет. Вам потребуется только ключ HasData.
Можно ли получить данные личного профиля или группы?
Общедоступный личный профиль обрабатывается так же, как страница. Закрытые аккаунты и группы не поддерживаются: для них возвращается ошибка о недоступности.
Можно ли передать числовой идентификатор вместо имени пользователя?
Да. Значения id и pageId, возвращаемые в ответе, распознаются как handle. Поэтому страницу, которую вы сначала нашли по имени, можно затем отслеживать по идентификатору.
Как получить всю ленту?
Сначала выполните вызов с handle, затем повторяйте вызовы, передавая nextPageToken из каждого ответа, пока в очередном ответе не исчезнет этот токен. С каждым токеном возвращаются три публикации.
Почему followersCount — строка, а likesCount — число?
Так Facebook публикует эти данные. Количество отметок «Нравится» и показатель обсуждаемости указаны на странице точно, а количество подписчиков отображается в округлённом и локализованном виде. Ответ сохраняет оба значения в исходном формате.
Можно ли использовать этот сервер вместе с другими API HasData?
Да. Один ключ подходит для всех сервисов, а для работы с ними используется одна конечная точка и параметр apis. Укажите ?apis=facebook,instagram, чтобы подключить оба набора инструментов в рамках одного соединения, или перейдите на mcp.hasdata.com/api/mcp, чтобы посмотреть полный каталог.
Связана ли HasData с Meta или Facebook?
Нет. HasData — независимый сервис, не связанный с Meta и не одобренный или спонсируемый Meta. Facebook — товарный знак соответствующего владельца. Инструменты работают только с общедоступными данными. Вы несёте ответственность за использование результатов в соответствии с условиями Meta и применимым законодательством.
Соблюдение требований и персональные данные
Данные о странице компании относятся к сведениям о компании, а общедоступный личный профиль в самом прямом смысле содержит персональные данные: имя, фотографию, биографию и ленту публикаций. Инструмент не различает эти типы страниц, поэтому это нужно учитывать при выборе цели использования. Ограничивайтесь данными, необходимыми для вашего сценария, не создавайте профили людей, с которыми у вас нет деловых отношений, и перед сохранением данных проверьте свои обязательства по GDPR, CCPA и условиям Meta. Контактные данные, опубликованные на странице для клиентов, подпадают под отдельные правила маркетингового использования.
Ссылки HasData
-
Документация Facebook Profile API — REST-эндпоинт, на котором основан этот инструмент
Другие MCP-серверы 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.
Разработка
Запускатель — это простой мост stdio к удалённому серверу, поэтому сборка не требуется.
npm install
HASDATA_API_KEY=your_key_here npm test
Тесты в test/ проверяют контракт инструмента — часть, которая может измениться без коммита в этом репозитории. Они проверяют, что ?apis=facebook возвращает один ожидаемый инструмент, его имя не изменилось, для него по-прежнему требуется handle и указано описание, параметр language предлагает коды, перечисленные в этом README, а используемый ключ действительно принимается.
Один из тестов обращается к действующей странице и проверяет два момента, на которые опирается этот README: likesCount возвращается числом, а не текстом для отображения, и приходит pagination.nextPageToken. Без этого токена описанный здесь обход ленты невозможен. Такой вызов стоит 10 кредитов — цена контрольной проверки, которая должна выявлять именно реальные проблемы.
Набор тестов контракта также запускается еженедельно по расписанию, поскольку список инструментов на стороне upstream может измениться без каких-либо правок в этом репозитории.
Участие в разработке
Если таблица инструментов, пример ответа или описанное поведение не соответствуют действительности, создайте issue. Для этого предусмотрен специальный шаблон. Pull request с исправлениями также приветствуются — как и любые улучшения запускателя.
Лицензия
MIT, см. LICENSE.