- Meta ships a first-party, Meta-hosted ads MCP at mcp.facebook.com/ads covering seven tool categories — check it before defaulting to a community server.
- pipeboard's meta-ads-mcp registers 43 tools in source, but 6 are dark by default behind three undocumented environment flags (META_ADS_ENABLE_DUPLICATION, META_ADS_ENABLE_REPORTS, META_ADS_ENABLE_SAVE_AD_IMAGE_LOCALLY), so a stock handshake advertises 37.
- Tool names at runtime are bare Python function names (get_ad_accounts, create_campaign) — not the mcp_meta_ads_* names the README documents.
- Auth bootstraps in-server via get_login_link, which returns an OAuth link for a Meta Marketing API access_token rather than requiring a pre-provisioned token.
01 What meta-ads-mcp is and who ships it
The meta ads mcp server search actually has two answers: Meta's own Meta-hosted server at mcp.facebook.com/ads, and the community package this page is about, pipeboard's meta-ads-mcp — and reading its source shows it registers 43 tools in code but ships only 37 by default, with 6 more sitting dark behind three environment flags the README never mentions. Pick pipeboard for self-hosted, bring-your-own-Meta-app access and its targeting-research tool family; keep Meta's own connector as the safer single-platform option, and don't trust pipeboard's README tool count or tool names without checking what the source actually registers.
Meta ships its own first-party server: the Meta developer documentation (page marked "Updated: Jul 14, 2026") describes a Meta-hosted Model Context Protocol server, remote-hosted at https://mcp.facebook.com/ads and compatible with any MCP-compatible AI agent, grouped into seven tool categories — comprehensive reporting, ad creation and management, catalog creation and management, signals and datasets, help and troubleshooting, A/B tests and conversion lift studies, and activity logs.
pipeboard's meta-ads-mcp is a community project, not affiliated with Meta, maintained by Pipeboard at github.com/pipeboard-co/meta-ads-mcp. Public record and source read on 2026-09-02: the GitHub API reports 1,225 stars, 271 forks, and 16 open issues, with the licence field showing NOASSERTION. The default-branch HEAD commit is dated 2026-08-11, and the latest tagged release is 1.0.120 (2026-08-10).
02 Tools it exposes
Every row below is a tool pipeboard's package registers in meta_ads_mcp/core/*.py, read on 2026-07-25. The README documents these under mcp_meta_ads_* names, but the source shows they run as bare Python function names — for example the accounts group at accounts.py:44 — because no registration in the package passes a name= argument to @mcp_server.tool().
| Tool group (README name) | What it does | Read/write | Registered at |
|---|---|---|---|
| get_ad_accounts, get_account_info, get_account_pages | List/inspect ad accounts and connected Pages | Read | accounts.py:44 |
| get_campaigns, get_campaign_details, create_campaign | List, inspect and create campaigns | Read / Write | campaigns.py:12 |
| get_adsets, get_adset_details, create_adset, update_adset | List, inspect, create and update ad sets | Read / Write | adsets.py:12 |
| get_ads, create_ad, update_ad, get_ad_details, get_ad_creatives, create_ad_creative, update_ad_creative, upload_ad_image, get_ad_image | Manage ads, creatives and images | Read / Write | ads.py:446-3324 |
| get_insights | Pull performance/reporting data | Read | insights.py:58 |
| get_login_link | Returns an OAuth login link to bootstrap the Meta access token | Read | authentication.py:207 |
| create_budget_schedule | Create a scheduled budget change | Write | budget_schedules.py:13 |
| search_interests, get_interest_suggestions, validate_interests, search_behaviors, search_demographics, search_geo_locations | Targeting-research suite: interest/behavior/demographic/geo search and validation | Read | targeting.py:12-515 |
| search, fetch | Registered unconditionally for OpenAI Deep Research compatibility | Read | openai_deep_research.py:310 |
| duplicate_* (4 tools) | Duplicate campaigns/ad sets/ads/creatives — not exposed on a default install | Write (gated) | duplication.py:27-29, 32-179 |
| generate_report | Generate a report — not exposed on a default install | Read (gated) | reports.py:11-15 |
| save_ad_image_locally | Save an ad image to local disk — not exposed on a default install | Write (gated) | ads.py:441, 1100-1103 |
03 Install and auth
Transport is HTTP. The install string, verbatim from the record: Hosted: https://meta-ads.mcp.pipeboard.co/ — also self-hostable from the repo.
Auth method is OAuth: the recorded auth scope is a Meta Marketing API access_token, obtained via mcp_meta_ads_get_login_link rather than requiring a pre-provisioned token — the tool returns a clickable login link that bootstraps the credential from inside the server.
04 What the source shows
This is the page's reason to exist: the README and the running server disagree, and only reading the source catches it. Across meta_ads_mcp/core/*.py there are 42 @mcp_server.tool() decorators plus a 43rd functional registration at meta_ads_mcp/core/authentication.py:207 (get_login_link = mcp_server.tool()(get_login_link)) — 43 tools total in source, against the README's stated "42 tools."
Six of those 43 are dark on a default install. Three environment flags gate them, and none is documented in the README: META_ADS_ENABLE_DUPLICATION gates the four duplicate_* tools (duplication.py:27-29), META_ADS_ENABLE_REPORTS gates generate_report (reports.py:11-15), and META_ADS_ENABLE_SAVE_AD_IMAGE_LOCALLY gates save_ad_image_locally (ads.py:441, 1100-1103). Two further flags run the opposite way — opt-out, not opt-in: META_ADS_DISABLE_ADS_LIBRARY (ads_library.py:11-16) and META_ADS_DISABLE_LOGIN_LINK (authentication.py:38-39). Net effect: a default tools/list handshake advertises 37 tools, not the 42 the README documents.
The names don't match either. FastMCP infers each tool's name from the decorated Python function, and no registration passes a name= argument — so a client sees bare names like get_ad_accounts (accounts.py:44), get_campaigns (campaigns.py:12), get_adsets (adsets.py:12) and create_ad (within ads.py:446-3324), while the README's "Available MCP Tools" section documents the entire surface as mcp_meta_ads_get_ad_accounts, mcp_meta_ads_get_campaigns, and so on. A config or agent prompt copied straight from the README's tool names will not match what the server actually returns.
One more source-only finding: two tools named plainly search and fetch are registered unconditionally, added for OpenAI Deep Research compatibility (meta_ads_mcp/core/openai_deep_research.py:310, imported eagerly by meta_ads_mcp/core/__init__.py:17). In any multi-server MCP client configuration, search and fetch are about the most collision-prone tool names available — a second server exposing the same bare names will clash.
05 Quirks, gaps and the honest verdict
- Long tool prefix — every documented tool carries the
mcp_meta_ads_prefix, which eats context budget across roughly 30 tool schemas once a client loads the full set. - Multi-channel, not Meta-only — Pipeboard ships sibling hosted endpoints for Google, TikTok, Reddit and Snap ads on the same
*.mcp.pipeboard.codomain. - Unmatched targeting-research suite —
search_interests,validate_interests,search_behaviors,search_demographicsandsearch_geo_locations(targeting.py:12-515) are not among the seven categories Meta's own documentation lists.
Verdict: use pipeboard's meta-ads-mcp for self-hosted, bring-your-own-Meta-app access and its targeting-research tool family — not as a substitute for Meta's own hosted server at mcp.facebook.com/ads, and not by trusting its README's tool count or tool names without checking the 6 tools gated behind undocumented environment flags. Unless you want a single-platform, Meta-hosted connector with no self-hosting and no env-flag surprises — then Meta's own server at mcp.facebook.com/ads is the better default.
07 Frequently asked questions
- Does Meta have its own first-party ads MCP server?
- Yes. Meta's developer documentation describes a Meta-hosted MCP server remote-hosted at mcp.facebook.com/ads, covering seven tool categories: comprehensive reporting, ad creation and management, catalog creation and management, signals and datasets, help and troubleshooting, A/B tests and conversion lift studies, and activity logs.
- How many tools does pipeboard's meta-ads-mcp actually expose?
- Source registers 43 tools across meta_ads_mcp/core/*.py, but 6 are gated behind undocumented environment flags (META_ADS_ENABLE_DUPLICATION, META_ADS_ENABLE_REPORTS, META_ADS_ENABLE_SAVE_AD_IMAGE_LOCALLY), so a default install's tools/list advertises 37, not the 42 the README states.
- Do the tool names match the README?
- No. The README documents tools as mcp_meta_ads_get_ad_accounts, mcp_meta_ads_create_campaign, etc., but FastMCP infers each name from the undecorated Python function, so a live handshake returns bare names like get_ad_accounts (accounts.py:44) and create_campaign (campaigns.py:12).
- How does auth work?
- Auth is OAuth-based: the mcp_meta_ads_get_login_link tool returns a clickable login link that bootstraps a Meta Marketing API access_token, rather than requiring a pre-provisioned token up front.
- What's the licence, and is pipeboard actively maintained?
- GitHub's licence field reports NOASSERTION. As of 2026-09-02 the repo has 1,225 stars and 271 forks, with a default-branch commit dated 2026-08-11 and latest release 1.0.120 (2026-08-10).