MCP App Store
by KeenEthics

Overview

AdAgnt is an ads manager you talk to. Ask in plain English and it does the work: research keywords with real search volumes and bid ranges, build a complete campaign, compare performance across accounts in one answer, find the spend that is returning nothing, and rebalance budgets toward what converts. 359 tools across Google Ads, Meta Ads, LinkedIn Ads, TikTok Ads, Amazon Ads, AppLovin, Reddit Ads and X (Twitter) Ads. Live account connections available today: Google Ads and Reddit Ads. LinkedIn and X (Twitter) have granted API access and their live connections are rolling out. Meta, TikTok and Amazon are built and fully usable in sandbox, but their API applications are still in review with each platform, so live accounts cannot be linked yet. AppLovin connects live for reporting; its writes are not enabled. Every platform's status is shown in the app before you connect anything. Every account starts in sandbox: a deterministic simulation with realistic campaigns and 90 days of metrics, so you can try all 359 tools with zero risk and no ad account. Nothing there touches a live platform and no money can move. Every tool that changes an account is annotated destructive, states in its own description that it must be confirmed with you first, and is never retried automatically. Automation follows the same rule: 24/7 monitors and the cross-platform optimizer file proposals into an approval queue and wait — AdAgnt proposes, you approve. Also included: A/B tests judged on a real two-proportion z-test rather than eyeballing, industry benchmark context, persistent strategy memory, and revenue-based campaign verdicts (scale, keep, fix, kill) modelled from your conversions and average order value — labelled as estimates, because AdAgnt does not ingest orders from GA4, Shopify, Stripe or Klaviyo. Free tier included — unlimited reading, 10 changes a month, one ad account, no card required. Paid plans are priced per ad account.

Tools

add_callout_extensions

ChatGPT
Add callout extensions to a campaign. Callouts are short, non-clickable highlights that appear below your ad. They communicate quick trust signals and differentiators. IMPORTANT RULES (from google-ads-creative-guidelines.md): - Max 25 characters each - 4-8 callouts recommended - Should NOT be CTAs (no "click", "buy", "order", "call") - Should NOT end with periods GOOD EXAMPLES: - "Free Shipping" - "24/7 Support" - "No Code Required" - "30 Second Setup" - "Award Winning" **BAD EXAMPLE ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

add_demandgen_ad_group

