MCP App Store
by KeenEthics

Overview

Omneky helps signed-in users review brand performance, manage product catalogue data, create image and product-video assets, and launch or manage campaigns across the signed-in brand's connected advertising channels. It does not manage calendars or banking, access another advertiser's accounts, or administer application deployments or DNS.

Tools

ahrefs_connection_status

ChatGPT
Whether the brand has a connected Ahrefs account (host / target / last-four only — never the API key). No connect or disconnect tool on this surface. Intents: Ahrefs connected, Ahrefs API, SEO connection

ahrefs_domain_rating

ChatGPT
Live Ahrefs Domain Rating and Ahrefs Rank for a target domain or URL. Site Explorer overview only. Intents: Ahrefs DR, domain rating, Ahrefs rank, SEO

ahrefs_organic_keywords

ChatGPT
Live Ahrefs organic-keyword rows for a target. Default limit 10; values above 50 are refused (Nexus hard cap). Intents: Ahrefs keywords, organic keywords, SEO keywords

analyze_brand

ChatGPT
Gather brand evidence via Exa and persist a Delphi marketing-plan draft (no steps). Optional `website_url is fetched. First step of the shared loop: analyze → create (omit plan_body and Delphi authors the plan) → revise → preview checklist → host-run each listed step. Not identify_product_from_url / scrape_product_from_url`. Intents: analyze brand, marketing plan, weekly plan, brand evidence, website_url, Exa, Delphi plan

cancel_marketing_plan_run

ChatGPT
Cancel a queued or running marketing-plan run. Finished steps are kept. Destructive for remaining pending work. Intents: cancel marketing plan run, stop plan, cancel run_id

check_clone_video

ChatGPT
Use this when the user asks whether a video ad can be cloned, before any render. Assesses the video and reports whether it is suitable and what is missing. Free; it never renders. Example: video_url "https://cdn.example.com/best_ad.mp4". Intents: can this video be cloned, check my video before cloning Do not use to render the clone (clone_video_ad). Side effects: none. Retry: safe. Errors: brand_required → call list_brands and retry with brand_id.

check_reporting_data_available

ChatGPT
Which dates and paid-media channels have analytics data for a brand before querying metrics. An empty metrics result outside this coverage is missing data, not a zero. Stay on the same `brand_id`. Intents: data availability, date range, channel coverage, Meta, Google, TikTok

clone_video_ad

ChatGPT
Use this when the user wants to recreate an existing or winning video ad for a product and is ready to render it. This only renders the clone (it spends credits); when it needs details it returns needs_input with questions, so call again with user_answers_for_cloning. Example: video_url "https://cdn.example.com/best_ad.mp4". Intents: clone this video, recreate my best video, copy this ad style Do not use to check whether a video can be cloned (check_clone_video), to read a video's duration or size (get_video_metadata), or for a brand-new product video (generate_product_video). Side effects: spends credits and creates an asset; the result states the cost. Retry: check get_creative_status first (a resubmit is a new job). Errors: needs_input → ask the listed questions and call again with the answers.

clone_video_pre_assessment

ChatGPT
Clone-video questionnaire and disclaimers for generate_new_clone_video_ad. Pass a video_url from list_ad_instance_items only. Relay questions and disclaimers. Stop if status is nsfw-error. Does not generate a clone and does not deduct credits. Intents: clone pre-assessment, clone questions, nsfw-error, video_url questionnaire

clone_voice

ChatGPT
Use this when: Clone a speaker sample into a brand voice. Confirm the speaker consented first. Required: brand_id, voice_url. Optional name. Synchronous — returns voice_id; do not poll get_creative_status. Optional quote via get_account; pass items[].expected_credits back when quoted and listed. Verify the new voice under cloned_voices in find_avatars_and_voices before saying it speaks in their voice. No caller idempotency key — after an ambiguous timeout do not resubmit; check find_avatars_and_voices. CGP deducts; this overlay does not. Voice cloning is an intentional exception. Intents: clone voice, voice_url, cloned_voices, speaker consent, voice_id Do not use for job status (get_creative_status) or to edit/resize an existing asset (edit_image, resize_creative). Side effects: spends credits; creates an asset. Retry: reuse gpt_ad_gen_id if listed, else check get_creative_status (a resubmit is a new charge).

create_marketing_plan

ChatGPT
Draft a Delphi marketing plan only. Omit `plan_body and Delphi authors the plan from server-side account, performance, and brand research (usually after analyze_brand). Default timeframe is **7 days** (range 1–365, not 30). Optional plan_body is only for an already Delphi-authored body. This tool does not launch ads, change budgets, generate creatives, or deduct credits. Each step is {tool, arguments, depends_on, status} and tool is a public tools/list name. The host runs those steps; preview_marketing_plan_execution returns the checklist and credit quotes. This is the shared-service tool, not the CGP chat-agent /api/marketing-plans` path. Intents: create marketing plan, weekly plan, 7 day plan, plan_body, Delphi plan, timeframe_days, draft only

create_product

ChatGPT
Manually add a product to the brand catalogue (name, description, optional product page URL). Does not accept image or video bytes. Intents: add product, create catalogue item, new SKU

delete_ad_entities

ChatGPT
Use this when the user asks to permanently delete campaigns, ad groups or ads on a channel. Example: channel "meta", level "ad", ids ["120212345678901234"]. Intents: delete campaign, remove ad set, delete these ads Do not use to pause or stop temporarily (set_ad_status). Side effects: permanent deletion on the ad channel (destructive). Retry: check list_live_ads before repeating. Errors: not_found → call list_live_ads for current ids; channel_not_connected → call get_connect_link for that channel; brand_required → call list_brands and retry with brand_id.

delete_ad_group

ChatGPT
Permanently remove an ad set / ad group. This cannot be undone. Intents: delete ad set, delete ad group, remove ad set

delete_ads

ChatGPT
Permanently remove one or more ads. This cannot be undone. Intents: delete ads, remove ads, Meta ads, Facebook ads

delete_campaign

ChatGPT
Permanently remove a paid-media campaign. This cannot be undone. Intents: delete campaign, remove campaign, Meta, Google, TikTok

disconnect_connector

ChatGPT
Use this when the user explicitly asks to disconnect Google Drive or PostHog. Example: connector "posthog". Intents: disconnect Drive, remove PostHog Do not use for ad channels (disconnected in omneky.com settings). Side effects: removes the connection (destructive). Retry: safe.

disconnect_google_drive

ChatGPT
Disconnect the brand's Google Drive OAuth. Revokes the stored connection; Drive can be connected again later. Intents: disconnect Google Drive, unlink Drive, logout Drive

disconnect_posthog

ChatGPT
Disconnect the brand's PostHog project. Revokes the stored connection; the project can be connected again later. Intents: disconnect PostHog, unlink PostHog, remove PostHog

edit_image

ChatGPT
Edit an existing finished image with a natural-language prompt. Calls Creative Brief synchronously and returns the edited image URL when done (often 30–120s). There is no `job_id to poll with get_generation_status — wait for this tool call to finish. When to use - Change copy, colors, layout, product placement, or style on an existing ad - Apply a look / font via reference_images - Not for net-new ads (use generate_image_ad) and not for aspect-ratio canvas changes alone (use resize_ad) Required inputs - images — 1+ HTTPS URLs of the source image(s) - prompt — concrete edit instruction Optional inputs - brand_id, job_id, mask, reference_images, size, model_name Returns presigned_url on success. Present the image to the user; do not describe it only as a URL. This is a paid edit (**5 credits**) settled when the edit succeeds. If the account is short on credits the tool returns credit_insufficient` and does not run the edit. Intent keywords edit ad, restyle creative, change copy on ad, retouch image, paid-media edit

estimate_reach

ChatGPT
Use this when the user asks how many people a targeting setup would reach on a channel. Pass targeting_fragments from search_targeting. Example: channel "meta". Intents: audience size, reach estimate, how many people Do not use for targeting ids (search_targeting). Side effects: none. Retry: safe. Errors: channel_not_connected → call get_connect_link for that channel; brand_required → call list_brands and retry with brand_id.

fetch_product_video_narratives

ChatGPT
Slim story cards for a product video (narrative_id, title, hook). Required: brand_id, product_name, product_image_urls (1–3 HTTPS). Then generate_product_video with the picked narrative_id. Intents: turn this product URL into video ads, product video ad, turn this product into a video ad, video commercial, narrative options, narrative_id

fetch_video_chunk

ChatGPT
App-only Range-GET chunk for widget blob autoplay assembly when the poll cannot inline a full data:video. Not a generation start. Intents: video chunk, widget autoplay, Range GET

finalize_scraped_product

ChatGPT
Commit a scraped product draft into the catalogue with the chosen fields and images. Requires at least one image URL; zero images does not save. Not `upsert_brand_product` (that leaves a scraped draft). Intents: finalize scrape, save catalogue draft, product import

find_avatars_and_voices

