Skip to main content
Glama

Why This Exists

Social media management across Meta's platforms — Facebook Pages, Instagram, Threads, Ads Manager, Commerce — requires juggling multiple dashboards, each with its own API quirks and token flows. This server consolidates the entire Meta Graph API surface into a single MCP interface, so your AI assistant can publish content, analyze performance, manage ad campaigns, and moderate engagement across all platforms in one conversation.

Every tool returns actionable error messages — not cryptic API codes. Token expired? You get a regeneration link. Missing permission? You see exactly which one and where to grant it. This means less debugging and more doing.

Related MCP server: Meta Marketing API MCP Server

Quick Start

Requires Node.js 20 or newer.

Install with MCPB

For Claude Desktop and other MCPB-compatible clients, download the local bundle from the v2.0.2 release:

That desktop bundle remains on 2.0.2. The npm/source version targets 3.0.0 with the security updates and Node 20 minimum.

Download meta-mcp-server-2.0.2.mcpb

The bundle includes the Meta favicon, production runtime dependencies, and setup prompts for Meta and optional Threads access tokens.

Add to your MCP client config:

{
  "mcpServers": {
    "meta": {
      "command": "npx",
      "args": ["-y", "@oliverames/meta-mcp-server"],
      "env": {
        "META_ACCESS_TOKEN": "your_token_here"
      }
    }
  }
}

That's it. Your AI assistant now has access to 200 Meta tools.

Need a token? Go to the Graph API Explorer, select your app, and generate one. See Configuration for details.

From Source

git clone https://github.com/oliverames/meta-mcp-server.git
cd meta-mcp-server
npm install && npm run build

What You Can Do

Publish everywhere

Post to Facebook Pages (text, photo, video, Reels, Stories), Instagram (photos, reels, stories, carousels), and Threads (text, images, video, GIFs, links). Schedule Facebook Page content in advance or cross-post to multiple platforms in one call.

> Post our holiday hours to the Facebook page
> Schedule tomorrow's Facebook post for 9am
> Cross-post this photo to both Facebook and Instagram
> Publish a GIF to Threads with reply controls
> Create a Facebook Reel from this video
> Post a Story to our Facebook page
> Publish an Instagram reel with alt text for accessibility
> Share a link post on Threads with a quote

Manage engagement

Read and reply to comments across platforms, hide inappropriate content without deleting it, manage Instagram DMs and broadcast channels, and set up automated responses for when you're away.

> Show me unanswered Instagram DMs
> Hide that offensive comment on our latest post
> Reply to the top 3 comments on yesterday's reel
> Set up an instant reply for new messages
> Set our away message to "Back Monday at 9am"
> Send a DM to that customer who reached out
> What comments did we get on last week's posts?
> Update our Messenger greeting text

Analyze performance

Get insights at every level — page, post, account, campaign, ad set, and individual ad. Over 70 page metrics, comprehensive Reels analytics (including skip rate and crossposted views), and full ad performance with video completion rates, ROAS, and quality rankings. Generate charts for reports.

> How did our Instagram perform this month?
> Show campaign spend broken down by age group
> What's the skip rate on our latest Reel?
> Generate a bar chart comparing this week vs last
> Get our Facebook page fan demographics
> What's our follower growth trend over 90 days?
> Show me post-level engagement for our top 5 posts
> Create a pie chart of spend by campaign

Run ad campaigns

Full campaign lifecycle — create, optimize, test, and automate. A/B testing with confidence levels, Advantage+ Shopping migration, interest/geo/demographic targeting search, reach estimates, automated rules, and comprehensive pixel management with server-side Conversions API.

> Create an A/B test comparing these two ad sets
> Migrate this campaign to Advantage+ Shopping
> Send a purchase conversion event via CAPI
> What's the reach estimate for women 25-34 in NYC?
> List all active campaigns and their ROAS
> Create an automated rule: pause ads over $5 CPA
> Check if our pixel is firing correctly
> Upload this image for a new ad creative

Manage commerce

Full product catalog management for Facebook and Instagram shops — add products, update inventory, organize collections, and manage availability. Everything a brand needs to run social commerce.

> List all products in our catalog
> Add this new product at $29.99, in stock
> Mark the seasonal items as out of stock
> Show me our "Summer Collection" product set
> Update the description on our best-selling item
> How many products are in each catalog?
> Delete the discontinued product line
> What products are currently available?

Go live and broadcast

Start Facebook Live video broadcasts for product launches and events, publish Stories for time-sensitive content, and reach your audience directly through Instagram broadcast channels with polls, links, and messages.

> Start a live video on our Facebook page
> Send a poll to our Instagram broadcast channel
> Schedule a live stream for Friday at 2pm
> Publish a story to Facebook with this photo
> End the live broadcast
> Send a product announcement to our broadcast channel
> What live videos have we done this month?
> What ads is our competitor running right now?

Research competitors

Search any advertiser's active ads through Meta's public Ad Library. See what creative, targeting, and spend your competitors are using — no account access needed. Look up any public Instagram business account's stats.

> What ads is Nike running in the US right now?
> Search the Ad Library for "sustainable fashion" ads
> Look up @competitor on Instagram — followers and posts
> Show me all active ads by this page ID
> What platforms are they running ads on?
> How much is our competitor spending on ads?

Stay in control

Debug tokens, check permissions, monitor rate limits, verify pixel health, and manage your Business Manager assets. Every error tells you exactly what went wrong and how to fix it — never a cryptic failure.

> Check my token status and permissions
> Am I close to Instagram's publishing limit?
> Run a health check on the Meta connection
> Is our pixel receiving events?
> List all ad accounts in our Business Manager
> Share this pixel with our agency's ad account
> What Threads rate limits do we have left?
> Debug why this API call is failing

Complete Tool Reference

Facebook Pages — 53 tools

Everything a brand needs to manage their Facebook presence, messaging, and live broadcasts.

Tool

Description

meta_list_pages

List all Facebook Pages you manage (call first — caches page tokens)

meta_get_page

Get detailed page info (category, followers, description, links)

meta_get_post

Get a single post by ID

meta_create_post

Create a text post on a page

meta_create_photo_post

Create a photo post (URL or page photo ID)

meta_create_video_post

Create a video post with optional title and description

meta_update_post

Edit an existing post's message

meta_delete_post

Delete a post

meta_get_posts

Get a page's feed with pagination

meta_get_published_posts

Get published posts only

meta_get_scheduled_posts

Get scheduled (unpublished) posts

meta_get_promotable_posts

Get posts eligible for ad promotion

meta_get_visitor_posts

Get posts made by visitors on the page

meta_get_post_comments

Get comments on a post with pagination

meta_create_post_comment

Create a new top-level comment on a post

meta_reply_post_comment

Reply to a comment as the page

meta_delete_comment

Delete a comment

meta_hide_comment

Hide or unhide a comment (non-destructive moderation)

meta_like_object

Like or unlike a post or comment

meta_get_post_reactions

Get reaction breakdown (like, love, haha, wow, sad, angry)

meta_get_page_insights

Page analytics — 70+ metrics across impressions, engagement, fans, video

meta_get_post_insights

Per-post analytics (impressions, engagement, clicks, reactions, video)

meta_get_page_conversations

List page message conversations

meta_get_conversation_messages

Get messages within a conversation

meta_send_page_message

Send a message to a user (24-hour messaging window)

meta_update_page

Update page details (about, description, website, hours, username, category, address)

meta_update_page_picture

Update page profile picture from URL

meta_update_page_cover

Update page cover photo from URL or existing photo

meta_create_event

Create a page event

meta_get_page_events

List events (upcoming, past, or canceled)

meta_get_page_albums

List page photo albums

meta_get_page_photos

Get photos (uploaded or tagged)

meta_get_page_videos

List page videos

meta_get_page_tagged

Get posts where the page is tagged

meta_get_page_fan_demographics

Follower breakdown by age, gender, and country

meta_get_page_ratings

Get page reviews and star ratings

meta_get_page_locations

Location info for multi-location businesses

meta_get_page_cta

Get the page's call-to-action button configuration

meta_get_page_tabs

List page tabs and their configuration

meta_get_page_picture

Get page profile picture URL

meta_get_blocked_users

List blocked users

meta_block_user

Block or unblock a user

meta_subscribe_page_webhooks

Subscribe the page to webhook events

meta_publish_page_story

Publish a Facebook Story (photo or video)

meta_publish_page_reel

Publish a Facebook Reel

meta_cross_post

Cross-post to Facebook + Instagram simultaneously

meta_create_live_video

Start or schedule a live video broadcast

meta_get_live_videos

List live videos on a page

meta_end_live_video

End an active live broadcast

meta_get_page_automated_responses

Get current auto-reply settings

meta_set_instant_reply

Set the instant reply message

meta_set_away_message

Set the away/out-of-office message

meta_set_greeting

Set the Messenger greeting text

Instagram — 37 tools

Full Instagram Business API — publishing, DMs, broadcast channels, engagement, discovery, and analytics.

Tool

Description

meta_list_instagram_accounts

List Instagram business accounts linked to your Facebook Pages

meta_get_instagram_media

Get recent media for an Instagram account with pagination

meta_get_instagram_single_media

Get a single media object by ID

meta_publish_instagram_photo

Publish a photo with optional alt text

meta_publish_instagram_reel

Publish a reel with auto-polling

meta_publish_instagram_story

Publish a story (image or video with auto-polling)

meta_publish_instagram_carousel

Publish a carousel (2–10 items, parallel processing)

meta_publish_instagram_container

Publish a pre-created media container

meta_check_instagram_container

Check container processing status with actionable messages

meta_get_instagram_account_insights

Account-level analytics with demographic breakdowns

meta_get_instagram_media_insights

Per-post metrics including Reels skip rate, crossposted views

meta_get_instagram_comments

Get comments on a media object

meta_get_instagram_comment_replies

Get threaded replies to a comment

meta_reply_instagram_comment

Reply to a comment

meta_delete_instagram_comment

Delete a comment

meta_hide_instagram_comment

Hide/unhide a comment (non-destructive moderation)

meta_search_instagram_catalog_products

Search for products in an Instagram Shopping catalog by name

meta_search_instagram_hashtag

Search hashtag top or recent media

meta_get_instagram_recent_hashtags

Get your recently searched hashtags

meta_get_instagram_user

Business discovery — look up any public business/creator by username

meta_get_instagram_stories

Get currently active stories

meta_get_instagram_live_media

Get live video media

meta_get_instagram_mentioned_media

Get media where you're @mentioned

meta_get_instagram_media_children

Get individual items in a carousel

meta_get_instagram_product_tags

Get product tags on a media object

meta_delete_instagram_media

Delete a media object

meta_toggle_instagram_comments

Enable or disable comments on media

meta_check_instagram_publishing_limit

Check rate limit status (100 posts per 24 hours)

meta_get_instagram_conversations

List Instagram DM conversations

meta_get_instagram_messages

Get messages in a DM conversation

meta_send_instagram_message

Send a text DM

meta_send_instagram_media_message

Send an image or link via DM

meta_get_instagram_available_catalogs

List product catalogs available for Instagram Shopping on a professional account

meta_get_instagram_broadcast_channels

List broadcast channels

meta_get_broadcast_channel_messages

Get messages in a broadcast channel

meta_send_broadcast_channel_message

Send a message to a broadcast channel

meta_create_broadcast_channel_poll

Create a poll in a broadcast channel

Ads Manager — 62 tools

Complete ad campaign lifecycle — create, optimize, test, analyze, and automate. Includes Advantage+ migration, A/B testing, and comprehensive pixel management.

Tool

Description

meta_list_ad_accounts

List ad accounts you have access to

meta_get_ad_account

Get ad account details (status, currency, spend cap, balance)

meta_list_campaigns

List campaigns with status filtering and pagination

meta_get_campaign

Get a single campaign's full details

meta_create_campaign

Create a campaign (supports Advantage+ Shopping for OUTCOME_SALES)

meta_update_campaign

Update campaign name, status, budget, or migrate to Advantage+

meta_delete_campaign

Delete a campaign

meta_migrate_campaign_to_advantage_plus

Migrate a campaign to Advantage+ Shopping (keeps campaign ID)

meta_list_adsets

List ad sets with filtering

meta_get_adset

Get a single ad set's targeting and budget details

meta_create_adset

Create an ad set with targeting, budget, and placement_soft_opt_out

meta_update_adset

Update ad set targeting, budget, or placement_soft_opt_out

meta_delete_adset

Delete an ad set

meta_list_ads

List ads with status filtering

meta_get_ad

Get a single ad's details

meta_create_ad

Create an ad linking a creative to an ad set

meta_update_ad

Update ad name, status, or creative

meta_delete_ad

Delete an ad

meta_list_ad_creatives

List ad creatives

meta_get_ad_creative

Get a single creative's details

meta_create_ad_creative

Create an ad creative with text, image, and link

meta_get_ad_preview

Preview how an ad will appear in different placements

meta_get_ad_rule

Get details for a specific automated ad rule

meta_get_ad_account_users

List users with access to the ad account

meta_upload_ad_image

Upload an image for use in ad creatives

meta_list_ad_images

List previously uploaded ad images

meta_upload_ad_video

Upload a video for use in ad creatives

meta_list_ad_videos

List previously uploaded ad videos

meta_search_targeting_interests

Search for interest-based targeting options

meta_search_targeting_geolocations

Search for location-based targeting (countries, cities, zips)

meta_search_targeting_demographics

Search for demographic targeting options

meta_browse_targeting_categories

Browse all available targeting categories

meta_get_reach_estimate

Estimate potential audience size for a targeting spec

meta_get_delivery_estimate

Estimate ad delivery for a given budget and targeting

meta_get_leadgen_leads

Get submitted leads from a lead generation form

meta_get_minimum_budgets

Get minimum daily and lifetime budgets for an ad account by currency and bid strategy

meta_list_leadgen_forms

List lead generation forms for a Facebook Page

meta_list_offline_event_sets

List offline conversion event sets for an ad account

meta_list_pixels

List Meta Pixels for conversion tracking

meta_create_pixel

Create a new pixel

meta_get_pixel

Get pixel details (name, cookie status, matching fields)

meta_get_pixel_stats

Get event volume stats over time (verify pixel is firing)

meta_update_pixel

Update pixel settings (name, cookies, matching, data use)

