Most “Meta ads MCP” servers are read-and-toggle: they can pull a report and pause a campaign. That is useful and it is also the easy half. The hard half is that a campaign needs a creative, and a creative needs research, a brand, a render and an upload — which is why the toggle-only servers leave you back in Ads Manager anyway.
Hermoso’s MCP server covers the whole path. It researches the ads your competitors are actually running, renders the finished creative with your real product in it, uploads it, builds the campaign around it, and reads back what happened — 301 tools in total, of which the Meta family is one part.
Install it once: in Claude Code, Cursor or Codex run claude mcp add --transport http hermoso https://app.hermoso.ai/mcp. In Claude.ai or Claude Desktop, paste https://app.hermoso.ai/mcp under Settings → Connectors and approve it with your Hermoso account. For a terminal agent, npm install -g hermoso then hermoso auth login. Full setup on the MCP & CLI page.
The Meta tools, by job
Build. create_meta_campaign, create_meta_adset, create_meta_ad, upload_meta_asset, find_meta_audiences, list_meta_pages.
Read. list_meta_ads, meta_insights, meta_page_insights, meta_post_insights.
Change. update_meta_object, set_meta_campaign_status, delete_meta_object — the last two are confirm-gated.
Publish organic. post_to_meta (Facebook Page, the linked Instagram business account, or Threads), schedule_post, manage_meta_post, upload_file.
Engage. list_meta_comments, reply_to_meta_comment, moderate_meta_comment, plus the Threads equivalents.
Targeting is the whole product, so it is all exposed
An ads MCP that can only set a country and a budget cannot build a real campaign. The ad-set surface here covers what a media buyer actually uses:
- Geography — countries, regions, cities with a radius, postcodes and DMAs, with exclusions.
- Audience — interests, behaviours, custom audiences and lookalikes, locales.
- Placement — five platforms and their positions, devices, operating systems, and Advantage+ placements.
- Objective plumbing — a
promoted_objectwith your pixel and conversion event, which upgrades the optimization goal toOFFSITE_CONVERSIONS. - Pacing — daily or lifetime budget, dayparting, bid caps and cost caps.
- Creative — image, video and carousel.
Nothing is narrated from the request
A subtle failure mode in agent tooling: the agent tells you what it asked for, not what the platform did. Hermoso builds the tree, then reads it back from Meta, and the summary sentence you receive is constructed from that read-back — so a silently rejected creative or a coerced field shows up as a discrepancy instead of a confident, wrong report.
What it will not do without asking
An agent with a budget is only useful if the blast radius is bounded, so spend authority is fenced in the server rather than in a prompt. Meta campaigns, ad sets and ads are created PAUSED with no caller override. The seven tools that can arm real ad spend — set_meta_campaign_status, set_google_ads_status, set_microsoft_ads_status, set_reddit_ads_status, set_linkedin_ads_status, set_pinterest_ads_status and set_openai_ads_status — each refuse to run without an explicit confirmation flag, and that same gate covers creating an enabled Google Ads ad group, ad or keyword under an already-enabled parent, because that serves on the very next auction. Deletes are confirm-gated too. On the generation side, hermoso_capabilities publishes each model’s exact credit cost before anything runs, and every render reserves an estimate then settles the true cost, so a failed dispatch refunds instead of quietly billing you.
Connecting your Meta account
You connect Meta to Hermoso through Meta’s own OAuth flow, in Connectors settings — no password ever passes through the model or the agent. Because an agency or an invited teammate may have access to many Pages, ad accounts and Instagram accounts, a brand explicitly selects which of them belong to it; teammates then only ever see and use that set. Meta connections are shared at the brand level so a whole team works from one connection, while personal connectors like Google Drive stay scoped to the individual.
How this pairs with creative
The reason to run Meta from an agent rather than a dashboard is that the campaign stops being a separate step. In one conversation the agent can pull your competitors’ longest-running ads with pull_competitor_ads, mine the repeated hook with mine_angles, render four variants with plan_variations and render_ad, score them, publish the winner organically to test it, and then build the paused campaign around whatever survived. That continuity is the argument — see the marketing MCP overview or the full tool list.
Running Google Ads too? See the Google Ads MCP.
Frequently asked
Is there an MCP server for Meta ads?
Yes. Hermoso’s MCP server builds and manages Meta ad campaigns from any MCP client: create_meta_campaign, create_meta_adset, create_meta_ad and upload_meta_asset to build; list_meta_ads, meta_insights, meta_page_insights and meta_post_insights to read; update_meta_object, set_meta_campaign_status and delete_meta_object to change. It also publishes organic posts to Facebook, Instagram and Threads.
Can an AI agent create a Facebook ad campaign?
Yes, with the whole tree — campaign, ad set with full targeting, and an image, video or carousel ad. Objects are created paused with no caller override, so building a campaign never starts spend. Activating it requires calling set_meta_campaign_status with an explicit confirmation.
What targeting can it set?
Geography including countries, regions, cities with a radius, postcodes and DMAs with exclusions; interests, behaviours, custom audiences and lookalikes; locales; five platforms and their placements, devices, operating systems and Advantage+ placements; a promoted_object with your pixel and conversion event, which upgrades the goal to OFFSITE_CONVERSIONS; and daily or lifetime budgets with dayparting, bid caps and cost caps.
Can it spend my ad budget without asking?
No. Every Meta object is created paused, and set_meta_campaign_status is the single switch that arms real money — it refuses to run without an explicit confirmation flag. Deletes are confirm-gated the same way.
Does the agent get my Facebook password?
No. You connect Meta through Meta’s own OAuth flow in Hermoso’s Connectors settings, and Hermoso holds the resulting token. The agent only calls Hermoso’s tools. A brand also selects which Pages, Instagram accounts and ad accounts belong to it, so a teammate never sees the rest of your assets.
Can it make the ad creative too, or only manage campaigns?
Both — that is the difference from campaign-only ad MCPs. The same server researches competitor ads, plans the concept, renders finished image and video ads across 50+ models with your real product composited in, uploads the asset to Meta, and then builds the campaign around it.
Can it read performance?
Yes. meta_insights returns campaign, ad set and ad performance; meta_page_insights and meta_post_insights cover organic Page and post metrics. Results can be exported straight into a Google Sheet with create_sheet and append_to_sheet.
Connect Meta once in Hermoso, and your agent can research, create the creative, build the campaign and read the results — without ever holding your password.
Start free → Read the MCP docs →