ChatGPT
Use this when the user wants to pick an AI presenter (avatar) or a voice for an avatar video. include: avatars, voices, both (default) or filters. Intents: avatars, presenters, AI actor, voices, voiceover options Do not use to render the video (generate_avatar_video_ad) or to clone the user's own voice (clone_voice). Side effects: none. Retry: safe.

generate_avatar_video_ad

ChatGPT
Use this when the user wants a talking-head (UGC-style) avatar video ad: a person on screen speaking a short line about the brand or product. Returns job_id. One of avatar_url or person_image_url is required: a stock portrait from find_avatars_and_voices, or an image from the user's own brand assets of a person who has consented to appear. user_prompt (the spoken line) is limited to about 30 seconds. Adding product_image_url changes the cost. Optional quote via get_account; pass items[].expected_credits back when quoted. After an ambiguous timeout do not resubmit; check list_creatives. Check progress with get_creative_status kind=video. Intents: avatar video, UGC talking head, talking-head ad, avatar_url, person_image_url, voice_id Do not use for job status (get_creative_status) or to edit/resize an existing asset (edit_image, resize_creative). Side effects: spends credits; creates an asset. Retry: reuse gpt_ad_gen_id if listed, else check get_creative_status (a resubmit is a new charge).

generate_image_ad

ChatGPT
Queue a new static image ad for the signed-in user's brand. Starts an async Creative Brief render and returns a `job_id quickly — it does **not** wait for the finished image. Host widget (preferred) This tool declares an MCP Apps progress/preview UI. When the host opens that widget, do **not** ask the user to "check back", and do **not** call get_generation_status in a loop — the widget polls and shows the image. Text-only hosts (no widget) Share the job_id, stop the turn, and on the user's follow-up call get_generation_status(job_id, kind="image") **once**. When the job is complete this returns the finished image **inline as an image** (plus a link) — just present it; do not describe it as a URL. Follow next_action. Do **not** poll in the same turn. When to use - Net-new product / lifestyle / campaign image ads - Redesigns or concept variants grounded in brand + product context - Not for editing an existing finished ad (use edit_image) and not for video (use generate_product_video) Required inputs (typical) - brand_id, brand_name, company_id, user_id — resolve via list_brands / get_brand_details / get_current_user - ad_concept — the full creative prompt (product, offer, visual direction, copy cues). This is the prompt field; do not invent a separate prompt arg - gpt_ad_gen_id — unique job key: <short-slug>-<uuid4>. Never reuse across variants or retries Recommended optional inputs - aspect_ratio — one of 1:1 (default / feed), 4:5, 9:16 (Stories/Reels/TikTok), 16:9 - user_assets / product imagery when the brief needs a specific product shot - headline / subheadline / cta when the user already chose copy Agent flow (public connector) 1. Ask whether the ad is for a **specific product** or the **brand in general**. If product-specific, resolve via list_brand_products / get_product_details (or ask which product) and gather product imagery. If brand-general, use get_brand_details identity/assets and skip product selection. 2. Confirm aspect ratio(s) and ad goal with the user if missing. 3. Call this tool once per distinct creative concept (for multiple placements, generate once at a primary ratio, then resize_ad for each remaining ratio in one parallel tool round). 4. If a generation widget appears, briefly confirm the job is running and let the widget finish — do not narrate a manual status loop. 5. If no widget appears, share job_id and wait for the user to ask for status. This is a paid render: it deducts **5 credits** when the job is submitted. If the account is short on credits the tool returns a credit_insufficient` result and does not start the render — relay that to the user and do not retry until they top up. Confirm intent before calling. Intent keywords image ad, static ad, paid-media creative, Meta ad creative, Facebook ad, Instagram ad, Google image ad, TikTok static, catalogue creative, product shot

generate_product_video

ChatGPT
Queue a multi-scene product video commercial for the signed-in brand. Starts an async Creative Brief multi-scene render and returns a `job_id quickly — it does **not** wait for the finished clip (typical wall clock 3–7 minutes). Host widget (preferred) This tool declares an MCP Apps progress/preview UI. When the host opens that widget, do **not** ask the user to "check back", and do **not** call get_generation_status in a loop — the widget polls and shows the video (or an open link if in-iframe playback is blocked). Text-only hosts (no widget) Share the job_id, stop the turn, and on the user's follow-up call get_generation_status(job_id, kind="video") **once**. Deliver assets.url / assets.video_url when complete. Follow next_action. Do **not** poll in the same turn. When to use - Short product commercials / multi-beat narrative videos - After fetch_product_video_narratives when a narrative has been selected - Prefer this over single-shot product motion when the story needs multiple scenes or is longer than ~8 seconds Prerequisites 1. Product name + 1–3 product image URLs 2. A chosen narrative (from fetch_product_video_narratives) including narrative / script / segments / music_direction / hook_strategy as required by the tool schema 3. brand_id, company_id, and a fresh job_id (<slug>-<uuid4>) Orientation Derive from the brief's aspect ratio: - 9:16 → portrait - 16:9 → landscape - 1:1 → square Agent flow (public connector) 1. Confirm product vs brand-general intent; for brand-general creatives use generate_image_ad instead. Gather product + images; confirm aspect / duration / creative prompt. 2. fetch_product_video_narratives → present options → wait for selection. 3. Call this tool with the selected narrative + imagery + orientation. 4. If a generation widget appears, briefly confirm the job is running and let the widget finish — do not narrate a manual status loop. 5. If no widget appears, share job_id and wait for the user to ask for status; then get_generation_status **once** and follow next_action. This is a paid render: it deducts **30 credits** when the job is submitted. If the account is short on credits the tool returns a credit_insufficient` result and does not start the render — relay that to the user and do not retry until they top up. Intent keywords product video, multi-scene commercial, TikTok video ad, Reels video, paid-media video

generate_professional_video_ad

ChatGPT
Use this when: Queue a short or long commercial video. Optionally quote it with get_account (target_duration; omit for the 10-second default) and pass items[].expected_credits back when quoted and listed. Returns job_id. No progress widget — poll get_creative_status with that job_id and kind=video. Optional stock avatar_id when someone is on screen. A short balance returns credit_insufficient and nothing starts. Credits are charged when the job starts. Intents: professional video ad, short commercial, long commercial, commercial video, job_id Do not use for job status (get_creative_status) or to edit/resize an existing asset (edit_image, resize_creative). Side effects: spends credits; creates an asset. Retry: reuse gpt_ad_gen_id if listed, else check get_creative_status (a resubmit is a new charge).

get_account

ChatGPT
Use this when the user asks who they are signed in as, which company or subscription they have, how many credits are left, whether a card is on file, or where credits went. Read-only: returns the user, company, plan, credit balance and a payment-method summary (card brand, last four digits and expiry only, never the full card number). It cannot charge, buy or change anything. Set include_credit_history=true only when the user asks where credits went (example: history_days 30). Intents: my account, credits left, credit balance, subscription, payment method, credit history, who am I Do not use to buy credits or change plans (tell the user to do that on omneky.com), or for ad spend (get_performance_summary). Side effects: none. Retry: safe. Errors: a section marked status=error is unavailable; answer from the rest.

get_ad_custom_properties

ChatGPT
Custom conversion / property definitions available on the brand for launch or reporting. Intents: custom conversions, conversion events, pixel events

get_ad_groups

ChatGPT
List ad sets / ad groups under a campaign (targeting, budget, status). Typically scoped with `campaign_id (and ad_group_ids when known). An unscoped brand-wide list may return status=timeout`. Intents: ad sets, ad groups, Meta ad set, Facebook ad set, campaign structure

get_ads

ChatGPT
List ads in an ad set (creative, status, destination). Intents: ads, creatives in flight, Meta ads, Facebook ads, ad objects

get_billing_summary

ChatGPT
Company plan, Stripe customer/subscription flags, and prepaid credit snapshot for the signed-in account. Account-level — not brand ROAS or campaign spend. Does not start a plan change or open the Customer Portal. When to use - User asks which plan they are on, whether billing is set up, or remaining credits before a plan change When not to use - Not paid-media performance - Not a live Stripe price catalog (this tool has no dollar amounts) Intent keywords plan, subscription, billing, Stripe, account owner

get_brand

ChatGPT
Fetch one Omneky brand record by id (name, company, basic fields). Intents: brand record, brand_id, advertiser

get_brand_details

ChatGPT
Fetch brand identity used for ads: logo, colors, copy, company_id, and creative assets. Intents: brand book, logo, colors, brand assets, company_id

get_campaign_ad_group_names

ChatGPT
Name lookup for campaigns and ad groups — useful when matching user language to ids. Intents: campaign names, ad set names, name lookup

get_campaigns

ChatGPT
List paid-media campaigns for a brand and channel (Meta/Facebook, Google, TikTok, LinkedIn, Reddit, OpenAI Ads, X Ads via `channel='twitter'): ids, status, budget. Pinterest has get_pinterest_campaigns`. Intents: campaigns, Meta campaigns, Facebook campaigns, Google campaigns, TikTok, LinkedIn, Reddit, OpenAI Ads, X Ads, Twitter ads, Pinterest

get_channel_budget

ChatGPT
Current budget / spend snapshot for a paid-media channel on the brand. Intents: budget, spend, channel budget, media spend, Meta, Google, TikTok

get_channel_connect_url

ChatGPT
OAuth / self-connect URL for an ad channel (facebook, google, linkedin, tiktok, reddit, twitter, pinterest). Wire name for X Ads is `twitter, never x. After the user finishes consent, list_authorized_ad_accounts then link_ad_channel_account`. Intents: connect Pinterest, connect X Ads, connect Twitter, OAuth URL, ad account link, self-connect

get_channel_connection_status

ChatGPT
Whether the brand's Meta/Facebook, Google, TikTok, LinkedIn, Reddit, Pinterest, X Ads (`twitter), or OpenAI Ads account is connected and launchable. Pass channel="openai" for OpenAI Ads. When Meta or OpenAI is not connected, use the matching launch_omneky_managed_*` tool. Intents: ad account connected, Meta Business, Google Ads link, TikTok ads manager, LinkedIn Campaign Manager, Reddit ads, Pinterest ads, X Ads, Twitter ads, OpenAI Ads

get_checkout_session_status

ChatGPT
Poll a Stripe Checkout session from a plan-upgrade Checkout URL. Does not start a new charge. Intents: checkout status, session_id, Stripe paid, payment complete

get_company

ChatGPT
Signed-in company's identity and subscription fields (name, plan type, Stripe customer/subscription flags). Does not include the prepaid credit snapshot. Intents: company, subscription type, account, Stripe customer

get_creative_status

ChatGPT
Use this when the user asks whether an image or video job is ready, or you need a finished job's asset URLs, and you have its job_id. One call per ask; it never starts a render. When this poll sees the job finish or fail, it settles that job's credit charge (marks it completed or failed) once, so it is a write, not a pure read. Example: job_id "img_8f2c", kind "auto". Intents: is my video ready, is my image done, job status, render progress Do not use to start a render (generate_image_ad and the video tools). Side effects: settles credits once when the job completes; later polls do not charge again. Retry: safe. Errors: not_found → the job_id is wrong or from another account; ask the user.

get_credit_history

ChatGPT
Recent company credit grants and usage as JSON rows (capped at 200). Wraps the Nexus credit-history CSV export. Does not return the current balance snapshot and does not change the plan. Intents: credit history, credit usage, grants, ledger

get_current_user

ChatGPT
Return the signed-in Omneky user's identity from the session JWT (`user_id, email, company). The server already sets user_id and company_id` on brand-scoped calls — do not pass them. Intents: user id, signed-in user, session identity, omneky account

get_daily_metrics

ChatGPT
Return a day-by-day paid-media series for one brand: daily spend, impressions, clicks, CTR, conversions, ROAS, and related metrics. Required: `date_range as two inclusive YYYY-MM-DD dates [start, end] (example ["2026-09-01", "2026-09-30"]). Pass brand_id from list_brands (call list_brands when the brand is unknown). The server sets user_id from the signed-in session. Pass filters as [] when not filtering. There is no metrics argument. Keep the requested window inside check_reporting_data_available coverage — empty days outside that coverage are missing data, not zero. selected_conversion_metric_value is the brand's configured goal and varies per channel. Totals across channels mix incompatible goals; group by channel or use a named metric (purchases, clicks, …). There is no run_sql_query` or score / lift endpoint on this surface. Intents: what's my ROAS, daily spend, how did ads perform, ROAS, CTR, CPA, CPC, CPM, spend, impressions, clicks, conversions, daily metrics, time series, paid media performance, Meta, Facebook, Google Ads, TikTok, LinkedIn, Reddit, OpenAI Ads

