Lock in $67
Connector, checked

Meta ads MCP limitations: what the connector cannot do

A surface that creates but never removes, edits that quietly become new objects, and safety rules that are only sentences. Sorted by the kind of no you have hit.

Espen Opdahl Published 6 min read
The short answer

The limits come in four kinds and only one of them is a prompting problem. Some things have no tool at all — the connector will build you a campaign and carries nothing that removes one. Some objects are immutable: an ad's image, copy, link and button cannot be edited once the creative exists. Some fields the Marketing API has do not resolve. And some rules that read like guardrails are instructions written to the assistant, not behaviour enforced by the server.

You ask for last week's test campaign to be cleaned up. You get a sensible plan, a pause, and a campaign still sitting in the account with its budget zeroed and its name unchanged. Nothing errored. Nothing was removed either.

The useful question is never whether the connector is capable. It is which kind of no you just hit — because two of the four have a clean workaround, one needs a different question, and one means opening Ads Manager and doing it yourself.

Four kinds of no

KindHow it shows up in the chatWhat actually works
No tool existsYou get the nearest safe thing instead — usually a pauseDo that part in Ads Manager
The object is immutableThe edit is accepted, then quietly becomes a new objectBuild the replacement deliberately
The field does not resolveThe metric comes back as an unknown fieldAsk for a field the catalogue has
The rule is advice to the modelIt holds, until one time it does notKeep the decision on your side of the keyboard

Deletion is the sharpest of the four because it is the one people assume. Reading the connector's tool surface on 2026-09-08, there are delete tools for ad creatives, custom audiences, catalog products, product sets, product feeds, feed transformation rules and pixel event rules. There is none for a campaign, an ad set or an ad. The documented way to stop one is a status change, and the activation tool says so in its own description:

Do NOT use for pausing active entities. Use ads_update_entity with status field instead.

That gap has an edge you can walk straight into. The creative delete tool warns that a creative attached to a live ad cannot be removed — “detach or delete those ads first, then retry” — and deleting an ad is the operation the connector does not carry. The catalog tools are blunter still, repeating the same sentence across several schemas: deleting an entire catalog “is not supported via MCP”, and the advertiser must use Commerce Manager. That is the honest shape of the thing. It is a build-and-read surface with a pause button, not an account manager.

Knowing which of these four you have hit, in the moment, is most of what separates a useful hour from a wasted one. The Claude Ads Operator course teaches the account routine around it, starting with attaching the connector properly.

worth knowing The connector's own schemas mark one rule ENFORCED and guard the one that spends money with a sentence of advice.

Read on 2026-09-08, the ad set creation tool describes a budget rule in capitals: “ENFORCED: ads_create_ad_set pre-validates this and will reject calls that pass daily_budget or lifetime_budget under a CBO parent campaign.” The activation tool — the one that takes a paused object live — guards itself differently: “This action makes the entity live and will start spending budget. Always get explicit user confirmation before calling this tool.” The first is the server refusing. The second is a sentence addressed to the assistant, in the same channel as everything else it is reading. The split is worth internalising, and it is the whole basis of sorting these operations by how expensive it is to be wrong.

The limits that do not announce themselves

The four kinds above are visible: something is missing, or an error comes back. These three are worse, because the call succeeds and the result is not what you asked for.

The age range you set may be a suggestion. The ad set tool states that Advantage+ Audience is on by default for new ad sets, and that with it enabled “age_min/age_max are treated as audience suggestions, not hard caps” — the tool moves them under the targeting automation block by itself. A hard cap needs the automation switched off explicitly. So an ad set you believe is capped at a certain age is not capped at all unless you said the extra thing, and nothing in the confirmation you read will tell you which one you got.

An edit to live ad copy is a new ad. The update tool refuses creative changes outright: ad creatives are immutable, so a new headline means a new creative and then a new ad pointing at it. That is correct API behaviour and it is not what “change the headline” sounds like. The old ad's numbers stay with the old ad, which is fine if you expected it and a mess in a report if you did not.

Account-level questions lose their tools. The entity read tool declares that account-level requests support neither filtering nor sorting, and that cost per result is unavailable at that level because an account can span several result types. Ask a whole-account question and you get a whole-account answer, unranked. Drop to campaign level to filter or sort at all — and if the metric you want is one of the ones the catalogue never resolves, that is a different kind of no again.

It will build you a campaign all day and it will not take one away.

What the limitation lists get wrong

This query has an established answer already, and most of it is written by companies selling the alternative. A representative example, published 2026-09-06 on the vendor blog AdAmigo, lists among the connector's gaps that it lacks error handling and anomaly detection and that interactions leave no permanent record, making audits difficult. Both are checkably wrong about the official surface. There is a dedicated delivery-error tool — with, admittedly, a scope narrower than its name suggests — and a dedicated anomaly signal tool. As for the record: every change lands in the ad account's own activity log, and the connector reads it, describing itself as mirroring the Ads Manager campaign history page including Meta's system-generated changes. The chat is forgettable; the account is not, which is the right way round.

Where that same corpus is right is lead generation. You can create an ad set optimised for leads — the tool even tells you to check that the Page has accepted the lead-ads terms first — but there is no tool on the surface that builds an instant form or reads a submitted lead back out. For a business whose Meta spend runs through native forms, that is the gap that matters, and no amount of better prompting closes it.

  • Reading a pause as a delete. Paused objects keep their names, their history and their place in every list you ask for later. An account tidied this way gets harder to read, not easier.
  • Trusting an age range on a fresh ad set. With the default audience automation on, it is an input to the model rather than a boundary. Ask for the targeting block back and read it.
  • Asking for a tweak to a running ad's copy. There is no in-place edit. Decide whether you want a replacement ad before you ask, so you are not surprised by a second ad appearing.
  • Treating a confirmation instruction as a lock. Creation being paused is enforced by the server. The confirmation before going live is a sentence, and sentences are the thing an assistant is most easily talked out of.

Try this tonight Take the one ad you were planning to “just fix the headline on” and stop. Ask instead for a new creative and a new ad built from it, paused, under the same ad set — then leave the original running until the replacement has numbers of its own. You get a real comparison instead of a broken history, and you find out tonight whether your account is one where the build path works end to end.

Can Claude delete a campaign through the official connector?

Not as of 2026-09-08. The tool surface has deletes for creatives, audiences and catalog objects, and none for a campaign, ad set or ad. Pausing through a status update is the closest it gets; removal is an Ads Manager job.

Can it change the headline on an ad that is already running?

No. Ad creatives are immutable, and the update tool says so and points you at creating a new creative and a new ad instead. Plan for a replacement, not an edit.

Does it work with Meta lead forms?

Only partly. You can create an ad set optimised for leads, but nothing on the surface builds an instant form or returns the leads people submit. Those stay in Ads Manager or your CRM integration.

Are any of the safety behaviours actually enforced?

Yes, two kinds. Objects are created paused by the server rather than by prompting, and some invalid combinations are rejected before they reach Meta. The confirmations before publishing are instructions to the assistant, which is a weaker thing and worth treating as one.

Know which no you just hit

The course is the operating manual for this surface: what it builds, what it will only read, what it silently defaults, and the Ads Manager jobs it will never take off your hands.

See what's inside — $67 founding price

Pre-sale: the modules are still being recorded and founding members get the checkout link first. No charge today. Public price $97.

Espen Opdahl Writes The Claude Ads Operator. I run Meta ad accounts through Claude and Meta's official ads connector, and I write down what actually happens — including the parts that don't work. Not affiliated with Meta or Anthropic.