ChatGPT
Add a new ad group with targeting and ads to an EXISTING Demand Gen campaign. Use this after create_demandgen_campaign to add additional ad groups. Each ad group can have: - Different location targeting (e.g., US cities vs India cities vs UAE cities) - Different audience targeting (e.g., marketing pros vs tech founders vs agency owners) - Same or different ad creative (headlines, descriptions, images, videos) Reuse Existing Audiences: To attach an existing audience (from Google ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

add_keywords

ChatGPT
Add keywords to an existing ad group. ⚠️ CRITICAL: Run `research_keywords` BEFORE using this tool! ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

add_meta_ad

ChatGPT
User wants to add another ad/creative variation to an EXISTING ad set. DO NOT USE to create a new campaign. For new campaigns: - Video campaign - create_meta_video_campaign - Image campaign - create_meta_image_campaign - Carousel campaign - create_meta_carousel_campaign Common scenarios: - A/B test ad copy: Different headlines, primary text, or CTAs for the same audience - A/B test creatives: Different images or videos for the same audience - Format testing within one audience: Image vs ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

add_meta_ad_set

ChatGPT
User wants to add a new ad set to an EXISTING campaign. Common scenarios: - Audience testing: Same ad format, different targeting/interests per ad set (e.g., "4 ad sets with different interests") - Multi-format: Different ad types (image + video + carousel) under one campaign - Budget split: Same creative, different budgets per audience segment - Scaling: Adding new audiences/markets to an existing campaign - Geographic split: Same ad, different locations per ad set - Dynamic Creative (DCO): Se ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

add_negative_keywords

ChatGPT
Add negative keywords to a campaign. Negative keywords prevent your ads from showing for certain searches. They help save budget by avoiding irrelevant clicks. Parameters: - campaign_id: The campaign ID (REQUIRED - get from list_campaigns) - keywords: List of negative keywords to add - customer_id: Optional Each keyword needs: - text: The keyword phrase (e.g., "free", "cheap", "diy") - match_type: EXACT, PHRASE, or BROAD (default: BROAD) Campaign-level vs Ad Group-level: This add ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

add_pmax_audience_signal

ChatGPT
Add an audience signal to an existing Performance Max campaign. Audience signals hint Google AI about who your ideal customers are. Uses in-market segments (actively researching), affinity segments (long-term interests), and custom audiences (remarketing lists, customer match). Use search_audiences tool first to discover relevant audience segment IDs. Parameters: - campaign_id: The PMax campaign ID - audience_config: Dict with segment IDs Execution time: 2-5 seconds ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

add_pmax_search_themes

ChatGPT
Add search themes to an existing Performance Max campaign. Search themes hint Google AI about what customers search for. Max 50 per asset group. NOT keywords — no match types, no bids, no quality scores. Best practices: - Derive from keyword research results, business profile, or user input - Keep themes specific but not too narrow (2-5 words ideal) - Avoid generic themes like "buy stuff" or overly specific ones like "buy red nike air max 97 size 12" Parameters: - campaign_id: The PMa ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

add_structured_snippets

ChatGPT
Add structured snippet extensions to a campaign. Structured snippets highlight specific aspects of your products/services. VALID HEADERS: - AMENITIES, BRANDS, COURSES, DEGREE_PROGRAMS, DESTINATIONS - FEATURED_HOTELS, INSURANCE_COVERAGE, MODELS, NEIGHBORHOODS - SERVICE_CATALOG, SHOWS, STYLES, TYPES RULES: - Header must be from predefined list - 3-10 values required per snippet - Each value max 25 characters EXAMPLES: For SaaS/Platform: Header: "Types" Values: ["Google Ads" ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

add_tiktok_ad

ChatGPT
Add a new ad to an existing TikTok ad group. Use this when you need to add additional ads (creatives) to an ad group that was already created. Supports all ad formats: - SINGLE_IMAGE: Provide image_urls (public HTTPS URLs — auto-uploaded) OR image_ids (pre-uploaded TikTok IDs) - SINGLE_VIDEO: Provide video_id (TikTok video ID from creative library) - Spark Ads: Boost organic TikTok posts (requires tiktok_item_id + identity_type=TT_USER) - Carousel: Multi-card ads (first call create_tiktok_caro ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

add_tiktok_ad_group

ChatGPT
Add a new ad group to an existing TikTok campaign. Use this when you need to add additional ad groups to a campaign that was already created. Each ad group can have different targeting, budget, and placement settings. This is useful for: - A/B testing different audiences under the same campaign - Splitting budget across different targeting strategies - Adding new targeting segments to an existing campaign Required: campaign_id, adgroup_name, budget. The objective parameter determines automati ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_apply_recommendation

ChatGPT
Apply a previously listed recommendation by id. Mutates the underlying entity (budget/bid/keyword) accordingly and returns the before/after. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_attribution_report

ChatGPT
Create an Amazon Attribution report measuring how off-Amazon traffic (search, social, display) drove detail-page views, add-to-carts, and purchases. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_budget_rule

ChatGPT
Create a scheduled or performance-based budget rule that raises a campaign's budget during an event window or when a performance threshold (e.g. ACOS) is met. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_custom_audience

ChatGPT
Create a custom audience from a rule — remarketing on product views/purchases over a lookback window, or a combination of interest segments. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_dsp_creative

ChatGPT
Register a DSP creative (image/video) and associate it with a line item. Submitted for moderation. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_dsp_line_item

ChatGPT
Create a line item under a DSP order with a supply type, bid, and budget. Created PAUSED. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_dsp_order

ChatGPT
Create an Amazon DSP order (campaign-level container) with a flight and total budget. Created PAUSED. Line items attach to the order. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_portfolio

ChatGPT
Create a portfolio to group campaigns under a shared budget policy. Portfolios support an optional budget cap (monthly recurring or a fixed date-bounded amount). Created enabled. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_report_export

ChatGPT
Kick off an asynchronous v3 report export (create → poll → download). Returns a report_id and status; in the sandbox the export completes immediately with a signed download url and an inline preview of the rows. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sb_ad

ChatGPT
Create the Sponsored Brands ad creative: brand name, logo, custom headline, and the products (ASINs) featured or a landing page. Submitted for moderation. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sb_ad_group

ChatGPT
Create an ad group inside a Sponsored Brands campaign. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sb_campaign

ChatGPT
Create a Sponsored Brands campaign (banner/video ads that feature your brand logo and a headline). Created PAUSED. Requires a brand entity id. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sb_keywords

ChatGPT
Add targeting keywords to a Sponsored Brands ad group with match types and bids. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sb_targets

ChatGPT
Add product/category targeting expressions to a Sponsored Brands ad group. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sd_ad_group

ChatGPT
Create an ad group inside a Sponsored Display campaign with a default bid. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sd_campaign

ChatGPT
Create a Sponsored Display campaign (on- and off-Amazon display ads with contextual or audience targeting). Created PAUSED. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sd_creative

ChatGPT
Create the Sponsored Display creative: headline, logo, and optional custom image. Submitted for moderation. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sd_product_ad

ChatGPT
Promote products (ASINs) as Sponsored Display product ads in an ad group. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sd_targets

ChatGPT
Add Sponsored Display targeting — contextual product/category expressions or audience segments (views/purchases remarketing, in-market, lifestyle). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sp_ad_group

ChatGPT
Create an ad group inside a Sponsored Products campaign with a default bid. Product ads and keywords/targets attach to the ad group. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sp_campaign

ChatGPT
Create a Sponsored Products campaign. Created PAUSED so you can add ad groups, product ads, and keywords/targets before it serves. Targeting type is 'manual' (you supply keywords/targets) or 'auto' (Amazon matches shopper queries to your products). Default daily budget bidding. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sp_keywords

ChatGPT
Add targeting keywords to a Sponsored Products ad group. Each keyword has a match type (exact, phrase, broad) and an optional per-keyword bid. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sp_negative_keywords

ChatGPT
Add negative keywords to stop your ads from showing on unwanted queries. Scope to a campaign or an ad group. Match type: negativeExact or negativePhrase. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sp_negative_targets

ChatGPT
Add negative product targets to exclude specific ASINs or brands from an ad group's product targeting. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sp_product_ad

ChatGPT
Promote one or more products (by ASIN or seller SKU) as product ads in an ad group. Each ASIN/SKU becomes one product ad. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_create_sp_targets

ChatGPT
Add product targeting expressions to an ad group — target specific ASINs, brands, or product categories (optionally refined by price/rating/prime). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_get_account_budget_usage

ChatGPT
Summarize daily budget deployed vs spent across all enabled campaigns over a window, so you can spot budget-limited or under-pacing campaigns.

amazon_get_audience_recommendations

ChatGPT
Recommend high-fit audience segments for the given products/campaign with an estimated reach and relevance score.

amazon_get_bid_recommendations

ChatGPT
Get suggested bids (and a low/high range) for keywords or targets in an ad group, based on the estimated bid landscape.

amazon_get_brand_metrics_report

ChatGPT
Pull brand funnel metrics — awareness, consideration, and purchase shopper counts plus new-to-brand share — for the account over a window.

amazon_get_budget_recommendations

ChatGPT
Recommend budget changes per campaign based on how often it ran out of budget and its return, with an estimated missed-impressions / missed-sales cost.

amazon_get_dsp_report

ChatGPT
Pull a DSP performance report by order or line item: impressions, clicks, spend, and total/new-to-brand sales over a window.

amazon_get_keyword_harvest_suggestions

ChatGPT
Find converting customer search terms that are not yet keywords, so you can promote them to exact-match keywords ("harvesting").

amazon_get_keyword_recommendations

ChatGPT
Get suggested keywords for products/ad group with estimated search volume, competition, and a suggested bid range. Seed with ASINs or seed terms.

amazon_get_negative_keyword_suggestions

ChatGPT
Find search terms that spent without converting, so you can add them as negative keywords to cut wasted spend.

amazon_get_product_target_recommendations

ChatGPT
Recommend ASINs and categories to target for the given products, with a suggested bid for each.

amazon_get_profile

ChatGPT
Fetch a single Amazon Advertising profile: marketplace, currency, timezone, account type, and daily budget ceiling.

amazon_get_sb_campaigns_report

ChatGPT
Pull a Sponsored Brands campaign performance report including brand-halo metrics (new-to-brand orders and sales) per campaign.

amazon_get_sb_landing_page_options

ChatGPT
List valid Sponsored Brands landing page options for the account — your Brand Stores, Store sub-pages, and eligible product-list pages.

amazon_get_sd_campaigns_report

ChatGPT
Pull a Sponsored Display campaign performance report: impressions, clicks, spend, sales, and ACOS/ROAS per campaign.

amazon_get_sp_campaigns_report

ChatGPT
Pull a Sponsored Products campaign performance report: impressions, clicks, CTR, spend, sales, orders, ACOS, and ROAS per campaign over a window.

amazon_get_sp_search_terms_report

ChatGPT
Pull the customer search terms report — the actual shopper queries that triggered your Sponsored Products ads, with spend and conversions. Use it to harvest new keywords and find negatives.

amazon_get_sp_targeting_report

ChatGPT
Pull the keyword/target performance report for Sponsored Products, keyed by targeting expression, with ACOS and ROAS.

amazon_get_targeting_categories

ChatGPT
Browse the product category taxonomy available for product targeting, with category ids you can pass to create_sp_targets / create_sd_targets.

amazon_get_top_of_search_impression_share

ChatGPT
Report each campaign's estimated share of top-of-search impressions and the headroom to grow it by raising bids or the top-of-search placement adjustment.

amazon_list_ad_accounts

ChatGPT
List the advertising accounts (global account manager view) linked to your Amazon Ads identity, with marketplace coverage and status.

amazon_list_dsp_advertisers

ChatGPT
List the Amazon DSP advertisers you can manage, with their entity id and default currency.

amazon_list_dsp_audiences

ChatGPT
List audience segments available for Sponsored Display and DSP targeting — in-market, lifestyle, remarketing, and interest segments with reach estimates.

amazon_list_portfolios

ChatGPT
List portfolios in the account. Portfolios group campaigns under a shared budget cap and date range so you can manage spend across many campaigns at once.

amazon_list_profiles

ChatGPT
List the Amazon Advertising profiles (marketplace + account scopes) available to you. Each profile ties an advertiser account to a single marketplace (e.g. US, UK, DE) and account type (seller, vendor, or agency). Use the profile_id as account_id in other tools.

amazon_list_recommendations

ChatGPT
List actionable optimization recommendations across the account — budget increases for budget-limited campaigns, bid changes, keyword harvests, and negative keyword candidates — each with an estimated impact and an apply-able recommendation_id.

amazon_list_sb_campaigns

ChatGPT
List Sponsored Brands campaigns with 30-day performance.

amazon_list_sd_campaigns

ChatGPT
List Sponsored Display campaigns with 30-day performance.

amazon_list_sp_ad_groups

ChatGPT
List ad groups in a Sponsored Products campaign.

amazon_list_sp_campaigns

ChatGPT
List Sponsored Products campaigns with 30-day performance (impressions, clicks, spend, sales, ACOS, ROAS).

amazon_list_sp_keywords

ChatGPT
List targeting keywords in an ad group with match type and state.

amazon_list_sp_product_ads

ChatGPT
List the product ads (ASIN/SKU) in an ad group.

amazon_set_bid_adjustments

ChatGPT
Set percentage bid adjustments by placement (top of search, product pages, rest of search) for a Sponsored Products campaign. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_set_bidding_strategy

ChatGPT
Set a Sponsored Products campaign's dynamic bidding strategy: down only, up and down, or fixed bids. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_update_campaign_budget

ChatGPT
Change a campaign's daily (or lifetime) budget. Works for SP/SB/SD campaigns. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_update_portfolio

ChatGPT
Rename a portfolio, change its state, or adjust its budget cap. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_update_sb_campaign

ChatGPT
Update a Sponsored Brands campaign's name, state, or budget. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_update_sp_ad_group

ChatGPT
Update an ad group's name, state, or default bid. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_update_sp_campaign

ChatGPT
Update a Sponsored Products campaign's name, state, daily budget, or bidding strategy. Provide at least one field to change. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

amazon_update_sp_keywords

ChatGPT
Update state and/or bid for one or more keywords by id. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

analyze_meta_ad_performance

ChatGPT
User wants detailed analysis of specific Meta ads, creative performance, or wants to identify winning/losing ad variations. This tool provides ad-level and creative-level insights for Meta campaigns. Returns: - Top performing ads by CTR and conversion rate - Underperforming ads that need attention - Creative fatigue indicators (high frequency, declining CTR) - Video completion metrics (25%, 50%, 75%, 100% watched) - Creative optimization recommendations When to use this tool: - "Which of my M

analyze_meta_audiences

ChatGPT
User asks about Meta/Facebook/Instagram audience performance by demographics, age group or gender targeting optimization, audience saturation, or which demographic segments to target or exclude. This tool provides deep analysis of audience segment performance and detects audience saturation to optimize demographic targeting for Meta Ads. Returns: - Age group performance breakdown (18-24, 25-34, 35-44, 45-54, 55-64, 65+) - Gender performance breakdown (male, female, unknown) - Age + Gender comb

analyze_meta_wasted_spend

ChatGPT
User asks about Meta/Facebook/Instagram ad spend efficiency, wasted money, underperforming campaigns, placement optimization, or creative fatigue. This tool identifies Meta Ads campaigns and placements that are wasting money by performing below target ROAS or below breakeven (ROAS < 1.0). It extends the base wasted spend detector with Meta-specific features: Returns: - Campaign-level wasted spend analysis (ROAS < 1.0 = actual losses) - Underperforming spend analysis (1.0 <= ROAS < targ

analyze_search_terms

ChatGPT
Discover keyword opportunities and optimize match types by analyzing actual search terms. ⚠️ IMPORTANT: This tool retrieves READ-ONLY data. Safe to call multiple times. Google Ads only - NOT available for TikTok. 🎯 What This Tool Does (Performance Agent - Phase 1 Feature 3): - Identifies OPPORTUNITY keywords: Converting search terms NOT in your keyword list - Identifies NEGATIVE keywords: Expensive terms with zero conversions - Analyzes MATCH TYPE performance: Exact vs Phrase vs Broad effi

analyze_tiktok_geo_performance

ChatGPT
Analyze TikTok geographic/country-level performance. Returns: per-country spend, conversions, CPA, CTR, hook rate, engagement. Best/worst countries with recommendations. Note: TikTok reports this breakdown at country level. When to use: "TikTok performance by country", "Which countries perform best on TikTok?", "TikTok geo breakdown" Parameters: - lookback_days: default 30

analyze_tiktok_wasted_spend

ChatGPT
Analyze TikTok campaigns for wasted ad spend. Identifies campaigns losing money (ROAS < 1.0) and underperforming campaigns (ROAS < target). Returns: wasted spend by campaign, severity levels (CRITICAL/HIGH/MEDIUM), creative fatigue analysis, status-aware recommendations (distinguishes active vs disabled campaigns). When to use: "Where am I wasting money on TikTok?", "TikTok wasted spend", "Which TikTok campaigns are losing money?" ⚠️ NEVER say "pause" for campaigns with conversions. Say "

analyze_wasted_spend

ChatGPT
Analyze wasted ad spend and identify campaigns losing money or underperforming. ⚠️ IMPORTANT: This tool retrieves READ-ONLY data. Safe to call multiple times. 🎯 What This Tool Does (Performance Agent - Phase 1): - Identifies campaigns LOSING money (ROAS < 1.0x) - Identifies campaigns UNDERPERFORMING (1.0x ≤ ROAS < target) - Separates true waste from opportunity cost - Provides severity-based classification (CRITICAL/HIGH/MEDIUM) - Generates actionable recommendations with expected impa

applovin_add_assets_to_creative_sets

ChatGPT
Attach existing assets to one or more creative sets (fan-out). Each target creative set gains a reference to every listed asset. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_attach_creative_set

ChatGPT
Attach (activate) a creative set so it serves within its campaign. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_clone_creative_set

ChatGPT
Clone a creative set (and its assets) into a new creative set, optionally into a different campaign. Useful for A/B testing creative variations. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_create_campaign

ChatGPT
Create an AppLovin (AXON) app-install/engagement campaign. AXON auto-bids toward the chosen optimization goal — there are no keywords or manual bids. The campaign is created PAUSED by default so you can attach creative sets and review targeting before it serves. Objectives: CPI (installs), CPE (in-app engagement), CPP (in-app purchases), AD_ROAS (return on ad spend). Live campaigns additionally require target_cpi, tracking_method, target_countries, and itunes_id for iOS. AppLovin ignores status on create — a new campaign cannot be born live, so launching is always a separate, explicitly approved applovin_set_campaign_status call. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_create_creative_set

ChatGPT
Create a new (empty) creative set under a campaign. Upload assets into it with applovin_upload_assets. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_create_web_campaign

ChatGPT
Create an AppLovin AXON web campaign that drives to a website rather than an app install. AXON auto-bids toward the objective (typically AD_ROAS or CPP for web conversions). Created PAUSED by default. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_detach_creative_set

ChatGPT
Detach (deactivate) a creative set so it stops serving. Its assets and history are preserved. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_get_account_settings

ChatGPT
Get the settings for one AppLovin advertiser account — display name, currency, reporting timezone, default optimization goal, and connection status.

applovin_get_advertiser_report

ChatGPT
Get the advertiser performance report (spend, impressions, clicks, installs, revenue, CPI, ROAS) over a window of up to 45 days, per campaign. Optionally scope to one campaign or break down by day.

applovin_get_campaign

ChatGPT
Get one AppLovin campaign in full — objective, platform, budget, ROAS target, targeting, and the number of creative sets attached.

applovin_get_creative_performance

ChatGPT
Get per-creative-set and per-asset performance for a campaign (impressions, clicks, installs, spend, IPM, CTR) to spot creative fatigue and winners.

applovin_get_creative_set

ChatGPT
Get one creative set with its assets (videos, images, playables, endcards).

applovin_get_retention_report

ChatGPT
Get the install-cohort retention report — the share of installed users still active at day 1/3/7/14/30, per campaign.

applovin_get_roas_cohort_report

ChatGPT
Get the install-cohort ROAS report — cumulative return on ad spend at day 1/3/7/14/30 after install for each campaign. AXON's core optimization signal for AD_ROAS campaigns.

applovin_list_accounts

ChatGPT
List the AppLovin (AXON) advertiser accounts connected to your AdAgnt user. Returns each account's ID, name, currency, and status. Use the returned account_id in other AppLovin tools when you manage more than one account.

applovin_list_assets

ChatGPT
List the assets in a creative set (videos, images, playables, endcards) with their type and status.

applovin_list_campaigns

ChatGPT
List AppLovin campaigns for the account with 45-day performance snapshots (spend, installs, revenue, ROAS). Optionally filter by status or by app platform.

applovin_list_creative_sets

ChatGPT
List the creative sets under an AppLovin campaign, each with its asset count and status.

applovin_list_tracking_integrations

ChatGPT
List the mobile measurement partner (MMP) tracking integrations available on the account (AppsFlyer, Adjust, Singular, Kochava, Branch). AXON uses an MMP to attribute installs and in-app events for optimization.

applovin_remove_assets_from_creative_sets

ChatGPT
Detach assets from one or more creative sets. The assets themselves are preserved; only the associations are removed. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_set_campaign_objective

ChatGPT
Change the optimization objective AXON auto-bids toward for a campaign: CPI, CPE, CPP, or AD_ROAS. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_set_campaign_platform

ChatGPT
Set the app platform (ios, android, or both) an AppLovin campaign promotes to. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_set_campaign_schedule

ChatGPT
Set the start and/or end date of an AppLovin campaign. Dates are YYYY-MM-DD. Omit end_date to run indefinitely. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_set_campaign_status

ChatGPT
Activate or pause an AppLovin campaign. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_set_country_budgets

ChatGPT
Set per-country daily budgets for a campaign. The global daily budget is updated to the sum of the country budgets. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_set_creative_localization

ChatGPT
Set per-locale asset mappings for a creative set so the right creative serves in each market. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_set_device_targeting

ChatGPT
Set device-level targeting for a campaign: device types (phone/tablet) and connection types (wifi/cellular). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_set_geo_targeting

ChatGPT
Set country-level geo targeting for a campaign: included and/or excluded ISO country codes. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_set_global_budget

ChatGPT
Set the global daily budget for a campaign (in account currency). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_set_optimization_goal

ChatGPT
Set the optimization goal AXON auto-bids toward for a campaign: CPI, CPE, CPP, or AD_ROAS. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_set_os_targeting

ChatGPT
Set the minimum and/or maximum OS version a campaign targets (e.g. iOS 15.0+, Android 10+). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_set_roas_target

ChatGPT
Set the target ROAS multiplier for an AD_ROAS campaign (e.g. 1.5 = 150% return on ad spend). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_set_tracking_configuration

ChatGPT
Configure MMP install-attribution tracking for a campaign: the measurement partner and optional impression/click tracking URLs. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_update_campaign

ChatGPT
Update an AppLovin campaign's name and/or daily budget. Provide at least one field to change. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_update_creative_set

ChatGPT
Rename a creative set and/or change its status. Provide at least one field. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

applovin_upload_assets

ChatGPT
Register one or more creative assets into a creative set. Each asset has a name, a type (video, image, playable, or endcard), and a hosted URL. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

audit_conversion_tracking

ChatGPT
Review your conversion tracking setup across ad platforms. Checks Meta Pixel (event volume, CAPI status, dedup, diagnostics) and Google Ads (conversion actions, enhanced conversions, attribution). Returns a health score (0-100), grade (A-F), detailed findings, and suggestions with self-validation steps for each platform. Note: Some checks rely on API data availability and may not capture all configurations. Where findings are inconclusive, the to

browse_meta_targeting

ChatGPT
User wants to browse all targeting options in a specific category without a search query. This tool retrieves all options in a Meta targeting category for exploration and discovery. Returns: - List of all targeting options in the category - IDs, names, and audience sizes - Useful for discovering targeting options when user doesn't have a specific query When to use this tool: - "Show me all available behaviors for Meta targeting" - "What interest categories are available?" - "Browse demographi

connect_revenue_source

ChatGPT
Registers a revenue source (GA4, Shopify, Stripe, or Klaviyo) and builds a 90-day revenue baseline for attribution. IMPORTANT — say this to the user: AdAgnt does not yet pull orders from these providers. The revenue stream is MODELLED from your campaign conversions and the average order value you supply, so true ROAS is a calibrated estimate, not measured revenue. Live order ingestion is not implemented. Never describe the result as real or verified revenue. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.

create_ab_test

ChatGPT
Creates a controlled creative A/B test inside a campaign: variant A vs variant B (headlines/descriptions), tracked on a chosen metric until statistical significance. ⚠️ Write tool — creates real ad variants; call once. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.

create_ad

ChatGPT
Create a new Responsive Search Ad (RSA) in an existing ad group. Useful for A/B testing different ad copy or adding variation to an ad group. Parameters: - ad_group_id: The ad group to add the ad to (REQUIRED) - headlines: 3-15 headlines (REQUIRED, max 30 chars each) - descriptions: 2-4 descriptions (REQUIRED, max 90 chars each) - final_urls: Landing page URLs (REQUIRED, at least one) - path1: Optional display path 1 (max 15 chars) - path2: Optional display path 2 (max 15 chars) - customer ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

create_demandgen_campaign

ChatGPT
🔄 LONG-RUNNING TOOL: Creates a Demand Gen campaign across ALL Google channels — YouTube, Discover, Gmail, Display, and Maps. Emits MCP progress updates during creation (typically 10-20 seconds). ⚠️ CRITICAL WARNING ⚠️ - Call this tool ONLY ONCE per campaign - Creates REAL campaigns that cost REAL money - Do NOT retry automatically if errors occur - Report errors to user instead of retrying 🌐 Demand Gen Campaign Channels (ALL enabled by default): ✅ YouTube In-Feed (search results & related ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

create_meta_dco_ad

ChatGPT
User wants Meta to automatically TEST MULTIPLE IMAGES and find the best combination. This is Dynamic Creative Optimization (DCO). Meta tests all combinations of images × headlines × primary texts and optimizes delivery automatically. USE THIS TOOL when the user says ANY of these: - "test these images" / "test multiple images" - "let Meta find the winner" / "let Meta optimize" - "Dynamic Creative" / "DCO" - "which image performs best" - Provides multiple images and wants Meta to choose the best ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

create_meta_image_campaign

ChatGPT
User wants to create a Meta (Facebook/Instagram) single-image ad campaign. REQUIRED: You MUST call select_meta_campaign_type first and complete ALL phases it describes (audience targeting research via search_meta_targeting/browse_meta_targeting, asset discovery via discover_meta_assets, and user approval) BEFORE calling this tool. IMPORTANT: This tool creates REAL campaigns that will spend money once activated. Campaign is created in PAUSED status for review. DO NOT USE for video ads ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.

create_meta_video_campaign

ChatGPT
User wants to create a Meta (Facebook/Instagram) video ad campaign. REQUIRED: You MUST call select_meta_campaign_type first and complete ALL phases it describes (audience targeting research via search_meta_targeting/browse_meta_targeting, asset discovery via discover_meta_assets, and user approval) BEFORE calling this tool. IMPORTANT: This tool creates REAL campaigns that will spend money once activated. Campaign is created in PAUSED status for review. DO NOT USE for image ads - use ` ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.

create_monitor

ChatGPT
Create a monitoring alert for your campaigns. Checked daily. Supported metrics: roas, ctr, cpc, cpa, cpm, cpv, spend, conversions, impressions, clicks, cost_per_lead, conversion_rate, budget_utilization, video_views, engagement_rate Operators: less_than, greater_than, less_than_or_equal, greater_than_or_equal, changes_by Advanced features: - Multiple conditions with AND/OR: Use conditions array with conditions_logic: "AND" or "OR" - Consecutive days: Add consecutive ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent` (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

create_pmax_campaign

ChatGPT
🔄 LONG-RUNNING TOOL: Creates a Google Performance Max campaign with validated images. Emits MCP progress updates during authentication, asset upload, and campaign creation (typically 15-30 seconds). Progress stages: validate → commit. ⚠️ CRITICAL PREREQUISITES: 1. MUST have valid asset_bundle_id from validate_and_prepare_assets tool OR existing_image_ids from discover_existing_assets 2. MUST have all campaign text details from user 3. Creates REAL campaigns that cost REAL money 4. Call ONLY ONC ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

create_search_campaign

ChatGPT
🔄 LONG-RUNNING TOOL: Creates a Google Ads Search campaign with full structure. Emits MCP progress updates during authentication and campaign creation (typically 5-10 seconds). Progress stages: validate → commit. ⚠️ CRITICAL WARNING ⚠️ - Call this tool ONLY ONCE per campaign - Creates REAL campaigns that cost REAL money - Do NOT retry automatically if errors occur - Report errors to user instead of retrying ⚠️ GOOGLE ADS POLICY NOTE: Avoid keywords related to health conditions, medical treatme ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

create_tiktok_campaign

ChatGPT
User wants to create a TikTok ad campaign with IMAGES, Spark Ads, or Carousel ads (not video). LONG-RUNNING TOOL: Creates a TikTok In-Feed ad campaign with image creatives, Spark Ads (boost organic posts), or Carousel ads. Supported creative types: - Standard Image Ads: Provide asset_bundle_id or existing_image_ids - Spark Ads: Provide tiktok_item_id to boost an existing organic TikTok post as a paid ad - Carousel Ads: First call create_tiktok_carousel_card to get a card_id, then provide card_ ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

create_tiktok_video_campaign

ChatGPT
User wants to create a TikTok ad campaign with a VIDEO (not images). Also supports Spark Ads and Carousel with video. LONG-RUNNING TOOL: Creates a TikTok In-Feed video ad campaign. Also supports Spark Ads (boost organic posts) and Carousel ads. Additional creative types supported: - Spark Ads: Provide tiktok_item_id to boost an existing organic TikTok post as a paid ad - Carousel Ads: First call create_tiktok_carousel_card to get a card_id, then provide card_id + card_type here - App Promotion ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

create_youtube_campaign

ChatGPT
🔄 LONG-RUNNING TOOL: Creates a YouTube Video campaign using Google Ads Demand Gen format with YouTube-only placements. Emits MCP progress updates during authentication and campaign creation (typically 10-20 seconds). Progress stages: validate → commit. ⚠️ CRITICAL WARNING ⚠️ - Call this tool ONLY ONCE per campaign - Creates REAL campaigns that cost REAL money - Do NOT retry automatically if errors occur - Report errors to user instead of retrying ⚠️ CRITICAL PREREQUISITE: - MUST validate the Y ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

delete_monitor

ChatGPT
Delete a monitoring alert by its task ID. When to use: - "Delete my ROAS monitor" - "Remove this alert" - "Stop monitoring my campaign" Get the task_id from list_monitors first. Accepts task_id, alert_id, or monitor_id — all treated the same. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

detect_meta_creative_fatigue

ChatGPT
User asks about creative fatigue, ad refresh timing, frequency management, declining CTR, when to replace ads, or audience exhaustion on Meta/Facebook/Instagram. This tool analyzes all Meta Ads creatives for fatigue indicators using frequency-CTR correlation analysis and provides a fatigue score (0-100) for each ad. Returns: - Fatigue score (0-100) for each ad based on weighted factors - Severely fatigued ads (score ≥80) - immediate action required - At-risk ads (score 50-79) - plan refresh wi

detect_tiktok_creative_fatigue

ChatGPT
Detect TikTok creative fatigue using video-specific metrics (hook rate decline, completion rate decline, engagement decline, frequency). Returns: fatigue score (0-100) per ad, severely fatigued / at-risk / healthy counts, refresh schedule, recommendations. TikTok-specific: Hook rate (first 2 seconds) is the primary fatigue signal (35% weight). When to use: "Are my TikTok ads fatigued?", "TikTok creative refresh", "Which TikTok videos need replacing?" Parameters: - lookback_days: default 30 -

discover_existing_assets

ChatGPT
🔍 Discover existing assets in the Google Ads account (images, sitelinks, callouts, structured snippets). Phase 0: Asset Discovery - Read-only tool, safe to call anytime.

discover_meta_assets

ChatGPT
User wants to browse existing images in their Meta Ad Library for reuse in new campaigns. This tool retrieves existing images that have been uploaded to Meta's Ad Library, allowing users to reuse them in new campaigns without uploading again. Returns: - List of existing images with their hashes - Image dimensions and thumbnails - Created timestamps - Instructions for using images in campaigns When to use this tool: - "Show me my existing Meta ad images" - "What images do I already have in Met

discover_tiktok_assets

ChatGPT
User wants to reuse existing TikTok images instead of uploading new ones. Browse existing images in TikTok Asset Library for reuse in campaigns. IMPORTANT: This tool retrieves READ-ONLY data. Safe to call multiple times. Returns: - List of all images in your TikTok Asset Library - Image IDs, dimensions, file sizes, upload dates - Usage instructions for reusing assets Parameters: - advertiser_id: Optional (uses connected account if omitted) Execution time: 2-5 seconds (direct backend API cal

duplicate_meta_campaign

ChatGPT
User wants to duplicate/copy an existing Meta campaign with all its ad sets, ads, and settings. IMPORTANT: This creates a NEW real campaign in Meta Ads. The duplicate starts in PAUSED status by default for review. This tool copies the entire campaign structure including: - Campaign settings (objective, budget strategy) - All ad sets (targeting, budgets, schedules) - All ads (creatives, text, CTAs) Returns: - Original and new campaign IDs - New campaign status - Ads Manager URL for the new cam ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

explain_meta_anomaly

ChatGPT
User asks why Meta/Facebook/Instagram performance dropped or changed, what happened to their ROAS/CTR/CPM, or wants to understand why a metric changed during a specific period. This tool analyzes why a specific metric changed during a specified period by comparing it to historical baselines and identifying contributing factors. It detects Meta-specific causes including creative fatigue, audience saturation, placement mix shifts, and auction competition. Returns: - Current metric value vs histo

explain_performance_anomaly

ChatGPT
Explain why a performance metric changed using statistical analysis and historical context. ⚠️ IMPORTANT: This tool retrieves READ-ONLY data. Safe to call multiple times. Uses statistical analysis only (no ML models). 🎯 What This Tool Does (Performance Agent - Phase 1 Feature 4): - Explains why metrics changed (ROAS, CTR, CPC, conversions, conversion rate) - Compares current period to historical averages (30/60/90-day) - Identifies contributing factors with severity levels - Detects campai

explain_tiktok_anomaly

ChatGPT
Explain why a TikTok metric changed during a specific period. Uses statistical analysis and factor detection. Supported metrics: roas, ctr, cpc, cpm, conversions, conversion_rate, hook_rate, video_completion_rate, engagement_rate Returns: current value vs historical averages, deviation %, contributing factors (CPM change, CTR change, hook rate change, engagement change, campaign structure changes), assessment, recommendations. When to use: "Why did my TikTok CTR drop?", "Explain TikTok perfor

generate_report_now

ChatGPT
Generate an immediate performance report and deliver it now. What it does: - Generates a comprehensive PDF performance report immediately - Fetches latest campaign data from all connected platforms - Includes AI-powered recommendations and insights - Delivers via email, Slack, or webhook When to use: - "Get me my campaign performance report" - "Send me a detailed analysis of all my accounts" - "Generate a report and email it to me" - "I need my performance data now" - "Prepare a report ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

get_ab_test_results

ChatGPT
Returns per-variant metrics, two-proportion z-test significance, confidence level, and a verdict: winner found, keep collecting, or no meaningful difference.

get_benchmark_context

ChatGPT
Get industry benchmark context for AI-powered recommendations. ⚠️ IMPORTANT: This tool retrieves READ-ONLY data. Safe to call multiple times. 🎯 What This Tool Does (Performance Agent - Phase 1 Feature 5): - Generates contextual benchmark data for the user's business - Combines business profile with industry benchmarks - Provides recommended ROAS targets based on vertical - Returns formatted context for AI prompts Returns benchmark context: - Business vertical and size context - Indust

get_business_profile

ChatGPT
Get the user's business profile for contextual recommendations. ⚠️ IMPORTANT: This tool retrieves READ-ONLY data. Safe to call multiple times. 🎯 What This Tool Does (Performance Agent - Phase 1 Feature 5): - Retrieves the user's saved business profile - Returns business vertical, size, goals, target audience - Provides context for more relevant recommendations - Shows profile source (user-set, inferred, or none) Returns business context: - Business vertical (retail, services, technolo

get_campaign_performance

ChatGPT
Analyze Google Ads campaign performance with comprehensive insights and recommendations. ⚠️ IMPORTANT: This tool retrieves READ-ONLY data. Safe to call multiple times. Returns detailed analysis: - Campaign structure and ad group organization - Keyword performance with quality scores and match types - Ad group performance breakdown - Performance metrics (CTR, conversions, CPC, cost, ROAS) - Optimization recommendations with actionable insights - Performance trends (last 7 days) **Parameter

get_campaign_structure

ChatGPT
Get campaign structure with ad groups, keywords, ads, and extensions. Supports pagination for large campaigns. This tool retrieves READ-ONLY data. Safe to call multiple times. Returns campaign hierarchy (paginated by ad groups): - Campaign details (name, status, budget, bidding strategy) - Ad groups with their settings (paginated — default 5 per page) - Keywords per ad group (including match types, bids, status) - Ads per ad group (including RSA headlines/descriptions, ad strength) - Negat

get_campaign_targeting

ChatGPT
Get location/geo targeting for a Google Ads campaign. This tool retrieves READ-ONLY data. Safe to call multiple times. Returns location targeting details: - Targeted locations (cities, states, countries, metros the campaign targets) - Excluded locations (negative geo targets) - Bid modifiers per location (if set) - Location type (Country, State, City, Metro, etc.) - Summary counts (targeted, excluded, total) Parameters: - campaign_id: The campaign ID (REQUIRED - get from list_campaign

get_connections_status

ChatGPT
View connected ad accounts and OAuth connections. Shows all connected ad platforms (Google Ads, TikTok Ads, Meta Ads) with: - Connection status and account details - Primary account indicator - Option to switch primary account - Quick links to connect new platforms Use this tool when user asks about: - "how many accounts do I have" / "how many ad accounts" - "what accounts are connected" / "connected accounts" - "which account am I using" / "current account" - "show my connection

get_cross_platform_benchmarks

ChatGPT
Compares your CPC, CTR, CVR, CPA and ROAS per platform against industry benchmark bands for your vertical, and flags metrics outside the healthy band with concrete fix suggestions.

get_meta_ad_creatives

ChatGPT
User wants to see their Meta ad creatives, ad copy, media URLs, or creative performance. Returns ad-level data including full creative content and media URLs alongside performance metrics. When to use this tool: - "Show me my Meta ad creatives" - "What ads are running and how are they performing?" - "Show me the headlines and images for my ads" - "Which ad creatives are performing best?" - "What's the creative content for campaign X?" - "Show me ad performance with creative details" - "Get me

get_meta_audience_insights

ChatGPT
User asks about audience demographics, which placements perform best, device breakdown, or targeting optimization for Meta ads. This tool provides audience and placement analysis for Meta campaigns. Returns: - Age group performance (18-24, 25-34, 35-44, 45-54, 55-64, 65+) - Gender performance breakdown - Placement breakdown (Facebook Feed, Instagram Feed, Stories, Reels, Messenger) - Device breakdown (Mobile, Desktop, Tablet) - Best performing audience segments - Targeting recommendations Whe

get_meta_campaign_details

ChatGPT
User wants to see detailed information about a specific Meta campaign, including its full structure (ad sets, ads, targeting, budgets). This tool retrieves comprehensive details about a single campaign. With include_hierarchy=true, it shows the complete campaign tree: Campaign - Ad Sets - Ads. Returns: - Campaign settings (name, status, objective, budget, bid strategy, schedule) - Performance summary (impressions, clicks, spend, reach, CTR, CPC) - Ads Manager URL - When include_hierarchy=tru

get_meta_campaign_performance

ChatGPT
User asks about Meta/Facebook/Instagram ad performance, campaign metrics, ROAS, spend analysis, or wants to understand how their Meta ads are performing. This tool retrieves comprehensive campaign performance metrics from Meta Ads. Returns: - Account summary (total spend, impressions, reach, conversions, ROAS) - Campaign breakdown with status and objectives - Top performing campaigns by ROAS - Meta-specific metrics (reach, frequency, reach/impressions ratio) - Optimization recommendations Whe

get_meta_lead_form_submissions

ChatGPT
User wants to see lead submissions, lead data, or leads collected from a Meta lead form. Retrieves individual lead submissions for a specific lead form, including contact details and associated ad/campaign information. When to use this tool: - "Show me the leads from form X" - "Get my lead form submissions" - "Download my Meta leads" - "Show lead data from my campaign" - "How many leads did I get?" Returns per lead: - Submission timestamp - Field data (name, email, phone, etc. — varies by for

get_monitor_history

ChatGPT
Show trigger history for a monitoring alert. What it does: - Shows when the monitor triggered, what condition was met, and what value caused it - Shows which campaigns triggered and whether notifications were sent - Useful for understanding monitor behavior and verifying it works correctly When to use: - "Show history for my CPA monitor" - "When did this alert last trigger?" - "What campaigns triggered my ROAS alert?" Requires the monitor's alert_id (get from list_monitors).

get_pmax_audience_signals

ChatGPT
Get current audience signals for a Performance Max campaign. Returns audience signal resource names and associated audience resource references. Use when: - User wants to see what audience signals are on their PMax campaign - Before adding new signals - To get resource_name for removal Parameters: - campaign_id: The PMax campaign ID Execution time: 1-2 seconds

get_pmax_search_themes

ChatGPT
Get current search themes for a Performance Max campaign. Returns each search theme's text and approval_status (APPROVED, LIMITED, DISAPPROVED, UNDER_REVIEW). Use when: - User wants to see what search themes are set on their PMax campaign - Before adding new themes (to check current count — max 50) - To verify theme approval status after adding Parameters: - campaign_id: The PMax campaign ID (get from list_campaigns) Execution time: 1-2 seconds

get_research_status

ChatGPT
Check the status of a research job. What it does: - Shows current progress percentage - Indicates if job is pending, in progress, completed, or failed - Provides summary when complete When to use: - "Check on my research" - "Is my analysis done?" - "What's the status of job [ID]?"

get_revenue_attribution

ChatGPT
Estimates revenue per campaign and per platform as conversions × the saved average order value, alongside spend, the resulting ROAS estimate, and the difference from platform-reported conversion value. The revenue is modelled from the ad platforms' own conversion counts, not pulled from any store or analytics provider; present it as an estimate.

get_strategy

ChatGPT
Returns your server-persisted strategy document (business profile, target audience, competitive landscape, campaign strategy, brand voice, performance history). Works from any AI client — no file system needed. Read this before creating campaigns or writing ad copy.

get_tiktok_ad_performance

ChatGPT
Get TikTok ad-level performance with creative details, video metrics, and engagement. Returns: per-ad metrics (spend, CTR, ROAS, hook rate, completion rate, engagement rate), creative metadata (ad name, format, video ID), and top/underperforming ads. When to use: "Show my TikTok ad performance", "Which TikTok ads are best?", "TikTok creative performance" Parameters: - lookback_days: default 30 - limit: max ads to return (1-50, default 20) - offset: pagination offset

get_tiktok_audience_insights

ChatGPT
Analyze TikTok audience segment performance by age, gender, and combined demographics. Returns: age group breakdown (AGE_18_24 to AGE_55_100), gender breakdown, best/worst segments, saturation detection, targeting recommendations. Note: TikTok audience API doesn't return conversion values per demographic — segments ranked by CPA or CTR. When to use: "TikTok audience performance", "Which age group works best on TikTok?", "TikTok demographic breakdown" Parameters: - breakdown_type: 'age', 'gen

get_tiktok_campaign_details

ChatGPT
Get detailed information about a specific TikTok campaign including status, budget, objective, and timestamps.

get_tiktok_campaign_performance

ChatGPT
Get TikTok campaign performance metrics including TikTok-specific video and engagement data. Returns: account summary (spend, impressions, reach, conversions, ROAS), campaign breakdown with video metrics (hook rate, completion rate), engagement metrics (likes, shares, comments), and recommendations. When to use: "How are my TikTok campaigns performing?", "Show TikTok performance", "TikTok ROAS" Parameters: - lookback_days: 7, 14, 30 (default), 60, or 90 - start_date/end_date: Optional YYYY-MM

get_true_roas

ChatGPT
Per-campaign ROAS computed from the registered revenue source (revenue ÷ spend), ranked worst-to-best, with a verdict per campaign: scale, keep, fix, or kill. IMPORTANT — the revenue side is MODELLED from campaign conversions and the average order value on the source, not ingested from the provider. Present the verdicts as estimates and say what they rest on. Do not claim they are more real than platform-reported conversion value; they derive from the same conversions.

get_usage_status

ChatGPT
Get your current usage status with interactive quota widget. This tool shows your tool call usage for the current billing period and provides upgrade options if needed. Returns: - Current usage (calls used / limit) - Subscription tier (Free, Plus, Pro, Enterprise) - Days until quota reset - Upgrade options with pricing Use this tool when: - User asks "how many calls do I have left?" - User asks about their subscription or quota - User wants to check their usage - User asks about upgra

help_user_upload

ChatGPT
Show user instructions for uploading images to postimages.org for Performance Max campaigns. ⚠️ CALL THIS FIRST when user wants to create a PMax campaign! ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

infer_business_profile

ChatGPT
Automatically infer business profile from campaign data using AI analysis. ⚠️ IMPORTANT: This tool ANALYZES data but may SAVE a profile if confidence is high. 🎯 What This Tool Does (Performance Agent - Phase 1 Feature 5): - Analyzes campaign names, keywords, and ad copy - Uses Claude AI to classify business type - Infers business vertical, size, goals, and audience - Returns confidence level (high, medium, low) - Auto-saves if confidence is HIGH, asks confirmation for LOW **Inference Proc ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

list_campaign_extensions

ChatGPT
List all extensions (sitelinks, callouts, structured snippets) for a campaign. Returns a summary of all extension types configured on the campaign. Parameters: - campaign_id: The campaign ID (REQUIRED). Get from list_campaigns. - customer_id: Optional Google Ads customer ID Returns: - Sitelinks: Clickable links with text, URL, and descriptions - Callouts: Non-clickable text highlights - Structured Snippets: Header + values combinations Execution time: 1-2 seconds (read-only) **W

list_campaigns

ChatGPT
List all Google Ads campaigns for the connected account. ⚠️ CRITICAL: Call this tool BEFORE creating new campaigns to ask the user: "Would you like to create a new campaign or update an existing one?" This tool retrieves READ-ONLY data. Safe to call multiple times. Returns: - List of all campaigns with IDs, names, status, type, budget - 30-day performance metrics for each campaign (impressions, clicks, cost, conversions) - Total campaign count Parameters: - status_filter: ENABLED, PA

list_connected_accounts

ChatGPT
List all connected ad accounts across platforms. Returns account IDs, names, and platforms for all active accounts. Use this at the start of every conversation to know which accounts are available. CRITICAL for multi-account users (agencies): - Always call this first to discover available accounts - Use the returned account IDs when calling any platform tool - If user mentions a business name, match it to an account from this list Returns for each account: - platform: google_ads, meta_ads, ti

list_meta_ad_sets

ChatGPT
User wants to see the ad sets within a specific Meta campaign, including their targeting, budgets, and optimization settings. This tool retrieves ad sets for a given campaign with their status, budget, optimization goal, and billing event. Returns: - Ad set list with name, ID, status, budget, optimization goal, billing event - Next step guidance for editing ad sets or viewing ads When to use this tool: - "Show me the ad sets in campaign [ID]" - "What ad sets are running in my campaign?" - "Li

list_meta_ads

ChatGPT
User wants to see the individual ads within a specific Meta ad set, including their status and creative information. This tool retrieves ads for a given ad set with their name, status, and creative ID. Returns: - Ad list with name, ID, status, creative ID - Next step guidance for editing ads When to use this tool: - "Show me the ads in ad set [ID]" - "What ads are running in this ad set?" - "List the individual ads" - "Which ads are active/paused?" - Before using update_meta_ad when user do

list_meta_campaigns

ChatGPT
User wants to see their existing Meta/Facebook/Instagram campaigns, browse campaign structure, or find a campaign ID. This tool retrieves all campaigns in the connected Meta ad account with their status, objective, budget, and creation date. Returns: - Campaign list with name, ID, status, objective, budget - Status summary (how many ACTIVE, PAUSED, etc.) - Next step guidance for drilling into campaign details When to use this tool: - "Show me my Meta campaigns" - "List my Facebook ad campaign

list_meta_custom_audiences

ChatGPT
User wants to browse, list, or select Custom Audiences for targeting — DB lists, lookalike audiences, remarketing segments, website visitors, engagement audiences. Returns all Custom Audiences for the ad account with ID, name, type (subtype), approximate size, and delivery status. Workflow: 1. Call this tool to discover available custom audiences 2. Use audience IDs with campaign creation tools via custom_audiences parameter 3. Optionally use excluded_custom_audiences to exclude specific a

list_meta_instagram_accounts

ChatGPT
User wants to run ads on Instagram, asks about Instagram accounts, or you need to find the instagram_account_id before campaign creation. Returns Instagram accounts that are: 1. Authorized for ads on the ad account (from Business Manager) 2. Linked to Facebook Pages (from Page settings) Workflow: 1. Call this tool to discover available Instagram accounts 2. Use the Instagram account ID with campaign creation tools via instagram_account_id parameter When to use: - Before any campaign creatio

list_meta_lead_forms

ChatGPT
User wants to see their Meta lead generation forms, list lead forms, or find a lead form ID. Lists all lead generation forms for a Facebook Page associated with the ad account. When to use this tool: - "Show me my Meta lead forms" - "List my Facebook lead generation forms" - "What lead forms do I have?" - "Find my lead form ID" - "Show lead forms for my page" Returns per form: - Form name, status (ACTIVE/ARCHIVED), leads count - Creation date - Form questions (field names and types) - Form ID

list_meta_pixels

ChatGPT
User wants conversion tracking, asks about Meta Pixels, or before creating OUTCOME_SALES campaigns. Returns all Meta Pixels for the ad account with their status and last fired time. Workflow: 1. Call this tool to discover available pixels 2. Use the pixel ID with campaign creation tools via pixel_id parameter 3. Optionally specify pixel_event_name (default: PURCHASE) When to use: - Before creating OUTCOME_SALES campaigns (pixel_id is required for conversion tracking) - When user asks "whi

list_monitors

ChatGPT
List all your monitoring alerts. What it does: - Shows all active and paused monitors - Displays conditions, trigger counts, and status - Provides alert IDs for management When to use: - "Show my monitoring alerts" - "What am I monitoring?" - "List all my alerts"

list_pending_actions

ChatGPT
List auto-actions waiting for your approval. What it does: - Shows pending campaign actions (pause, budget changes) queued by your monitors - Displays before/after state for each action - Shows expiry time (actions expire after 48 hours) When to use: - "Show my pending actions" - "What actions need approval?" - "Any pending budget changes?" After reviewing, use manage_action to approve or reject each action.

list_revenue_sources

ChatGPT
Lists the revenue assumptions saved for this user: provider label, average order value and when they were set. No provider is contacted.

list_scheduled_tasks

ChatGPT
List all your scheduled automation tasks. What it does: - Shows all scheduled briefs, monitors, and research jobs - Displays status, schedule, and last execution - Provides task IDs for management When to use: - "Show my scheduled tasks" - "What automations do I have running?" - "List my scheduled reports"

list_tiktok_ad_groups

ChatGPT
List TikTok ad groups. Optionally filter by campaign ID.

list_tiktok_ads

ChatGPT
List TikTok ads. Optionally filter by ad group ID or campaign ID.

list_tiktok_campaigns

ChatGPT
List all TikTok campaigns with their status, objective, and budget.

manage_action

ChatGPT
Approve or reject a pending auto-action. What it does: - Approves a pending action → executes it immediately on the ad platform - Rejects a pending action → cancels it, no changes made When to use: - "Approve action [action_id]" - "Reject action [action_id]" - "Approve all pending actions" (call multiple times) IMPORTANT: - Approved actions are EXECUTED IMMEDIATELY (campaign paused, budget changed) - This is irreversible in the moment — verify before approving - Actions expire aft ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

manage_scheduled_task

ChatGPT
Manage a scheduled task — pause, resume, or delete. Works for briefs, monitors, and all task types. What it does: - Pause: Temporarily stop a scheduled task or monitoring alert - Resume: Restart a paused task or monitor - Delete: Permanently remove a task or monitor When to use: - "Pause my daily brief" - "Resume my performance reports" - "Delete the weekly summary task" - "Pause this monitoring alert" Required parameters: - task_id: The ID of the task (get from list_scheduled_ ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent` (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

optimize_budget_allocation

ChatGPT
Optimize budget allocation across campaigns using linear programming to maximize conversions. ⚠️ IMPORTANT: This tool retrieves READ-ONLY optimization recommendations. Safe to call multiple times. Does NOT automatically change budgets. 🎯 What This Tool Does (Performance Agent - Phase 1): - Uses linear programming to optimize budget distribution - Maximizes total conversions while respecting constraints - Provides current vs optimized allocation comparison - Categorizes campaigns into actio

optimize_cross_platform_budget

ChatGPT
Builds a budget reallocation plan across ALL connected ad platforms (not just within one), moving spend toward the highest marginal ROAS. With apply=false (default) returns the plan and files it to the approval queue; apply=true executes immediately. ⚠️ apply=true changes real budgets. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.

optimize_meta_budget

ChatGPT
User asks about Meta/Facebook/Instagram budget optimization, reallocating ad spend, maximizing conversions with their budget, or wants data-driven budget recommendations. This tool uses linear programming (scipy.optimize) to find the optimal budget allocation across Meta Ads campaigns or ad sets to maximize conversions while respecting constraints. Returns: - Optimal budget allocation for each campaign/ad set - Expected conversion lift from reallocation - Campaigns to scale up (high ROAS perfo ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

optimize_meta_placements

ChatGPT
User asks about Meta/Facebook/Instagram placement performance, which placements work best, Feed vs Stories vs Reels, should they use Audience Network, or wants placement optimization recommendations. This tool analyzes placement-level performance (Feed, Stories, Reels, Audience Network, Messenger, etc.) and provides optimization recommendations including budget reallocation suggestions. Returns: - Placement ROAS ranking (sorted by performance) - Placements categorized as SCALE/MAINTAIN/REDUCE/ ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

optimize_tiktok_budget

ChatGPT
Optimize TikTok budget allocation using linear programming to maximize conversions. Returns: current vs optimized allocation, expected conversion lift, campaigns to scale/reduce/pause/maintain. When to use: "Optimize my TikTok budget", "How should I allocate TikTok spend?", "TikTok budget recommendations" Parameters: - total_budget: REQUIRED — total monthly budget to allocate - target_roas: optional override (default uses historical avg or 2.0x) - max_change_percentage: 0.3 (conservative) to ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

pause_ad

ChatGPT
Pause an ad to stop it from showing. This is REVERSIBLE using resume_ad. Parameters: - ad_id: The ad ID to pause (REQUIRED) - ad_group_id: The ad group ID (REQUIRED) - customer_id: Optional Execution time: 1-2 seconds When to use: - User says "pause this ad", "stop this ad" - User wants to A/B test by pausing one ad - Ad is underperforming and needs a break - Making changes before re-enabling Example: User: "Pause my underperforming ad" Agent: 1. Uses get_campaign_structure ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

pause_campaign

ChatGPT
Quickly pause a running campaign. Pausing a campaign stops all ads from showing immediately. This is REVERSIBLE using resume_campaign. Parameters: - campaign_id: The campaign ID (REQUIRED - get from list_campaigns) - customer_id: Optional (uses connected account if omitted) Execution time: 1-2 seconds Returns: - Campaign name - Before status (e.g., ENABLED) - After status (PAUSED) - Confirmation message When to use: - User says "pause the campaign", "stop the ads", "turn it ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

pause_meta_campaign

ChatGPT
User wants to pause a running Meta campaign. IMPORTANT: Pausing a campaign stops all ad delivery immediately. No more budget will be spent until resumed. Returns: - Confirmation that campaign is paused - Campaign details - Ads Manager URL When to use this tool: - "Pause my Meta campaign" - "Stop my Facebook ads" - "Pause campaign 123456" - "Turn off my Instagram campaign" Parameters: - campaign_id: The Meta Campaign ID to pause (required) Execution time: 2-5 seconds Effect: Campaign status ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

pause_tiktok_ad

ChatGPT
Set one TikTok ad's status to DISABLE (paused). Requires the ad_id and status "DISABLE". Returns the ad id, its name and the status that was set. Confirm the exact ad with the user before calling. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

pause_tiktok_ad_group

ChatGPT
Set one TikTok ad group's status to DISABLE (paused). Requires the adgroup_id and status "DISABLE". Returns the ad group id, its name and the status that was set. Confirm the exact ad group with the user before calling. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

pause_tiktok_campaign

ChatGPT
Set one TikTok campaign's status to DISABLE (paused). Requires the campaign_id and status "DISABLE". Returns the campaign id, its name and the status that was set. Confirm the exact campaign with the user before calling. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

promote_ab_test_winner

ChatGPT
Concludes an A/B test: pauses the losing variant, keeps the winner live, and records the learning to strategy memory. Refuses if significance hasn't been reached (override with force). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.

reddit_analyze_wasted_spend

ChatGPT
Find where a Reddit account is leaking money: ad groups and communities with spend but no conversions, ads with clicks that never convert, and budgets pinned to underperforming targeting. Read-only — it recommends changes and never makes them.

reddit_create_ad

ChatGPT
Create a Reddit ad (promoted post) inside an ad group. Reddit ads read as posts, so the headline should sound like a person, not a banner. The ad is created PAUSED for review. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_create_ad_group

ChatGPT
Create an ad group inside a Reddit campaign. The ad group holds the bid, the budget, and all targeting. It is created PAUSED — add targeting and at least one ad, then resume it. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_create_campaign

ChatGPT
Create a Reddit campaign. The campaign is created PAUSED so you can add ad groups, targeting, and creative before it serves — resume it with reddit_resume_campaign when the structure is reviewed. Reddit objectives: CLICKS (traffic), IMPRESSIONS (reach/awareness), CONVERSIONS, APP_INSTALLS, VIDEO_VIEWABLE_IMPRESSIONS, CATALOG_SALES, LEAD_GENERATION. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_get_account

ChatGPT
Get details and settings for one Reddit ad account: name, currency, time zone, status, and whether it is your primary account.

reddit_get_ad

ChatGPT
Get one Reddit ad in full: headline, body, destination URL, call to action, format, thumbnail, and the post it promotes.

reddit_get_ad_group

ChatGPT
Get one Reddit ad group in full: bid strategy, budget, schedule, targeting (communities, interests, geo, devices), and its ads.

reddit_get_ad_performance

ChatGPT
Get per-ad Reddit performance for a date range, so you can see which creative is actually earning the clicks rather than which campaign is spending.

reddit_get_campaign

ChatGPT
Get one Reddit campaign in full: objective, status, budgets, schedule, funding instrument, and its ad groups.

reddit_get_campaign_performance

ChatGPT
Get Reddit campaign performance for a date range: impressions, clicks, spend, CTR, CPC, conversions, and CPA. Use this to answer 'how are my Reddit campaigns doing'.

reddit_get_community_performance

ChatGPT
Break Reddit spend and results down by community (subreddit). This is the report that tells you which subreddits are worth the money and which to exclude — the Reddit-specific equivalent of a search-term report.

reddit_list_accounts

ChatGPT
List the Reddit ad accounts connected to your AdAgnt user. Returns each account's ID, name, currency, and status. Use the returned account_id in other Reddit tools when you manage more than one account.

reddit_list_ad_groups

ChatGPT
List ad groups in a Reddit campaign (or across the account) with bid, budget, schedule, and status.

reddit_list_ads

ChatGPT
List Reddit ads (promoted posts) in an ad group or across the account, with headline, destination URL, format, and status.

reddit_list_audiences

ChatGPT
List the custom audiences available in a Reddit ad account (customer lists, pixel-based retargeting, and lookalikes) with their size and readiness.

reddit_list_campaigns

ChatGPT
List campaigns in a Reddit ad account with their objective, status, budget, and schedule. Filter by status to see only what is live.

reddit_list_funding_instruments

ChatGPT
List the payment methods (funding instruments) attached to a Reddit ad account. A campaign must reference a funding instrument before it can spend, so check this before creating one.

reddit_optimize_budget

ChatGPT
Rebalance daily budgets across a Reddit account's campaigns toward the best cost per result, keeping total daily spend unchanged unless you say otherwise. Show the user the full before/after table and get approval before calling — this moves real money between campaigns. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_pause_ad

ChatGPT
Pause one Reddit ad. It stops delivering immediately; its ad group and sibling ads keep running. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_pause_ad_group

ChatGPT
Pause one Reddit ad group. Its ads stop delivering immediately; the rest of the campaign is unaffected. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_pause_campaign

ChatGPT
Pause a Reddit campaign. Delivery and spend stop immediately across all of its ad groups; nothing is deleted and the campaign can be resumed later. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_resume_ad

ChatGPT
Resume a paused Reddit ad so it delivers again inside its ad group. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_resume_ad_group

ChatGPT
Resume a paused Reddit ad group so its ads deliver again against the current bid and budget. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_resume_campaign

ChatGPT
Resume a paused Reddit campaign. Delivery and spend restart against its current budget, so confirm the budget is what the user expects before resuming. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_search_communities

ChatGPT
Search Reddit communities (subreddits) available for targeting, with subscriber counts and whether each accepts ads. Community targeting is what makes Reddit different from other platforms — target the subreddits where the user's customers already talk about the problem.

reddit_set_ad_group_bid

ChatGPT
Change the bid on a Reddit ad group. Raising a bid increases cost per result immediately, so state the current and proposed bid to the user and get explicit approval before calling. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_set_ad_group_schedule

ChatGPT
Set the flight dates for a Reddit ad group. Ending a flight stops delivery at the end date; starting one in the past starts delivery immediately. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_set_community_targeting

ChatGPT
Set which Reddit communities (subreddits) an ad group targets. This REPLACES the ad group's community list — pass the full set you want, not just additions. Delivery changes as soon as it is applied. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_set_device_targeting

ChatGPT
Set which devices and operating systems a Reddit ad group delivers on. This REPLACES the existing device list. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_set_geo_targeting

ChatGPT
Set the countries, regions, or metro areas a Reddit ad group targets. This REPLACES the existing geo list. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_set_interest_targeting

ChatGPT
Set the interest categories a Reddit ad group targets. This REPLACES the existing interest list. Interests reach beyond specific communities, so expect wider reach and lower precision than community targeting. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_update_ad

ChatGPT
Change a Reddit ad's headline, body, destination URL, or call to action. Only the fields you pass are changed. Editing a live ad resets its learning, so prefer creating a new ad for a genuinely different message. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_update_ad_group

ChatGPT
Change a Reddit ad group's name, budget, or schedule. Only the fields you pass are changed. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

reddit_update_campaign

ChatGPT
Change a Reddit campaign's name, budgets, or schedule. Only the fields you pass are changed; everything else is left alone. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

remove_keywords

ChatGPT
Remove keywords from an ad group. Parameters: - ad_group_id: The ad group containing the keywords (REQUIRED) - keyword_ids: List of keyword IDs to remove (REQUIRED) - customer_id: Optional Get keyword_ids from: Use get_campaign_structure to see all keywords with their IDs. WARNING: This is PERMANENT and IRREVERSIBLE. Keywords removed cannot be recovered. Always confirm with the user first. Execution time: 2-4 seconds Example: User: "Remove the underperforming keywords" A ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

remove_negative_keywords

ChatGPT
Remove negative keywords from a campaign. ⚠️ WARNING: This is PERMANENT and IRREVERSIBLE. Once removed, the negative keywords cannot be recovered. Parameters: - campaign_id: The campaign ID (REQUIRED) - keyword_ids: List of negative keyword IDs to remove (REQUIRED) - customer_id: Optional Get keyword IDs from: Use get_campaign_structure to see all campaign negative keywords with their IDs. Look for the "Campaign Negative Keywords" section. When to use: - Remove accidentally ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

remove_pmax_audience_signal

ChatGPT
Remove a specific audience signal from a Performance Max campaign. Use get_pmax_audience_signals first to get the signal_resource_name. Parameters: - campaign_id: The PMax campaign ID - signal_resource_name: Resource name from get_pmax_audience_signals Execution time: 2-5 seconds ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

remove_pmax_search_themes

ChatGPT
Remove specific search themes from a Performance Max campaign. Matches themes by text (case-insensitive). Use get_pmax_search_themes first to see current themes. Parameters: - campaign_id: The PMax campaign ID - themes_to_remove: List of theme text strings to remove Execution time: 2-5 seconds ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

research_keywords

ChatGPT
Research high-intent keywords using Google Keyword Planner API. ⚠️ IMPORTANT: This is a READ-ONLY tool. Safe to call multiple times. 🎯 What This Tool Does: - Researches keywords via Google Keyword Planner API - Returns keywords with real CPC data, search volume, and competition metrics - Groups keywords by commercial intent (HIGH/MEDIUM/LOW based on dynamic CPC thresholds) - Selects top 15-20 keywords optimized for conversions - Provides budget recommendations based on actual keyword costs

resume_ad

ChatGPT
Resume a paused ad to start showing it again. Only works on PAUSED ads (not REMOVED). Parameters: - ad_id: The ad ID to resume (REQUIRED) - ad_group_id: The ad group ID (REQUIRED) - customer_id: Optional Execution time: 1-2 seconds When to use: - User says "resume", "turn it back on", "enable" - User finished making changes - User wants to reactivate a paused A/B test variant Example: User: "Turn my paused ad back on" Agent: 1. Uses get_campaign_structure to find the paused ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

resume_campaign

ChatGPT
Resume a paused campaign. Resuming a campaign makes ads start showing again. Only works on PAUSED campaigns (not REMOVED). Parameters: - campaign_id: The campaign ID (REQUIRED - get from list_campaigns) - customer_id: Optional (uses connected account if omitted) Execution time: 1-2 seconds Returns: - Campaign name - Before status (e.g., PAUSED) - After status (ENABLED) - Confirmation message When to use: - User says "resume", "turn it back on", "start it again" - User wants ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

resume_meta_campaign

ChatGPT
User wants to resume a paused Meta campaign. IMPORTANT: Resuming a campaign restarts ad delivery. Budget will start being spent again. Returns: - Confirmation that campaign is active - Campaign details - Ads Manager URL When to use this tool: - "Resume my Meta campaign" - "Turn on my Facebook ads" - "Reactivate campaign 123456" - "Start my paused Instagram campaign" Parameters: - campaign_id: The Meta Campaign ID to resume (required) Execution time: 2-5 seconds Effect: Campaign status chang ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

resume_tiktok_ad

ChatGPT
Set one TikTok ad's status to ENABLE (active). Requires the ad_id and status "ENABLE". Returns the ad id, its name and the status that was set. Confirm the exact ad with the user before calling. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

resume_tiktok_ad_group

ChatGPT
Set one TikTok ad group's status to ENABLE (active). Requires the adgroup_id and status "ENABLE". Returns the ad group id, its name and the status that was set. Confirm the exact ad group with the user before calling. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

resume_tiktok_campaign

ChatGPT
Set one TikTok campaign's status to ENABLE (active). Requires the campaign_id and status "ENABLE". Returns the campaign id, its name and the status that was set. Confirm the exact campaign with the user before calling. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

run_autopilot_cycle

ChatGPT
Runs one full optimization sweep across every connected platform: evaluates all monitors, hunts wasted spend, checks budget efficiency and creative fatigue, then files prioritized proposed actions to the approval queue (list_pending_actions / manage_action) and returns an executive brief. Never changes anything without approval. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.

save_business_profile

ChatGPT
Save or update the user's business profile with provided details. ⚠️ IMPORTANT: This tool WRITES data. Use when user confirms their business profile. 🎯 What This Tool Does (Performance Agent - Phase 1 Feature 5): - Saves user's business profile to database - Updates existing profile if one exists - Sets profile source as 'user_confirmed' or 'user_mcp' - Enables personalized recommendations going forward Required Parameters: - business_vertical: retail, services, technology, health ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

schedule_brief

ChatGPT
Schedule recurring performance briefs delivered to your inbox. What it does: - Creates automated daily or weekly performance reports - Summarizes key metrics across all your ad platforms - Highlights top performers and underperformers - Provides AI-generated recommendations When to use: - "Set up a daily performance report" - "Send me weekly campaign summaries" - "I want automated performance updates" - "Create a scheduled brief for my campaigns" Execution time: 2-3 seconds to sch ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

search_audiences

ChatGPT
Search for available audience segments (in-market, affinity, custom). Use this tool to discover audience segment IDs for: - PMax campaigns: Use IDs with add_pmax_audience_signal (audience signals/hints) - Demand Gen / YouTube campaigns: Pass IDs via audience_segments parameter in create_demandgen_campaign or create_youtube_campaign (direct targeting) Audience types: - In-market: Users actively researching products/services (e.g., "Business Software") - Affinity: Use

search_meta_targeting

ChatGPT
User wants to find targeting options for their Meta (Facebook/Instagram) ad campaigns. This tool searches the Meta Marketing API to find targeting options including interests, behaviors, demographics, locations, and more. Returns: - List of targeting options with IDs, names, and audience sizes - Category/path information for interests and behaviors - Location details including country, region for geo-targeting When to use this tool: - "Find interests related to fitness" - "What targeting opti

search_tiktok_targeting

ChatGPT
Search TikTok targeting options for campaign creation and ad group management. IMPORTANT: Call this tool to find valid targeting IDs BEFORE creating campaigns or ad groups. Covers ALL targeting types: - interest_categories: Browse all interest categories (fashion, gaming, food, etc.) — returns IDs for interest_category_ids - interest_keywords: Search interest keywords by a seed keyword (e.g., "fitness") — returns keyword IDs for interest_keyword_ids - regions: Get available locations (countrie

select_google_campaign_type

ChatGPT
Decide which Google Ads campaign type fits before anything is built: Search, Performance Max, Demand Gen or YouTube. Call it first when the user asks for a Google Ads campaign without naming a type ("create a Google Ads campaign", "run ads on Google"). Returns the recommended type with the reasoning, the questions still to settle with the user (goal, budget, destination, assets), and the exact tools to call next (research_keywords, discover_existing_assets, then the create_* tool for that type). Read-only: it changes nothing in the account.

select_meta_campaign_type

ChatGPT
User wants to create a Meta (Facebook/Instagram) ad campaign but hasn't specified the campaign type (image, video, or carousel). IMPORTANT: This tool should be called BEFORE any asset discovery or campaign creation when the user says things like: - "Create a Meta campaign" - "Create a Facebook ad" - "I want to run Instagram ads" - "Set up a Meta advertising campaign" - "Help me create ads on Facebook" This tool asks the user what TYPE of campaign they want to create, then provides guidance on ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_analyze_wasted_spend

ChatGPT
Read-only review of a Snapchat account: campaigns and ad squads that spent above min_spend with zero conversions, squads with a swipe rate below 0.2%, and ads stuck in review or rejected. Nothing is changed — apply fixes with the matching write tool after confirming with the user.

snapchat_create_ad

ChatGPT
Create an ad in a Snapchat ad squad from an existing creative (snapchat_list_creatives / snapchat_create_creative). Created PAUSED; Snapchat reviews every new ad before it can serve. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_create_ad_squad

ChatGPT
Create an ad squad in a Snapchat campaign: type, optimization goal, bid strategy, budget, placement and targeting. Created PAUSED. Snapchat requires at least one country in targeting and either a daily or a lifetime budget. Bids and budgets are in account currency (AdAgnt converts to Snapchat's micros). Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_create_audience

ChatGPT
Create an audience segment: a FIRST_PARTY customer-list segment (empty until users are added in Ads Manager) or a LOOKALIKE of an existing segment in one country. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_create_campaign

ChatGPT
Create a Snapchat campaign. The campaign is created PAUSED so you can add ad squads, creatives and ads before it serves — resume it with snapchat_resume_campaign once the structure is reviewed. Objectives: AWARENESS_AND_ENGAGEMENT, SALES, TRAFFIC, APP_PROMOTION, LEADS. Budgets live on the ad squads by default; a campaign daily_budget is an optional cap across them. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_create_creative

ChatGPT
Create a Snapchat creative from uploaded media (snapchat_upload_media / snapchat_list_media). Headline max 34 characters, brand name max 25. A WEB_VIEW creative needs an https web_view_url; APP_INSTALL and DEEP_LINK need app details set up in Ads Manager. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_get_ad

ChatGPT
Get one Snapchat ad with its creative, ad squad and campaign.

snapchat_get_ad_account

ChatGPT
Get one Snapchat ad account: name, currency, timezone, type, status, organization and funding sources.

snapchat_get_ad_squad

ChatGPT
Get one Snapchat ad squad with its full targeting and its ads.

snapchat_get_campaign

ChatGPT
Get one Snapchat campaign with its ad squads.

snapchat_get_creative

ChatGPT
Get one Snapchat creative with the ads that use it.

snapchat_get_stats

ChatGPT
Performance stats for a Snapchat ad account, campaign, ad squad or ad: impressions, swipes, spend, video views, conversions and the derived swipe rate, eCPM, CPS and CPA. granularity TOTAL gives one row, DAY one per day, HOUR one per hour (HOUR windows are capped at 7 days). breakdown splits an account by campaign, or a campaign by ad_squad or ad. Spend is in account currency.

snapchat_list_ad_accounts

ChatGPT
List the Snapchat ad accounts connected to your AdAgnt user, with currency, timezone, status and whether each is the primary. Use the returned account_id in other Snapchat tools when you manage more than one account.

snapchat_list_ad_squads

ChatGPT
List ad squads (Snapchat's ad groups) in an ad account or one campaign, with type, optimization goal, bid, budgets, placement, schedule and targeting. The ad squad owns the bid, the budget and ALL targeting.

snapchat_list_ads

ChatGPT
List ads in a Snapchat ad account or one ad squad, with type, status, review status and the creative each one uses.

snapchat_list_audiences

ChatGPT
List the audience segments in a Snapchat ad account (customer lists, pixel/engagement audiences, lookalikes) with type, approximate size, retention and status.

snapchat_list_campaigns

ChatGPT
List the campaigns in a Snapchat ad account with objective, status, budget, schedule and spend cap. Money is returned in the account currency (Snapchat stores micros; AdAgnt converts).

snapchat_list_creatives

ChatGPT
List the creatives in a Snapchat ad account: type, headline, brand name, call to action, top snap media and review status. Ads reference creatives by creative_id.

snapchat_list_funding_sources

ChatGPT
List the funding sources (payment methods) attached to a Snapchat ad account, with type, status and currency. A campaign cannot deliver on an account without an active funding source.

snapchat_list_media

ChatGPT
List the media (uploaded videos and images) in a Snapchat ad account with type, status and download link. Creatives reference media by top_snap_media_id.

snapchat_list_organizations

ChatGPT
List the Snap Business Manager organizations the connected Snapchat login belongs to. Ad accounts hang off an organization; use the organization_id with snapchat_list_ad_accounts.

snapchat_list_pixels

ChatGPT
List the Snap Pixels in a Snapchat ad account, with status. A pixel is needed for PIXEL_* optimization goals and conversion reporting.

snapchat_pause_ad

ChatGPT
Pause one Snapchat ad. Reports the previous and new status. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_pause_ad_squad

ChatGPT
Pause a Snapchat ad squad — its ads stop delivering. Reports the previous and new status. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_pause_campaign

ChatGPT
Pause a Snapchat campaign — every ad squad under it stops delivering. Reports the previous and new status. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_resume_ad

ChatGPT
Set one Snapchat ad ACTIVE. It serves once its ad squad and campaign are ACTIVE and Snapchat has approved it. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_resume_ad_squad

ChatGPT
Set a Snapchat ad squad ACTIVE. It starts spending as soon as its campaign is ACTIVE and it has an approved ad. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_resume_campaign

ChatGPT
Set a Snapchat campaign ACTIVE. Ad squads that are themselves ACTIVE start spending immediately. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_search_targeting

ChatGPT
Look up Snapchat targeting options to use in snapchat_create_ad_squad / snapchat_update_ad_squad: interests (Snap Lifestyle Categories), countries, regions and metros within a country, operating systems, device makes, age groups, languages, or the account's audiences.

snapchat_set_budget

ChatGPT
Set the daily or lifetime budget of one Snapchat campaign (its spend cap) or one ad squad (its delivery budget), in account currency. Returns the previous and new values. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_update_ad

ChatGPT
Rename a Snapchat ad or swap its creative. Swapping the creative sends the ad back through Snapchat review. Returns before and after. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_update_ad_squad

ChatGPT
Update a Snapchat ad squad's name, bid, budget, schedule or targeting. Any targeting field you pass REPLACES that part of the targeting (countries, interests, ages …); fields you omit are left as they are. Returns the ad squad before and after. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_update_campaign

ChatGPT
Update a Snapchat campaign's name, budget cap, spend cap or schedule. Returns the campaign before and after the change. Use snapchat_pause_campaign / snapchat_resume_campaign for status. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

snapchat_upload_media

ChatGPT
Upload a video or image to a Snapchat ad account from an https URL, for use as a creative's top snap. Snapchat specs: video 9:16, 1080×1920, MP4/MOV, 3–180 s, ≤1 GB; image 9:16 PNG/JPEG ≤5 MB. The media is READY once Snapchat has processed it. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

start_research

ChatGPT
Start an AI-powered research job (runs in background). What it does: - Performs deep analysis that takes 5 minutes to 2 hours - Runs asynchronously - you'll be notified when complete - Provides comprehensive insights and recommendations Research Types: 1. competitor_analysis - Analyze competitor ad strategies Required context: competitors (list of competitor domains/names) 2. keyword_research - Discover high-value keywords Required context: seed_keywords (list of starti ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

suggest_ad_content

ChatGPT
Generate AI-suggested headlines and descriptions based on campaign keywords. Analyzes campaign keywords and generates optimized ad content following creative guidelines: - 15 headlines across 3 categories (What It Is, Benefits, Pain/Proof/CTA) - 4 descriptions with value props and CTAs - All validated for character limits Parameters: - campaign_id: The campaign to analyze (REQUIRED) - business_description: Optional context about the business - key_benefits: Optional list of benefits (e.g.,

switch_primary_account

ChatGPT
Activate one or more ad accounts for a platform. Activated accounts are available for all ad operations. Pass a single account_id to activate one account, or pass account_ids (list) to activate multiple accounts for multi-account management. Use this tool when: - User wants to switch to a different ad account - User says "use my other account" or "activate these accounts" - User wants to manage multiple accounts simultaneously - User specifies which accounts to work with Accepts either accoun ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

test_monitor

ChatGPT
Dry-run a monitor against current data WITHOUT triggering alerts or sending notifications. What it does: - Evaluates the monitor's conditions against current campaign data - Shows which campaigns would match and which would be skipped - Does NOT create triggers, send emails, or queue auto-actions - Useful for verifying a monitor is configured correctly before enabling When to use: - "Test my CPA monitor" - "Would this alert trigger right now?" - "Check if my monitor is set up correctly

update_ad_content

ChatGPT
Combined update for ad content (headlines, descriptions, and/or final URLs). Use this for efficiency when updating multiple ad elements at once. Single API call with combined field mask. Parameters: - ad_id: The ad ID to update (REQUIRED) - ad_group_id: The ad group ID (REQUIRED) - headlines: Optional list of 3-15 headlines (max 30 chars each) - descriptions: Optional list of 2-4 descriptions (max 90 chars each) - final_urls: Optional list of landing page URLs - customer_id: Optional At l ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

update_ad_descriptions

ChatGPT
Update descriptions for a Responsive Search Ad (RSA). Parameters: - ad_id: The ad ID to update (REQUIRED - get from get_campaign_structure) - ad_group_id: The ad group ID (REQUIRED) - descriptions: List of 2-4 descriptions (REQUIRED) - customer_id: Optional Description Rules: - Max 90 characters per description - 2-4 descriptions required - Descriptions should expand on headlines - Include specific details and CTAs - Formula: [Value Prop]. [Specific Detail]. [CTA]. Execution time: ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

update_ad_headlines

ChatGPT
Update headlines for a Responsive Search Ad (RSA). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

update_bid_strategy

ChatGPT
Change campaign bidding strategy. Available Strategies: - MAXIMIZE_CLICKS: Get as many clicks as possible within budget - MAXIMIZE_CONVERSIONS: Get as many conversions as possible - TARGET_CPA: Set a target cost per acquisition (requires target_cpa) - TARGET_ROAS: Set a target return on ad spend (requires target_roas) Parameters: - campaign_id: The campaign ID (REQUIRED) - strategy: MAXIMIZE_CLICKS, MAXIMIZE_CONVERSIONS, TARGET_CPA, or TARGET_ROAS (REQUIRED) - target_cpa: Required if s ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

update_campaign

ChatGPT
Update an existing campaign's settings. Can update: - name: Campaign name - status: ENABLED or PAUSED - budget_amount: Daily budget in dollars IMPORTANT: - Confirm with user BEFORE making changes - Use list_campaigns first to get campaign_id - At least one field (name, status, or budget_amount) is required Parameters: - campaign_id: The campaign ID (REQUIRED - get from list_campaigns) - name: New campaign name (optional) - status: ENABLED or PAUSED (optional) - budget_amount: Dail ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

update_keyword

ChatGPT
Update keyword bid or status. Parameters: - keyword_id: The keyword to update (REQUIRED - get from get_campaign_structure) - ad_group_id: The ad group containing the keyword (REQUIRED) - cpc_bid_micros: New bid in micros (1 USD = 1,000,000). Example: 2500000 = $2.50 - status: ENABLED or PAUSED - customer_id: Optional Can update: - Bid amount (cpc_bid_micros) - Status (ENABLED/PAUSED) CANNOT update (immutable): - Keyword text - Match type Execution time: 2-3 seconds **Example ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

update_meta_ad

ChatGPT
User wants to update an individual Meta ad — pause/resume it, rename it, or swap its creative. IMPORTANT: This tool modifies REAL ads in Meta Ads Manager. Changes take effect immediately. Returns: - Confirmation of updates applied - Summary of changes - Ads Manager URL for the ad When to use this tool: - "Pause this ad" - "Resume ad [ID]" - "Rename this ad" - "Swap the creative on this ad" - "Change the image on this ad" (via creative swap) - "Turn off the underperforming ad" Parameters: - a ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

update_meta_ad_set

ChatGPT
User wants to edit an existing Meta ad set's targeting, budget, bid, placements, schedule, or optimization settings. IMPORTANT: This tool modifies REAL ad sets in Meta Ads Manager. Changes take effect immediately. This is the primary tool for: - Changing audience targeting (age, gender, interests, locations) - Excluding placements (e.g., remove Audience Network) - Adjusting budgets at the ad set level - Changing bid amounts - Pausing/resuming specific ad sets - Modifying optimization goals Re ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

update_meta_campaign

ChatGPT
User wants to update an existing Meta campaign's status, budget, name, or schedule. IMPORTANT: This tool modifies REAL campaigns in Meta Ads Manager. Changes take effect immediately. Returns: - Confirmation of updates applied - Updated campaign details - Ads Manager URL When to use this tool: - "Update my Meta campaign budget" - "Change my Facebook campaign name" - "Pause my Instagram campaign" - "Resume my paused campaign" - "Set a new budget for campaign X" - "Change the end date for my cam ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

update_strategy

ChatGPT
Creates or updates sections of your server-persisted strategy document. Use after onboarding conversations and after campaign learnings (append to performance_history rather than overwriting). ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read.

update_tiktok_ad_group

ChatGPT
Update TikTok ad group settings: name, budget, targeting (age, gender, locations), schedule. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

update_tiktok_campaign

ChatGPT
Update TikTok campaign settings like name, budget, or budget mode. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

upload_tiktok_images

ChatGPT
Upload images to TikTok Asset Library from public URLs. Returns TikTok image_ids that can be used for: - create_tiktok_carousel_card — build carousel cards from uploaded images - create_tiktok_campaign with existing_image_ids — standard image campaigns - add_tiktok_ad with image_ids — add image ads to existing ad groups TikTok downloads images directly from the provided URLs (no intermediate storage needed). Supported formats: JPG, PNG, WEBP. Max 10MB per image. Max 20 images per call. Use t ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

validate_and_prepare_assets

ChatGPT
🔄 LONG-RUNNING TOOL: Validates multiple images from URLs for Performance Max campaigns. Emits MCP progress updates while downloading and validating 5-10 images (typically 5-15 seconds). Progress stages: download → validate → commit. ⚠️ CRITICAL: This tool accepts IMAGE URLS (from postimages.org), NOT base64 or file paths! ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

validate_and_prepare_meta_assets

ChatGPT
User wants to upload NEW images for Meta campaigns. This tool validates images and uploads them to Meta to get image hashes. This tool validates image URLs against Meta's specifications and uploads them to get image hashes needed for campaign creation. It stores validated assets in a temporary bundle (60-minute TTL). Returns: - Validation results (pass/fail per image) - Image hashes for successfully uploaded images - Asset bundle ID for use in campaign creation - Placement compatibility inform ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

validate_and_prepare_tiktok_assets

ChatGPT
User provides image URLs to validate BEFORE creating TikTok image campaign. Validate and prepare new image assets for TikTok ad campaigns. IMPORTANT: Call this tool BEFORE create_tiktok_campaign if uploading NEW images. TikTok Image Requirements: - Aspect ratio: 9:16 (vertical, e.g., 1080x1920 or 540x960) - Maximum file size: 10MB - Formats: JPEG, PNG, WEBP - Minimum size: 540x960px - Recommended: 1080x1920px Parameters: - image_urls: List of public image URLs (e.g., from postimages.org, img

validate_video

ChatGPT
Validate video for ad campaigns (unified tool for all platforms). ⚠️ IMPORTANT: This is a READ-ONLY validation tool. Safe to call multiple times. 🎯 What This Tool Does: - Validates videos for Google Ads PMAX or TikTok campaigns - For PMAX: Validates YouTube video (privacy, duration, embeddable) - For TikTok: Validates public video URL is accessible - Returns metadata (title, duration, privacy, thumbnail) DOES NOT upload videos - user must already have video uploaded: - PMAX: Video mus

x_ads_analyze_wasted_spend

ChatGPT
Find where an X account is leaking money: line items and keywords with spend but no conversions, promoted posts with clicks that never convert, and budgets pinned to underperforming targeting. Read-only — it recommends changes and never makes them.

x_ads_create_campaign

ChatGPT
Create an X (Twitter) campaign. It is created PAUSED so you can add line items, targeting, and promoted posts before it serves — resume it once the structure is reviewed. X objectives: REACH, VIDEO_VIEWS, PRE_ROLL_VIEWS, APP_INSTALLS, WEBSITE_CLICKS, ENGAGEMENTS, FOLLOWERS, WEBSITE_CONVERSIONS. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_create_line_item

ChatGPT
Create a line item inside an X campaign. On X, the line item is the ad group: it holds the bid, the budget, the placements, and all targeting criteria. It is created PAUSED — attach targeting and at least one promoted post, then resume it. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_get_account

ChatGPT
Get details for one X ads account: name, currency, time zone, approval status, and whether it is your primary account.

x_ads_get_audience_insights

ChatGPT
Summarize who an X campaign actually reached: the mix of locations, devices, and interests behind the impressions, with the share of spend each slice took.

x_ads_get_campaign

ChatGPT
Get one X campaign in full: objective, budgets, schedule, funding instrument, and its line items.

x_ads_get_campaign_performance

ChatGPT
Get X campaign performance for a date range: impressions, engagements, clicks, spend, CTR, CPC, conversions, and CPA. Use this to answer 'how are my X campaigns doing'.

x_ads_get_line_item

ChatGPT
Get one X line item in full: bid, budget, placements, product type, and every targeting criterion attached to it. On X, the line item is the ad group: it holds the bid, the budget, the placements, and all targeting criteria.

x_ads_get_line_item_performance

ChatGPT
Get per-line-item X performance for a date range, so you can see which targeting and bid combination is actually working inside a campaign.

x_ads_get_promoted_tweet_performance

ChatGPT
Get per-post X performance for a date range — impressions, engagements, link clicks, spend, and cost per engagement — so you can tell which creative is carrying the campaign.

x_ads_list_accounts

ChatGPT
List the X (Twitter) ads accounts connected to your AdAgnt user. Returns each account's ID, name, currency, time zone, and status. Use the returned account_id in other X tools when you manage more than one account.

x_ads_list_campaigns

ChatGPT
List campaigns in an X ads account with their objective, funding instrument, daily budget, schedule, and serving status.

x_ads_list_funding_instruments

ChatGPT
List the funding instruments (payment methods) on an X ads account, with type, currency, credit remaining, and whether each is able to fund new campaigns. Every X campaign must name a funding instrument, so check this before creating one.

x_ads_list_line_items

ChatGPT
List line items in an X campaign (or across the account) with bid, budget, placements, and status. On X, the line item is the ad group: it holds the bid, the budget, the placements, and all targeting criteria.

x_ads_list_promoted_tweets

ChatGPT
List the posts promoted by an X line item, with their text, engagement, and serving status.

x_ads_list_tailored_audiences

ChatGPT
List the tailored (custom) audiences on an X ads account — uploaded customer lists, website visitors, and look-alikes — with size and targetability.

x_ads_list_targeting_criteria

ChatGPT
List every targeting criterion currently attached to an X line item — keywords, followed accounts, interests, locations, devices, and audiences — so you can see exactly who it is reaching before changing anything.

x_ads_optimize_budget

ChatGPT
Rebalance daily budgets across an X account's campaigns toward the best cost per result, keeping total daily spend unchanged unless you say otherwise. Show the user the full before/after table and get approval first — this moves real money between campaigns. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_pause_campaign

ChatGPT
Pause an X campaign. Delivery and spend stop immediately across all of its line items; nothing is deleted. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_pause_line_item

ChatGPT
Pause one X line item. Its promoted posts stop delivering immediately; the rest of the campaign is unaffected. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_pause_promoted_tweet

ChatGPT
Stop promoting one post on an X line item. The organic post itself is untouched — only the paid promotion stops. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_promote_tweet

ChatGPT
Attach an existing X post to a line item so it starts being promoted. The post must already exist on the account's handle — this tool promotes a post, it does not publish one. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_resume_campaign

ChatGPT
Resume a paused X campaign. Delivery and spend restart against its current budget, so confirm the budget before resuming. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_resume_line_item

ChatGPT
Resume a paused X line item so its promoted posts deliver again against the current bid and budget. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_resume_promoted_tweet

ChatGPT
Resume paid promotion of a post on an X line item. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_search_targeting

ChatGPT
Search X's targeting catalog for valid values before you apply them: locations, interests, events, conversation topics, or handles to target the followers of.

x_ads_set_device_targeting

ChatGPT
Set which devices and platforms an X line item delivers on. This REPLACES the existing device list. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_set_follower_targeting

ChatGPT
Target people who behave like the followers of specific X accounts. This REPLACES the line item's handle list. Competitor and adjacent-brand handles are usually the highest-signal choice on X. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_set_interest_targeting

ChatGPT
Set the interest categories an X line item targets. This REPLACES the existing interest list. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_set_keyword_targeting

ChatGPT
Set the keywords an X line item targets — the words and phrases people post or search for. This REPLACES the line item's keyword list, so pass the full set you want. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_set_line_item_bid

ChatGPT
Change the bid or bidding strategy on an X line item. Raising a bid raises cost per result immediately — state the current and proposed bid to the user and get explicit approval first. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_set_location_targeting

ChatGPT
Set the countries, regions, or cities an X line item targets. This REPLACES the existing location list. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_update_campaign

ChatGPT
Change an X campaign's name, budgets, or end date. Only the fields you pass are changed. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

x_ads_update_line_item

ChatGPT
Change an X line item's name, budget, or placements. Only the fields you pass are changed. Confirm the exact change with the user before calling this, and never call it twice for one request — it is not idempotent and affects live ad delivery. ⚠️ WRITE — confirm the exact values with the user before calling; call once; never retry automatically on error (the change may already have applied); verify with a separate read. Pass intent (one sentence on why, in the user's words where possible) — the account owner sees it in the AdAgnt ledger next to this change.

Capabilities

WritesInteractive

Example Prompts

Click any prompt to copy it.

App Stats

348

Tools

3

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily