Skip to main content
Glama
734,550 tools. Updated 2026-11-02 06:19

"A guide or tools for managing an ad campaign" matching MCP tools:

  • Manage a Google Ads campaign or ad group's targeting AFTER creation: GEO, LANGUAGE and AUDIENCES. op 'add' at campaign level (default): up to 100 locations (negative: true = exclude) and/or 50 languages, OR up to 50 audiences (audiences cannot combine with geo/languages in one call — separate calls). op 'add' at ad-group level (level: 'ad_group' + ad_group_id): audiences only. AUDIENCES: pass user_list_id items (audience segments from adsap_google_list_audiences) — campaign-level TARGETING works on Search/Shopping only; campaign-level EXCLUSION (negative: true) also on Display/Performance Max; ad-group level (target or exclude) on Search/Display/Shopping. DEMAND GEN is different: pass audience_id items (Audience resources) on the AD GROUP — nothing at campaign level. Video supports no audience edits. The same user list cannot be attached at BOTH campaign and ad-group level. 'mode' ('targeting' = narrow delivery to the audiences | 'observation' = full reach, bid adjustments only) sets the audience targeting setting — combinable with the audience add or standalone; Google's default with NO mode set is TARGETING, so pass mode: 'observation' for Search/Shopping unless the user explicitly wants to narrow reach. op 'remove': remove ONE criterion by composite id "<parent_id>:<criterion_id>" (level 'campaign' → campaign criterion, 'ad_group' → ad-group criterion). Geo/language criterion ids EQUAL their constant ids (France on campaign 123 = "123:2250"); AUDIENCE criterion ids are Google-internal — capture them from the add response (created_criteria[].entity_id). Criteria are immutable: to change one, remove it and add the replacement. Always dry_run: true first. For campaign negative KEYWORDS use adsap_google_manage_keywords op 'add_negative'.
    ConnectorAPI key
  • Add keywords, ASIN product targets, and/or category targets to an EXISTING campaign + ad group (SP or SB) — e.g. to act on ppc_harvesting_candidates or extend a live campaign. asin_targets items take exactly one of asin | category_id | expression (raw [{type, value}] list for category refinements; SP-only). The destination must be currently ENABLED (campaign and ad group): a PAUSED destination refuses at staging, because targets there sit dormant and re-enabling the campaign would also revive its existing targets — harvest into a live campaign or stage_campaign_create a new one instead. Stages a proposal — NOTHING changes until confirm_staged_changes.
    ConnectorOAuth
  • Turn an existing Instagram post, video, or reel into an ad inside an EXISTING ad set — Meta Ads Manager's "Use existing post". The ad inherits the ad set's budget, targeting, and schedule (no new budget is created). It is ALWAYS created PAUSED and never spends until you activate it (adsap_set_entity_status with action: "activate"). This does NOT create a campaign or ad set — pick an existing ad set with adsap_list_ad_sets first, get the post id from adsap_list_ig_media, and the Instagram account id from adsap_list_meta_assets. dry_run defaults to TRUE: call once to preview the plan, then again with dry_run: false to create. Images, videos, and reels all work.
    ConnectorAPI key
  • Add an ad group to an EXISTING Google Ads campaign (Search, Display or Demand Gen) in ONE atomic request: the ad group, optional keywords (Search only) and optionally one ad. This is the only tool that adds structure to an already-created campaign — the create-campaign tools always build a fresh campaign. Declare `channel` to match the campaign's type (SEARCH -> 'search', DISPLAY -> 'display', DEMAND_GEN -> 'demand_gen' — from adsap_google_list_campaigns); the workflow verifies the campaign exists and rejects mismatches (PMax uses asset groups and is NOT supported; App/Shopping ad groups are also unsupported). SAFETY: if the parent campaign is ACTIVE the new ad group is created PAUSED by default so it never starts spending unreviewed — pass ad_group.status 'ENABLED' to override; if the campaign is PAUSED the ad group is created ENABLED (the campaign gates serving). Per channel: SEARCH — ad_group.keywords [{text, match_type EXACT|PHRASE|BROAD}] (optional but the group gets no traffic without them) and an optional responsive search ad (3-15 headlines max 30 chars w/ optional pinned_field, 2-4 descriptions max 90, final_url, path1/path2). DISPLAY — optional optimized_targeting flag and an optional responsive display ad (same shape as adsap_google_create_display_campaign's ad: >=1 landscape AND >=1 square image asset id, 1-5 headlines, exactly 1 long_headline, 1-5 descriptions, business_name, final_url). DEMAND_GEN — geo is REQUIRED at the AD GROUP level (ad_group.geo.location_ids; unlike Search/Display where geo is campaign-level and cannot be set here), plus optional language_ids, channel controls (ad_group.channels.strategy or .selected) and an optional 'multi_asset' image ad or 'video_responsive' YouTube ad (same shapes as adsap_google_create_demand_gen_campaign). An ad group created WITHOUT an ad will not serve until an ad is added. EXISTING-GROUP MODE: pass ad_group_id INSTEAD of ad_group to add ONE responsive search ad to an ad group that already exists (Search only; `ad` becomes required; ad.status defaults to PAUSED — pass ENABLED to create it serving; the workflow verifies the group exists, is not removed, and belongs to campaign_id). Use dry_run: true first — Google validates the whole chain without creating anything. ad_account_id is the bare 10-digit customer ID.
    ConnectorAPI key
  • Manage Google Ads Search keywords AFTER creation. op 'add': add up to 100 keywords (and/or ad-group negatives via negative: true) to an EXISTING ad group — atomic batch, per-keyword optional cpc_bid. op 'add_negative': add campaign-LEVEL negative keywords (block queries across every ad group in the campaign). op 'replace': change one keyword's text and/or match type ATOMICALLY (Google keyword text/match type are immutable, so this is remove + re-add in one request — the keyword gets a NEW id and its performance history restarts; status and bid carry over). op 'remove': remove one ad-group keyword/negative (keyword_id) or one campaign negative (campaign_negative_id). Ids are composite "<parent_id>:<criterion_id>" — ad-group keyword ids come from adsap_google_get_insights level keyword; created ids are returned by the add ops. Always dry_run: true first. For pause/enable use adsap_google_set_entity_status; for per-keyword bid changes alone use adsap_google_update_entity with updates.cpc_bid.
    ConnectorAPI key
  • Add location targeting, device exclusions, and/or an ad schedule (day-parting) to a Google Ads campaign. A campaign with no locations serves everywhere Google allows, so set locations before enabling a campaign meant for specific markets. Locations and schedule blocks are added alongside existing ones. Excluding a device sets that device's bid adjustment to -100%, which overwrites any adjustment already set for it. Undo any of these with remove_campaign_criterion.
    Connector
    Destructive
    OAuth