get_generation_status

ChatGPT
Use when the user asks whether an existing image or video job is ready and you already have `job_id. Pass kind image or video when you know which; auto probes both and can briefly return not_found before a video row exists. Call once per ask. Does not start a render. Returns status, assets when complete, and next_action`. Intents: job status, is my video ready, is my image ready, creative job_id, render status

get_google_drive_connect_url

ChatGPT
Google Drive OAuth URL for the brand. The user opens it in the browser; this tool does not exchange the callback code. Intents: connect Google Drive, Drive OAuth, brand assets

get_google_drive_connection_status

ChatGPT
Whether the brand has connected Google Drive (no tokens). Intents: Google Drive connected, brand assets, Drive OAuth

get_gsc_connection_status

ChatGPT
Whether the brand has a connected Google Search Console account (email / connected_at only — never OAuth tokens). No connect or disconnect tool on this surface (Nexus has no GSC auth-url in V1). Also included in `list_connector_statuses`. Intents: GSC connected, Google Search Console, Search Console connection

get_hubspot_connection_status

ChatGPT
Whether the brand has a connected HubSpot portal (hub / portal id only — never OAuth tokens). No connect or disconnect tool exists on this surface. Intents: HubSpot connected, HubSpot portal, CRM connection

get_keyword_insights

ChatGPT
Use this when the user asks which keywords a domain ranks for (pass domain) or one keyword's volume and difficulty (pass keyword, example "hiking sandals"). Intents: keywords we rank for, keyword volume, keyword difficulty Do not use for a domain's overall SEO standing (get_seo_domain_overview). Side effects: none. Retry: safe. Errors: not connected → list_connections, then get_connect_link.

get_launch_requirements

ChatGPT
Use this when the user asks for a channel's minimum budget, or a launch needs custom conversion events or properties. Example: channel "tiktok", objective "traffic". include: minimum_budget (default), custom_properties. Intents: minimum budget, custom conversions, pixel events, launch requirements Do not use as a routine step before every launch (launch tools state their own limits), to launch (launch_*_ad), or for audience size (estimate_reach). Side effects: none. Retry: safe. Errors: channel_not_connected → call get_connect_link for that channel; brand_required → call list_brands and retry with brand_id.

get_managed_launch_payment_status

ChatGPT
Peek at prepaid payment / Stripe session status after an Omneky-managed Meta or OpenAI launch returned `status=payment_required with a checkout_url / session_id`. Does not launch the campaign and does not start a new charge. Not a plan-upgrade Checkout session. Intents: managed launch payment, Stripe checkout, prepaid media, payment_required, session_id

get_marketing_plan

ChatGPT
Fetch a shared-service marketing plan: version, analysis, and step status. Each step is `{tool, arguments, depends_on, status}. tool is a public tools/list name. Read-only. Not the CGP chat-agent get_marketing_plan`. Intents: get marketing plan, plan_version, plan steps, step status

get_marketing_plan_run

ChatGPT
Poll a leftover marketing-plan run by `run_id (started outside this surface). Status: queued → running → succeeded / failed / cancelled / paused. Unrun steps show pending. Host-run progress lives on get_marketing_plan`. Intents: marketing plan run, run_id, poll run, plan progress, pending

get_openai_ads_connection_status

ChatGPT
Whether the brand has a connected OpenAI Ads account (account name / last-four only — never the API key). To connect, call `connect_openai_ads. If unconnected, launch with launch_omneky_managed_openai_ad; if connected, use launch_openai_clicks_ad / launch_openai_impressions_ad`. Intents: OpenAI Ads connected, API key last four, ChatGPT ads

get_payment_method_summary

ChatGPT
Card on file for the company (brand, last4, expiry only — never the PAN). Does not collect a new card number. Intents: card on file, last4, payment method, Stripe

get_performance_breakdown

ChatGPT
Ranked paid-media breakdown by a dimension — creative, campaign, ad set, ad, channel, or similar — with spend, ROAS, CTR, and conversions. Use for 'which ads/campaigns are winning'. `date_range is two inclusive YYYY-MM-DD dates, [start, end]. Pass filters as [] when not filtering. selected_conversion_metric_value is the brand's configured goal and varies per channel. Totals across channels mix incompatible goals; group by channel or use a named metric (purchases, clicks, …). There is no run_sql_query` or score / lift endpoint on this surface. Intents: which ads should I make more of, winning ads, best creatives, ROAS, CTR, spend, creative breakdown, campaign performance, channel mix, Meta ads, Facebook ads, Google Ads, TikTok ads, LinkedIn ads, Reddit ads, paid media

get_performance_movers

ChatGPT
What rose or fell versus the prior period for a brand's paid-media metrics (spend, ROAS, CTR, conversions, and similar). Pass `end_date (YYYY-MM-DD) and period_days (default 7). Do not send date_range. selected_conversion_metric_value is the brand's configured goal and varies per channel. Totals across channels mix incompatible goals; group by channel or use a named metric (purchases, clicks, …). There is no run_sql_query` or score / lift endpoint on this surface. Intents: trending, period-over-period, ROAS change, CTR change, paid media winners, Meta, Facebook, Google, TikTok

get_performance_summary

ChatGPT
Use this when the user asks how their ads did overall or over time: totals and a daily series of spend, ROAS, CTR and conversions, optionally filtered by channel or campaign. Dates are optional: without them it covers the last 30 full days (ending yesterday, UTC). Set include_coverage=true when results are empty or the user asks whether data exists. Intents: how did my ads do, spend last 30 days, ROAS trend, daily metrics, do we have data Do not use to rank campaigns, ads or creatives (get_performance_breakdown), for change versus the prior period (get_performance_movers), or to list what is running (list_live_ads). Side effects: none. Retry: safe. Errors: empty result → retry once with include_coverage=true; brand_required → call list_brands and retry with brand_id.

get_pinterest_ad_groups

ChatGPT
List Pinterest ad groups. Prefer `campaign_id. Same as get_ad_groups(channel='pinterest')`. Intents: Pinterest ad groups, Pinterest ad sets, Pins

get_pinterest_ads

ChatGPT
List Pinterest ads (promoted Pins). Same as `get_ads(channel='pinterest')`. Intents: Pinterest ads, promoted Pins, Pin ads

get_pinterest_campaigns

ChatGPT
List Pinterest campaigns for a brand. Same as `get_campaigns(channel='pinterest')`. Intents: Pinterest campaigns, Pins, paid social

get_pinterest_connection_status

ChatGPT
Whether the brand has a connected Pinterest ad account. Same check as `get_channel_connection_status(channel='pinterest')`. Intents: Pinterest connected, Pinterest ads account, Pins

get_posthog_connection_status

ChatGPT
Whether the brand has a connected PostHog project (host / project_id only — never API keys). To connect, call `connect_posthog`. Intents: PostHog connected, PostHog project, product analytics

get_product_details

ChatGPT
Full catalogue record for one product: name, description, images, and URL. Ground a product-specific ad or video in this data. Intents: product details, product images, catalogue item, SKU

get_products

ChatGPT
Use this when the user asks to see their product catalogue or one product's details. Omit product_id to list; pass product_id (example: "17") for one product. Intents: my products, product list, catalogue, product details Do not use before launching or generating: a product URL, name or image already in the chat is enough, so this lookup is not needed. Not for adding products (create_product / import_product_from_url) or changing them (update_product). Side effects: none. Retry: safe. Errors: brand_required → call list_brands and retry with brand_id.

get_recommendations

ChatGPT
AI creative / media recommendations for a brand based on recent paid-media performance. Requires `brand_id. start_date and end_date are inclusive YYYY-MM-DD; omit both for the last 30 days. A longer window is capped at 30 days. May return status=timeout`; narrow the dates and do not retry the same call in one turn. Intents: which ads should I make more of, scale winners, recommendations, creative advice, paid media insights

get_semrush_connection_status

ChatGPT
Whether the brand has a connected Semrush account (last-four only — never the API key). Call this directly; Semrush is not in `list_connector_statuses`. No connect or disconnect tool on this surface. Intents: Semrush connected, Semrush API, SEO connection

get_semrush_domain_overview

ChatGPT
Live Semrush Domain Overview for one hostname and regional database (default `us`). Nexus enforces daily unit quotas (HTTP 429 = cap / units exhausted). Intents: Semrush domain overview, SEO rank, organic traffic

get_semrush_keyword_overview

ChatGPT
Live Semrush Keyword Overview (volume, CPC, competition, intent). Unit quotas enforced by Nexus (HTTP 429 / 503). Intents: Semrush keyword, search volume, CPC, search intent

get_seo_domain_overview

ChatGPT
Use this when the user asks about a domain's SEO standing: domain rating, backlinks or organic traffic. Uses whichever of Ahrefs and Semrush is connected. Example: domain "northline.example". Intents: domain rating, DR, backlinks, organic traffic, SEO overview Do not use for keyword data (get_keyword_insights). Side effects: none. Retry: safe. Errors: every provider failed → list_connections, then get_connect_link.

get_tiktok_location_ids

ChatGPT
Resolve TikTok location ids required on TikTok ad-group targeting. Pass required `campaign_objective (examples: TRAFFIC, CONVERSIONS, VIDEO_VIEWS; LEADS` before a leads launch). TikTok launches need this pre-call or the API returns 400. Intents: TikTok locations, TikTok geo, TikTok targeting, location_ids

get_video_metadata

ChatGPT
Probe duration of a brand-library video before cloning. Pass video_url from list_ad_instance_items only. Returns duration, rounded_duration_seconds, and clone_video_allowed (true when rounded duration is 4-30s). Does not deduct. Central checks media-ref ownership. Intents: video duration, clone_video_allowed, 4-30s, get_video_metadata

gsc_list_sites

ChatGPT
List Google Search Console properties for the brand via Nexus (URL-prefix or `sc-domain:). Use a site_url from this list with gsc_query_analytics`. Skips when GSC is disconnected. Intents: GSC sites, Search Console properties, sc-domain, site_url

gsc_query_analytics

ChatGPT
Live Google Search Console Search Analytics (impressions, clicks, CTR, average position). Pass `site_url from gsc_list_sites. Default dimension is query`. Organic search — not paid-media Insights. Intents: Google Search Console, GSC analytics, organic search, impressions, clicks, CTR, average position

health_check

ChatGPT
Confirm this Omneky MCP connector is reachable. Returns ok status, server identity, and code_version_id (deploy fingerprint, same as GET /status). Not a source of advertising data. Not for application deployment or DNS records. Intents: omneky health, connector status, ping, reachability

hubspot_get_company

ChatGPT
Fetch one HubSpot company by id after `hubspot_search_companies`. Intents: HubSpot company, CRM account record

hubspot_get_contact

ChatGPT
Fetch one HubSpot contact by id after `hubspot_search_contacts`. Intents: HubSpot contact, CRM record

hubspot_get_deal

ChatGPT
Fetch one HubSpot deal by id after `hubspot_search_deals`. Intents: HubSpot deal, CRM deal record

hubspot_search_companies

ChatGPT
Search HubSpot companies for the brand via Nexus (live CRM). Default page size 10, cap 100. Intents: HubSpot companies, CRM accounts, domain lookup

hubspot_search_contacts

ChatGPT
Search HubSpot contacts for the brand via Nexus (live CRM). Default page size 10, cap 100. Skips when the portal is disconnected. Intents: HubSpot contacts, CRM people, email lookup

hubspot_search_deals

ChatGPT
Search HubSpot deals for the brand via Nexus (live CRM). Default page size 10, cap 100. Intents: HubSpot deals, CRM pipeline, deal stage

identify_product_from_url

ChatGPT
Use when the user pastes a product URL or PDP to import into the catalogue before making an ad. Classifies a single product page versus a listing or category. `is_single_product false means do not scrape; ask for one product URL. true or null may proceed to scrape_product_from_url`. Intents: import this URL, paste product URL, add product from link, turn this product URL into, product URL, PDP, scrape check, catalogue import

import_product_from_url

ChatGPT
Use this when the user gives a product page URL and wants that product in the catalogue. Call with the url (example: "https://northline.example/sandals"): it checks the page is a single product (status=not_a_product_page for a listing or category page: ask for one product URL), then scrapes name, description and images into an unsaved draft (its product_id is the draft_id). Show it, then save it with save_imported_product. Intents: import this product page, add product from link, scrape my product Do not use to save the draft (save_imported_product), for typed details with no URL (create_product), or to change a saved product (update_product). Side effects: creates an unsaved draft only; nothing is added to the catalogue. Retry: safe (a new draft). Errors: a scrape failure → ask the user for the details and use create_product.

launch_facebook_awareness_ad

ChatGPT
Create a live paid Meta / Facebook / Instagram brand-awareness / reach campaign that spends budget for the signed-in brand. Writes Campaign → Ad Set (ad_group) → Ad on the connected Meta/Facebook account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec`. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Intents: Meta awareness, Facebook reach, brand awareness, impressions, paid media

launch_facebook_leads_ad

ChatGPT
Create a live paid Meta / Facebook / Instagram lead-generation campaign that spends budget for the signed-in brand. Writes Campaign → Ad Set (ad_group) → Ad on the connected Meta/Facebook account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Set lead_gen_form_id` on ad specs for native Meta lead forms. Intents: Meta lead ads, Facebook lead form, Instagram leads, lead gen, paid media

launch_facebook_sales_ad

ChatGPT
Create a live paid Meta / Facebook / Instagram sales / conversions (purchases, ROAS) campaign that spends budget for the signed-in brand. Writes Campaign → Ad Set (ad_group) → Ad on the connected Meta/Facebook account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec`. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Intents: launch Meta sales ads, launch Facebook sales, Meta ads, Facebook ads, Instagram ads, sales, conversions, purchases, ROAS, catalogue sales, Advantage+, paid media

launch_facebook_traffic_ad

ChatGPT
Create a live paid Meta / Facebook / Instagram traffic / landing-page clicks campaign that spends budget for the signed-in brand. Writes Campaign → Ad Set (ad_group) → Ad on the connected Meta/Facebook account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec`. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Intents: Meta traffic, Facebook clicks, landing page, link clicks, paid media

launch_facebook_video_views_ad

ChatGPT
Create a live paid Meta / Facebook / Instagram video-views / ThruPlay campaign that spends budget for the signed-in brand. Writes Campaign → Ad Set (ad_group) → Ad on the connected Meta/Facebook account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec`. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Intents: Meta video views, Facebook ThruPlay, Instagram Reels ads, video views