meta_delete_pixel

Delete a pixel

meta_share_pixel

Share pixel access with another ad account

meta_get_pixel_events

Get recent test events for debugging

meta_list_custom_conversions

List custom conversion events

meta_create_custom_conversion

Create a custom conversion from pixel events

meta_list_saved_audiences

List saved audiences

meta_create_saved_audience

Create a reusable saved audience

meta_delete_saved_audience

Delete a saved audience

meta_list_ad_rules

List automated ad rules

meta_create_ad_rule

Create an automated rule (e.g., pause ads over $5 CPA)

meta_delete_ad_rule

Delete an automated rule

meta_list_ad_labels

List ad labels for organization

meta_create_ad_label

Create an ad label

meta_get_ad_account_activity

Get the ad account's activity log

meta_list_business_assets

List pages, ad accounts, IG accounts, and pixels across Business Manager

meta_create_ad_study

Create an A/B test to compare campaigns or ad sets

meta_get_ad_studies

List A/B tests for an ad account

meta_get_ad_study_results

Get A/B test results with winner and confidence level

meta_send_offline_event

Send an offline conversion event for in-store purchases, phone orders, or other offline conversions

Threads — 22 tools

Full Threads API — publishing with GIFs, reply controls, location tagging, and analytics.

Tool

Description

threads_get_profile

Get your Threads profile info

threads_get_posts

Get your recent posts with pagination

threads_get_post

Get a single post by ID (includes reply_audience)

threads_search

Search your posts by keyword

threads_publish_text

Publish a text post (with reply control and location)

threads_publish_image

Publish an image post (with reply control and location)

threads_publish_video

Publish a video post with auto-polling (with reply control and location)

threads_publish_carousel

Publish a carousel (parallel creation, with reply control)

threads_publish_link

Publish a post with a link attachment (with reply control)

threads_publish_gif

Publish a GIF post via GIPHY URL

threads_delete_post

Delete a post

threads_get_replies

Get replies to a post

threads_get_conversation

Get the full conversation tree for a post

threads_get_followers

List followers of the authenticated Threads user

threads_get_following

List accounts the authenticated Threads user is following

threads_get_mentions

Get posts that @mention you

threads_get_media_children

Get individual items in a carousel post

threads_hide_reply

Hide or unhide a reply

threads_repost

Repost a Threads post

threads_get_post_insights

Get metrics for a specific post (views, likes, replies, etc.)

threads_get_user_insights

Get account-level metrics with demographic breakdowns

threads_check_rate_limits

Check your current publishing rate limit status

Commerce — 10 tools

Product catalog management for Facebook and Instagram shops.

Tool

Description

meta_list_product_catalogs

List product catalogs for a business

meta_get_product_catalog

Get catalog details and product count

meta_list_products

List products in a catalog with filtering

meta_get_product

Get a single product's full details

meta_create_product

Add a product to a catalog

meta_create_product_feed

Create a product feed to automatically sync products from a URL

meta_update_product

Update product details (name, price, availability, etc.)

meta_delete_product

Delete a product from a catalog

meta_list_product_feeds

List product feeds for a catalog

meta_list_product_sets

List product sets (subgroups) in a catalog

Conversions API — 2 tools

Server-side event tracking for conversion optimization.

Tool

Description

meta_send_conversion_event

Send a server-side conversion event (Purchase, Lead, etc.) to a pixel

meta_test_conversion_events

Test CAPI setup without affecting production data

Audiences — 5 tools

Custom and lookalike audience management for ad targeting.

Tool

Description

meta_list_custom_audiences

List custom audiences in an ad account

meta_get_custom_audience

Get audience details (size, delivery status)

meta_create_custom_audience

Create a custom audience

meta_create_lookalike_audience

Create a lookalike audience from a source audience

meta_delete_custom_audience

Delete a custom audience

Insights — 4 tools

Performance analytics across the ad hierarchy with 37 metrics, 15 date presets, and 8 breakdown dimensions.

Tool

Description

meta_get_account_insights

Ad account performance — spend, impressions, reach, clicks, CTR, CPM, CPC, conversions, ROAS, video completion, quality rankings

meta_get_campaign_insights

Per-campaign performance with the same comprehensive metrics

meta_get_adset_insights

Per-ad-set performance

meta_get_ad_insights

Per-ad performance

Charts — 2 tools

Generate visual charts from data for reports and presentations.

Tool

Description

meta_generate_chart

Create bar, line, pie, doughnut, radar charts as PNG images

meta_generate_comparison_chart

Generate side-by-side comparison charts (A/B, period-over-period)

Ad Library & Utility — 4 tools

Tool

Description

meta_search_ad_library

Search any advertiser's active ads — public transparency API

meta_debug_token

Inspect your token: type, validity, expiry, permissions, associated app and user

meta_health_check

Check server health: token status, cached tokens, API connectivity


Configuration

Variable

Required

Default

Description

META_ACCESS_TOKEN

Yes

None

Long-lived Meta Graph API token for Facebook Pages, Instagram, Ads Manager, Commerce, Conversions API, Audiences, Insights, and utility tools.

THREADS_ACCESS_TOKEN

No

None

Threads API token. Required only for Threads publishing, replies, and insights tools.

SENTRY_DSN

No

None

Turns on optional error reporting to that Sentry project. See Error reporting.

1. Create a Meta App

Go to developers.facebook.com → My Apps → Create App → choose Business type. Add Facebook Login, Pages API, Instagram Graph API, and Marketing API.

2. Generate Tokens

Get a token from the Graph API Explorer, then exchange it for a long-lived token (60 days):

curl "https://graph.facebook.com/oauth/access_token?\
grant_type=fb_exchange_token&\
client_id=YOUR_APP_ID&\
client_secret=YOUR_APP_SECRET&\
fb_exchange_token=SHORT_LIVED_TOKEN"

For permanent access, create a System User token in Business Manager → System Users.

Threads uses a separate token via graph.threads.net OAuth — see Threads API docs.

Error reporting

Error reporting is off by default. If you set SENTRY_DSN, unexpected tool failures (code errors, Graph API 5xx responses, network failures, and timeouts) and fatal errors are sent to that Sentry project. Without it, @sentry/node is never loaded. Reporting needs Node 20.19 or newer and is skipped quietly on older runtimes.

Each report carries only the error type, a fixed message, stack frames with package-relative paths, the tool name, and the HTTP status of a failed Graph API response. Access tokens, post and message content, comments, ad and audience data, customer data, tool arguments, error messages, Graph API responses, breadcrumbs, user data, and request data are removed before anything is sent. Missing tokens and Graph API 4xx answers are not reported.

1Password Integration

If META_ACCESS_TOKEN or THREADS_ACCESS_TOKEN are not set in the environment, the server automatically attempts to resolve them from 1Password CLI:

op://Development/Meta Access Token/credential
op://Development/Threads Access Token/credential

This means you can skip setting env vars entirely if you have op installed and a service account or session active. The fallback adds ~1-2s to startup per token and is silently skipped if 1Password is unavailable.

3. Grant Permissions

Permission

Required for

pages_show_list

Listing pages

pages_read_engagement

Page insights, reactions

pages_manage_posts

Creating, editing, deleting posts

pages_manage_metadata

Page settings, webhooks, profile picture, cover photo

pages_read_user_content

Tagged posts, visitor posts, ratings

pages_messaging

Reading and sending messages, automated responses

instagram_basic

Instagram account info

instagram_content_publish

Publishing photos, reels, stories, carousels

instagram_manage_insights

Instagram analytics

instagram_manage_comments

Comment management

instagram_manage_messages

Instagram DMs

ads_read

Reading campaigns, ad sets, ads, insights

ads_management

Creating and managing ads, A/B tests

business_management

Business Manager assets, product catalogs

catalog_management

Product catalog CRUD

threads_basic

Threads profile and posts

threads_content_publish

Publishing to Threads

threads_manage_insights

Threads analytics

threads_manage_replies

Managing Threads replies

4. Connect to Your MCP Client

Claude Code — add to ~/.claude/settings.json:

{
  "mcpServers": {
    "meta": {
      "command": "node",
      "args": ["/absolute/path/to/meta-mcp-server/dist/index.js"],
      "env": {
        "META_ACCESS_TOKEN": "your_long_lived_token",
        "THREADS_ACCESS_TOKEN": "your_threads_token"
      }
    }
  }
}

Works with any MCP client that supports stdio transport. THREADS_ACCESS_TOKEN is optional — only needed for Threads tools.


How It Works

The server starts without any tokens configured — no crashes, no "failed" status in MCP settings. When you call a tool without proper auth, you get a clear setup message.

First call should always be meta_list_pages — this caches the page-scoped access tokens required for all Page and Instagram operations.

Error Handling

Every error message tells you what went wrong, why, and how to fix it:

What happened

What you see

No token set

Step-by-step setup instructions with link to Graph Explorer

Token expired (code 190)

Direct link to regenerate at developers.facebook.com

Missing permission (code 10/200)

Names the exact permission needed and where to grant it

Rate limited (429)

Tells you to wait, links to Meta's rate limit docs

Page token missing

Reminds you to call meta_list_pages first

Network unreachable

"Cannot reach graph.facebook.com — check your connection"

Token Refresh

Long-lived tokens expire after 60 days. Use meta_debug_token to check expiry, then refresh:

curl "https://graph.facebook.com/oauth/access_token?\
grant_type=fb_exchange_token&\
client_id=APP_ID&client_secret=APP_SECRET&\
fb_exchange_token=CURRENT_TOKEN"

For permanent tokens, create a System User in Business Manager → System Users.


Architecture

src/
├── index.ts              Server entry point (stdio transport)
├── constants.ts          API versions, base URLs, field constants
├── types.ts              TypeScript interfaces for Meta entities
├── services/
│   ├── api.ts            MetaApiClient — dual Graph + Threads API
│   └── utils.ts          Error handling, formatting, shared schemas
└── tools/
    ├── pages.ts          53 Facebook Page tools
    ├── instagram.ts      37 Instagram tools
    ├── ads.ts            62 Ads Manager tools
    ├── threads.ts        22 Threads tools
    ├── commerce.ts       10 Commerce/Catalog tools
    ├── conversions.ts     2 Conversions API tools
    ├── audiences.ts       5 Audience tools
    ├── insights.ts        4 Insight tools
    ├── charts.ts          2 Chart generation tools
    ├── ad_library.ts      1 Ad Library tool
    └── utility.ts         3 Utility tools

Key Design Decisions

  • Dual API client — Handles both graph.facebook.com/v21.0 and graph.threads.net/v1.0 with separate base URLs and tokens

  • Page token caching — meta_list_pages caches page-scoped tokens; subsequent tools look them up by page ID

  • Two-step container publishing — Instagram and Threads require container → publish flow; the server handles this automatically with video processing polling

  • Parallel carousel processing — All carousel items created concurrently via Promise.allSettled; partial failures report which items succeeded

  • Zod strict schemas — Every tool uses strict Zod schemas for type-safe parameter validation

  • Dual output format — Every read tool supports response_format: "markdown" or "json"

  • Graceful auth — Server starts without tokens, returns setup instructions on first tool call instead of crashing

  • Chart generation — QuickChart integration for rendering data as PNG images for reports


API Coverage

Targets Meta Graph API v21.0 and Threads API v1.0.

API

Status

Facebook Pages API

Comprehensive — posts, comments, messaging, insights, events, media, Stories, Reels, Live Video, automated responses

Instagram Graph API

Comprehensive — publishing, comments, DMs, broadcast channels, hashtags, business discovery, insights

Marketing API

Comprehensive — campaigns, ad sets, ads, creatives, targeting, audiences, pixels, CAPI, A/B testing, Advantage+

Threads API

Comprehensive — publishing (text, image, video, GIF, carousel, link), reply controls, location, insights

Commerce API

Supported — product catalog CRUD, product sets

Conversions API

Supported — server-side event tracking with test mode

Ad Library API

Supported — public transparency search

WhatsApp Business API

Not covered — separate infrastructure and token flow


Development

Use the same commands for local development and contribution checks:

npm install
npm test            # 52 tests
npm run build       # TypeScript compilation
npm run test:watch  # Development mode

Development conventions: Zod .strict() schemas, response_format parameter on read tools, and errorResult() for tool errors with isError: true.



Graph API compatibility notes

Legacy meta_search_places was removed because Meta retired Places Search. meta_search_targeting_geolocations finds advertising targeting locations, not replacement place IDs for tagging posts. The legacy fan-demographics tool now reports retired selectors without calling Graph API. Check current Page Insights documentation before choosing replacement metrics and periods.

Page reads retry once after error 190/subcode 2069032 when the failed token maps to exactly one cached Page. The client obtains a fresh token from the documented accounts list using the configured user token. It never refreshes or replays writes. Permission and refresh failures remain errors.

Available Tools

200 tools
meta_block_userBlock/Unblock User from PageA
Idempotent

Blocks or unblocks a user from a Facebook Page. Blocked users cannot post or comment.

Args:

  • page_id (string): Facebook Page ID

  • user_id (string): User ID to block/unblock

  • unblock (boolean): If true, unblocks the user instead

Inputs: page_id (required), user_id (required), unblock.

meta_browse_targeting_categoriesBrowse Targeting CategoriesC
Read-onlyIdempotent

Browses all available targeting category types for ad targeting.

Args:

  • type (string): Category type — adTargetingCategory, adcountry, adlocale, adlanguage

Inputs: type, class, response_format.

meta_check_instagram_containerCheck Instagram Container StatusA
Read-onlyIdempotent

Checks the publishing status of an Instagram media container (used for reels/videos that need processing).

Args:

  • container_id (string): Container ID from a publish step

Returns: status_code — IN_PROGRESS, FINISHED, ERROR, EXPIRED.

Inputs: container_id (required), response_format.

meta_check_instagram_publishing_limitCheck Instagram Publishing Rate LimitA
Read-only

Checks how many of the 100 API-published posts per 24-hour limit have been used.

Args:

  • ig_account_id (string): Instagram account ID

Returns: Current usage and quota remaining.

Inputs: ig_account_id (required), response_format.

meta_create_adCreate AdA

Creates a new ad within an ad set.

Args:

  • ad_account_id (string): Ad account ID

  • adset_id (string): Parent ad set ID

  • name (string): Ad name

  • creative_id (string): Ad creative ID (from meta_list_ad_creatives or meta_create_ad_creative)

  • status (string): ACTIVE or PAUSED (default PAUSED)

