Meta (Facebook and Instagram) Ads: 34 read tools and 10 write tools that preview first.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
An open-source Model Context Protocol server for the Facebook (Meta) Ads Marketing API. It lets Claude, ChatGPT, Cursor or any MCP client read and analyse your advertising data, and change it if you choose to.
You run it. Your token stays on your machine. Nothing is proxied through a third party.
Also listed in the MCP Registry as com.getmcpads/meta-ads, so clients that read the registry can install it by name.
Prefer not to run it yourself? getmcpads.com is the hosted version of this server, with Meta Ads alongside Google Ads, TikTok Ads, Pinterest Ads, GA4 and Search Console behind a single endpoint, hosted OAuth, and cross-platform reporting. Same tools, same safety model, no setup.
| 34 read tools | Campaigns, ad sets, ads, creatives, audiences, pixels, catalogs, Pages, Instagram, activity logs, A/B tests and lift studies |
| 10 write tools | Off by default. Status, budgets, schedules, renames, campaign creation. Each one previews before it applies |
| 190 metrics | Including derived ones computed client-side (ROAS, CPA, frequency, hook rate, attribution-window views) |
| 56 breakdowns Β· 90 dimensions | With a compatibility matrix that catches invalid combinations before they hit the API |
| 7 resources | Live catalogues the model can read: metrics, breakdowns, compatibility rules, 11 workflow recipes |
| Forward-compatible reads | meta_get_node_fields, meta_list_edge_raw, meta_get_insights_raw reach Graph fields this server doesn't model yet |
Meta rejects many metric/breakdown combinations, and the error messages rarely say why. This server encodes the compatibility matrix, so it splits an impossible request into several valid API calls and merges the results instead of failing.
meta_validate_query lets the model check a combination before spending a call on it.
That is the difference between an assistant that reports "the API returned error 100" and
one that returns your numbers.
Meta ships an official MCP server, hosted at mcp.facebook.com/ads. It is a good product.
Here is an honest comparison, because the right choice depends on what you need.
| This server | Meta's official server | getmcpads.com | |
|---|---|---|---|
| Hosting | You host it. stdio, local process | Meta-hosted, remote | Hosted for you |
| Data path | Direct to the Graph API. No intermediary | Through Meta's endpoint | Through our gateway |
| Auth | You bring a token, which is more setup (see below) | Meta Business OAuth, 2 clicks | Hosted OAuth |
| Tools | 44 (34 read + 10 write) | 29 | 44, plus 5 other platforms |
| Writes | Preview first, applied only on confirm: true | Applied directly | Preview first |
| Metric compatibility | Query planner splits incompatible requests | None | Same planner |
| Auditable | Yes. Apache-2.0, read every line | No | This server, audited |
| Modifiable | Fork it | No | No |
| Help Center search | No | Yes | No |
| Catalog creation | β | β (catalog reads are supported) | β |
Choose Meta's if you want the fastest possible setup and don't need to see the code. Choose this one if you need your data to stay on your infrastructure, want to audit or extend what the model can do, or want writes that can't fire on the first call. Choose getmcpads.com if you want this server's capabilities without running it, or you need more than one ad platform in the same conversation.
This is the one step that takes real effort, and it's worth doing properly.
You need a Meta access token with ads_read. There are three ways to get one; the
second is the one we recommend.
A System User belongs to your Business, not to a person. Its token survives password changes and staff departures, and needs no App Review to access ad accounts your Business already owns.
ads_read
(add ads_management only for writes).π Meta's System User documentation
Fine for trying the server out, useless for daily work.
Graph API Explorer β select your app β
add ads_read β Generate Access Token.
Exchange a short-lived token for a 60-day one. You will have to redo this every two months. π Long-lived tokens
| Permission | When you need it |
|---|---|
ads_read | Always. Campaigns, insights, everything read-only |
ads_management | Only if you set META_ENABLE_WRITES=1 |
business_management | Optional. Business Manager asset discovery |
pages_show_list, pages_read_engagement | Optional. Page posts and organic enrichment |
instagram_basic | Optional. Linked Instagram accounts |
catalog_management | Optional. Product catalog reads |
Run meta_health_check as your first call: it reports which scopes you actually have
and which ones are missing for the tools you tried to use, without printing your token.
~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
or %APPDATA%\Claude\claude_desktop_config.json (Windows):
Restart Claude Desktop. Ask it: "list my Meta ad accounts".
.cursor/mcp.json in your project, same shape as the Claude Desktop config above.
| Variable | Default | Meaning |
|---|---|---|
META_ACCESS_TOKEN | none | Required. Your Meta access token |
META_ENABLE_WRITES | unset | Set to 1 to register the 10 write tools |
META_API_VERSION | v26.0 | Graph API version. Override to pin another |
LOG_LEVEL | info | debug, info, warn, error |
Check your setup at any time:
Write tools are disabled by default. Enable them with META_ENABLE_WRITES=1.
When enabled, every write tool returns a preview and changes nothing:
Only a second call carrying confirm: true touches the live account.
This is deliberate. An assistant composes these calls, and it can pick the wrong account, the wrong campaign, or the wrong order of magnitude on a budget. A mandatory preview makes the mistake visible before it costs money, and gives a human the stopping point the protocol does not guarantee on its own.
Two further guardrails:
meta_create_campaign always creates the campaign PAUSED. There is no option to
create it active.| Tool | What it changes |
|---|---|
meta_update_campaign_status / _adset_status / _ad_status | Pause or reactivate |
meta_update_campaign_budget / _adset_budget | Daily or lifetime budget |
meta_update_adset_schedule | Start and end time |
meta_rename_campaign / _adset / _ad | Name only |
meta_create_campaign | Creates a campaign, always PAUSED |
| Tool | Purpose |
|---|---|
meta_health_check | Validates the token, lists accessible accounts, reports missing scopes |
meta_debug_token | Token validity, expiry and granted scopes |
meta_list_ad_accounts | Every ad account the token can reach |
meta_get_account_details | Currency, timezone, spend cap, status, business info |
meta_get_business_assets | Businesses, Pages, Instagram accounts, pixels, datasets |
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/meta-ads)<a href="https://allmcps.com/mcp/meta-ads"><img src="https://allmcps.com/api/badge/meta-ads?style=directory" alt="Meta Ads on AllMCPs" /></a>