launch_google_ad

ChatGPT
Use this when the user wants to launch paid Google Ads ads for the signed-in brand: creates the campaign, ad set (ad_group) and ad, or adds to an existing campaign / ad set via `campaign_spec.id / ad_group_spec.id. Pick objective (performance_max, demand_gen). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. performance_max (PMax / Shopping) needs ad_group_spec.link_url, 3+ headlines, 2+ descriptions, square_marketing_images and logo_image. demand_gen (YouTube / Discover / Gmail) needs ad_group_spec.targeting_fragments from search_targeting`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'performance_max' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: Google Ads, Performance Max, PMax, Demand Gen, YouTube ads Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.

launch_google_demand_gen_ad

ChatGPT
Create a live paid Google Ads Demand Gen (YouTube / Gmail / Discover) campaign that spends budget for the signed-in brand. Writes Campaign → Ad Set (ad_group) → Ad on the connected Google account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Resolve countries with search_google_countries and pass adset_spec_fragment values as targeting_fragments. New campaigns need campaign_name (mapped from name) and budget_amount (mapped from daily_budget). New ad groups need ad_group_name (mapped from name; reuse accepts ad_group_id). Each ad needs business_name and logo_image_url`. Intents: Google Demand Gen, YouTube ads, Discover, Gmail ads, Google Ads, paid media

launch_google_performance_max_ad

ChatGPT
Create a live paid Google Ads Performance Max (PMax / Shopping+) campaign that spends budget for the signed-in brand. Writes Campaign → Ad Set (ad_group) → Ad on the connected Google account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Creates a live paid Google Performance Max campaign that spends the campaign budget. Asset group needs at least 3 headlines and 2 descriptions. square_marketing_images and logo_image` are required and must be supplied separately — do not reuse the landscape ad image as the logo or the square image. Intents: Google Ads, Performance Max, PMax, Shopping, Google conversions, YouTube, Search, Display, paid media

launch_linkedin_ad

ChatGPT
Use this when the user wants to launch paid LinkedIn ads for the signed-in brand: creates the campaign, ad set (ad_group) and ad, or adds to an existing campaign / ad set via `campaign_spec.id / ad_group_spec.id. Pick objective (brand_awareness, website_visits, engagement, conversions). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. start_date is required when creating a new campaign group. Location targeting from search_targeting must include a urn:li:adTargetingFacet:locations entry or the API returns 400. Targeting goes in ad_group_spec.targeting_criteria`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'brand_awareness' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: LinkedIn ads, B2B ads, sponsored content Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.

launch_linkedin_brand_awareness_ad

ChatGPT
Launch a LinkedIn paid-media brand-awareness ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected LinkedIn account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. start_date is required when creating a new campaign group. Location targeting from search_ad_targeting must include a urn:li:adTargetingFacet:locations entry or the API returns 400. When to use - User wants LinkedIn brand-awareness or B2B reach ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords LinkedIn ads, B2B awareness, LinkedIn Campaign Manager, paid media

launch_linkedin_conversions_ad

ChatGPT
Launch a LinkedIn paid-media conversions / ROAS-style ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected LinkedIn account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. start_date is required when creating a new campaign group. Location targeting from search_ad_targeting must include a urn:li:adTargetingFacet:locations entry or the API returns 400. When to use - User wants LinkedIn conversion or lead-to-revenue campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords LinkedIn conversions, B2B ROAS, LinkedIn ads, paid media

launch_linkedin_engagement_ad

ChatGPT
Launch a LinkedIn paid-media engagement (reactions, comments, followers) ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected LinkedIn account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. start_date is required when creating a new campaign group. Location targeting from search_ad_targeting must include a urn:li:adTargetingFacet:locations entry or the API returns 400. When to use - User wants LinkedIn engagement or thought-leadership ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords LinkedIn engagement, followers, social engagement, B2B ads

launch_linkedin_website_visits_ad

ChatGPT
Launch a LinkedIn paid-media website-visits / traffic ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected LinkedIn account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. start_date is required when creating a new campaign group. Location targeting from search_ad_targeting must include a urn:li:adTargetingFacet:locations entry or the API returns 400. When to use - User wants LinkedIn traffic / website-visit campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords LinkedIn traffic, website visits, B2B clicks, LinkedIn ads

launch_meta_ad

ChatGPT
Use this when the user wants to launch paid Meta (Facebook / Instagram) ads for the signed-in brand: creates the campaign, ad set (ad_group) and ad, or adds to an existing campaign / ad set via `campaign_spec.id / ad_group_spec.id. Pick objective (sales, leads, traffic, awareness, video_views). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. Set account='omneky_managed' when the brand has no connected Meta account: it runs on Omneky's prepaid ad account and page with an Omneky-hosted landing page (objectives traffic, video_views, awareness only; do not pass a landing-page URL). If the prepaid balance is short it returns status=payment_required and creates nothing; the user adds funds on omneky.com, then retry or check get_account. sales = purchases / ROAS; leads = lead forms (set lead_gen_form_id); traffic = link clicks; awareness = reach. Targeting goes in ad_group_spec.targeting`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'sales' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: Meta ads, Facebook ads, Instagram ads, launch campaign, paid social Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.

launch_openai_ad

ChatGPT
Use this when the user wants to launch paid OpenAI Ads (ads in ChatGPT) ads for the signed-in brand: creates the campaign, ad set (ad_group) and ad, or adds to an existing campaign / ad set via `campaign_spec.id / ad_group_spec.id. Pick objective (clicks, impressions). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. Set account='omneky_managed' when the brand has no connected OpenAI Ads account: it runs on Omneky's prepaid OpenAI Ads account with an Omneky-hosted landing page; pass the brand website as ad_specs[].destination_url. If the prepaid balance is short it returns status=payment_required and creates nothing; the user adds funds on omneky.com, then retry or check get_account. Geo targeting is optional — omit campaign_spec.targeting to reach all eligible locations. To restrict geography, call search_targeting and paste a result's campaign_spec_fragment into campaign_spec.targeting. New campaigns reject a daily budget below $25. Image chat_card only. Title 3–50 characters; body ≤100; destination_url required. New ad groups need max_bid_dollars`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'clicks' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: OpenAI Ads, ChatGPT ads, chat_card, sponsored answers Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.

launch_openai_impressions_ad

ChatGPT
Create a live paid OpenAI Ads / ChatGPT ads impressions (bidding_type=impressions / chat_card image) campaign that spends budget for the signed-in brand. Writes Campaign → Ad Set (ad_group) → Ad on the connected OpenAI Ads account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused; paused still creates the live paid entities and they spend once enabled. Not for application deployment or DNS records. Geo targeting is optional — omit campaign_spec.targeting to reach all eligible locations. To restrict geography, call openai_location_search and paste a result's campaign_spec_fragment into campaign_spec.targeting. New campaigns reject a daily budget below $25. Image chat_card only. Title 3–50 characters; body ≤100; destination_url required. New ad groups need max_bid_dollars`. Intents: OpenAI Ads, ChatGPT ads, impressions, chat_card, paid media

launch_pinterest_ad

ChatGPT
Use this when the user wants to launch paid Pinterest ads for the signed-in brand: creates the campaign, ad set (ad_group) and ad, or adds to an existing campaign / ad set via `campaign_spec.id / ad_group_spec.id. Pick objective (awareness, traffic, sales, leads, video_views). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. Pin title max 100 characters. Targeting goes in ad_group_spec.targeting`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'awareness' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: Pinterest ads, promoted pins, shopping pins Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.

launch_pinterest_awareness_ad

ChatGPT
Launch a Pinterest paid-media brand-awareness / Pin impressions ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected Pinterest account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. Check get_pinterest_connection_status (same as get_channel_connection_status(channel='pinterest')) before launch. List entities with get_pinterest_campaigns / get_pinterest_ad_groups / get_pinterest_ads. When to use - User wants Pinterest awareness or reach campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Pinterest ads, Pinterest awareness, Pins, paid social

launch_pinterest_leads_ad

ChatGPT
Launch a Pinterest paid-media lead-generation ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected Pinterest account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. Check get_pinterest_connection_status (same as get_channel_connection_status(channel='pinterest')) before launch. List entities with get_pinterest_campaigns / get_pinterest_ad_groups / get_pinterest_ads. When to use - User wants Pinterest lead-generation ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Pinterest ads, Pinterest leads, lead gen, paid social

launch_pinterest_sales_ad

ChatGPT
Launch a Pinterest paid-media sales / conversions ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected Pinterest account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. Check get_pinterest_connection_status (same as get_channel_connection_status(channel='pinterest')) before launch. List entities with get_pinterest_campaigns / get_pinterest_ad_groups / get_pinterest_ads. When to use - User wants Pinterest conversion or shopping-style sales ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Pinterest ads, Pinterest sales, Pinterest conversions, ROAS, paid social

launch_pinterest_traffic_ad