Returns the new ad ID.

Inputs: ad_account_id (required), adset_id (required), name (required), creative_id (required), +2 more.

meta_create_ad_creativeCreate Ad CreativeA

Creates an ad creative from an existing Facebook Page post.

Args:

  • ad_account_id (string): Ad account ID

  • name (string): Creative name

  • page_id (string): Facebook Page ID that owns the post

  • object_story_id (string, optional): Use an existing published post as creative (format: {page_id}_{post_id})

  • title (string, optional): Ad headline

  • body (string, optional): Ad body text

  • image_url (string, optional): Image URL for the creative

  • link_url (string, optional): Destination URL

Returns the new creative ID.

Inputs: ad_account_id (required), name (required), page_id (required), object_story_id, +5 more.

meta_create_ad_labelCreate Ad LabelB

Creates a label for organizing ads, ad sets, or campaigns.

Args:

  • ad_account_id (string): Ad account ID

  • name (string): Label name

Inputs: ad_account_id (required), name (required), response_format.

meta_create_ad_ruleCreate Automated Ad RuleA

Creates an automated rule for managing ads, ad sets, or campaigns.

Args:

  • ad_account_id (string): Ad account ID

  • name (string): Rule name

  • evaluation_spec (object): Conditions that trigger the rule (e.g., {"evaluation_type":"TRIGGER","trigger":{"type":"STATS_CHANGE","field":"cost_per_result","value":"5.00","operator":"GREATER_THAN"}})

  • execution_spec (object): Actions to take (e.g., {"execution_type":"PAUSE"})

  • schedule_spec (object, optional): When to evaluate (e.g., {"schedule_type":"DAILY"})

Inputs: ad_account_id (required), name (required), evaluation_spec (required), execution_spec (required), +2 more.

meta_create_adsetCreate Ad SetA

Creates a new ad set within a campaign.

Args:

  • ad_account_id (string): Ad account ID (e.g., act_123456789)

  • campaign_id (string): Parent campaign ID

  • name (string): Ad set name

  • daily_budget (number, optional): Daily budget in cents

  • lifetime_budget (number, optional): Lifetime budget in cents (requires end_time)

  • billing_event (string): How you're charged: IMPRESSIONS, LINK_CLICKS, etc.

  • optimization_goal (string): What to optimize for: REACH, LINK_CLICKS, CONVERSIONS, etc.

  • targeting (object): Targeting spec JSON. Example: {"geo_locations": {"countries": ["US"]}, "age_min": 18, "age_max": 65}

  • start_time (string, optional): ISO 8601 start time

  • end_time (string, optional): ISO 8601 end time (required with lifetime_budget)

  • status (string): ACTIVE or PAUSED (default PAUSED)

  • placement_soft_opt_out (string[], optional): Placements to soft opt-out (up to 5% spend may still go to these). Only for Sales/Leads objectives.

Returns the new ad set ID.

Inputs: ad_account_id (required), campaign_id (required), name (required), billing_event (required), +9 more.

meta_create_ad_studyCreate A/B Test (Ad Study)A

Creates an A/B test (ad study) to compare campaigns or ad sets.

Args:

  • ad_account_id (string): Ad account ID (e.g., act_123456789)

  • name (string): Study name

  • description (string, optional): Study description

  • start_time (string): ISO 8601 start time

  • end_time (string): ISO 8601 end time

  • type (enum): SPLIT_TEST or HOLDOUT

  • cells (array): Test cells, each with name, treatment_percentage, and optional campaign_ids/adset_ids

  • confidence_level (number, default 95): Statistical confidence level (e.g., 90, 95, 99)

Returns: The created study ID.

Inputs: ad_account_id (required), name (required), start_time (required), end_time (required), +5 more.

meta_create_broadcast_channel_pollCreate Broadcast Channel PollA

Creates a poll in an Instagram broadcast channel.

Args:

  • channel_id (string): Broadcast channel ID

  • question (string): Poll question

  • options (string[]): Poll options (2–4 items)

Returns: Poll/message ID.

Inputs: channel_id (required), question (required), options (required).

meta_create_campaignCreate CampaignA

Creates a new campaign in a Meta ad account.

Args:

  • ad_account_id (string): Ad account ID (e.g., act_123456789)

  • name (string): Campaign name

  • objective (string): Campaign objective. Common values: OUTCOME_AWARENESS, OUTCOME_TRAFFIC, OUTCOME_ENGAGEMENT, OUTCOME_LEADS, OUTCOME_APP_PROMOTION, OUTCOME_SALES

  • status (string): ACTIVE or PAUSED (default PAUSED)

  • daily_budget (number, optional): Daily budget in account currency cents

  • lifetime_budget (number, optional): Lifetime budget in cents (requires stop_time)

  • stop_time (string, optional): ISO 8601 end date (required for lifetime budget)

  • special_ad_categories (string[], optional): Required for housing, employment, credit ads

Note: For OUTCOME_SALES objective, Advantage+ Shopping campaigns are available. These use Meta's AI to optimize targeting and placements automatically. Create a standard campaign first, then use meta_migrate_campaign_to_advantage_plus to convert it.

Returns the new campaign ID.

Inputs: ad_account_id (required), name (required), objective (required), status, +5 more.

meta_create_custom_audienceCreate Custom AudienceA

Creates a new custom audience in a Meta ad account.

Supported types:

  • CUSTOM: Website visitors (requires Pixel), app activity, or customer list

  • ENGAGEMENT: People who engaged with your content

  • VIDEO: People who watched your videos

Args:

  • ad_account_id (string): Ad account ID (e.g., act_123456789)

  • name (string): Audience name

  • subtype (string): CUSTOM, ENGAGEMENT, VIDEO, WEBSITE, or APP

  • description (string, optional): Audience description

  • customer_file_source (string, optional): For CUSTOM type — USER_PROVIDED_ONLY, PARTNER_PROVIDED_ONLY, BOTH_USER_AND_PARTNER_PROVIDED

  • retention_days (number, optional): Days to retain audience members (1–180)

Returns the new audience ID.

Note: Populating the audience with users is a separate step requiring the Audiences API to upload hashed data or configure a rule.

Inputs: ad_account_id (required), name (required), subtype (required), description, +3 more.

meta_create_custom_conversionCreate Custom ConversionB

Creates a custom conversion for tracking specific actions.

Args:

  • ad_account_id (string): Ad account ID

  • name (string): Conversion name

  • pixel_id (string): Pixel ID to associate with

  • custom_event_type (string): Event type — CONTENT_VIEW, SEARCH, ADD_TO_CART, ADD_TO_WISHLIST, INITIATED_CHECKOUT, ADD_PAYMENT_INFO, PURCHASE, LEAD, COMPLETE_REGISTRATION, OTHER

  • rule (string): URL rule as JSON (e.g., {"url":{"i_contains":"thank-you"}})

Inputs: ad_account_id (required), name (required), pixel_id (required), custom_event_type (required), +2 more.

meta_create_eventCreate Facebook Page EventA

Creates an event on a Facebook Page.

Args:

  • page_id (string): Facebook Page ID

  • name (string): Event name

  • start_time (string): ISO 8601 datetime (e.g., 2024-06-15T18:00:00-0400)

  • end_time (string, optional): ISO 8601 datetime

  • description (string, optional): Event description

  • place (string, optional): Location name

  • ticket_uri (string, optional): Ticket URL

Inputs: page_id (required), name (required), start_time (required), end_time, +4 more.

meta_create_live_videoCreate Facebook Live VideoA

Creates a live video broadcast on a Facebook Page.

Requires: meta_list_pages called first to load page tokens.

Args:

  • page_id (string): Facebook Page ID

  • title (string): Title of the live video

  • description (string, optional): Description of the broadcast

  • planned_start_time (string, optional): ISO 8601 datetime for scheduled broadcasts

If planned_start_time is provided, the broadcast is created as SCHEDULED_UNPUBLISHED; otherwise it goes LIVE_NOW.

Returns the stream URL and live video ID.

Inputs: page_id (required), title (required), description, planned_start_time, +1 more.

meta_create_lookalike_audienceCreate Lookalike AudienceB

Creates a lookalike audience based on an existing custom audience or page.

Args:

  • ad_account_id (string): Ad account ID

  • name (string): Audience name

  • origin_audience_id (string): Source custom audience ID to base the lookalike on

  • country (string): ISO 3166-1 alpha-2 country code (e.g., "US", "GB")

  • ratio (number): Lookalike size as fraction of country population (0.01–0.20, i.e. 1%–20%)

Returns the new lookalike audience ID.

Inputs: ad_account_id (required), name (required), origin_audience_id (required), country (required), +2 more.

meta_create_photo_postCreate Facebook Photo PostB

Publishes a photo post to a Facebook Page.

Args:

  • page_id (string): Facebook Page ID

  • url (string): Public URL of the image

  • caption (string, optional): Photo caption/message

  • published (boolean): Default true

Inputs: page_id (required), url (required), caption, published, +1 more.

meta_create_pixelCreate Meta PixelB

Creates a new Meta Pixel for conversion tracking.

Args:

  • ad_account_id (string): Ad account ID

  • name (string): Pixel name

Inputs: ad_account_id (required), name (required), response_format.

meta_create_postCreate Facebook Page PostA

Creates a new post on a Facebook Page.

Requires: meta_list_pages must be called first to load page tokens.

Args:

  • page_id (string): Facebook Page ID to post to

  • message (string): Text content of the post

  • link (string, optional): URL to attach to the post (creates a link preview)

  • published (boolean, optional): If false, saves as draft. Default true.

  • scheduled_publish_time (number, optional): Unix timestamp for scheduling (must be 10 min to 30 days in future; published must be false)

Returns: Post ID of the created post.

Notes:

  • Maximum post length: ~63,206 characters

  • Scheduling requires the page to have Page Publishing Authorization

Inputs: page_id (required), message (required), link, published, +2 more.

meta_create_productCreate ProductA

Adds a product to a catalog.

Args:

  • catalog_id (string): The catalog ID

  • name (string): Product name

  • description (string): Product description

  • price (number): Price in cents

  • currency (string): Currency code (default "USD")

  • availability (enum): "in stock", "out of stock", "preorder", "available for order"

  • image_url (string): Product image URL

  • url (string): Product page URL

  • brand (string, optional): Brand name

  • category (string, optional): Product category

  • retailer_id (string): Your unique product ID

Returns the created product ID.

Inputs: catalog_id (required), name (required), description (required), price (required), +8 more.

meta_create_product_feedCreate Product FeedA

Creates a new product feed for a catalog to automatically sync products from a URL.

Args:

  • catalog_id (string): Product catalog ID

  • name (string): Feed name

  • schedule_url (string): URL of the product feed file (CSV, TSV, XML)

  • schedule_interval (string): How often to fetch — HOURLY, DAILY, WEEKLY, MONTHLY

Returns the new feed ID.

Inputs: catalog_id (required), name (required), schedule_url (required), schedule_interval (required), +1 more.

meta_create_saved_audienceCreate Saved AudienceC

Creates a saved audience (reusable targeting preset) for an ad account.

Args:

  • ad_account_id (string): Ad account ID

  • name (string): Audience name

  • targeting (object): Targeting spec object

Inputs: ad_account_id (required), name (required), targeting (required), response_format.

meta_create_video_postCreate Facebook Video PostC

Publishes a video post to a Facebook Page.

Args:

  • page_id (string): Facebook Page ID

  • file_url (string): Public URL of the video file

  • title (string, optional): Video title

  • description (string, optional): Video description

Inputs: page_id (required), file_url (required), title, description, +1 more.

meta_cross_postCross-Post to Facebook Page & InstagramA

Publishes the same content to both a Facebook Page and Instagram simultaneously.

Requires: meta_list_pages must be called first to load page tokens.

Args:

  • page_id (string): Facebook Page ID

  • ig_account_id (string): Instagram professional account ID

  • message (string): Text content (used as FB post text and IG caption)

  • image_url (string, optional): Public image URL — creates photo posts on both platforms

  • video_url (string, optional): Public video URL — creates Reels on both platforms