Matching MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables an AI assistant to list and fetch ad campaign data from a REST API, with error handling for missing records or unreachable services.
    2
    ISC
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server that provides OpenRouter model pricing data, enabling price lookups, trending/cheapest lists, and model searches without an API key.
    -

Matching MCP Connectors

  • Crypto scam checks (tokens, sites, wallets), chain reads, web page to Markdown, email checks.

  • Free to compete: testnet faucet funds everything. Measure true campaign lift.

  • Stage campaign changes for review. Does NOT execute anything. Each operation: {"platform": "google_ads"|"meta_ads", "level": "campaign"|"ad_set"|"ad" (default campaign; ad_set = Google ad group), "object_id": "<id of that object>", "set": {"daily_budget": <number, MAJOR account-currency units>, "status": "ACTIVE"|"PAUSED"}, "account_id": optional, for multi-account companies}. daily_budget: Meta campaign or ad set, Google campaign only (Google ad group spend is governed by the campaign budget). Ads take status only. Returns proposal_id + a current→new diff preview. Show the preview to the user; call apply_change(proposal_id) only after they confirm. Proposals expire in 1h.
    ConnectorAPI key
  • Create an idempotent, auditable write intent that builds a complete brand-new campaign structure (one or more campaigns, each with ad groups, keywords, and product ads) for the given ASINs in a single call -- this is not for editing anything that already exists. Preview only: nothing is built on Amazon until the returned request is confirmed via approve_write_v1 and then execute_write_v1, at which point the durable pipeline fans the build out into a trackable campaign setup job (poll its progress with get_campaign_setup_job_v1). The preview states `will_dispatch`: true means execute_write_v1 sends it to Amazon, false (execution_mode PREVIEW_ONLY) means it is recorded and never sent. Keywords and targets are researched while the structure is built and are not part of this preview; the campaigns are created ENABLED and start serving once built (get_campaign_setup_job_v1 lists them). A product that already has one of the requested campaign types (live, or built by a setup in the last 30 days) is refused unless allow_existing_structure is true. At most one campaign structure setup can be running per profile at a time. To create a single ad group, keyword, product target, or product ad in an EXISTING campaign instead of building a whole new structure, use prepare_adgroup_create_v1 / prepare_keyword_create_v1 / prepare_product_target_create_v1 / prepare_product_ad_create_v1 instead. To create ONE single custom campaign with a name you choose (for example a Phrase or Broad keyword campaign), use prepare_campaign_create_v1 and then fill it with prepare_adgroup_create_v1 / prepare_product_ad_create_v1 / prepare_keyword_create_v1.
    Connector
    Destructive
    OAuth
  • Add location targeting, device exclusions, and/or an ad schedule (day-parting) to a Google Ads campaign. A campaign with no locations serves everywhere Google allows, so set locations before enabling a campaign meant for specific markets. Locations and schedule blocks are added alongside existing ones. Excluding a device sets that device's bid adjustment to -100%, which overwrites any adjustment already set for it. Undo any of these with remove_campaign_criterion.
    Connector
    Destructive
    OAuth
  • Add contacts with per-contact email copy to a campaign (max 100 per call, 500 per campaign, one contact per domain). Works on a draft campaign AND on an already-launched one, which is how you top a live campaign up with fresh prospects. Each contact needs a researched, real email address (never guess addresses) plus a personalized subject and plain-text body (subject ≤500 chars, body ≤10,000). Write like a human: plain punctuation, and NEVER use em-dashes in subjects or bodies. Subjects must be 2-5 words that read like a note from a colleague and reference their content (e.g. "your AI tools guide"): never sales words like exclusive, lifetime, revenue, or deal. Internationalized (non-ASCII) domains must be given in punycode (xn--) form. Returns how many were added and which were skipped (invalid email, duplicate domain/email, copy too long, campaign full, already_contacted = this person was emailed in an earlier campaign). Contacts added to a launched campaign sit inert until you call outreach_launch_campaign again. A contact already in the campaign is skipped as duplicate_email or duplicate_domain and its copy is NOT changed: to rewrite the copy of existing contacts use outreach_update_contacts, do not create a new campaign.
    ConnectorNo auth
  • Edit an existing Google Ads campaign, ad group, ad, or keyword: change status (PAUSED/ACTIVE), rename (campaign/ad group), set a campaign's daily budget (in account currency, e.g. 12.50), change a campaign's BIDDING scheme/targets (updates.bidding — swap scheme or edit tCPA/tROAS/ceiling; portfolio strategies rejected), edit ASSET AUTOMATION opt-ins (updates.asset_automation — campaign level on PMax/Search, ad level on Demand Gen ads), or set a keyword's max CPC (updates.cpc_bid — Manual CPC campaigns only, ignored under automated bidding). Keyword TEXT is immutable — use adsap_google_manage_keywords op 'replace' to change it; keyword entity_id is "<ad_group_id>:<criterion_id>" from adsap_google_get_insights level keyword. Put ONLY the fields you want to change in `updates`. Use dry_run: true to preview the diff (current vs new, validated by Google without applying). ad_account_id is the bare 10-digit Google Ads customer ID. For Meta entities use adsap_update_entity instead.
    ConnectorAPI key
  • Draft a new ad group within an existing campaign — returns a PREVIEW, does NOT create. Creates an ad group (ENABLED, type SEARCH_STANDARD) in the specified campaign, optionally with keywords in the same atomic operation. Only SEARCH campaigns are supported. Ads are not included, so the ad group cannot serve until one of its ads is created and enabled. Returns a preview with a plan_id plus warnings (BROAD keywords on a non-Smart-Bidding campaign, a duplicate ad group name, a CPC bid that Smart Bidding ignores); nothing changes until confirm_and_apply applies it. Google Ads API: https://developers.google.com/google-ads/api/docs/start
    ConnectorAPI key
  • Draft an ad group update for name and/or manual CPC bid — returns a PREVIEW. A bid change applies only when the campaign uses MANUAL_CPC: automated bidding strategies ignore ad-group CPC bids, so such a change is refused (for Maximize Clicks the campaign cpc_bid_ceiling, set through update_campaign, is the active constraint). Bid increases above the configured safety.max_bid_increase_pct are refused. Returns a preview with a plan_id; nothing changes until confirm_and_apply applies it. Google Ads API: https://developers.google.com/google-ads/api/docs/start
    ConnectorAPI key
  • 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.
    ConnectorOAuth
  • Activates the paused campaign. Restate the exact candidate approvalHash, account/campaign or OpenAI ad, platform, current budget amount/type/currency from a fresh soclo_campaign_chat_preview and pass confirmed:true; it re-reads, then sets the campaign active with soclo_ads_update_ad_campaign_status and reads the provider status back. Manual launch does not require Ads Watch. No new campaign, changed targeting, guessed price or automatic payment. Unknown activation must be read back with soclo_campaign_chat_status, never retried.
    Connector
    Destructive
    OAuth
  • Create a TikTok campaign, ad group and video ad, all disabled, from a video URL or staged upload. Nothing spends until ads_set_status activates the ad (with campaignRecordId, that also enables its campaign and ad group). Location ids come from ads_list_targeting; an identity from ads_list_identities, or pass displayName and avatar to create one. dailyBudget is whole currency units, at least 20 USD. startDate must be after today in the ad account's timezone. Reuse the same idempotencyKey when retrying.
    ConnectorAPI key
  • Remove a keyword from a live ad group. Looks up the keyword's criterion id by text + optional match-type filter, then issues a REMOVE mutate. If no matchType is given and the same text exists across multiple match types, removes all of them. Use when reports show a specific keyword burning budget without converting. To stop the whole campaign from serving on a query, prefer add_negative_keywords (campaign-level) — removing a keyword only affects that one ad group. Irreversible: re-adding requires a fresh save_campaign_draft or manual ad-group edits.
    Connector
    Destructive
    OAuth
  • Permanently remove an ad group from a live Google Ads campaign. All keywords and ads in it stop serving. **Irreversible** — Google Ads sets status=REMOVED rather than truly deleting, but the only way back is to recreate the ad group + keywords + ads from scratch. Prefer pause_campaign (whole campaign) or remove_keywords (specific keywords) for less drastic interventions. Use this only when a whole thematic block of the campaign needs to go (e.g. 'commercial leads' ad group when the user pivots to residential-only).
    Connector
    Destructive
    OAuth
  • Retrieve change log for a Meta ad account: budget changes, status toggles, ad creation/deletion, billing events, policy actions. Essential for correlating performance drops with specific modifications (e.g. CPA spiked after a budget increase). The filter scans the ENTIRE days_back window (paginated), then returns the newest `limit` matching events; summary.window_truncated=true means the account had more activity than could be scanned and the OLDEST part of the window may be incomplete. VOCABULARY: Meta's changelog uses legacy object names — responses translate them (campaign/ad_set/ad; raw Meta value kept in object_type_raw), but extra_data is passed through UNTRANSLATED, so inside extra_data 'campaign' means AD SET and 'adgroup' means AD (e.g. extra_data.campaign_id on a create_ad event is the ad's parent AD SET id, not a campaign id).
    ConnectorAPI key
  • Hides a campaign from list_campaigns — for an accidental duplicate or a test run the user doesn't want cluttering the list. Also cancels its scheduled posts that haven't gone out yet: they stay approved, without a time, and restoring the campaign re-schedules nothing. Published posts are untouched. Doesn't pause a live ad campaign attached to it. Not reversible from here — the user restores it from the Rebbel dashboard.
    Connector
    Destructive
    OAuth
  • Draft ARCHIVING a Reddit campaign, ad group or ad — irreversible, PREVIEW. Reddit has no hard delete for entities that ran; ARCHIVED is permanent. pause_reddit_entity is the reversible alternative when the entity does not need to be gone. Returns a preview with a plan_id that requires double confirmation; confirm_and_apply executes it. Reddit Ads API: https://ads-api.reddit.com/docs/v3/
    Connector
    Destructive
    API key