ChatGPT
Launch a Pinterest paid-media consideration / traffic ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected Pinterest account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. Check get_pinterest_connection_status (same as get_channel_connection_status(channel='pinterest')) before launch. List entities with get_pinterest_campaigns / get_pinterest_ad_groups / get_pinterest_ads. When to use - User wants Pinterest traffic or consideration ads to a site When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Pinterest ads, Pinterest traffic, Pin clicks, paid social

launch_pinterest_video_views_ad

ChatGPT
Launch a Pinterest paid-media video-completion / video-views ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected Pinterest account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. Check get_pinterest_connection_status (same as get_channel_connection_status(channel='pinterest')) before launch. List entities with get_pinterest_campaigns / get_pinterest_ad_groups / get_pinterest_ads. When to use - User wants Pinterest video-view or video-completion campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Pinterest ads, Pinterest video, video views, paid social

launch_reddit_ad

ChatGPT
Use this when the user wants to launch paid Reddit ads for the signed-in brand: creates the campaign, ad set (ad_group) and ad, or adds to an existing campaign / ad set via `campaign_spec.id / ad_group_spec.id. Pick objective (awareness, traffic, conversions, leads, video_views). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. Reddit bid_value is microcurrency (dollars × 1,000,000); $5/day is 5000000. Communities, interests and geolocations go in ad_group_spec.targeting`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'awareness' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: Reddit ads, subreddit targeting, community ads Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.

launch_reddit_awareness_ad

ChatGPT
Launch a Reddit paid-media awareness / reach ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected Reddit account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. Reddit bid_value is microcurrency (dollars × 1,000,000); $5/day is 5000000. When to use - User wants Reddit awareness or community-reach ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Reddit ads, Reddit awareness, community ads, paid media

launch_reddit_conversions_ad

ChatGPT
Launch a Reddit paid-media conversions ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected Reddit account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. Reddit bid_value is microcurrency (dollars × 1,000,000); $5/day is 5000000. When to use - User wants Reddit conversion campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Reddit conversions, Reddit ads, ROAS, paid media

launch_reddit_leads_ad

ChatGPT
Launch a Reddit paid-media lead-generation ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected Reddit account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. Reddit bid_value is microcurrency (dollars × 1,000,000); $5/day is 5000000. When to use - User wants Reddit lead-gen ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Reddit leads, Reddit lead gen, Reddit ads

launch_reddit_traffic_ad

ChatGPT
Launch a Reddit paid-media traffic / clicks ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected Reddit account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. Reddit bid_value is microcurrency (dollars × 1,000,000); $5/day is 5000000. When to use - User wants Reddit traffic ads to a landing page When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Reddit traffic, Reddit clicks, Reddit ads

launch_reddit_video_views_ad

ChatGPT
Launch a Reddit paid-media video-views ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected Reddit account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. Reddit bid_value is microcurrency (dollars × 1,000,000); $5/day is 5000000. When to use - User wants Reddit video-view campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords Reddit video views, Reddit video ads

launch_tiktok_ad

ChatGPT
Use this when the user wants to launch paid TikTok ads for the signed-in brand: creates the campaign, ad set (ad_group) and ad, or adds to an existing campaign / ad set via `campaign_spec.id / ad_group_spec.id. Pick objective (traffic, conversions, leads, video_views). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. ad_group_spec.location_ids is required: get them from search_targeting first or TikTok returns 400. ad_group_spec.name maps to adgroup_name`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'traffic' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: TikTok ads, launch TikTok campaign, short video ads Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.

launch_tiktok_conversions_ad

ChatGPT
Launch a TikTok paid-media conversions / ROAS ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected TikTok account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. get_tiktok_location_ids is required before launch or the API returns 400. New launches typically start PAUSED/disabled. When to use - User wants TikTok conversion or shopping-style paid ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords TikTok conversions, TikTok ROAS, TikTok Shop ads, paid media

launch_tiktok_leads_ad

ChatGPT
Launch a TikTok paid-media lead-generation ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected TikTok account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. get_tiktok_location_ids is required before launch or the API returns 400. New launches typically start PAUSED/disabled. When to use - User wants TikTok lead-generation ads When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords TikTok leads, TikTok instant form, TikTok ads

launch_tiktok_traffic_ad

ChatGPT
Launch a TikTok paid-media traffic / clicks ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected TikTok account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. get_tiktok_location_ids is required before launch or the API returns 400. New launches typically start PAUSED/disabled. When to use - User wants TikTok traffic ads (location ids via get_tiktok_location_ids first) When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords TikTok ads, TikTok traffic, TikTok clicks, paid social

launch_tiktok_video_views_ad

ChatGPT
Launch a TikTok paid-media video-views / ThruPlay-style ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected TikTok account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. get_tiktok_location_ids is required before launch or the API returns 400. New launches typically start PAUSED/disabled. When to use - User wants TikTok video-view campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords TikTok video views, TikTok In-Feed, TikTok ads

launch_twitter_awareness_ad

ChatGPT
Launch a X Ads / Twitter paid-media reach / awareness ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected X/Twitter account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. Wire name is twitter, never x. Check get_channel_connection_status(channel='twitter') (or get_channel_connect_url / link_ad_channel_account) first. Inspect existing entities with get_campaigns / get_ad_groups / get_ads using channel='twitter'. When to use - User wants X Ads or Twitter reach / awareness campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords X Ads, Twitter ads, X reach, Twitter awareness, paid social

launch_twitter_engagements_ad

ChatGPT
Launch a X Ads / Twitter paid-media engagements (likes, replies, retweets) ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected X/Twitter account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. Wire name is twitter, never x. Check get_channel_connection_status(channel='twitter') (or get_channel_connect_url / link_ad_channel_account) first. Inspect existing entities with get_campaigns / get_ad_groups / get_ads using channel='twitter'. When to use - User wants X Ads or Twitter engagement campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords X Ads, Twitter ads, engagements, likes, retweets, paid social

launch_twitter_followers_ad

ChatGPT
Launch a X Ads / Twitter paid-media followers / profile follows ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected X/Twitter account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. Wire name is twitter, never x. Check get_channel_connection_status(channel='twitter') (or get_channel_connect_url / link_ad_channel_account) first. Inspect existing entities with get_campaigns / get_ad_groups / get_ads using channel='twitter'. When to use - User wants X Ads or Twitter follower-growth campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords X Ads, Twitter ads, followers, profile follows, paid social

launch_twitter_traffic_ad

ChatGPT
Launch a X Ads / Twitter paid-media website clicks / traffic ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected X/Twitter account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. Wire name is twitter, never x. Check get_channel_connection_status(channel='twitter') (or get_channel_connect_url / link_ad_channel_account) first. Inspect existing entities with get_campaigns / get_ad_groups / get_ads using channel='twitter'. When to use - User wants X Ads or Twitter website-clicks campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords X Ads, Twitter ads, website clicks, Twitter traffic, paid social

launch_twitter_video_views_ad

ChatGPT
Launch a X Ads / Twitter paid-media video-views ad for the signed-in brand. Creates or extends Campaign → Ad Set (ad_group) → Ad on the connected X/Twitter account. Can start a new campaign or add to an existing campaign/ad set via `campaign_spec / ad_group_spec. New launches typically start paused. Wire name is twitter, never x. Check get_channel_connection_status(channel='twitter') (or get_channel_connect_url / link_ad_channel_account) first. Inspect existing entities with get_campaigns / get_ad_groups / get_ads using channel='twitter'. When to use - User wants X Ads or Twitter video-view campaigns When not to use - Not for reading ROAS, CTR, spend, or other performance (use get_performance_breakdown / get_daily_metrics / get_performance_movers) - Not for pausing, resuming, or changing budget/targeting on an existing entity (use set_ad_entity_status / set_ad_budget / update_ad_targeting) - Not for deleting a campaign, ad set, or ad (use delete_*`) - Not for application deployment, DNS records, hosting, or infrastructure administration Intent keywords X Ads, Twitter ads, video views, Twitter video, paid social

launch_x_ad

ChatGPT
Use this when the user wants to launch paid X (Twitter) ads for the signed-in brand: creates the campaign, ad set (ad_group) and ad, or adds to an existing campaign / ad set via `campaign_spec.id / ad_group_spec.id. Pick objective (awareness, traffic, engagements, followers, video_views). campaign_spec.status_on_launch decides whether the new campaign goes live (ACTIVE / ENABLED) or is created paused (PAUSED / DISABLED); set it from what the user asked. The server applies no default, so when it is omitted the ad network's own default applies. Spend is the budget you pass; state it and proceed. Check list_connections(channel='twitter') first. Targeting goes in ad_group_spec.targeting`. Not for drafts, creatives (generate_image_ad), reporting (get_performance_breakdown), or pausing / budget / targeting changes on live entities (set_ad_status, set_ad_budget, update_ad_targeting). Example: objective 'awareness' with campaign_spec, ad_group_spec and ad_specs[].media_url. On a channel_not_connected error call get_connect_link; on a 400 fix the field it names and retry once. A creative URL and product URL already in the chat are enough: no catalogue (get_products) or requirements lookup is needed unless an id is missing. Intents: X ads, Twitter ads, promoted posts, followers campaign Do not use for drafts, creatives, or reporting. Side effects: changes live ad accounts and can spend ad budget. Retry: not idempotent; check list_live_ads first.

