Skip to main content
Glama

Adbloop Meta Ads

create_campaign

Destructive

Create ONE Meta campaign with one ad set and one ad, created PAUSED for review. Counts toward the plan's monthly campaign limit. Needs a public imageUrl (or Drive/Dropbox share link) for image ads, or a videoUrl for video ads. For many campaigns at once, use bulk_create_campaigns. WRITES live.

Input Schema

NameRequiredDescriptionDefault
appIdNoApp ID for App Promotion campaigns.
useCBONo
headlineNo
imageUrlNoImage for the ad. Paste a PUBLIC https image URL, OR a single Google Drive / Dropbox file share link (shared so 'Anyone with the link can view') — these are auto-converted. For a single campaign, ask the user for ONE image's share link. (Listing a whole Drive folder to spin up one campaign per image is a Pro feature.)
videoUrlNoPublic video URL for a video ad. When only videoUrl is given (no imageUrl), the ad is built as a video automatically.
catalogIdNo
cboBudgetNo
countriesNoISO country codes; defaults to IN.
ctaButtonNo
objectiveYes
budgetTypeNoDAILY (default) or LIFETIME. LIFETIME needs lifetimeBudget and a scheduleEnd more than 24 hours after the start.
leadFormIdNoInstant-form ID for lead campaigns (instant_forms / website_and_instant_forms).
websiteUrlNo
appStoreUrlNoApp store URL for App Promotion campaigns.
bidStrategyNoLOWEST_COST_WITHOUT_CAP / COST_CAP / LOWEST_COST_WITH_BID_CAP / LOWEST_COST_WITH_MIN_ROAS.
dailyBudgetNo
descriptionNo
phoneNumberNoPhone number for Calls campaigns.
primaryTextNo
scheduleEndNoAd set end time, ISO 8601 datetime. Optional; when set, Meta stops the ad set at this time (auto-stop fail-safe). Required by Meta when a lifetime budget is used.
campaignNameYes
creativeTypeNoOptional. image (default) or video. Inferred as video when only videoUrl is given.
geoLocationsNoOPTIONAL specific places instead of whole countries (replaces countries when set). Get keys from search_locations. cities: [{ key, radius (km, 17-80; omit for the city only), country_code }], regions: [{ key, country_code }] (states), zips: [{ key e.g. "IN:380015", country_code }] (PIN/ZIP codes). Meta rejects overlapping places (e.g. a PIN inside a city radius). With a Special Ad Category: no zips, and cities need a radius of at least 25 km.
productSetIdNo
scheduleStartNoAd set start time, ISO 8601 datetime (e.g. 2026-09-20T09:00:00+08:00). Optional; defaults to ~1 hour from now.
lifetimeBudgetNoTotal budget for the whole schedule in the account currency, MAJOR units (e.g. 150 = SGD 150). Used when budgetType is LIFETIME; Meta will not spend more than this in total.
conversionEventNoPixel event for conversion goals, e.g. PURCHASE, LEAD, ADD_TO_CART.
customAudiencesNoOptional — custom/lookalike audience ids to target (from list_custom_audiences, Pro).
meta_account_idNoAd account to create on (defaults to your primary).
performanceGoalNo
excludedAudiencesNoOptional — audience ids to exclude, e.g. past buyers.
specialAdCategoryNoHOUSING / EMPLOYMENT / FINANCIAL_PRODUCTS_SERVICES / ISSUES_ELECTIONS_POLITICS (default NONE). CREDIT is retired by Meta and is auto-mapped to FINANCIAL_PRODUCTS_SERVICES.
conversionLocationNo
regionalRegulatedCategoriesNoRegional regulated category codes required for certain locations (e.g. ["SINGAPORE_UNIVERSAL"] for Singapore Employment ads). Passed through to the ad set.
regionalRegulationIdentitiesNoVerified beneficiary/payer identity IDs, required together with regionalRegulatedCategories (e.g. { "singapore_universal_beneficiary": "<id>", "singapore_universal_payer": "<id>" }). Passed through to the ad set.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / customAudiences
      Added value: +{
      +  "description": "Optional — custom/lookalike audience ids to target (from list_custom_audiences, Pro).",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / excludedAudiences
      Added value: +{
      +  "description": "Optional — audience ids to exclude, e.g. past buyers.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  2. Changed2 schema fields changed
    • addedInput schema / properties / creativeType
      Added value: +{
      +  "description": "Optional. image (default) or video. Inferred as video when only videoUrl is given.",
      +  "enum": [
      +    "image",
      +    "video"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / videoUrl / description
      Added value: +"Public video URL for a video ad. When only videoUrl is given (no imageUrl), the ad is built as a video automatically."
  3. Changed1 schema field changed
    • changedInput schema / properties / specialAdCategory / description
      Previous value: -"HOUSING / EMPLOYMENT / CREDIT / ISSUES_ELECTIONS_POLITICS (default NONE)."New value: +"HOUSING / EMPLOYMENT / FINANCIAL_PRODUCTS_SERVICES / ISSUES_ELECTIONS_POLITICS (default NONE). CREDIT is retired by Meta and is auto-mapped to FINANCIAL_PRODUCTS_SERVICES."
  4. Changed2 schema fields changed
    • addedInput schema / properties / budgetType
      Added value: +{
      +  "description": "DAILY (default) or LIFETIME. LIFETIME needs lifetimeBudget and a scheduleEnd more than 24 hours after the start.",
      +  "enum": [
      +    "DAILY",
      +    "LIFETIME"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / lifetimeBudget
      Added value: +{
      +  "description": "Total budget for the whole schedule in the account currency, MAJOR units (e.g. 150 = SGD 150). Used when budgetType is LIFETIME; Meta will not spend more than this in total.",
      +  "type": "number"
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / geoLocations
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "OPTIONAL specific places instead of whole countries (replaces countries when set). Get keys from search_locations. cities: [{ key, radius (km, 17-80; omit for the city only), country_code }], regions: [{ key, country_code }] (states), zips: [{ key e.g. \"IN:380015\", country_code }] (PIN/ZIP codes). Meta rejects overlapping places (e.g. a PIN inside a city radius). With a Special Ad Category: no zips, and cities need a radius of at least 25 km.",
      +  "properties": {
      +    "cities": {
      +      "items": {
      +        "properties": {
      +          "country_code": {
      +            "type": "string"
      +          },
      +          "key": {
      +            "type": "string"
      +          },
      +          "radius": {
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "key"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "regions": {
      +      "items": {
      +        "properties": {
      +          "country_code": {
      +            "type": "string"
      +          },
      +          "key": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "key"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "zips": {
      +      "items": {
      +        "properties": {
      +          "country_code": {
      +            "type": "string"
      +          },
      +          "key": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "key"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  6. Changed2 schema fields changed
    • addedInput schema / properties / scheduleEnd
      Added value: +{
      +  "description": "Ad set end time, ISO 8601 datetime. Optional; when set, Meta stops the ad set at this time (auto-stop fail-safe). Required by Meta when a lifetime budget is used.",
      +  "type": "string"
      +}
    • addedInput schema / properties / scheduleStart
      Added value: +{
      +  "description": "Ad set start time, ISO 8601 datetime (e.g. 2026-09-20T09:00:00+08:00). Optional; defaults to ~1 hour from now.",
      +  "type": "string"
      +}
  7. Changed2 schema fields changed
    • addedInput schema / properties / regionalRegulatedCategories
      Added value: +{
      +  "description": "Regional regulated category codes required for certain locations (e.g. [\"SINGAPORE_UNIVERSAL\"] for Singapore Employment ads). Passed through to the ad set.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / regionalRegulationIdentities
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Verified beneficiary/payer identity IDs, required together with regionalRegulatedCategories (e.g. { \"singapore_universal_beneficiary\": \"<id>\", \"singapore_universal_payer\": \"<id>\" }). Passed through to the ad set.",
      +  "type": "object"
      +}
  8. Changed10 schema fields changed
    • addedInput schema / properties / appId
      Added value: +{
      +  "description": "App ID for App Promotion campaigns.",
      +  "type": "string"
      +}
    • addedInput schema / properties / appStoreUrl
      Added value: +{
      +  "description": "App store URL for App Promotion campaigns.",
      +  "type": "string"
      +}
    • addedInput schema / properties / bidStrategy
      Added value: +{
      +  "description": "LOWEST_COST_WITHOUT_CAP / COST_CAP / LOWEST_COST_WITH_BID_CAP / LOWEST_COST_WITH_MIN_ROAS.",
      +  "type": "string"
      +}
    • addedInput schema / properties / catalogId
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / conversionEvent
      Added value: +{
      +  "description": "Pixel event for conversion goals, e.g. PURCHASE, LEAD, ADD_TO_CART.",
      +  "type": "string"
      +}
    • addedInput schema / properties / countries
      Added value: +{
      +  "description": "ISO country codes; defaults to IN.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / leadFormId
      Added value: +{
      +  "description": "Instant-form ID for lead campaigns (instant_forms / website_and_instant_forms).",
      +  "type": "string"
      +}
    • addedInput schema / properties / phoneNumber
      Added value: +{
      +  "description": "Phone number for Calls campaigns.",
      +  "type": "string"
      +}
    • addedInput schema / properties / productSetId
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / specialAdCategory
      Added value: +{
      +  "description": "HOUSING / EMPLOYMENT / CREDIT / ISSUES_ELECTIONS_POLITICS (default NONE).",
      +  "type": "string"
      +}
  9. Changed1 schema field changed
    • addedInput schema / properties / imageUrl / description
      Added value: +"Image for the ad. Paste a PUBLIC https image URL, OR a single Google Drive / Dropbox file share link (shared so 'Anyone with the link can view') — these are auto-converted. For a single campaign, ask the user for ONE image's share link. (Listing a whole Drive folder to spin up one campaign per image is a Pro feature.)"
  10. Added

TDQS

A4.1/5.0
Behavior4/5

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

Adds real context beyond the annotations: the campaign is created PAUSED for review, it consumes the plan's monthly campaign quota, and it writes live rather than staging. Quota consumption and the paused-review state are not derivable from readOnlyHint/destructiveHint. It doesn't mention permission requirements or what happens if creation fails partway.

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

Conciseness5/5

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

Four short sentences, front-loaded with identity and scope, then prerequisites, then the sibling hand-off, then the mutation warning. Nothing is repeated and nothing is padding.

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

Completeness3/5

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

For a 35-parameter mutation with no output schema, the description says nothing about what comes back (campaign/ad set/ad IDs) that later calls like pause_campaigns or get_campaign_structure would need. Annotations cover the safety profile and the description covers quota and paused state, but the return-value gap and the thin coverage of 40% of the parameters leave it incomplete for a tool this complex.

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

Parameters3/5

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

Schema coverage is 60% with 35 parameters, so a large minority are undocumented anywhere. The description reinforces the imageUrl/videoUrl requirement and the "one image per campaign" rule, but those are already spelled out in the schema, and the remaining ~40% of parameters get no narrative clarification.

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 ("Create ONE Meta campaign") plus the exact composition it produces (one ad set, one ad) and its initial state (PAUSED). The capitalized "ONE" plus the explicit pointer to bulk_create_campaigns makes it distinguishable from the sibling at a glance.

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

Usage Guidelines4/5

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

Explicitly routes bulk work elsewhere ("For many campaigns at once, use bulk_create_campaigns") and states the media prerequisite for image vs video ads. It doesn't cover other plausible alternatives (validate_campaigns, add_ad_to_adset, or what to do when the monthly limit is already exhausted), so it stops short of full when/when-not coverage.

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.

Resources