Skip to main content
Glama

Create Meta ads objects

meta_ads_create

Creates new objects in a Meta ad account; nothing existing is modified. Call meta_ads_create with {"action":"execute","tool_name":"create_ad_creative","arguments":{…}}; arguments carry the fields of the operation and "connection" when several ad accounts are connected. Operations:

  • create_ad_creative: Create a single-image creative. No impressions and no spend.

  • create_video_creative: Create a creative from a video that is already in the ad account library. No impressions and no spend.

  • create_carousel_creative: Create a carousel creative of 2 to 10 cards. No impressions and no spend.

  • create_ad: Create an ad in an ad set. Always PAUSED: turning it on is a separate action by a person.

  • upload_image: Upload one image, or a batch of up to ten, from https links into the ad account library. No impressions and no spend.

  • upload_video: Upload a video from an https link to the ad account library. No impressions and no spend.

  • duplicate_adset: Copy an audience into a new ad set, WITHOUT ads, for a new creative. The copy is paused.

  • copy_ad_to_new_adset: Copy a winning ad into a new ad set: a paused copy of its ad set with only this ad, under the same name.

  • create_campaign: Create a complete campaign: creative → campaign → ad set → ad. Everything is paused.

  • create_adset: Create a paused ad set in an existing campaign, with its budget, schedule and audience.

  • create_dynamic_creative_ad: Create one paused Dynamic Creative ad: Meta combines the images and texts itself.

  • duplicate_campaign: Copy a whole campaign with its ad sets and ads. The copy is paused unless ACTIVE is asked for. CAN INCREASE SPEND, and this account allows it from chat: say so before executing.

  • create_monitor: Watch every campaign, ad set or ad of this ad account and email when a rule holds on one of them. Changes only this server’s own monitor, nothing in Meta, and never counts toward the monthly change limit.

  • schedule_brief: Email a performance brief of every connected ad account on a schedule: daily, weekly on Mondays, or every N days. Changes only this server’s own monitor, nothing in Meta, and never counts toward the monthly change limit.

  • send_brief_now: Send a scheduled brief right now, without waiting for its schedule; the next scheduled send stays as it is. Reads the connected ad accounts and sends an email now; nothing in them changes, and it never counts toward the monthly change limit.

  • create_audience: Create a custom audience: website visitors, people who engaged with a Facebook Page or an Instagram account, or a lookalike.

  • create_ab_test: Start an A/B test between 2–5 campaigns or ad sets: Meta splits the audience so nobody sees more than one version.

  • rebuild_adset: Rebuild an ad set with a new goal: a paused copy with the same audience, budget and ads that optimises for another result, pixel event or a minimum ROAS.

  • create_product_set: Creates a product set (a filter over existing products) in a catalog the business can access. It creates no products and changes no feed.

  • create_catalog_creative: Create a creative that shows products from a product set. No impressions and no spend.

  • create_catalog_campaign: Create a paused catalog campaign: campaign, ad set on a product set, catalog creative and one ad. Nothing delivers until a person turns it on.

  • create_catalog_adset: Create a paused ad set on a product set inside an existing catalog campaign.

  • create_catalog: Create a product catalog in the business behind this ad account, optionally with a feed that fetches products from a URL.

  • create_product: Add one product to a catalog: name, price, availability, link and image.

  • create_product_feed: Add a product feed to a catalog: a file Meta fetches on a schedule, or one filled by uploads.

  • upload_product_feed: Fetch a feed file once, right now, outside the schedule.

  • create_feed_rule: Add a rule that fixes a feed file on the way in: take an attribute from another column, map values, change letter case or set a default.

  • connect_catalog_event_source: Connect a pixel to a product catalog, so its events are matched to the catalog's products for catalog ads.

  • boost_instagram_post: Turn an existing Instagram post into an ad in an existing ad set. The ad is created PAUSED. Every operation takes two calls with the same tool_name and arguments; the first makes no change in Meta and returns a preview. If the operation cannot increase spend, the preview includes confirm_token (accepted for 10 minutes): call again with it added to arguments to apply the change. An operation that can increase spend is never executed from chat: its preview has no token, only an approve_url for a signed-in person. Executed changes count toward the monthly change limit; the preview is refused once the limit is reached. If the same change was already executed or its outcome is unknown, the preview has no confirm_token; check with a read first. If a proposal for the same change is still pending after its confirm_token expired, the call returns awaiting_human and only a person can apply it via approve_url. Input schemas: get_tool_schema for named operations; meta_ads_read {"action":"list_tools"} lists every operation with its field names.

Input Schema

NameRequiredDescriptionDefault
actionYesAlways "execute".
argumentsYesThe fields of the operation, "connection" when several ad accounts are connected, and on the second call the confirm_token from the first call.
tool_nameYesThe operation name, e.g. create_ad_creative.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations give only the generic profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true, idempotentHint=false); the description carries far more: the two-call preview/execute protocol, the 10-minute confirm_token, approve_url for spend-increasing operations, the monthly change-limit refusal, and the paused-by-default semantics of nearly every create. Because duplicate_campaign and create_campaign can increase spend, the description correctly flags that as opt-in by a signed-in person rather than contradicting destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb, scope and invocation shape before the long operation list, and the procedural protocol is placed at the end where it is needed. The operation list is long but each entry carries distinct capability and safety information (paused state, no impressions/spend), so little is filler; only the sheer volume costs it a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-complexity, nested-object, no-output-schema tool, the description covers execution protocol, confirmation, error/limit states and per-operation safety posture. The only omission, per-operation field names, is deliberately deferred to get_tool_schema and meta_ads_read, which is the right design.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already defines action/tool_name/arguments, so baseline would be 3. The description goes further by explaining what 'arguments' actually carries (the operation's fields, 'connection' when several ad accounts are connected, confirm_token on the second call), which gives the opaque additionalProperties object real meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (creates new objects in a Meta ad account) and immediately narrows scope with 'nothing existing is modified', cleanly separating it from meta_ads_update and meta_ads_delete. Every one of the ~30 operations is enumerated with a one-line purpose, so an agent knows exactly what capability it is selecting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to sibling tools for schema discovery ('get_tool_schema for named operations; meta_ads_read {"action":"list_tools"}'), and states when NOT to proceed ('check with a read first'), when spend-increasing ops are refused from chat, and when a proposal expires into awaiting_human. This is about as complete a when/when-not/alternatives set as a description can carry.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.