OpenAI Ads & Conversion Intelligence MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OPENAI_ADS_API_KEY | Yes | Your OpenAI Ads API key, generated from the Settings tab in OpenAI Ads Manager. | |
| OPENAI_ADS_API_BASE_URL | No | The base URL for the OpenAI Ads Advertiser API. Defaults to https://api.ads.openai.com/v1 | https://api.ads.openai.com/v1 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_ad_accountA | Fetches the OpenAI Ads account associated with the configured API key, including ID, name, destination URL, timezone, currency, and brand review status. |
| update_ad_account_brandA | Updates the ad account display name or assigns a brand favicon file_id, triggering an automatic brand review required for ad serving. |
| list_campaignsA | List campaigns in the current OpenAI Ads account with pagination. |
| get_campaignA | Fetch a single OpenAI Ads campaign by its ID. |
| create_campaignA | Create an ad campaign. Note: lifetime_spend_limit_micros is in currency millionths (e.g. 25000000 = $25.00 USD). Bidding type cannot be changed after creation. |
| update_campaignB | Update campaign budget, schedule, status, or description. Note: bidding_type cannot be updated. |
| set_campaign_stateA | Explicitly activate, pause, or archive a campaign. Archiving is irreversible. |
| clone_campaign_structureA | Deep-copies an existing campaign along with all its child ad groups and ads into a new campaign (created in paused state by default). Allows overriding name, budget, or flight dates. |
| list_ad_groupsB | List ad groups for a specific parent campaign ID. |
| get_ad_groupA | Fetch an ad group by its ID. |
| create_ad_groupA | Create an ad group under a campaign. Billing event must match campaign objective ('impression' for CPM; 'click' for CPC and oCPC). max_bid_micros is in millionths (e.g. 60000 = $0.06/event or $60 CPM; 100000000 = $100 CPA bid). |
| update_ad_groupC | Update ad group name, description, context_hints, status, or bidding_config. |
| set_ad_group_stateA | Activate, pause, or archive an ad group. Archiving is irreversible. |
| upload_creative_assetA | Upload a remote image URL to OpenAI Ads and receive a reusable file_id for ads (chat_card) or brand review (account_favicon). |
| list_adsC | List ads for a specific ad group ID. |
| get_adA | Fetch an ad by ID, including creative details and review_status. |
| create_adA | Create an ad in an ad group. Supports 'chat_card' (title 3-50 chars, body max 100 chars, destination target_url, and uploaded file_id) or 'product_ad_template' (for product feed campaigns). |
| preview_adA | Generate a 24-hour temporary web preview URL for an existing ad. |
| set_ad_stateB | Activate, pause, or archive an ad. Archiving is permanent. |
| generate_ad_intent_queriesB | Generates realistic, high-intent ChatGPT user queries (custom_intent_queries) and conversational sponsored ad copy tailored to your product, audience, and value propositions. |
| get_delivery_insightsB | Retrieve advertising performance metrics (impressions, clicks, spend, CTR, CPC, CPM). Supports aggregation_level ('ad_account', 'campaign', 'ad_group', 'ad'), time_granularity ('hourly', 'daily', 'monthly', 'none'), segments (['product'], ['country'], ['device']), and zero-impression items. |
| get_conversion_insightsB | Retrieve attributed conversion totals (conversions, click_through_conversions, view_through_conversions). 'conversions' is always equal to 'click_through_conversions'. View-through conversions use a fixed 1-day impression window for reporting. |
| create_web_pixelA | Creates a web conversion source and returns both an internal source ID (clidsrc_*) and a public pixel_id. Web pixels automatically support automatic advanced matching. |
| inspect_recent_pixel_eventsA | Test and verify incoming browser pixel events. Returns up to 50 raw events received by OpenAI from the JavaScript pixel SDK during the previous 15 minutes. |
| create_conversions_api_keyA | Generate a server-side Conversions API key to send conversion events directly from backend servers. Note: store securely in server secrets. |
| create_conversion_event_settingA | Defines an active conversion goal (e.g. 'order_created', 'lead_created', 'registration_completed') bound to a pixel source ID. Required for oCPC conversion-optimized campaigns. |
| list_conversion_event_settingsB | List all conversion definitions configured for the current ad account. |
| send_test_conversion_eventA | Dispatches a test or live server-side conversion event (e.g., 'order_created', 'lead_created', 'add_to_cart') via the OpenAI Conversions API. Automatically hashes plain emails/phones with SHA-256 and attaches deduplication tokens. |
| list_custom_audiencesB | List custom audiences for the current ad account. Use 'intended_use' ('inclusion', 'exclusion', 'bid_multiplier') to filter only eligible audiences. |
| get_custom_audienceA | Retrieve audience status, privacy-preserving size ranges (e.g. under_25k, 25k_100k), and current membership_revision. |
| create_custom_audienceB | Creates a new custom audience. Can create an empty audience for incremental builds or attach an uploaded file_id. |
| mutate_audience_membershipA | Add or remove customer identifiers from an existing custom audience. Accepts inline identifiers or an uploaded file_id. Returns an asynchronous operation ID. |
| merge_custom_audiencesA | Merges 2 to 64 existing, ready audiences in the same ad account into a new union audience. |
| archive_custom_audienceA | Permanently archive a custom audience. Archived audiences cannot be restored. |
| get_audience_operation_statusA | Poll the status of an asynchronous membership operation (add, remove, replace, merge) until 'succeeded' or 'failed'. |
| prepare_custom_audience_payloadA | Normalizes raw emails (trimmed, lowercase) and phone numbers (E.164 standard) into SHA-256 hashes per OpenAI specification. Optionally uploads the hashed members directly to a custom audience. |
| update_feed_product_variantsA | Delta update prices, titles, or stock availability for existing variants in a linked merchant feed without re-uploading the entire catalog. |
| submit_bulk_mutation_jobA | Submits an asynchronous bulk job with up to 1,000 operations (campaign.create/update, ad_group.create/update, ad.create/update). Entities can link via campaign_idempotency_key and ad_group_idempotency_key. |
| get_bulk_mutation_job_statusA | Poll bulk job progress (pending, in_progress, completed, partially_failed, failed) and inspect per-operation execution results. |
| search_geo_locationsA | Search targetable locations (countries, regions, and DMAs) by keyword query to obtain location IDs for campaign targeting. |
| audit_conversion_trackingA | Comprehensive tracking audit. Inspects ad account brand approval, configured conversion event settings, and optionally polls the 15-minute live pixel stream to diagnose missing events, tag misconfigurations, and CAPI readiness. |
| analyze_campaign_performanceB | Analyzes campaign metrics (impressions, clicks, spend, CTR, CPC, conversions, CPA). Provides diagnostic assessments (STRONG, MODERATE, NEEDS_ATTENTION) and actionable optimization recommendations. |
| detect_spend_anomaliesA | Scans recent delivery and conversion metrics for runaway spend, zero-conversion budget drain, low-CTR creative burnout, and abnormal CPA spikes across campaigns. Recommends immediate remediation actions. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| audit-account-tracking | Guides the AI agent to run a thorough audit of brand approval, pixels, and conversion events. |
| analyze-campaign-performance | Guides the AI agent to evaluate campaign CTR, CPC, CPA, and conversions to provide recommendations. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 43 tools
Most tools are clearly separated by resource and action, but there is meaningful overlap among the analytics/insight tools (get_delivery_insights, get_conversion_insights, analyze_campaign_performance, detect_spend_anomalies) and between update_campaign and set_campaign_state, both of which can modify campaign status.
All tools consistently follow a snake_case verb_noun pattern, with clear conventions for CRUD (get/list/create/update) and state changes (set_*_state). No mixed casing or arbitrary verb styles are present.
43 tools is a heavy surface for an MCP server, well above the 25-tool threshold. While the breadth reflects the ads domain, several analytics, audit, and insight tools could be consolidated without losing capability.
The server covers campaign, ad group, ad, audience, conversion tracking, and bulk operations well. However, there are notable lifecycle gaps: no update_ad, no update/delete for conversion event settings or web pixels, and limited management of conversion sources beyond creation.