list_ad_accounts

ChatGPT
Use this when after OAuth the user must choose which ad account (and Facebook page) the brand uses. Lists the ad accounts the connection can use (and Facebook pages on meta). Example: channel "meta". Intents: which ad accounts, list my ad accounts, Facebook pages Do not use to link the chosen account (link_ad_account) or to check connection status (list_connections). Side effects: none. Retry: safe. Errors: channel_not_connected → call get_connect_link for that channel; brand_required → call list_brands and retry with brand_id.

list_ad_instance_items

ChatGPT
Brand ad library page (video or image). Returns rows with video_url when a preview key exists and clone_video_allowed when that clip can be cloned. Use those video_url values only — not arbitrary public video links. Intents: ad library, select ad, video_url, brand ads, clone source

list_authorized_ad_accounts

ChatGPT
Ad accounts the user authorized on a channel after OAuth (no tokens). Then `link_ad_channel_account. Wire name for X Ads is twitter, never x`. Intents: authorized ad accounts, Pinterest accounts, Twitter ads accounts, X Ads

list_authorized_facebook_pages

ChatGPT
Facebook Pages the brand authorized (ids and names only — never tokens). Facebook ads need a page id on `link_ad_channel_account`. Intents: Facebook Pages, Meta Page, page id, link Facebook

list_avatar_filters

ChatGPT
Valid filter values for search_avatars (avatar type, gender, age group, ethnicity, clothing style). Same options for every brand. Intents: avatar filters, gender, age group, ethnicity, clothing style

list_brand_products

ChatGPT
Use when the user asks to list products, show the catalogue, or pick a product before a branded image ad or product video ad. Returns name, id, and thumbnails when `brand_id` is numeric. Intents: list my products, show products, what products do I have, product catalogue, SKUs, product list, catalog, merchandise

list_brands

ChatGPT
Use when the signed-in user needs to pick an advertising brand before a branded ad, product video, catalogue list, or performance question and `brand_id` is not already chosen. Returns id, name, and company. Stick to the chosen brand afterwards. Intents: brands, advertiser accounts, brand_id, omneky brands

list_connections

ChatGPT
Use this when the user asks what is connected, or whether one ad channel or data source is connected and usable. Omit connector for all; pass one for a single check (example: connector "tiktok"). Also returns linked ad account ids. Intents: is Meta connected, what's connected, connection status, which ad accounts, is HubSpot connected Do not use to connect something (get_connect_link) or to choose an ad account (link_ad_account). Side effects: none. Retry: safe. Errors: brand_required → call list_brands and retry with brand_id.

list_connector_statuses

ChatGPT
Connection status for ad channels (including Pinterest and `twitter) plus HubSpot, Ahrefs, GSC, OpenAI Ads, PostHog, Google Drive, and other OTB connectors. Never returns tokens. Semrush is not in this fanout — call get_semrush_connection_status` directly. Intents: connector status, Pinterest connected, X Ads, HubSpot, Ahrefs, Semrush, GSC, PostHog, Google Drive, OpenAI Ads

list_creatives

ChatGPT
Use this when the user wants their saved creatives or ad library: generated images and videos they can launch, edit or clone. Intents: my creatives, ad library, saved ads, my generated images and videos Do not use for ads running on a channel (list_live_ads) or performance (get_performance_breakdown). Side effects: none. Retry: safe. Errors: brand_required → call list_brands and retry with brand_id.

list_live_ads

ChatGPT
Use this when the user wants to see what is running on an ad channel: campaigns, ad groups or ad sets, or ads, with status and budget, or to find an id by name. level campaign (default), ad_group (parent_id = campaign id) or ad (parent_id = ad group id); set name_query to search by name. Example: channel "meta", level "campaign". Intents: my campaigns, live ads, ad sets, what's running, campaign budget, find campaign id Do not use for metrics (get_performance_breakdown) or the saved creative library (list_creatives). Side effects: none. Retry: safe. Errors: channel_not_connected → call get_connect_link for that channel; brand_required → call list_brands and retry with brand_id.

list_voices

ChatGPT
Stock and cloned voices for a brand. Pass a result voice_id to generate_avatar_video_ad. After clone_voice, the new voice appears under cloned_voices — verify it there before saying it speaks in that voice. Voice cloning is an intentional exception. Intents: voices, voice_id, cloned_voices, avatar voice

minimum_budget_for_objective

ChatGPT
Channel-specific minimum daily/lifetime budget for an objective (sales, traffic, awareness, leads, …). Intents: minimum budget, floor, Meta budget, Google budget, TikTok budget

plan_product_video

ChatGPT
Use this when the user wants script or story options for a product video before it is rendered. Returns narratives; pass the chosen one to generate_product_video. Example: product_name "Trail Sandal", product_image_urls [image URL]. Intents: video script ideas, story options, video concepts Do not use to render the video (generate_product_video); skip this step when the user just wants the video made. Side effects: saves the narratives for the next step; no credits. Retry: safe.

poll_image_generation

ChatGPT
App-only status check for the image generation widget. Hosts with MCP Apps call this from the iframe. Proxies Central get_generation_status; a terminal status can settle credits. Intents: image generation poll, widget status, job_id

poll_video_generation

ChatGPT
App-only status check for the video generation widget. Hosts with MCP Apps call this from the iframe. Proxies Central get_generation_status; a terminal status can settle credits. Intents: video generation poll, widget status, job_id

preview_marketing_plan_execution

ChatGPT
Read-only ordered checklist of plan steps plus credit quotes from `quote_creative_credits / cgp. No side effects: no generation, launch, deduct, or persisted preview token. Each checklist row is {tool, arguments, depends_on, status} and tool is a public tools/list` name. The host runs those tools. Steps with no public tool are omitted. Intents: preview marketing plan, credit quote, checklist, quote_creative_credits, no spend, read only

quote_creative_credits

ChatGPT
Read-only credit quote for generate_image_ad, generate_avatar_video_ad, clone_voice, generate_new_clone_video_ad, edit_image, resize_ad, or resize_image (quotable). generate_product_video is not_quotable: a video-only quote omits total_credits. A clone-video line whose cgp price is not the duration tier is also not_quotable (never 0). Company and user come from the session JWT. Call this before the first paid creative action. Show the user the exact quoted credit total only for quotable actions. Pass each quoted line's expected_credits back on the matching paid tool. For not_quotable actions, the known charge is on the paid tool description, or the price can't be quoted. A not_quotable total is not 0 or free. Never guess a credit amount. If the quote fails, do not start the paid call. Intents: quote credits, credit cost, price image ad, price video, price avatar video, price clone video, price clone voice, resize cost

reach_estimate

ChatGPT
Estimated audience reach for a targeting spec before launch. Pass `brand_id, channel, and targeting_fragments`. Not live delivery or ROAS. Intents: reach, audience size, estimate, paid media targeting

register_creative_for_launch

ChatGPT
Persist a chat-generated creative into Ad Central so a later `launch_* can attach it as an ad. Required: name, brand_id (string), preview_storage_key (S3 object key — not the HTTPS ad URL). When to use - A creative was generated in chat and the user wants to launch it When not to use - Not the launch itself (call the matching launch_*` after this) Intent keywords register creative, persist ad, attach creative to campaign

request_user_decision