Logic:

  • If image_url: FB photo post + IG photo post (parallel)

  • If video_url: FB Reel + IG Reel (parallel)

  • If text only: FB text post only (IG doesn't support text-only posts)

  • Uses Promise.allSettled so one platform failing doesn't block the other

Returns: Results from both platforms (which succeeded, which failed).

Inputs: page_id (required), ig_account_id (required), message (required), image_url, +2 more.

meta_debug_tokenDebug Access TokenA
Read-onlyIdempotent

Inspects the current Meta access token to show its type, expiry, permissions, and associated app/user.

Useful for diagnosing "permission denied" errors or checking when a token expires.

No arguments needed — inspects the META_ACCESS_TOKEN configured in your MCP env.

Inputs: response_format.

meta_delete_adDelete AdA
Destructive

Deletes an ad permanently.

Args:

  • ad_id (string): Ad ID to delete

Inputs: ad_id (required).

meta_delete_ad_ruleDelete Automated Ad RuleA
Destructive

Deletes an automated ad rule.

Args:

  • rule_id (string): Ad rule ID

Inputs: rule_id (required).

meta_delete_adsetDelete Ad SetA
Destructive

Deletes an ad set permanently.

Args:

  • adset_id (string): Ad set ID to delete

Inputs: adset_id (required).

meta_delete_campaignDelete CampaignA
Destructive

Deletes (archives) a campaign. This cannot be undone.

Args:

  • campaign_id (string): Campaign ID to delete

Inputs: campaign_id (required).

meta_delete_commentDelete Facebook CommentA
Destructive

Deletes a comment on a Facebook Page post. Permanent action.

Args:

  • comment_id (string): Comment ID to delete

  • page_id (string): Page ID (for authentication)

Inputs: comment_id (required), page_id (required).

meta_delete_custom_audienceDelete Custom AudienceA
Destructive

Deletes a custom audience permanently. This cannot be undone.

Args:

  • audience_id (string): Custom audience ID to delete

Inputs: audience_id (required).

meta_delete_instagram_commentDelete Instagram CommentA
Destructive

Deletes a comment on an Instagram media object. This is permanent.

Args:

  • comment_id (string): The comment ID to delete

Inputs: comment_id (required).

meta_delete_instagram_mediaDelete Instagram MediaA
Destructive

Deletes an Instagram media object (post, reel, story). This is permanent.

Args:

  • media_id (string): Instagram media ID to delete

Inputs: media_id (required).

meta_delete_pixelDelete Meta PixelA
Destructive

Deletes a Meta Pixel.

Args:

  • pixel_id (string): Pixel ID to delete

Inputs: pixel_id (required).

meta_delete_postDelete Facebook Page PostA
Destructive

Deletes a post from a Facebook Page. This action is permanent and cannot be undone.

Args:

  • post_id (string): The post ID to delete (format: {page_id}_{post_id})

  • page_id (string): The Page ID (for authentication)

Inputs: post_id (required), page_id (required).

meta_delete_productDelete ProductA
Destructive

Deletes a product from a catalog.

Args:

  • product_id (string): The product ID

This action is permanent and cannot be undone.

Inputs: product_id (required).

meta_delete_saved_audienceDelete Saved AudienceC
Destructive

Deletes a saved audience.

Args:

  • audience_id (string): Saved audience ID

Inputs: audience_id (required).

meta_end_live_videoEnd Facebook Live VideoA
Idempotent

Ends an active live video broadcast.

Requires: meta_list_pages called first to load page tokens.

Args:

  • live_video_id (string): The live video ID to end

  • page_id (string): Facebook Page ID (needed for page token auth)

Ends the broadcast immediately.

Inputs: live_video_id (required), page_id (required), response_format.

meta_generate_chartGenerate a Chart from DataA
Idempotent

Generates a chart image (PNG) from provided data. Uses QuickChart (Chart.js) to render.

Perfect for creating visual reports from Meta insights data. The chart is saved as a PNG file that can be inserted into Word docs, presentations, or shared directly.

Args:

  • chart_type (string): 'bar', 'line', 'pie', 'doughnut', 'radar', 'polarArea', 'horizontalBar'

  • title (string): Chart title

  • labels (string[]): X-axis labels or pie slice labels

  • datasets (array): One or more datasets, each with:

    • label (string): Dataset name (e.g., "Impressions")

    • data (number[]): Data values matching labels

    • color (string, optional): CSS color (e.g., "#1877F2", "rgba(24,119,242,0.5)")

  • width (number): Image width in pixels (default: 800)

  • height (number): Image height in pixels (default: 400)

  • output_path (string, optional): Save PNG to this path. If omitted, returns the chart URL.

  • stacked (boolean, optional): Stack bars/lines (default: false)

  • show_values (boolean, optional): Display data values on the chart (default: false)

Returns: Chart URL or file path. The URL can be opened in a browser or fetched as a PNG.

Example datasets for ad performance: labels: ["Mon","Tue","Wed","Thu","Fri"] datasets: [ { label: "Impressions", data: [1200,1800,1500,2100,1900], color: "#1877F2" }, { label: "Clicks", data: [45,62,51,78,65], color: "#42B72A" } ]

Inputs: title (required), labels (required), datasets (required), chart_type, +6 more.

meta_generate_comparison_chartGenerate a Before/After or A/B Comparison ChartA
Idempotent

Generates a side-by-side comparison chart — perfect for comparing two time periods, two campaigns, or A/B test results.

Args:

  • title (string): Chart title

  • metrics (string[]): Metric names (y-axis labels)

  • group_a (object): { label: string, values: number[], color?: string }

  • group_b (object): { label: string, values: number[], color?: string }

  • chart_type (string): 'bar' or 'horizontalBar' (default: 'horizontalBar')

  • width (number): Width in pixels (default: 800)

  • height (number): Height in pixels (default: 400)

  • output_path (string, optional): Save PNG to this path

Example — comparing two weeks: title: "This Week vs Last Week" metrics: ["Impressions", "Reach", "Clicks", "Spend"] group_a: { label: "Last Week", values: [12000, 8000, 450, 150] } group_b: { label: "This Week", values: [15000, 10500, 620, 185] }

Inputs: title (required), metrics (required), group_a (required), group_b (required), +5 more.

meta_get_account_insightsGet Ad Account InsightsA
Read-only

Gets performance insights for a Meta ad account.

Args:

  • ad_account_id (string): Ad account ID (e.g., act_123456789)

  • date_preset (string): Date range preset (default: last_30d)

  • since (string, optional): Custom start date YYYY-MM-DD (overrides date_preset)

  • until (string, optional): Custom end date YYYY-MM-DD

  • breakdowns (string[], optional): Segment by age, gender, country, device_platform, placement, etc.

Returns comprehensive metrics including: Performance: impressions, reach, clicks, spend, frequency, unique_clicks, unique_impressions Cost: cpm, cpc, cpp, ctr, cost_per_action_type, cost_per_conversion, cost_per_inline_link_click, cost_per_outbound_click, cost_per_thruplay Engagement: actions, inline_link_clicks, inline_link_click_ctr, inline_post_engagement, outbound_clicks, outbound_clicks_ctr, social_spend Conversions: conversions, conversion_values, purchase_roas Video: video_play_actions, video_avg_time_watched_actions, video_thruplay_watched_actions, video_p25/p50/p75/p95/p100_watched_actions Quality: quality_ranking, engagement_rate_ranking, conversion_rate_ranking

Inputs: ad_account_id (required), date_preset, since, until, +2 more.

meta_get_adGet Ad DetailsC
Read-onlyIdempotent

Gets detailed information about a specific ad.

Args:

  • ad_id (string): Ad ID

Inputs: ad_id (required), response_format.

meta_get_ad_accountGet Ad Account DetailsA
Read-onlyIdempotent

Gets detailed information about a specific ad account.

Args:

  • ad_account_id (string): Ad account ID (e.g., act_123456789)

Inputs: ad_account_id (required), response_format.

meta_get_ad_account_activityGet Ad Account Activity LogA
Read-only

Gets the activity/change log for an ad account.

Args:

  • ad_account_id (string): Ad account ID

  • limit (number): Max results (default 25)

  • since (string, optional): Start date YYYY-MM-DD

  • until (string, optional): End date YYYY-MM-DD

Inputs: ad_account_id (required), limit, since, until, +1 more.

meta_get_ad_account_usersGet Ad Account UsersA
Read-onlyIdempotent

Lists users who have access to an ad account with their roles.

Args:

  • ad_account_id (string): Ad account ID (e.g., act_123456789)

Inputs: ad_account_id (required), response_format.

meta_get_ad_creativeGet Ad Creative DetailsC
Read-onlyIdempotent

Gets detailed information about a specific ad creative.

Args:

  • creative_id (string): Creative ID

Inputs: creative_id (required), response_format.

meta_get_ad_insightsGet Ad InsightsA
Read-only

Gets performance insights at the individual ad level.

Args:

  • ad_account_id (string, optional): All ads in account

  • campaign_id (string, optional): All ads in campaign

  • adset_id (string, optional): All ads in ad set

  • ad_id (string, optional): Specific ad

  • date_preset (string): Date range preset (default: last_30d)

  • since / until (string, optional): Custom date range YYYY-MM-DD

  • breakdowns (string[], optional): age, gender, country, device_platform, etc.

Provide one of: ad_id, adset_id, campaign_id, or ad_account_id.

Inputs: ad_account_id, campaign_id, adset_id, ad_id, +5 more.

meta_get_ad_previewGet Ad PreviewA
Read-onlyIdempotent

Generates a preview URL for an ad or creative.

Args:

  • ad_id (string, optional): Existing ad ID

  • creative_id (string, optional): Creative ID to preview

  • ad_format (string): Preview format — DESKTOP_FEED_STANDARD, MOBILE_FEED_STANDARD, INSTAGRAM_STANDARD, INSTAGRAM_STORY, RIGHT_COLUMN_STANDARD

Provide either ad_id or creative_id.

Inputs: ad_id, creative_id, ad_format, response_format.

meta_get_ad_ruleGet Ad Rule DetailsA
Read-onlyIdempotent

Gets details for a specific automated ad rule.

Args:

  • rule_id (string): Ad rule ID

Inputs: rule_id (required), response_format.

meta_get_adsetGet Ad Set DetailsC
Read-onlyIdempotent

Gets detailed information about a specific ad set.

Args:

  • adset_id (string): Ad set ID

Inputs: adset_id (required), response_format.

meta_get_adset_insightsGet Ad Set InsightsA
Read-only

Gets performance insights for ad sets.

Args:

  • ad_account_id (string): Ad account ID (use for all ad sets)

  • adset_id (string, optional): Specific ad set ID

  • campaign_id (string, optional): All ad sets in a campaign

  • date_preset (string): Date range preset (default: last_30d)

  • since / until (string, optional): Custom date range YYYY-MM-DD

  • breakdowns (string[], optional): age, gender, country, device_platform, etc.

Provide ad_account_id or campaign_id or adset_id.

Inputs: ad_account_id, adset_id, campaign_id, date_preset, +4 more.

meta_get_ad_studiesList A/B Tests (Ad Studies)A
Read-onlyIdempotent

Lists A/B tests (ad studies) for a Meta ad account.

Args:

  • ad_account_id (string): Ad account ID (e.g., act_123456789)

  • limit (number): Max results (1–50, default 10)

Returns: List of studies with name, type, status, dates, and results.

Inputs: ad_account_id (required), limit, response_format.

meta_get_ad_study_resultsGet A/B Test ResultsA
Read-onlyIdempotent

Gets detailed results of a specific A/B test (ad study).

Args:

  • study_id (string): The ad study ID

Returns: Study details including winner, confidence level, and per-cell metrics.

Inputs: study_id (required), response_format.

meta_get_blocked_usersGet Blocked UsersA
Read-onlyIdempotent

Lists users blocked by the Facebook Page.

Args:

  • page_id (string): Facebook Page ID

Inputs: page_id (required), response_format.

meta_get_broadcast_channel_messagesGet Broadcast Channel MessagesB
Read-only

Gets messages in an Instagram broadcast channel.

Args:

  • channel_id (string): Broadcast channel ID

  • limit (number): Max messages (1–100, default 20)

  • after (string, optional): Pagination cursor

Returns: Paginated list of messages with type, content, and timestamps.

Inputs: channel_id (required), limit, after, response_format.

meta_get_campaignGet Campaign DetailsC
Read-onlyIdempotent

Gets detailed information about a specific campaign.

Args:

  • campaign_id (string): Campaign ID

Inputs: campaign_id (required), response_format.

meta_get_campaign_insightsGet Campaign InsightsA
Read-only

Gets performance insights for campaigns in a Meta ad account.

Args:

  • ad_account_id (string): Ad account ID

  • campaign_id (string, optional): Specific campaign ID (omit for all campaigns)

  • date_preset (string): Date range preset (default: last_30d)

  • since (string, optional): Custom start date YYYY-MM-DD

  • until (string, optional): Custom end date YYYY-MM-DD

  • breakdowns (string[], optional): Segment by age, gender, country, device_platform, etc.

Returns per-campaign spend, impressions, clicks, CTR, and actions.

Inputs: ad_account_id (required), campaign_id, date_preset, since, +3 more.

meta_get_conversation_messagesGet Conversation MessagesA
Read-only

Gets messages from a specific Page conversation.

Args:

  • page_id (string): Facebook Page ID (for auth)

  • conversation_id (string): Conversation ID (from meta_get_page_conversations)

  • limit (number): Max messages (1–100, default 20)

Inputs: page_id (required), conversation_id (required), limit, after, +1 more.

meta_get_custom_audienceGet Custom AudienceA
Read-onlyIdempotent

Gets details about a specific custom audience.

Args:

  • audience_id (string): Custom audience ID

Inputs: audience_id (required), response_format.

meta_get_delivery_estimateGet Delivery EstimateA
Read-only

Gets delivery estimate for an existing ad set.

Args:

  • adset_id (string): Ad set ID

Returns: Estimated daily outcomes (reach, impressions, actions) and bid suggestion.

Inputs: adset_id (required), response_format.

meta_get_instagram_account_insightsGet Instagram Account InsightsA
Read-only

Gets performance insights for an Instagram professional account.

Args:

  • ig_account_id (string): Instagram account ID

  • metrics (string[]): Metrics to retrieve. Options: Interactions: accounts_engaged, total_interactions, likes, comments, shares, saves, replies, reposts, reach, views, profile_links_taps, account_repost_count Legacy: impressions (deprecated v22.0+), follower_count, email_contacts, phone_call_clicks, text_message_clicks, get_directions_clicks, profile_views, website_clicks Demographics: engaged_audience_demographics, reached_audience_demographics, follower_demographics, online_followers

Note: account_repost_count (Dec 2025) returns the total number of reposts across the account for the given period.

  • period (string): 'day', 'week', 'days_28', 'month', 'lifetime' (lifetime only for demographic metrics)

  • since (string, optional): Start date YYYY-MM-DD

  • until (string, optional): End date YYYY-MM-DD

  • breakdown (string, optional): For demographic metrics: 'age', 'city', 'country', 'gender'

  • timeframe (string, optional): For demographic metrics: 'last_14_days', 'last_30_days', 'last_90_days', 'this_month', 'this_week'

Note: demographic metrics require 100+ followers. online_followers only available for last 30 days.

Inputs: ig_account_id (required), metrics, period, since, +4 more.

meta_get_instagram_available_catalogsGet Instagram Available CatalogsA
Read-onlyIdempotent

Lists product catalogs available for Instagram Shopping on a professional account.

Args:

  • ig_account_id (string): Instagram account ID

Returns: Catalog IDs and names that can be used for product tagging on this account.

Requires: instagram_shopping_tag_products permission.

Inputs: ig_account_id (required), response_format.

meta_get_instagram_broadcast_channelsList Instagram Broadcast ChannelsA
Read-onlyIdempotent

Lists broadcast channels for an Instagram professional account.

Broadcast channels enable one-to-many messaging from creators/brands to subscribers.

Args:

  • ig_account_id (string): Instagram account ID

Returns: Channel IDs, names, descriptions, subscriber counts.

Inputs: ig_account_id (required), response_format.

meta_get_instagram_comment_repliesGet Instagram Comment RepliesA
Read-only

Gets replies to a specific Instagram comment.

Args:

  • comment_id (string): Parent comment ID

  • limit (number): Max replies (1–50, default 20)

Inputs: comment_id (required), limit, response_format.

meta_get_instagram_commentsGet Instagram CommentsC
Read-only

Gets comments on an Instagram media object.

Args:

  • media_id (string): Instagram media ID

  • limit (number): Max comments to return (1–100, default 20)

Inputs: media_id (required), limit, after, response_format.

meta_get_instagram_conversationsList Instagram DM ConversationsB
Read-only

Lists Instagram Direct Message conversations.

Args:

  • ig_account_id (string): Instagram account ID

  • folder (string): 'inbox' (default), 'spam', or 'general'

  • limit (number): Max conversations (1–100, default 20)

  • after (string, optional): Pagination cursor

Requires instagram_manage_messages permission. Uses user token (not page token).

Inputs: ig_account_id (required), folder, limit, after, +1 more.

meta_get_instagram_live_mediaGet Instagram Live MediaB
Read-only

Gets live video broadcasts from an Instagram account.

Args:

  • ig_account_id (string): Instagram account ID

Inputs: ig_account_id (required), response_format.

meta_get_instagram_mediaGet Instagram MediaA
Read-only

Lists media (posts, reels, stories) from an Instagram professional account.

Args:

  • ig_account_id (string): Instagram account ID (from meta_list_instagram_accounts)

  • limit (number): Max items to return (1–100, default 20)

  • after (string, optional): Pagination cursor

Inputs: ig_account_id (required), limit, after, response_format.

meta_get_instagram_media_childrenGet Instagram Carousel ItemsA
Read-onlyIdempotent

Gets individual media items in a carousel/album post.

Args:

  • media_id (string): Carousel media ID

Inputs: media_id (required), response_format.

meta_get_instagram_media_insightsGet Instagram Media InsightsA
Read-onlyIdempotent

Gets performance metrics for a specific Instagram media object.

Args:

  • media_id (string): Instagram media ID (from meta_get_instagram_media)

  • metrics (string[]): Metrics vary by media type: Photos/Carousels: reach, likes, comments, shares, saved, total_interactions, follows, profile_visits, profile_activity, views, impressions (deprecated) Reels/Video: reach, likes, comments, shares, saved, total_interactions, follows, profile_visits, profile_activity, views, ig_reels_avg_watch_time, ig_reels_video_view_total_time, reels_skip_rate, repost_count, crossposted_views, facebook_views, impressions (deprecated), plays (deprecated), clips_replays_count (deprecated) Stories: reach, shares, follows, profile_visits, profile_activity, replies, navigation, total_interactions, views, impressions (deprecated)

New Reels metrics (Dec 2025): - reels_skip_rate: Percentage of viewers who skip within first 3 seconds - repost_count: Number of reposts of this media - crossposted_views: Total views across Instagram and Facebook (for crossposted content) - facebook_views: Facebook-specific views for crossposted Reels

  • breakdown (string, optional): 'action_type' (for profile_activity) or 'story_navigation_action_type' (for navigation)

Inputs: media_id (required), metrics, breakdown, response_format.

meta_get_instagram_mentioned_mediaGet Instagram MentionsB
Read-only

Gets media where the Instagram account was @mentioned in a caption or comment.

Args:

  • ig_account_id (string): Instagram account ID

  • limit (number): Max results (default 20)

Requires instagram_manage_comments permission.

Inputs: ig_account_id (required), limit, after, response_format.

meta_get_instagram_messagesGet Instagram DM MessagesA
Read-only

Gets messages in an Instagram Direct Message conversation.

Args:

  • conversation_id (string): Conversation ID (from meta_get_instagram_conversations)

  • limit (number): Max messages (1–100, default 20)

  • after (string, optional): Pagination cursor

Messages are returned in reverse chronological order from the API and displayed in chronological order.

Inputs: conversation_id (required), limit, after, response_format.

meta_get_instagram_product_tagsGet Instagram Product TagsA
Read-onlyIdempotent

Gets product tags on an Instagram media object. Requires Instagram Shopping.

Args:

  • media_id (string): Instagram media ID

Inputs: media_id (required), response_format.

meta_get_instagram_recent_hashtagsGet Recently Searched HashtagsA
Read-only

Gets hashtags recently searched by the Instagram account.

Args:

  • ig_account_id (string): Instagram account ID

Note: Limited to 30 unique hashtag searches per 7 days. This returns the recent searches.

Inputs: ig_account_id (required), response_format.

meta_get_instagram_single_mediaGet Single Instagram Media DetailsB
Read-onlyIdempotent

Gets detailed information about a specific Instagram media object.

Args:

  • media_id (string): Instagram media ID

Inputs: media_id (required), response_format.

meta_get_instagram_storiesGet Instagram StoriesA
Read-onlyIdempotent

Gets currently active stories for an Instagram professional account.

Args:

  • ig_account_id (string): Instagram account ID

Returns: List of active story media objects. Stories expire after 24 hours.

Inputs: ig_account_id (required), response_format.

meta_get_instagram_userGet Instagram User InfoA
Read-onlyIdempotent

Gets public profile info for any Instagram business/creator account by username.

Uses the Business Discovery API — no follow/connection required.

Args:

  • ig_account_id (string): Your Instagram account ID (for auth)

  • username (string): Instagram username to look up (without @)

Returns: Bio, follower/following counts, media count, profile picture, and recent media.

Inputs: ig_account_id (required), username (required), response_format.

meta_get_leadgen_leadsGet Leads from FormA
Read-only

Gets submitted leads from a lead generation form.

Requires: meta_list_pages must be called first to load page tokens.

Args:

  • form_id (string): Lead gen form ID (from meta_list_leadgen_forms)

  • page_id (string): Page ID (for authentication)

  • limit (number): Max results (1–100, default 25)

  • after (string, optional): Pagination cursor

Returns lead data including field values, creation time, and ad info.

Inputs: form_id (required), page_id (required), limit, after, +1 more.

meta_get_live_videosList Facebook Live VideosA
Read-onlyIdempotent

Lists live videos on a Facebook Page.

Requires: meta_list_pages called first to load page tokens.

Args:

  • page_id (string): Facebook Page ID

  • broadcast_status (enum, optional): Filter by status — "LIVE", "UNPUBLISHED", "SCHEDULED_UNPUBLISHED", or "VOD"

  • limit (number, optional): Max results (1–100, default 10)

  • after (string, optional): Pagination cursor

Returns live video details including title, status, views, and creation time.

Inputs: page_id (required), broadcast_status, limit, after, +1 more.

meta_get_minimum_budgetsGet Minimum Ad BudgetsA
Read-onlyIdempotent

Gets the minimum daily and lifetime budgets for an ad account by currency and bid strategy.

Essential to check before creating ad sets — using a budget below the minimum causes API errors.

Args:

  • ad_account_id (string): Ad account ID (e.g., act_123456789)

Returns: Minimum budget requirements per bid strategy.

Inputs: ad_account_id (required), response_format.

meta_get_pageGet Facebook Page DetailsB
Read-onlyIdempotent

Gets detailed information about a specific Facebook Page.

Args:

  • page_id (string): The Facebook Page ID

Returns page details including name, category, description, follower counts, and linked Instagram account.

Inputs: page_id (required), response_format.

meta_get_page_albumsGet Page Photo AlbumsC
Read-only

Lists photo albums on a Facebook Page.

Args:

  • page_id (string): Facebook Page ID

  • limit (number): Max results (1–100, default 20)

Inputs: page_id (required), limit, after, response_format.

meta_get_page_automated_responsesGet Page Automated Messaging SettingsA
Read-onlyIdempotent

Gets the current automated messaging settings for a Facebook Page.

Requires: meta_list_pages called first to load page tokens.

Args:

  • page_id (string): Facebook Page ID

Returns: Instant reply message, away message, greeting text, and ice breakers configuration.

Inputs: page_id (required), response_format.

meta_get_page_conversationsGet Page ConversationsA
Read-only

Lists conversations (messages) in a Facebook Page inbox.

Args:

  • page_id (string): Facebook Page ID

  • limit (number): Max conversations (1–100, default 20)

  • after (string, optional): Pagination cursor

Requires pages_messaging permission.

Inputs: page_id (required), limit, after, response_format.

meta_get_page_ctaGet Page Call-to-ActionA
Read-onlyIdempotent

Gets the call-to-action button configured on a Facebook Page.

Args:

  • page_id (string): Facebook Page ID

Inputs: page_id (required), response_format.

meta_get_page_eventsGet Page EventsA
Read-only

Lists events created by a Facebook Page.

Args:

  • page_id (string): Facebook Page ID

  • limit (number): Max results (1–100, default 20)

  • time_filter (string): 'upcoming' or 'past'

Inputs: page_id (required), limit, time_filter, response_format.

meta_get_page_fan_demographicsGet Page Fan DemographicsA
Read-onlyIdempotent

Gets fan/follower demographic breakdowns for a Facebook Page via insights.

Args:

  • page_id (string): Facebook Page ID

  • metric (string): Demographic metric — 'page_fans_city', 'page_fans_country', 'page_fans_gender_age', 'page_fans_locale'

Inputs: page_id (required), metric, response_format.

meta_get_page_insightsGet Facebook Page InsightsA
Read-only

Gets analytics/insights for a Facebook Page.

Requires: meta_list_pages called first.

Args:

  • page_id (string): Facebook Page ID

  • metrics (string[]): Metrics to retrieve. Full options: Impressions: page_impressions, page_impressions_unique, page_impressions_organic, page_impressions_organic_unique, page_impressions_paid, page_impressions_paid_unique, page_impressions_viral, page_impressions_viral_unique, page_impressions_nonviral, page_impressions_nonviral_unique Post Impressions: page_posts_impressions, page_posts_impressions_unique, page_posts_impressions_organic, page_posts_impressions_organic_unique, page_posts_impressions_paid, page_posts_impressions_paid_unique, page_posts_impressions_viral, page_posts_impressions_viral_unique Engagement: page_engaged_users, page_post_engagements, page_total_actions, page_negative_feedback Reactions: page_actions_post_reactions_total, page_actions_post_reactions_like_total, page_actions_post_reactions_love_total, page_actions_post_reactions_wow_total, page_actions_post_reactions_haha_total, page_actions_post_reactions_sorry_total, page_actions_post_reactions_anger_total Fans: page_fans, page_fan_adds, page_fan_adds_unique, page_fan_adds_by_paid_non_paid_unique, page_fan_removes, page_fan_removes_unique, page_daily_follows, page_daily_follows_unique, page_daily_unfollows_unique Views: page_views_total, page_tab_views_login_top, page_tab_views_login_top_unique, page_tab_views_logout_top Video: page_video_views, page_video_views_unique, page_video_views_paid, page_video_views_organic, page_video_views_autoplayed, page_video_views_click_to_play, page_video_complete_views_30s, page_video_complete_views_30s_unique, page_video_complete_views_30s_paid, page_video_complete_views_30s_organic, page_video_repeat_views, page_video_view_time, page_video_views_10s, page_video_views_10s_unique, page_video_views_10s_paid, page_video_views_10s_organic Content: page_media_view, page_lifetime_engaged_followers_unique

  • period (string): Aggregation period: 'day', 'week', 'days_28', 'month'

  • since (string, optional): Start date YYYY-MM-DD

  • until (string, optional): End date YYYY-MM-DD

Returns: Time-series data for each metric.

Inputs: page_id (required), metrics, period, since, +2 more.

meta_get_page_locationsGet Page LocationsB
Read-onlyIdempotent

Lists location pages for a business with multiple locations.

Args:

  • page_id (string): Parent Facebook Page ID

Inputs: page_id (required), limit, response_format.

meta_get_page_photosGet Page PhotosB
Read-only

Lists photos uploaded to a Facebook Page.

Args:

  • page_id (string): Facebook Page ID

  • type (string): 'uploaded' (by page) or 'tagged' (photos page is tagged in)

  • limit (number): Max results (default 20)

Inputs: page_id (required), type, limit, after, +1 more.

meta_get_page_pictureGet Page Profile PictureB
Read-onlyIdempotent

Gets the profile picture URL for a Facebook Page.

Args:

  • page_id (string): Facebook Page ID

  • size (string): Picture size — small, normal, large, square (default: large)

Inputs: page_id (required), size, response_format.

meta_get_page_ratingsGet Page Ratings/ReviewsB
Read-only

Gets ratings and reviews for a Facebook Page.

Args:

  • page_id (string): Facebook Page ID

  • limit (number): Max results (default 20)

Inputs: page_id (required), limit, after, response_format.

meta_get_page_tabsGet Page TabsA
Read-onlyIdempotent

Lists custom tabs on a Facebook Page.

Args:

  • page_id (string): Facebook Page ID

Inputs: page_id (required), response_format.

meta_get_page_taggedGet Page Tagged PostsA
Read-only

Gets posts that tag this Facebook Page.

Args:

  • page_id (string): Facebook Page ID

  • limit (number): Max results (1–100, default 20)

Inputs: page_id (required), limit, after, response_format.

meta_get_page_videosGet Page VideosC
Read-only

Lists videos uploaded to a Facebook Page.

Args:

  • page_id (string): Facebook Page ID

  • limit (number): Max results (1–100, default 20)

Inputs: page_id (required), limit, after, response_format.

meta_get_pixelGet Meta Pixel DetailsC
Read-onlyIdempotent

Gets details for a single Meta Pixel.

Args:

  • pixel_id (string): Pixel ID

  • response_format (optional): "json" or "text"

Inputs: pixel_id (required), response_format.

meta_get_pixel_eventsGet Pixel EventsB
Read-onlyIdempotent

Gets recent events received by a pixel (for debugging).

Args:

  • pixel_id (string): Pixel ID

Inputs: pixel_id (required), response_format.

meta_get_pixel_statsGet Meta Pixel StatsA
Read-onlyIdempotent

Gets event volume stats for a pixel (critical for verifying pixel is firing).

Args:

  • pixel_id (string): Pixel ID

  • start_time (string, optional): ISO date for start of range

  • end_time (string, optional): ISO date for end of range

  • aggregation (string, optional): "event" (default) or "device"

  • event (string, optional): Filter to specific event like "Purchase"

Inputs: pixel_id (required), start_time, end_time, aggregation, +2 more.

meta_get_postGet Single Post DetailsB
Read-onlyIdempotent

Gets detailed information about a specific Facebook post.

Args:

  • post_id (string): Post ID (format: {page_id}_{post_id})

Inputs: post_id (required), response_format.

meta_get_post_commentsGet Post CommentsA
Read-only

Gets comments on a Facebook Page post.

Args:

  • post_id (string): Post ID (format: {page_id}_{post_id})

  • page_id (string): Page ID (for authentication — call meta_list_pages first)

  • limit (number): Max comments (1–100, default 25)

  • order (string): 'chronological' or 'reverse_chronological'

  • after (string, optional): Pagination cursor

  • filter (string): 'toplevel' (default), 'stream' (all including replies)

Inputs: post_id (required), page_id (required), limit, order, +3 more.

meta_get_post_insightsGet Facebook Post InsightsA
Read-onlyIdempotent

Gets performance metrics for a specific Facebook Page post.

Requires: meta_list_pages called first.

Args:

  • post_id (string): Post ID (e.g., "page_id_post_id")

  • page_id (string): Page ID (for authentication)

  • metrics (string[]): Metrics to retrieve. Options: Performance: post_impressions, post_impressions_unique, post_impressions_paid, post_impressions_paid_unique, post_impressions_fan, post_impressions_fan_unique, post_impressions_organic, post_impressions_organic_unique, post_impressions_viral, post_impressions_viral_unique Engagement: post_clicks, post_clicks_by_type, post_engaged_users, post_negative_feedback, post_negative_feedback_by_type, post_engaged_fan Reactions: post_reactions_by_type_total, post_reactions_like_total, post_reactions_love_total, post_reactions_wow_total, post_reactions_haha_total, post_reactions_sorry_total, post_reactions_anger_total Media: post_media_view, post_total_media_view_unique Video: post_video_avg_time_watched, post_video_complete_views_organic, post_video_complete_views_paid, post_video_views_organic, post_video_views_paid, post_video_view_time Activity: post_activity_by_action_type, post_activity_by_action_type_unique

All post metrics use 'lifetime' period (cumulative from post creation).

Inputs: post_id (required), page_id (required), metrics, response_format.

meta_get_post_reactionsGet Post ReactionsA
Read-onlyIdempotent

Gets reaction counts (like, love, haha, wow, sad, angry) on a post.

Args:

  • post_id (string): Post ID

Inputs: post_id (required), response_format.

meta_get_postsGet Facebook Page PostsA
Read-only

Lists posts from a Facebook Page feed.

Requires: meta_list_pages called first to load page tokens.

Args:

  • page_id (string): Facebook Page ID

  • limit (number): Max posts to return (1–100, default 20)

  • after (string, optional): Cursor for next page of results

Returns: List of posts with message, permalink, created time, and post ID.

Inputs: page_id (required), limit, after, response_format.

meta_get_productGet ProductA
Read-onlyIdempotent

Gets details for a single product.

Args:

  • product_id (string): The product ID

Returns full product details including price, availability, sale price, condition, and inventory.

Inputs: product_id (required), response_format.

meta_get_product_catalogGet Product CatalogB
Read-onlyIdempotent

Gets details for a single product catalog.

Args:

  • catalog_id (string): The catalog ID

Returns catalog name, product count, vertical, business info, and store settings.

Inputs: catalog_id (required), response_format.

meta_get_promotable_postsGet Promotable PostsA
Read-only

Gets posts that are eligible for boosting/promotion on a Facebook Page.

Args:

  • page_id (string): Facebook Page ID

  • limit (number): Max results (default 20)

Inputs: page_id (required), limit, after, response_format.

meta_get_published_postsGet Published PostsA
Read-only

Gets posts published by the Page itself (excludes visitor posts, unlike the feed edge).

Args:

  • page_id (string): Facebook Page ID

  • limit (number): Max results (1–100, default 20)

Inputs: page_id (required), limit, after, response_format.

meta_get_reach_estimateGet Reach EstimateA
Read-only

Estimates the potential reach for a targeting specification.

Args:

  • ad_account_id (string): Ad account ID

  • targeting_spec (object): Targeting specification (same format as ad set targeting)

  • optimization_goal (string, optional): e.g., REACH, LINK_CLICKS, IMPRESSIONS

Returns: Estimated daily reach and audience size.

Inputs: ad_account_id (required), targeting_spec (required), optimization_goal, response_format.

meta_get_scheduled_postsGet Scheduled PostsB
Read-only

Lists scheduled (unpublished) posts for a Facebook Page.

Args:

  • page_id (string): Facebook Page ID

  • limit (number): Max results (1–100, default 20)

Inputs: page_id (required), limit, after, response_format.

meta_get_visitor_postsGet Visitor PostsA
Read-only

Gets posts published by visitors on the Facebook Page wall.

Args:

  • page_id (string): Facebook Page ID

  • limit (number): Max results (1–100, default 20)

Inputs: page_id (required), limit, after, response_format.

meta_health_checkMeta MCP Health CheckA
Read-only

Checks the health of the Meta MCP server: token status, cached tokens, API connectivity.

Returns: Token validity, number of cached page tokens, Threads token status, and API reachability.

Inputs: response_format.

meta_hide_commentHide or Unhide a Facebook CommentA
Idempotent

Hides or unhides a comment on a Facebook Page post.

Hidden comments are only visible to the comment author and their friends. This is a non-destructive alternative to deletion — useful for moderation.

Args:

  • comment_id (string): Comment ID to hide/unhide

  • page_id (string): Page ID (for authentication)

  • is_hidden (boolean): true to hide, false to unhide

Requires pages_manage_engagement permission.

Inputs: comment_id (required), page_id (required), is_hidden (required).

meta_hide_instagram_commentHide or Unhide an Instagram CommentA
Idempotent

Hides or unhides a comment on an Instagram media object.

Hidden comments are only visible to the comment author. This is a non-destructive alternative to deletion — useful for moderation.

Args:

  • comment_id (string): Comment ID to hide/unhide

  • is_hidden (boolean): true to hide, false to unhide

Inputs: comment_id (required), is_hidden (required).

meta_like_objectLike/Unlike Post or CommentA
Idempotent

Likes or removes a like from a page post or comment, acting as the Page.

Args:

  • object_id (string): Post ID or Comment ID

  • page_id (string): Page ID (for token)

  • unlike (boolean): If true, removes the like instead

Inputs: object_id (required), page_id (required), unlike.

meta_list_ad_accountsList Meta Ad AccountsA
Read-onlyIdempotent

Lists all Meta ad accounts accessible to the authenticated user.

Returns ad account IDs (prefixed with act_), names, currency, status, and spend info.

Call this first to get ad account IDs needed for campaign and insights tools.

Inputs: response_format.

meta_list_ad_creativesList Ad CreativesA
Read-only

Lists ad creatives for an ad account.

Args:

  • ad_account_id (string): Ad account ID

  • limit (number): Max results (default 20)

  • after (string, optional): Pagination cursor

Returns creative IDs, names, and associated page post IDs.

Inputs: ad_account_id (required), limit, after, response_format.

meta_list_ad_imagesList Ad ImagesB
Read-only

Lists images in an ad account's image library.

Args:

  • ad_account_id (string): Ad account ID

  • limit (number): Max results (default 25)

Inputs: ad_account_id (required), limit, after, response_format.

meta_list_ad_labelsList Ad LabelsA
Read-onlyIdempotent

Lists ad labels for an ad account. Labels help organize campaigns, ad sets, and ads.

Args:

  • ad_account_id (string): Ad account ID

Inputs: ad_account_id (required), response_format.

meta_list_ad_rulesList Automated Ad RulesA
Read-onlyIdempotent

Lists automated rules for an ad account.

Args:

  • ad_account_id (string): Ad account ID

Inputs: ad_account_id (required), response_format.

meta_list_adsList AdsA
Read-only

Lists ads for an ad set, campaign, or ad account.

Args:

  • adset_id (string, optional): Filter by ad set

  • campaign_id (string, optional): Filter by campaign

  • ad_account_id (string, optional): List all ads in account

  • status_filter (string[], optional): ACTIVE, PAUSED, ARCHIVED, DELETED

  • limit (number): Max results (default 20)

  • after (string, optional): Pagination cursor

Provide one of adset_id, campaign_id, or ad_account_id.

Inputs: adset_id, campaign_id, ad_account_id, status_filter, +3 more.

meta_list_adsetsList Ad SetsA
Read-only

Lists ad sets for a campaign or ad account.

Args:

  • campaign_id (string, optional): Filter by campaign ID

  • ad_account_id (string, optional): Ad account ID (use if not filtering by campaign)

  • status_filter (string[], optional): ACTIVE, PAUSED, ARCHIVED, DELETED

  • limit (number): Max results (default 20)

  • after (string, optional): Pagination cursor

Provide either campaign_id or ad_account_id.

Inputs: campaign_id, ad_account_id, status_filter, limit, +2 more.

meta_list_ad_videosList Ad VideosA
Read-only

Lists videos in an ad account's video library.

Args:

  • ad_account_id (string): Ad account ID

  • limit (number): Max results (default 20)

Inputs: ad_account_id (required), limit, after, response_format.

meta_list_business_assetsList Business Manager AssetsB
Read-onlyIdempotent

Lists assets (pages, ad accounts, Instagram accounts, pixels) for a Business Manager.

Args:

  • business_id: Business Manager ID

  • asset_type: "owned_pages", "owned_ad_accounts", "owned_instagram_accounts", "owned_pixels"

  • limit (optional, default 25): Max results

Returns asset details including IDs, names, and type-specific metadata.

Inputs: business_id (required), asset_type (required), limit, response_format.

meta_list_campaignsList CampaignsB
Read-only

Lists campaigns for a Meta ad account.

Args:

  • ad_account_id (string): Ad account ID (e.g., act_123456789)

  • status_filter (string[], optional): Filter by status: ACTIVE, PAUSED, ARCHIVED, DELETED

  • limit (number): Max results (1–100, default 20)

  • after (string, optional): Pagination cursor

Returns campaign names, objectives, status, and budget info.

Inputs: ad_account_id (required), status_filter, limit, after, +1 more.

meta_list_custom_audiencesList Custom AudiencesA
Read-only

Lists custom audiences in a Meta ad account.

Args:

  • ad_account_id (string): Ad account ID (e.g., act_123456789)

  • limit (number): Max results (1–100, default 20)

  • after (string, optional): Pagination cursor

Returns audience names, types, size estimates, and delivery status.

Inputs: ad_account_id (required), limit, after, response_format.

meta_list_custom_conversionsList Custom ConversionsC
Read-onlyIdempotent

Lists custom conversions for an ad account.

Args:

  • ad_account_id (string): Ad account ID

Inputs: ad_account_id (required), response_format.

meta_list_instagram_accountsList Instagram Business AccountsA
Read-onlyIdempotent

Lists all Instagram professional accounts linked to the user's Facebook Pages.

Requires: meta_list_pages must be called first.

Returns: Instagram account IDs, usernames, follower counts. The account ID is needed for all other Instagram tools.

Inputs: response_format.

meta_list_leadgen_formsList Lead Gen FormsA
Read-only

Lists lead generation forms for a Facebook Page.

Lead forms are used with OUTCOME_LEADS campaigns to collect user information.

Requires: meta_list_pages must be called first to load page tokens.

Args:

  • page_id (string): Facebook Page ID

  • limit (number): Max results (1–100, default 20)

Returns form IDs, names, status, and creation times.

Inputs: page_id (required), limit, after, response_format.

meta_list_offline_event_setsList Offline Event SetsA
Read-onlyIdempotent

Lists offline conversion event sets for an ad account.

Offline event sets track conversions that happen outside of digital channels (in-store purchases, phone orders, etc.).

Args:

  • ad_account_id (string): Ad account ID (e.g., act_123456789)

  • limit (number): Max results (1–100, default 25)

  • after (string, optional): Pagination cursor

Returns: Event set IDs, names, and configuration.

Inputs: ad_account_id (required), limit, after, response_format.

meta_list_pagesList Facebook PagesA
Read-onlyIdempotent

Lists all Facebook Pages managed by the authenticated user.

IMPORTANT: Call this tool first before any page or Instagram operations — it caches the page access tokens needed for subsequent calls.

Returns:

  • id: Page ID (needed for other tools)

  • name: Page name

  • category: Page category

  • fan_count: Number of likes

  • followers_count: Number of followers

  • link: Page URL

  • instagram_business_account.id: Linked Instagram account ID (if any)

Tip: The page tokens are cached automatically. You do not need to manage them manually.

Inputs: response_format.

meta_list_pixelsList Ad Account PixelsB
Read-onlyIdempotent

Lists all Meta Pixels for an ad account.

Args:

  • ad_account_id (string): Ad account ID

Inputs: ad_account_id (required), response_format.

meta_list_product_catalogsList Product CatalogsA
Read-onlyIdempotent

Lists product catalogs for a Meta business.

Args:

  • business_id (string): The business ID

  • limit (number): Max results (1–100, default 25)

Returns catalog IDs, names, product counts, and verticals.

Inputs: business_id (required), limit, response_format.

meta_list_product_feedsList Product FeedsA
Read-onlyIdempotent

Lists product feeds for a catalog. Feeds are automated data sources that keep catalogs up-to-date.

Args:

  • catalog_id (string): Product catalog ID

  • limit (number): Max results (1–100, default 25)

Returns feed IDs, names, schedules, and latest upload status.

Inputs: catalog_id (required), limit, response_format.

meta_list_productsList ProductsA
Read-onlyIdempotent

Lists products in a product catalog.

Args:

  • catalog_id (string): The catalog ID

  • limit (number): Max results (1–100, default 25)

  • after (string, optional): Pagination cursor

  • filter (object, optional): Filter criteria (e.g., { availability: "in stock" })

Returns product IDs, names, prices, availability, and more.

Inputs: catalog_id (required), limit, after, filter, +1 more.

meta_list_product_setsList Product SetsA
Read-onlyIdempotent

Lists product sets (subgroups) in a catalog.

Args:

  • catalog_id (string): The catalog ID

  • limit (number): Max results (1–100, default 25)

Returns product set IDs, names, filters, and product counts.

Inputs: catalog_id (required), limit, response_format.

meta_list_saved_audiencesList Saved AudiencesC
Read-only

Lists saved audiences (targeting presets) for an ad account.

Args:

  • ad_account_id (string): Ad account ID

Inputs: ad_account_id (required), limit, after, response_format.

meta_migrate_campaign_to_advantage_plusMigrate Campaign to Advantage+A

Migrates an existing campaign to Advantage+ Shopping (formerly ASC).

Advantage+ Shopping campaigns use Meta's AI to automatically optimize targeting, placements, and creative delivery for online sales. After migration, Meta handles audience selection and budget allocation across placements for better ROAS.

The campaign keeps its original ID — this is an in-place conversion, not a new campaign.

Args:

  • campaign_id (string): Campaign ID to migrate

  • ad_account_id (string): Ad account ID (e.g., act_123456789)

Inputs: campaign_id (required), ad_account_id (required), response_format.

meta_publish_instagram_containerPublish Instagram ContainerA

Publishes a pre-created Instagram media container. Use after checking container status is FINISHED.

Useful for reels/videos where container creation and publishing are done in separate steps.

Args:

  • ig_account_id (string): Instagram account ID

  • container_id (string): Container ID (from a previous create step)

Inputs: ig_account_id (required), container_id (required), response_format.

meta_publish_instagram_photoPublish Instagram PhotoA

Publishes a single image post to an Instagram professional account.

Two-step process: creates a media container then publishes it.

Args:

  • ig_account_id (string): Instagram account ID

  • image_url (string): Public URL of the JPEG image to post (must be publicly accessible)

  • caption (string, optional): Post caption (supports hashtags and @mentions)

  • alt_text (string, optional): Alt text for accessibility (screen readers)

  • location_id (string, optional): Facebook Place ID to tag location

Returns: Media ID of the published post.

Scheduling: Pass scheduled_publish_time (Unix timestamp, 10 min – 75 days in future) to schedule the post instead of publishing immediately.

Limitations:

  • JPEG only (no PNG, GIF, HEIC)

  • Max 100 posts per 24 hours

  • Image must be hosted on a public server

Inputs: ig_account_id (required), image_url (required), caption, alt_text, +3 more.

meta_publish_instagram_reelPublish Instagram ReelA

Publishes a video reel to an Instagram professional account.

Args:

  • ig_account_id (string): Instagram account ID

  • video_url (string): Public URL of the video file (MP4 recommended)

  • caption (string, optional): Reel caption

  • share_to_feed (boolean, optional): Also share to feed. Default true.

Returns: Media ID of the published reel.

Notes:

  • Video must be on a publicly accessible server

  • Check container status before publishing — video processing can take time

  • Use meta_check_instagram_container to check readiness

  • Scheduling: Pass scheduled_publish_time (Unix timestamp, 10 min – 75 days in future) to schedule instead of publishing immediately

Inputs: ig_account_id (required), video_url (required), caption, share_to_feed, +2 more.

meta_publish_instagram_storyPublish Instagram StoryC

Publishes an image or video story to an Instagram professional account.

Args:

  • ig_account_id (string): Instagram account ID

  • media_url (string): Public URL of the image or video

  • media_type (string): 'IMAGE' or 'VIDEO'

Returns: Media ID of the published story.

Inputs: ig_account_id (required), media_url (required), media_type (required), response_format.

meta_publish_page_reelPublish Facebook Page ReelA

Publishes a Reel (short-form video) to a Facebook Page.

Requires: meta_list_pages must be called first to load page tokens.

Args:

  • page_id (string): Facebook Page ID

  • video_url (string): Public URL of the video file

  • description (string, optional): Reel description/caption

  • title (string, optional): Reel title

Returns: The reel/video ID on success.

Notes:

  • Video must be hosted on a publicly accessible server

  • FB Reels use a simpler single-step flow (no container polling needed)

Inputs: page_id (required), video_url (required), description, title, +1 more.

meta_publish_page_storyPublish Facebook Page StoryA

Publishes a story (photo or video) to a Facebook Page.

Requires: meta_list_pages called first to load page tokens.

Args:

  • page_id (string): Facebook Page ID

  • media_url (string): Public URL of the image or video

  • media_type (enum): "photo" or "video"

Returns the story ID on success.

Inputs: page_id (required), media_url (required), media_type (required), response_format.

meta_reply_instagram_commentReply to Instagram CommentA

Replies to a comment on an Instagram media object.

Args:

  • media_id (string): Instagram media ID (not the comment ID)

  • message (string): Reply text

  • comment_id (string, optional): If replying to a specific comment

Returns: Comment ID of the reply.

Inputs: media_id (required), message (required), comment_id, response_format.

meta_reply_post_commentReply to Post CommentA

Replies to a comment on a Facebook Page post.

Args:

  • comment_id (string): Comment ID to reply to

  • page_id (string): Page ID (for token lookup)

  • message (string): Reply text

Inputs: comment_id (required), page_id (required), message (required), response_format.

meta_search_ad_librarySearch Meta Ad LibraryA
Read-only

Searches the Meta Ad Library for ads from any advertiser. This is a transparency tool — no ad account access needed.

Args:

  • ad_reached_countries (string[]): Required. ISO country codes where ads were shown (e.g., ["US", "GB"])

  • search_terms (string, optional): Keywords to search ad text

  • search_page_ids (string[], optional): Specific Page IDs to search

  • ad_type (string): ALL, POLITICAL_AND_ISSUE_ADS, HOUSING_ADS, EMPLOYMENT_ADS, CREDIT_ADS (default: ALL)

  • ad_active_status (string): ALL, ACTIVE, INACTIVE (default: ALL)

  • ad_delivery_date_min (string, optional): Min delivery date YYYY-MM-DD

  • ad_delivery_date_max (string, optional): Max delivery date YYYY-MM-DD

  • limit (number): Max results (1–100, default 25)

  • after (string, optional): Pagination cursor

Returns: Ad creatives, spend ranges, impressions, demographics, and targeting info.

Note: Requires a valid access token but does NOT require ad account ownership.

Inputs: ad_reached_countries (required), search_terms, search_page_ids, ad_type, +6 more.

meta_search_instagram_catalog_productsSearch Instagram Catalog ProductsA
Read-onlyIdempotent

Searches for products in an Instagram Shopping catalog by name.

Args:

  • ig_account_id (string): Instagram account ID

  • catalog_id (string): Product catalog ID (from meta_get_instagram_available_catalogs)

  • q (string): Product search query

Returns: Matching products that can be tagged in Instagram posts.

Inputs: ig_account_id (required), catalog_id (required), q (required), response_format.

meta_search_instagram_hashtagSearch Instagram HashtagA
Read-only

Searches for a hashtag and gets its ID, then retrieves top or recent media.

Two-step process: first looks up the hashtag ID, then fetches media.

Args:

  • ig_account_id (string): Instagram account ID (required for auth context)

  • hashtag (string): Hashtag to search (without #)

  • edge (string): 'top_media' or 'recent_media' (default: top_media)

  • limit (number): Max results (1–50, default 20)

Note: Limited to 30 unique hashtag searches per 7 days per IG account.

Inputs: ig_account_id (required), hashtag (required), edge, limit, +1 more.

meta_search_placesSearch Facebook PlacesA
Read-onlyIdempotent

Searches for Facebook Places (locations) by name or coordinates.

Use this to get a location_id for tagging posts, Instagram photos, or Threads.

Args:

  • q (string, optional): Search query (e.g., "Central Park", "Starbucks NYC")

  • center (string, optional): Latitude,longitude center point (e.g., "40.7829,-73.9654")

  • distance (number, optional): Search radius in meters (default: 1000, max: 50000)

  • limit (number): Max results (1–100, default 20)

  • categories (string[], optional): Filter by category — e.g., ["FOOD_BEVERAGE", "HOTEL_LODGING", "SHOPPING_RETAIL"]

Returns: Place IDs, names, addresses, and coordinates.

Note: Provide at least q or center. Both can be combined for location-aware name search.

Inputs: q, center, distance, limit, +2 more.

meta_search_targeting_demographicsSearch Targeting DemographicsB
Read-onlyIdempotent

Searches for demographic targeting options (job titles, employers, education).

Args:

  • q (string): Search query

  • type (string): adworkposition (job titles), adworkemployer (employers), adeducationschool (schools), adeducationmajor (majors)

Inputs: q (required), type (required), limit, response_format.

meta_search_targeting_geolocationsSearch Targeting GeolocationsB
Read-onlyIdempotent

Searches for geographic targeting options (countries, regions, cities, zip codes).

Args:

  • q (string): Location search query (e.g., "New York", "United Kingdom")

  • type (string): Location type — country, region, city, zip, geo_market, electoral_district

  • limit (number): Max results (default 25)

Returns: Location keys to use in ad set targeting.

Inputs: q (required), type, limit, response_format.

meta_search_targeting_interestsSearch Targeting InterestsA
Read-onlyIdempotent

Searches for interest-based targeting options for ad sets.

Args:

  • q (string): Search query (e.g., "yoga", "cooking")

  • limit (number): Max results (default 50)

Returns: Interest IDs and names to use in ad set targeting.

Inputs: q (required), limit, response_format.

meta_send_broadcast_channel_messageSend Broadcast Channel MessageA

Sends a message to an Instagram broadcast channel.

Args:

  • channel_id (string): Broadcast channel ID

  • message (string): Message text to send

  • link_url (string, optional): Clickable link to include with the message

Returns: Message ID of the sent message.

Inputs: channel_id (required), message (required), link_url.

meta_send_conversion_eventSend Conversion Event (CAPI)B

Sends a server-side conversion event to Meta via the Conversions API.

Args:

  • pixel_id: Meta Pixel ID

  • event_name: Standard events: Purchase, Lead, AddToCart, CompleteRegistration, ViewContent, Search, InitiateCheckout, AddPaymentInfo, AddToWishlist, Subscribe, StartTrial, Contact, CustomizeProduct, Donate, FindLocation, Schedule, SubmitApplication, PageView. Custom event names also accepted.

  • event_time: Unix timestamp

  • event_source_url (optional): URL where conversion happened

  • user_data: At minimum one of: em (hashed email), ph (hashed phone), fbc, fbp, client_ip_address, client_user_agent, external_id

  • custom_data (optional): { currency, value, content_name, content_ids, content_type, order_id, num_items }

  • event_id (optional): For deduplication with browser pixel

  • action_source: "website", "app", "email", "phone_call", "chat", "physical_store", "system_generated", "business_messaging", "other"

  • test_event_code (optional): For testing without affecting production data

Inputs: pixel_id (required), event_name (required), event_time (required), user_data (required), +6 more.

meta_send_instagram_media_messageSend Instagram Media DMA

Sends an image or link via Instagram Direct Message.

Args:

  • ig_account_id (string): Instagram account ID (sender)

  • recipient_id (string): Instagram-scoped user ID of recipient

  • image_url (string, optional): URL of image to send

  • link_url (string, optional): URL of link to send (as a generic template)

Provide either image_url or link_url (not both). Same messaging window restrictions as text DMs.

Returns: Message ID.

Inputs: no named parameters.

meta_send_instagram_messageSend Instagram Direct MessageA

Sends a text DM to an Instagram user.

Args:

  • ig_account_id (string): Instagram account ID (sender)

  • recipient_id (string): Instagram-scoped user ID of the recipient

  • message (string): Text message to send

Note: Only works within the 24-hour human agent messaging window or 7-day standard messaging window. The recipient must have messaged the account first.

Returns: Message ID.

Inputs: ig_account_id (required), recipient_id (required), message (required), response_format.

meta_send_offline_eventSend Offline Conversion EventA

Sends an offline conversion event to a Meta offline event set.

Used for tracking in-store purchases, phone orders, or other offline conversions.

Args:

  • event_set_id (string): Offline event set ID (from meta_list_offline_event_sets)

  • event_name (string): Event name (e.g., "Purchase", "Lead")

  • event_time (number): Unix timestamp of the conversion

  • user_data (object): Customer match data — at least one of: email, phone, fn (first name), ln (last name), ct (city), st (state), zip, country, external_id. All PII must be SHA256 hashed.

  • custom_data (object, optional): { currency, value, content_name, order_id }

  • upload_tag (string, optional): Tag for grouping uploads

Returns: Number of events received.

Inputs: event_set_id (required), event_name (required), event_time (required), user_data (required), +3 more.

meta_send_page_messageSend Page MessageA

Sends a message from a Facebook Page to a user (in an existing conversation).

Args:

  • page_id (string): Facebook Page ID

  • recipient_id (string): PSID (page-scoped user ID) of the recipient

  • message (string): Message text

Requires pages_messaging permission. Only works within the 24-hour messaging window.

Inputs: page_id (required), recipient_id (required), message (required).

meta_set_away_messageSet Page Away MessageA
Idempotent

Sets the away message for a Facebook Page. This is shown when the page is set to away mode.

Requires: meta_list_pages called first to load page tokens.

Args:

  • page_id (string): Facebook Page ID

  • message (string): The away message text

  • enabled (boolean, default true): Whether away mode is enabled

Inputs: page_id (required), message (required), enabled, response_format.

meta_set_greetingSet Page Messenger GreetingA
Idempotent

Sets the Messenger greeting text for a Facebook Page. This is shown to users before they send their first message.

Requires: meta_list_pages called first to load page tokens.

Args:

  • page_id (string): Facebook Page ID

  • greeting_text (string): The greeting text (max 160 characters)

Inputs: page_id (required), greeting_text (required), response_format.

meta_set_instant_replySet Page Instant ReplyA
Idempotent

Sets the instant reply message for a Facebook Page. This is the automatic message sent immediately when someone messages the page.

Requires: meta_list_pages called first to load page tokens.

Args:

  • page_id (string): Facebook Page ID

  • message (string): The instant reply message text

  • enabled (boolean, default true): Whether instant reply is enabled

Inputs: page_id (required), message (required), enabled, response_format.

meta_share_pixelShare Meta PixelB

Shares a pixel with another ad account.

Args:

  • pixel_id (string): Pixel ID

  • ad_account_id (string): Target ad account ID

  • business_id (string): Business ID

Inputs: pixel_id (required), ad_account_id (required), business_id (required), response_format.

meta_subscribe_page_webhooksSubscribe Page to WebhooksA
Idempotent

Subscribes your app to receive webhook updates for a Facebook Page.

Args:

  • page_id (string): Facebook Page ID

  • subscribed_fields (string[]): Fields to subscribe to, e.g., feed, messages, messaging_postbacks, conversations

Call without subscribed_fields to check current subscriptions.

Inputs: page_id (required), subscribed_fields, response_format.

meta_test_conversion_eventsTest Conversion Event (CAPI)A

Tests CAPI setup by sending a test event that won't affect production data.

Same args as meta_send_conversion_event but auto-sets a test_event_code if not provided. Use the test_event_code from Events Manager > Test Events tab.

Inputs: pixel_id (required), event_name (required), event_time (required), user_data (required), +6 more.

meta_toggle_instagram_commentsToggle Instagram CommentsB
Idempotent

Enables or disables comments on an Instagram media object.

Args:

  • media_id (string): Instagram media ID

  • enabled (boolean): true to enable comments, false to disable

Inputs: media_id (required), enabled (required).

meta_update_adUpdate AdA

Updates an existing ad's status or name.

Args:

  • ad_id (string): Ad ID

  • name (string, optional): New name

  • status (string, optional): ACTIVE, PAUSED, or ARCHIVED

Inputs: ad_id (required), name, status, response_format.

meta_update_adsetUpdate Ad SetA

Updates an existing ad set. Only provided fields are changed.

Args:

  • adset_id (string): Ad set ID to update

  • name (string, optional): New name

  • status (string, optional): ACTIVE, PAUSED, or ARCHIVED

  • daily_budget (number, optional): New daily budget in cents

  • end_time (string, optional): New end time ISO 8601

  • placement_soft_opt_out (string[], optional): Placements to soft opt-out (up to 5% spend may still go to these). Only for Sales/Leads objectives.

Inputs: adset_id (required), name, status, daily_budget, +3 more.

meta_update_campaignUpdate CampaignA

Updates an existing campaign. Only provided fields are changed.

Can also migrate a campaign to Advantage+ Shopping by setting migrate_to_advantage_plus to true.

Args:

  • campaign_id (string): Campaign ID to update

  • name (string, optional): New campaign name

  • status (string, optional): ACTIVE, PAUSED, or ARCHIVED

  • daily_budget (number, optional): New daily budget in cents

  • lifetime_budget (number, optional): New lifetime budget in cents

  • migrate_to_advantage_plus (boolean, optional): Migrate this campaign to Advantage+ Shopping (keeps original campaign ID)

Inputs: campaign_id (required), name, status, daily_budget, +3 more.

meta_update_pageUpdate Facebook Page SettingsA
Idempotent

Updates a Facebook Page's profile information.

Args:

  • page_id (string): Facebook Page ID

  • about (string, optional): Short description (max 255 chars)

  • description (string, optional): Long description

  • website (string, optional): Website URL

  • phone (string, optional): Phone number

  • emails (string[], optional): Contact emails

  • hours (object, optional): Business hours as key-value pairs (e.g., {"mon_1_open":"09:00","mon_1_close":"17:00"})

  • category (string, optional): Page category (e.g., "Restaurant")

  • username (string, optional): Page username/vanity URL

  • contact_address (object, optional): Mailing address with street, city, state, zip, country

Requires pages_manage_metadata permission.

Inputs: page_id (required), about, description, website, +6 more.

meta_update_page_coverUpdate Facebook Page Cover PhotoA
Idempotent

Updates a Facebook Page's cover photo.

Args:

  • page_id (string): Facebook Page ID

  • cover_url (string, optional): URL of the new cover photo

  • photo_id (string, optional): ID of an existing photo to use as cover

  • offset_y (number, optional): Vertical offset of the cover photo (0–100)

  • no_feed_story (boolean, optional): If true, don't publish a feed story about the change

Provide either cover_url or photo_id. Requires pages_manage_metadata permission.

Inputs: page_id (required), cover_url, photo_id, offset_y, +2 more.

meta_update_page_pictureUpdate Facebook Page Profile PictureA
Idempotent

Updates a Facebook Page's profile picture.

Args:

  • page_id (string): Facebook Page ID

  • picture_url (string): URL of the new profile picture

Requires pages_manage_metadata permission.

Inputs: page_id (required), picture_url (required), response_format.

meta_update_pixelUpdate Meta PixelC
Idempotent

Updates pixel settings.

Args:

  • pixel_id (string): Pixel ID

  • name (string, optional): New pixel name

  • first_party_cookie_status (string, optional): "EMPTY", "FIRST_PARTY_COOKIE_ENABLED", or "FIRST_PARTY_COOKIE_DISABLED"

  • automatic_matching_fields (string[], optional): e.g. ["em","ph","fn","ln","ct","st","zp","country","db","ge","external_id"]

  • data_use_setting (string, optional): "EMPTY" or "DATA_USE_SETTING_LDU"

Inputs: pixel_id (required), name, first_party_cookie_status, automatic_matching_fields, +2 more.

meta_update_postUpdate Facebook PostB
Idempotent

Updates an existing Facebook Page post's message text.

Args:

  • post_id (string): Post ID

  • page_id (string): Page ID (for token)

  • message (string): New message text

Inputs: post_id (required), page_id (required), message (required), response_format.

meta_update_productUpdate ProductB
Idempotent

Updates a product's details.

Args:

  • product_id (string): The product ID

  • name, description, price, availability, image_url, url (all optional)

Returns confirmation of the update.

Inputs: product_id (required), name, description, price, +4 more.

meta_upload_ad_imageUpload Ad ImageA

Uploads an image to an ad account's image library for use in creatives.

Args:

  • ad_account_id (string): Ad account ID

  • url (string): Public URL of the image to upload

  • name (string, optional): Name for the uploaded image

Returns: Image hash (used when creating ad creatives).

Inputs: ad_account_id (required), url (required), name, response_format.

meta_upload_ad_videoUpload Ad VideoB

Uploads a video to an ad account's video library for use in creatives.

Args:

  • ad_account_id (string): Ad account ID

  • file_url (string): Public URL of video file

  • title (string, optional): Video title

  • description (string, optional): Video description

Inputs: ad_account_id (required), file_url (required), title, description, +1 more.

threads_check_rate_limitsCheck Threads Publishing LimitsB
Read-only

Checks the current publishing rate limit usage for Threads.

Args:

  • threads_user_id (string): Threads user ID

Returns: Current usage and limit quota (250 posts per 24 hours).

Inputs: threads_user_id (required), response_format.

threads_delete_postDelete ThreadB
Destructive

Deletes a Threads post permanently.

Args:

  • media_id (string): Threads media ID to delete

Inputs: media_id (required).

threads_get_conversationGet Threads ConversationB
Read-only

Gets the full conversation tree (all replies at all levels) for a Threads post.

Args:

  • media_id (string): Root thread media ID

  • reverse (boolean, optional): Reverse chronological order

Inputs: media_id (required), reverse, response_format.

threads_get_followersGet Threads FollowersB
Read-only

Lists followers of the authenticated Threads user.

Args:

  • threads_user_id (string): Threads user ID

  • limit (number): Max results (1–100, default 25)

  • after (string, optional): Pagination cursor

Returns: User IDs, usernames, and profile picture URLs of followers.

Note: Requires threads_basic scope. Only returns users who have allowed their followers list to be visible.

Inputs: threads_user_id (required), limit, after, response_format.

threads_get_followingGet Threads FollowingA
Read-only

Lists accounts that the authenticated Threads user is following.

Args:

  • threads_user_id (string): Threads user ID

  • limit (number): Max results (1–100, default 25)

  • after (string, optional): Pagination cursor

Returns: User IDs, usernames, and profile pictures of followed accounts.

Inputs: threads_user_id (required), limit, after, response_format.

threads_get_media_childrenGet Threads Carousel ItemsA
Read-onlyIdempotent

Gets individual items in a Threads carousel post.

Args:

  • media_id (string): Carousel media ID

Inputs: media_id (required), response_format.

threads_get_mentionsGet Threads MentionsB
Read-only

Gets posts where the authenticated user was @mentioned.

Args:

  • threads_user_id (string): Threads user ID

Inputs: threads_user_id (required), response_format.

threads_get_postGet Single Thread PostC
Read-onlyIdempotent

Gets details for a single Threads post by ID.

Args:

  • media_id (string): Threads media ID

Inputs: media_id (required), response_format.

threads_get_post_insightsGet Thread Post InsightsA
Read-onlyIdempotent

Gets performance metrics for a specific Threads post.

Args:

  • media_id (string): Threads media ID

  • metrics (string[]): Metrics to retrieve. Options: views, likes, replies, reposts, quotes, shares, reach, saved

Returns: Metric values for the post.

Inputs: media_id (required), metrics, response_format.

threads_get_postsGet Threads PostsA
Read-only

Lists the authenticated user's Threads posts.

Args:

  • threads_user_id (string): Threads user ID (from threads_get_profile)

  • limit (number): Max results (1–100, default 20)

  • since (string, optional): Start date YYYY-MM-DD

  • until (string, optional): End date YYYY-MM-DD

  • after (string, optional): Pagination cursor

Inputs: threads_user_id (required), limit, since, until, +2 more.

threads_get_profileGet Threads ProfileA
Read-onlyIdempotent

Gets the authenticated user's Threads profile.

Returns: User ID, username, name, bio, and profile picture URL.

Requires: THREADS_ACCESS_TOKEN env var.

Inputs: response_format.

threads_get_repliesGet Thread RepliesB
Read-only

Gets replies to a Threads post.

Args:

  • media_id (string): Threads media ID

  • reverse (boolean, optional): Reverse chronological order (default false)

Inputs: media_id (required), reverse, response_format.

threads_get_user_insightsGet Threads User InsightsA
Read-only

Gets account-level metrics for the authenticated Threads user.

Args:

  • threads_user_id (string): Threads user ID

  • metrics (string[]): Options: Time-series: views, likes, replies, reposts, quotes, followers_count, reach Demographics: follower_demographics (breakdown by age, country, city, gender — requires 100+ followers)

  • since (string, optional): Start date YYYY-MM-DD (required for time-series metrics)

  • until (string, optional): End date YYYY-MM-DD

  • breakdown (string, optional): For follower_demographics: 'age', 'country', 'city', 'gender'

Inputs: threads_user_id (required), metrics, since, until, +2 more.

threads_hide_replyHide/Unhide Thread ReplyA
Idempotent

Hides or unhides a reply on a Threads post.

Args:

  • reply_id (string): Reply media ID

  • hide (boolean): true to hide, false to unhide

Inputs: reply_id (required), hide (required).

threads_publish_gifPublish GIF ThreadA

Publishes a GIF post to Threads using a GIPHY URL.

Two-step flow: creates a container, then publishes it.

Args:

  • threads_user_id (string): Threads user ID

  • gif_url (string): GIPHY URL of the GIF

  • text (string, optional): Caption text

  • reply_to_id (string, optional): Thread ID to reply to

  • reply_control (enum, optional): Who can reply — everyone, accounts_you_follow, or mentioned_only

Returns: Media ID of the published thread.

Inputs: threads_user_id (required), gif_url (required), text, reply_to_id, +2 more.

threads_publish_imagePublish Image ThreadC

Publishes an image post to Threads.

Args:

  • threads_user_id (string): Threads user ID

  • image_url (string): Public URL of the image (JPEG or PNG)

  • text (string, optional): Caption text

Inputs: threads_user_id (required), image_url (required), text, reply_control, +2 more.

threads_publish_textPublish Text ThreadA

Publishes a text-only post to Threads.

Two-step flow: creates a container, then publishes it.

Args:

  • threads_user_id (string): Threads user ID

  • text (string): Post text (up to 500 characters)

  • reply_to_id (string, optional): Thread ID to reply to

  • quote_post_id (string, optional): Thread ID to quote

Returns: Media ID of the published thread.

Inputs: threads_user_id (required), text (required), reply_to_id, quote_post_id, +3 more.

threads_publish_videoPublish Video ThreadA

Publishes a video post to Threads.

Args:

  • threads_user_id (string): Threads user ID

  • video_url (string): Public URL of the video (MP4)

  • text (string, optional): Caption text

Note: Video processing may take time. Polls for up to 60 seconds.

Inputs: threads_user_id (required), video_url (required), text, reply_control, +2 more.

threads_repostRepost a ThreadA

Reposts (shares) an existing thread to your profile.

Args:

  • threads_user_id (string): Your Threads user ID

  • media_id (string): Thread media ID to repost

Inputs: threads_user_id (required), media_id (required), response_format.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 200 tools

    Disambiguation4/5

    Most tools target a distinct resource-and-action combination, and descriptions clearly separate lookalikes such as page feed posts vs. published posts vs. visitor posts, or page insights vs. post insights vs. campaign insights. A few boundaries are fuzzy — particularly create/publish and get/list variants — but an agent can usually disambiguate with the provided descriptions.

    Naming Consistency3/5

    The dominant meta_verb_noun pattern is readable, but conventions are mixed: collection retrieval uses both get and list (meta_get_posts vs. meta_list_campaigns), content publishing uses both create and publish (meta_create_post vs. meta_publish_instagram_photo), and Threads tools use a separate threads_ prefix. These deviations are widespread enough to make naming somewhat inconsistent.

    Tool Count1/5

    200 tools is an extreme mismatch for an MCP server. Even though the server spans Pages, Instagram, Ads, Threads, product catalogs, pixels, audiences, and more, this surfaces far too much surface area for an agent to navigate effectively.

    Completeness4/5

    The tool surface is impressively comprehensive, covering CRUD-like workflows for posts, ads, audiences, pixels, products, Instagram media, Threads posts, and more. Minor gaps remain — such as no event update/delete, no ad creative update/delete, and no catalog create/delete — but agents can usually accomplish their goals without dead ends.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to manage Facebook and Instagram advertising data through the Meta Marketing API. It supports full campaign lifecycle management, performance analytics, audience targeting, and creative optimization.
      808 npm
      MIT
    • A
      license
      B
      quality
      B
      maintenance
      Enables AI assistants to self-host MCP connectors for managing Meta platforms such as Facebook Pages, Instagram, Threads, Ads Manager, and Commerce, with tools for publishing, engagement, analytics, ad campaigns, and competitor research.
      200
      520 npm
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Connects AI assistants to Meta's business platform — Facebook Pages, Instagram, Threads, Ads Manager, and Commerce — so users can publish and schedule content, moderate engagement, manage ad campaigns, and pull performance insights through natural language. It also supports catalog management, live broadcasts, competitor ad research, and token/permission diagnostics.
      520 npm
      MIT