Meta MCP Server
This MCP server lets an AI assistant manage and analyze Meta's business platforms—Facebook Pages, Instagram, Threads, Ads Manager, Commerce, and Conversions—through 200 tools.
Publish, schedule, edit, delete, and cross-post content to Facebook Pages, Instagram, and Threads, including photos, videos, Reels, Stories, carousels, GIFs, links, and live videos.
Read and moderate comments/replies, hide/unhide content, manage DMs, Messenger settings, automated responses, blocked users, and Instagram broadcast channels.
Create and manage ad campaigns, ad sets, ads, creatives, budgets, targeting, audiences, pixels, A/B tests, Advantage+ migrations, and automated rules.
Retrieve performance insights across pages, posts, Instagram accounts/media, Threads, campaigns, ad sets, ads, and demographics; generate charts for reports.
Manage Facebook/Instagram commerce catalogs, products, product feeds, product sets, and Instagram Shopping catalog searches.
Send server-side conversion events and test Conversions API setup.
Research competitors and public advertisers via Meta Ad Library and Instagram business discovery.
Debug tokens, check permissions, monitor rate limits, verify pixel health, and inspect Business Manager assets.
Enables managing Facebook Pages, including creating and scheduling posts, handling comments, managing events, live videos, and page insights.
Allows creating, ending, and listing Facebook Live video broadcasts on Pages.
Provides tools for publishing Instagram media (photos, reels, stories, carousels), managing comments and DMs, analyzing insights, and handling shopping catalogs.
Provides tools for managing Facebook Page conversations, sending messages, and configuring automated responses like greeting, away messages, and instant replies.
Provides tools for interacting with Meta's business platform, including Facebook Pages, Instagram, Threads, Ads Manager, Commerce, and Conversions API, enabling content publishing, engagement management, analytics, ad campaign management, and more.
Enables publishing and managing Threads posts (text, images, videos, GIFs, carousels), retrieving insights, and interacting with followers.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Meta MCP Server Post our holiday hours to our Facebook page"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 buildWhat 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 quoteManage 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 textAnalyze 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 campaignRun 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 creativeManage 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 failingComplete Tool Reference
Facebook Pages — 53 tools
Everything a brand needs to manage their Facebook presence, messaging, and live broadcasts.
Tool | Description |
| List all Facebook Pages you manage (call first — caches page tokens) |
| Get detailed page info (category, followers, description, links) |
| Get a single post by ID |
| Create a text post on a page |
| Create a photo post (URL or page photo ID) |
| Create a video post with optional title and description |
| Edit an existing post's message |
| Delete a post |
| Get a page's feed with pagination |
| Get published posts only |
| Get scheduled (unpublished) posts |
| Get posts eligible for ad promotion |
| Get posts made by visitors on the page |
| Get comments on a post with pagination |
| Create a new top-level comment on a post |
| Reply to a comment as the page |
| Delete a comment |
| Hide or unhide a comment (non-destructive moderation) |
| Like or unlike a post or comment |
| Get reaction breakdown (like, love, haha, wow, sad, angry) |
| Page analytics — 70+ metrics across impressions, engagement, fans, video |
| Per-post analytics (impressions, engagement, clicks, reactions, video) |
| List page message conversations |
| Get messages within a conversation |
| Send a message to a user (24-hour messaging window) |
| Update page details (about, description, website, hours, username, category, address) |
| Update page profile picture from URL |
| Update page cover photo from URL or existing photo |
| Create a page event |
| List events (upcoming, past, or canceled) |
| List page photo albums |
| Get photos (uploaded or tagged) |
| List page videos |
| Get posts where the page is tagged |
| Follower breakdown by age, gender, and country |
| Get page reviews and star ratings |
| Location info for multi-location businesses |
| Get the page's call-to-action button configuration |
| List page tabs and their configuration |
| Get page profile picture URL |
| List blocked users |
| Block or unblock a user |
| Subscribe the page to webhook events |
| Publish a Facebook Story (photo or video) |
| Publish a Facebook Reel |
| Cross-post to Facebook + Instagram simultaneously |
| Start or schedule a live video broadcast |
| List live videos on a page |
| End an active live broadcast |
| Get current auto-reply settings |
| Set the instant reply message |
| Set the away/out-of-office message |
| Set the Messenger greeting text |
Instagram — 37 tools
Full Instagram Business API — publishing, DMs, broadcast channels, engagement, discovery, and analytics.
Tool | Description |
| List Instagram business accounts linked to your Facebook Pages |
| Get recent media for an Instagram account with pagination |
| Get a single media object by ID |
| Publish a photo with optional alt text |
| Publish a reel with auto-polling |
| Publish a story (image or video with auto-polling) |
| Publish a carousel (2–10 items, parallel processing) |
| Publish a pre-created media container |
| Check container processing status with actionable messages |
| Account-level analytics with demographic breakdowns |
| Per-post metrics including Reels skip rate, crossposted views |
| Get comments on a media object |
| Get threaded replies to a comment |
| Reply to a comment |
| Delete a comment |
| Hide/unhide a comment (non-destructive moderation) |
| Search for products in an Instagram Shopping catalog by name |
| Search hashtag top or recent media |
| Get your recently searched hashtags |
| Business discovery — look up any public business/creator by username |
| Get currently active stories |
| Get live video media |
| Get media where you're @mentioned |
| Get individual items in a carousel |
| Get product tags on a media object |
| Delete a media object |
| Enable or disable comments on media |
| Check rate limit status (100 posts per 24 hours) |
| List Instagram DM conversations |
| Get messages in a DM conversation |
| Send a text DM |
| Send an image or link via DM |
| List product catalogs available for Instagram Shopping on a professional account |
| List broadcast channels |
| Get messages in a broadcast channel |
| Send a message to a broadcast channel |
| 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 |
| List ad accounts you have access to |
| Get ad account details (status, currency, spend cap, balance) |
| List campaigns with status filtering and pagination |
| Get a single campaign's full details |
| Create a campaign (supports Advantage+ Shopping for OUTCOME_SALES) |
| Update campaign name, status, budget, or migrate to Advantage+ |
| Delete a campaign |
| Migrate a campaign to Advantage+ Shopping (keeps campaign ID) |
| List ad sets with filtering |
| Get a single ad set's targeting and budget details |
| Create an ad set with targeting, budget, and placement_soft_opt_out |
| Update ad set targeting, budget, or placement_soft_opt_out |
| Delete an ad set |
| List ads with status filtering |
| Get a single ad's details |
| Create an ad linking a creative to an ad set |
| Update ad name, status, or creative |
| Delete an ad |
| List ad creatives |
| Get a single creative's details |
| Create an ad creative with text, image, and link |
| Preview how an ad will appear in different placements |
| Get details for a specific automated ad rule |
| List users with access to the ad account |
| Upload an image for use in ad creatives |
| List previously uploaded ad images |
| Upload a video for use in ad creatives |
| List previously uploaded ad videos |
| Search for interest-based targeting options |
| Search for location-based targeting (countries, cities, zips) |
| Search for demographic targeting options |
| Browse all available targeting categories |
| Estimate potential audience size for a targeting spec |
| Estimate ad delivery for a given budget and targeting |
| Get submitted leads from a lead generation form |
| Get minimum daily and lifetime budgets for an ad account by currency and bid strategy |
| List lead generation forms for a Facebook Page |
| List offline conversion event sets for an ad account |
| List Meta Pixels for conversion tracking |
| Create a new pixel |
| Get pixel details (name, cookie status, matching fields) |
| Get event volume stats over time (verify pixel is firing) |
| Update pixel settings (name, cookies, matching, data use) |
| Delete a pixel |
| Share pixel access with another ad account |
| Get recent test events for debugging |
| List custom conversion events |
| Create a custom conversion from pixel events |
| List saved audiences |
| Create a reusable saved audience |
| Delete a saved audience |
| List automated ad rules |
| Create an automated rule (e.g., pause ads over $5 CPA) |
| Delete an automated rule |
| List ad labels for organization |
| Create an ad label |
| Get the ad account's activity log |
| List pages, ad accounts, IG accounts, and pixels across Business Manager |
| Create an A/B test to compare campaigns or ad sets |
| List A/B tests for an ad account |
| Get A/B test results with winner and confidence level |
| 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 |
| Get your Threads profile info |
| Get your recent posts with pagination |
| Get a single post by ID (includes reply_audience) |
| Search your posts by keyword |
| Publish a text post (with reply control and location) |
| Publish an image post (with reply control and location) |
| Publish a video post with auto-polling (with reply control and location) |
| Publish a carousel (parallel creation, with reply control) |
| Publish a post with a link attachment (with reply control) |
| Publish a GIF post via GIPHY URL |
| Delete a post |
| Get replies to a post |
| Get the full conversation tree for a post |
| List followers of the authenticated Threads user |
| List accounts the authenticated Threads user is following |
| Get posts that @mention you |
| Get individual items in a carousel post |
| Hide or unhide a reply |
| Repost a Threads post |
| Get metrics for a specific post (views, likes, replies, etc.) |
| Get account-level metrics with demographic breakdowns |
| Check your current publishing rate limit status |
Commerce — 10 tools
Product catalog management for Facebook and Instagram shops.
Tool | Description |
| List product catalogs for a business |
| Get catalog details and product count |
| List products in a catalog with filtering |
| Get a single product's full details |
| Add a product to a catalog |
| Create a product feed to automatically sync products from a URL |
| Update product details (name, price, availability, etc.) |
| Delete a product from a catalog |
| List product feeds for a catalog |
| List product sets (subgroups) in a catalog |
Conversions API — 2 tools
Server-side event tracking for conversion optimization.
Tool | Description |
| Send a server-side conversion event (Purchase, Lead, etc.) to a pixel |
| Test CAPI setup without affecting production data |
Audiences — 5 tools
Custom and lookalike audience management for ad targeting.
Tool | Description |
| List custom audiences in an ad account |
| Get audience details (size, delivery status) |
| Create a custom audience |
| Create a lookalike audience from a source 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 |
| Ad account performance — spend, impressions, reach, clicks, CTR, CPM, CPC, conversions, ROAS, video completion, quality rankings |
| Per-campaign performance with the same comprehensive metrics |
| Per-ad-set performance |
| Per-ad performance |
Charts — 2 tools
Generate visual charts from data for reports and presentations.
Tool | Description |
| Create bar, line, pie, doughnut, radar charts as PNG images |
| Generate side-by-side comparison charts (A/B, period-over-period) |
Ad Library & Utility — 4 tools
Tool | Description |
| Search any advertiser's active ads — public transparency API |
| Inspect your token: type, validity, expiry, permissions, associated app and user |
| Check server health: token status, cached tokens, API connectivity |
Configuration
Variable | Required | Default | Description |
| Yes | None | Long-lived Meta Graph API token for Facebook Pages, Instagram, Ads Manager, Commerce, Conversions API, Audiences, Insights, and utility tools. |
| No | None | Threads API token. Required only for Threads publishing, replies, and insights tools. |
| 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/credentialThis 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 |
| Listing pages |
| Page insights, reactions |
| Creating, editing, deleting posts |
| Page settings, webhooks, profile picture, cover photo |
| Tagged posts, visitor posts, ratings |
| Reading and sending messages, automated responses |
| Instagram account info |
| Publishing photos, reels, stories, carousels |
| Instagram analytics |
| Comment management |
| Instagram DMs |
| Reading campaigns, ad sets, ads, insights |
| Creating and managing ads, A/B tests |
| Business Manager assets, product catalogs |
| Product catalog CRUD |
| Threads profile and posts |
| Publishing to Threads |
| Threads analytics |
| 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 |
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 toolsKey Design Decisions
Dual API client — Handles both
graph.facebook.com/v21.0andgraph.threads.net/v1.0with separate base URLs and tokensPage token caching —
meta_list_pagescaches page-scoped tokens; subsequent tools look them up by page IDTwo-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 succeededZod 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 modeDevelopment 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 toolsmeta_block_userBlock/Unblock User from PageAIdempotent
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 CategoriesCRead-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 StatusARead-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 LimitARead-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 TokenARead-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 AdADestructive
Deletes an ad permanently.
Args:
ad_id (string): Ad ID to delete
Inputs: ad_id (required).
meta_delete_ad_ruleDelete Automated Ad RuleADestructive
Deletes an automated ad rule.
Args:
rule_id (string): Ad rule ID
Inputs: rule_id (required).
meta_delete_adsetDelete Ad SetADestructive
Deletes an ad set permanently.
Args:
adset_id (string): Ad set ID to delete
Inputs: adset_id (required).
meta_delete_campaignDelete CampaignADestructive
Deletes (archives) a campaign. This cannot be undone.
Args:
campaign_id (string): Campaign ID to delete
Inputs: campaign_id (required).
meta_delete_commentDelete Facebook CommentADestructive
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 AudienceADestructive
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 CommentADestructive
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 MediaADestructive
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 PixelADestructive
Deletes a Meta Pixel.
Args:
pixel_id (string): Pixel ID to delete
Inputs: pixel_id (required).
meta_delete_postDelete Facebook Page PostADestructive
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 ProductADestructive
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 AudienceCDestructive
Deletes a saved audience.
Args:
audience_id (string): Saved audience ID
Inputs: audience_id (required).
meta_end_live_videoEnd Facebook Live VideoAIdempotent
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 DataAIdempotent
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 ChartAIdempotent
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 InsightsARead-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 DetailsCRead-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 DetailsARead-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 LogARead-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 UsersARead-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 DetailsCRead-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 InsightsARead-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 PreviewARead-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 DetailsARead-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 DetailsCRead-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 InsightsARead-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)ARead-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 ResultsARead-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 UsersARead-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 MessagesBRead-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 DetailsCRead-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 InsightsARead-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 MessagesARead-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 AudienceARead-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 EstimateARead-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 InsightsARead-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 CatalogsARead-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 ChannelsARead-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 RepliesARead-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 CommentsCRead-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 ConversationsBRead-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 MediaBRead-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 MediaARead-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 ItemsARead-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 InsightsARead-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 MentionsBRead-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 MessagesARead-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 TagsARead-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 HashtagsARead-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 DetailsBRead-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 StoriesARead-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 InfoARead-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 FormARead-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 VideosARead-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 BudgetsARead-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 DetailsBRead-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 AlbumsCRead-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 SettingsARead-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 ConversationsARead-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-ActionARead-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 EventsARead-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 DemographicsARead-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 InsightsARead-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 LocationsBRead-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 PhotosBRead-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 PictureBRead-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/ReviewsBRead-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 TabsARead-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 PostsARead-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 VideosCRead-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 DetailsCRead-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 EventsBRead-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 StatsARead-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 DetailsBRead-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 CommentsARead-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 InsightsARead-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 ReactionsARead-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 PostsARead-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 ProductARead-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 CatalogBRead-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 PostsARead-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 PostsARead-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 EstimateARead-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 PostsBRead-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 PostsARead-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 CheckARead-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 CommentAIdempotent
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 CommentAIdempotent
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 CommentAIdempotent
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 AccountsARead-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 CreativesARead-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 ImagesBRead-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 LabelsARead-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 RulesARead-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 AdsARead-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 SetsARead-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 VideosARead-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 AssetsBRead-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 CampaignsBRead-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 AudiencesARead-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 ConversionsCRead-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 AccountsARead-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 FormsARead-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 SetsARead-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 PagesARead-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 PixelsBRead-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 CatalogsARead-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 FeedsARead-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 ProductsARead-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 SetsARead-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 AudiencesCRead-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_carouselPublish Instagram Carousel PostA
Publishes a carousel post (2–10 images/videos) to Instagram.
Three-step process:
Creates individual media containers for each item
Creates a carousel container referencing them
Publishes the carousel
Args:
ig_account_id (string): Instagram account ID
items (array): Array of up to 10 items, each with:
url (string): Public image URL (JPEG) or video URL
type (string): 'IMAGE' or 'VIDEO'
caption (string, optional): Carousel caption
Returns: Media ID of the published carousel.
Scheduling: Pass scheduled_publish_time (Unix timestamp, 10 min – 75 days in future) to schedule instead of publishing immediately.
Inputs: ig_account_id (required), items (required), caption, scheduled_publish_time, +1 more.
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 LibraryARead-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 ProductsARead-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 HashtagARead-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 PlacesARead-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 DemographicsBRead-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 GeolocationsBRead-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 InterestsARead-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 MessageAIdempotent
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 GreetingAIdempotent
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 ReplyAIdempotent
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_subscribe_page_webhooksSubscribe Page to WebhooksAIdempotent
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 CommentsBIdempotent
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 SettingsAIdempotent
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 PhotoAIdempotent
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 PictureAIdempotent
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 PixelCIdempotent
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 PostBIdempotent
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 ProductBIdempotent
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 LimitsBRead-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 ThreadBDestructive
Deletes a Threads post permanently.
Args:
media_id (string): Threads media ID to delete
Inputs: media_id (required).
threads_get_conversationGet Threads ConversationBRead-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 FollowersBRead-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 FollowingARead-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 ItemsARead-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 MentionsBRead-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 PostCRead-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 InsightsARead-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 PostsARead-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 ProfileARead-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 RepliesBRead-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 InsightsARead-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 ReplyAIdempotent
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_carouselPublish Carousel ThreadA
Publishes a carousel post (2–20 images/videos) to Threads.
Three-step flow:
Create individual item containers
Create carousel container referencing them
Publish
Args:
threads_user_id (string): Threads user ID
items (array): 2–20 items, each with url (string) and type ('IMAGE' or 'VIDEO')
text (string, optional): Caption text
Inputs: threads_user_id (required), items (required), text, reply_control, +1 more.
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_linkPublish Link ThreadC
Publishes a thread post with a link attachment.
Args:
threads_user_id (string): Threads user ID
text (string): Post text containing the URL
link_attachment (string): URL to attach as a link preview
Inputs: threads_user_id (required), text (required), link_attachment (required), reply_control, +1 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.
threads_searchSearch Threads by KeywordARead-only
Searches Threads posts by keyword.
Args:
threads_user_id (string): Threads user ID (for auth context)
q (string): Search query
limit (number): Max results (default 20)
Note: Results are limited to the authenticated user's content and public threads.
Inputs: threads_user_id (required), q (required), limit, response_format.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 200 tools
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.
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.
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.
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
Related MCP Connectors
The simplest way to manage your Meta (Facebook and Instagram) ad accounts with your AI agent.
Instagram and Facebook Pages for AI agents: publish, comments, DM by keyword, inbox, insights.
Social media API for AI agents: publish, DMs, comments, Meta ads and leads.
60+ Meta Ads tools for AI agents: audits, campaign management, audiences and CAPI tracking.
Related MCP Servers
- FlicenseBqualityNot gradedmaintenanceEnables AI assistants to interact with Instagram and Facebook accounts through their APIs, supporting messaging, post management, commenting, and content creation.14-
- AlicenseNot gradedqualityDmaintenanceEnables 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 npmMIT
- AlicenseBqualityBmaintenanceEnables 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.200520 npmMIT
- AlicenseNot gradedqualityCmaintenanceConnects 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 npmMIT