ChatGPT
Present structured options when a launch needs a user decision (missing input, or a `needs_user_decision remediation). Returns a clarification_needed` payload — present each question in plain chat (or host elicitation if available); do not paste the raw JSON into the transcript. Not a ChatGPT Apps iframe widget. Intents: clarification, user decision, launch remediation, catalogue confirmation, choose option

resize_ad

ChatGPT
Use when the user wants another placement of a finished ad (Reels, Stories, feed) without a new concept. Do not use for a new image ad (`generate_image_ad) or a copy/layout edit (edit_image). For explicit pixel targets use resize_image. Synchronous — returns resized_ad_url (often 30–180s). Do not call get_generation_status. Required - ad_url — caller-supplied finished-ad HTTPS URL (usually presigned_url; Central sends it upstream — not workspace-only) - aspect_ratio — 1:1, 4:5, 9:16, 16:9 Example: {"ad_url": "https://cdn.example/ad.png", "aspect_ratio": "9:16"} Generate once at a primary ratio, then one resize_ad per remaining ratio in a single parallel round. Credits may apply. Check get_account_credit_balance`. Do not describe the resize as free. Intent keywords resize ad, aspect ratio, 9:16, 4:5, Stories, Reels, TikTok placement, feed ad

resize_creative

ChatGPT
Use this when the user wants an existing image ad in another aspect ratio or exact size, keeping the design. Pass aspect_ratio (allowed 1:1, 4:5, 9:16, 16:9, 1.91:1, 2:3; example "9:16") or width and height (example 1200 x 628). Intents: resize, 9:16 version, Stories version, square version, 1200x628 Do not use to change content (edit_image) or to make new ads (generate_image_ad). Side effects: spends credits and creates a new asset; the result states the cost. Retry: check get_creative_status first. Errors: invalid_argument → pass both width and height, or aspect_ratio.

resize_image

ChatGPT
Use when the user needs an image at explicit pixel dimensions. Do not use for ad placement ratios (`resize_ad: 9:16, 4:5, 1:1) or a new branded ad. Synchronous — returns presigned_url / resized_image_url. Do not call get_generation_status. Required - image_url — caller-supplied HTTPS URL (not workspace-only) - block_width and block_height — pixels Example: {"image_url": "https://cdn.example/ad.png", "block_width": 1080, "block_height": 1920} Optional outpainting — when true, fill so both dimensions match exactly. Credits may apply. Check get_account_credit_balance`. Do not describe the resize as free. Intent keywords resize image, pixel dimensions, outpaint, block size

revise_marketing_plan

ChatGPT
Revise a plan. An `instruction or Delphi-authored plan_body starts a Delphi revision (pending) — poll get_marketing_plan until applied. plan_version increments by 1 on apply, not at start. Does not generate, launch, or deduct. Pass step_updates or completed_step_ids` to mark host-run steps done. Status-only mark-done does not start a revision. Intents: revise marketing plan, update plan, plan_version, instruction, pending revision, step_updates, completed_step_ids

save_imported_product

ChatGPT
Use this when the user confirms a draft from import_product_from_url and wants it saved to the catalogue. Pass draft_id (example: "31") and any corrections (name, description, image_urls from that scrape, price, offer). Intents: save this product, add it to my catalogue, looks good save it Do not use to scrape a page (import_product_from_url), for typed details with no draft (create_product), or to change a saved product (update_product). Side effects: creates a catalogue product. Retry: the same draft_id returns the same product. Errors: invalid_argument on draft_id → call import_product_from_url first.

scrape_product_from_url

ChatGPT
Import a product page into a catalogue draft (images, name, description). Completing the import uses `finalize_scraped_product. May return status=pending; a later call with the same brand_id and url` reuses the in-flight Central draft. Intents: scrape product, import URL, catalogue ingest, PDP import

search_ad_targeting

ChatGPT
Search targeting facets (locations, interests, …). Required for LinkedIn launches (`types=['locations']`); also useful for other channels. Intents: targeting, locations, interests, LinkedIn targeting, geo

search_avatars

ChatGPT
Search the avatar library. Pass a result portrait_url as avatar_url or person_image_url on generate_avatar_video_ad. Custom faces and stock portraits are both valid. Intents: avatar search, talking head, UGC portrait, person image

search_crm

ChatGPT
Use this when the user asks about HubSpot CRM records: find contacts, companies or deals, or fetch one contact or deal by id. Example: object_type "deals", query "Northline". Intents: HubSpot contacts, deals pipeline, CRM companies, find lead Do not use for ad performance (get_performance_breakdown). Side effects: none. Retry: safe. Errors: not connected → get_connect_link with connector "hubspot".

search_google_countries

ChatGPT
Resolve Google Ads country targeting fragments for Demand Gen (`targeting_fragments`). Intents: Google Demand Gen, Google Ads countries, targeting_fragments, YouTube, Discover

search_reporting_values

ChatGPT
Search campaign, ad set, ad, creative, or other dimension values (name or id) for a brand so later analytics calls can filter. Returns labels, not metrics. Filter operators are `includes or excludes` only. Intents: search campaigns, find ad name, dimension values, campaign id

search_targeting

ChatGPT
Use this when a launch or targeting change needs channel targeting ids: locations, interests, job titles, subreddits or keywords. Returns ready-to-paste fragments (TikTok location_ids, Google geo constants, LinkedIn URNs, OpenAI location specs). Example: channel "tiktok", query "United States", types ["location"]. Intents: targeting ids, location ids, interests, audiences, job titles, subreddits Do not use for audience size (estimate_reach) or to change live targeting (update_ad_targeting). Side effects: none. Retry: safe. Errors: channel_not_connected → call get_connect_link for that channel; brand_required → call list_brands and retry with brand_id.

set_ad_budget

ChatGPT
Replace the live daily or lifetime budget on an existing Meta/Facebook or Google campaign or ad set. This overwrites the current budget. Facebook: CBO vs ABO — the accepted level depends on how the campaign is configured. Google: campaign budget only. Not TikTok, LinkedIn, or Reddit. Intents: budget, daily spend, increase budget, decrease spend, ROAS scaling, Facebook CBO, Facebook ABO, Google campaign budget

set_ad_entity_status

ChatGPT
Pause, enable, or resume a campaign, ad set, or ad on a connected paid-media channel. Enabling or resuming starts paid delivery and spends budget. Intents: pause ad, resume campaign, enable ad set, Meta, Facebook, Google, TikTok, X Ads, Twitter, Pinterest

set_ad_status

ChatGPT
Use this when the user wants to pause, enable or resume a campaign, ad group or ad on a connected channel. Enabling starts paid delivery. Example: channel "meta", level "campaign", entity_id "120212345678901234", status "PAUSED". Intents: pause ad, resume campaign, enable ad set, turn off campaign Do not use for permanent removal (delete_ad_entities) or budget changes (set_ad_budget). Side effects: changes live delivery and can spend ad budget (destructive). Retry: check list_live_ads first. Errors: not_found → call list_live_ads for the id; channel_not_connected → call get_connect_link for that channel; brand_required → call list_brands and retry with brand_id.

set_pinterest_entity_status

ChatGPT
Pause or resume a live Pinterest campaign, ad group, or ad. Same as `set_ad_entity_status for channel='pinterest'`. Intents: pause Pinterest, resume Pinterest, Pinterest ads status

sync_generation_group

ChatGPT
App-only upsert of this job into a widget group so one iframe can poll sibling image and video jobs. Writes private group records. Intents: generation group, widget sync, sibling jobs

update_ad_targeting

ChatGPT
Replace targeting on an existing Meta/Facebook ad set (geo, age, or other audience fields). Omitted fields revert to platform defaults — this overwrites the current audience. Facebook-only; not TikTok, LinkedIn, Google, or Reddit. Intents: retarget, update targeting, geo, age, interests, Meta, Facebook

update_product

ChatGPT
Use this when the user wants to change a saved product: name, description, price, offer, benefits, audience or its product URL. Fields you send overwrite saved values; omitted fields are kept. Example: product_id "17", price "39.00". Intents: change product price, update product link, edit product description Do not use to add a product (create_product / import_product_from_url). Side effects: overwrites saved product fields (destructive). Retry: safe with the same values. Errors: invalid_argument on product_id → call get_products for the id.

update_product_url

ChatGPT
Replace the stored product page URL on an existing catalogue item. Intents: product URL, PDP link, catalogue URL

upsert_brand_product

ChatGPT
Create or update a completed catalogue product. Without `product_id this creates; with product_id` it overwrites existing name/description (always sent) and any optional fields you pass. Pass current name/description when leaving them unchanged. Intents: update product, upsert catalogue, edit SKU

ask_user

Claude

create_product

Claude

data_available

Claude

delete_ad_group

Claude

delete_ads

Claude

delete_campaign

Claude

fetch_product_details

Claude

finalize_scraped_product

Claude

get_ad_groups

Claude

get_ads

Claude

get_brand

Claude

get_brand_details

Claude

get_campaign_ad_group_names

Claude

get_campaigns

Claude

get_channel_budget

Claude

get_channel_connection_status

Claude

get_current_user

Claude

get_custom_properties

Claude

get_daily_metrics

Claude

get_dimension_summary

Claude

get_generation_status

Claude

get_recommendations

Claude

get_tiktok_location_ids

Claude

health_check

Claude

identify_product_from_url

Claude

launch_facebook_awareness_ad

Claude

launch_facebook_leads_ad

Claude

launch_facebook_sales_ad

Claude

launch_facebook_traffic_ad

Claude

launch_facebook_video_views_ad

Claude

launch_google_demand_gen_ad

Claude

launch_google_performance_max_ad

Claude

launch_linkedin_brand_awareness_ad

Claude

launch_linkedin_conversions_ad

Claude

launch_linkedin_engagement_ad

Claude

launch_linkedin_website_visits_ad

Claude

launch_reddit_awareness_ad

Claude

launch_reddit_conversions_ad

Claude

launch_reddit_leads_ad

Claude

launch_reddit_traffic_ad

Claude

launch_reddit_video_views_ad

Claude

launch_tiktok_conversions_ad

Claude

launch_tiktok_leads_ad

Claude

launch_tiktok_traffic_ad

Claude

launch_tiktok_video_views_ad

Claude

list_brand_products

Claude

list_brands

Claude

minimum_budget_for_objective

Claude

reach_estimate

Claude

scrape_product_from_url

Claude

search_dimension_values

Claude

set_ad_budget

Claude

set_ad_entity_status

Claude

update_ad_targeting

Claude

update_product_url

Claude

upsert_brand_product

Claude

Capabilities

WritesInteractive

Example Prompts

Click any prompt to copy it.

Similar Apps