chatgpt-ads-manager-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OPENAI_ADS_API_KEY | No | Advertiser API key (primary). Required if CHATGPT_ADS_API_KEY is not set. If both are set, this key takes precedence. | |
| CHATGPT_ADS_API_KEY | No | Alias fallback for OPENAI_ADS_API_KEY. Required if OPENAI_ADS_API_KEY is not set. | |
| OPENAI_ADS_BASE_URL | No | Override API base URL. Default is https://api.ads.openai.com/v1 | https://api.ads.openai.com/v1 |
| OPENAI_AD_ACCOUNT_ID | No | Default ad account ID for the OpenAI-Ad-Account header. Optional; can also be passed per tool call. |
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_ad_accountA | Get metadata for the ad account associated with the API key. Use to verify auth, check timezone/currency/review status. No chaining needed — call first to confirm key works. |
| list_ad_accountsA | List ad accounts accessible to the authenticated key/OAuth token. Returns accounts with ids for use as ad_account_id in other tools. |
| update_ad_account_brandA | Update ad account brand metadata (name, url, etc.). Requires account be enabled for programmatic brand updates or it will 403. Chain after get_ad_account to see current values. |
| update_ad_account_negative_keywordsA | Replace account-level negative keywords used for ad eligibility. Provide full desired list — this is a replace, not append. Use to block unwanted contexts. |
| activate_ad_accountA | Activate the ad account (resume serving). All parent campaigns/ad groups/ads must also be active to serve. |
| pause_ad_accountA | Pause the ad account (stop all serving). Reversible via activate_ad_account. |
| get_ad_account_spend_limit_windowsA | View spend limit windows (inclusive start, exclusive end, ordered by start ascending). Use to audit or plan budget caps. |
| create_ad_account_spend_limit_windowA | Create a spend limit window with inclusive start and exclusive end. Use to cap spend over a date range. |
| update_ad_account_spend_limit_windowA | Edit a spend limit window (inclusive start, exclusive end). Provide window_id from get/create. |
| delete_ad_account_spend_limit_windowA | Delete an active or scheduled spend limit window before it ends. |
| get_oauth_meA | Return the authenticated user's stable opaque ID (OAuth only). Useful for partner flows to verify token identity. |
| create_api_keyA | Create an API key scoped to the selected ad account (requires AdsOAuth with write or an existing API key with permission). Returns the new key — store it securely, it won't be shown again. |
| list_campaignsA | List campaigns for the ad account. Paginated. Use returned campaign_id with get_campaign, update_campaign, create_ad_group, and insights tools. Filter by name if needed. |
| get_campaignA | Get a single campaign by ID. Use include=[serving_issues] to audit delivery problems. Returned id chains to ad group creation. |
| create_campaignA | Create a campaign. Returns campaign_id for chaining to create_ad_group. Common next: create_ad_group with campaign_id. Supports idempotency key to avoid duplicates on retry. |
| update_campaignA | Update a campaign by ID. Only provided fields are updated. Omitted optional fields reset to defaults except where noted. Send null to clear description/start_time/end_time. |
| activate_campaignA | Activate a paused campaign. All ancestors must be active for ads to serve. |
| pause_campaignA | Pause an active campaign. Reversible via activate_campaign. |
| archive_campaignA | Archive a campaign (terminal — cannot be reactivated via activate). |
| list_ad_groupsA | List ad groups for the ad account, optionally filtered by campaign_id. Use returned ad_group_id to create ads or fetch insights. |
| get_ad_groupB | Get a single ad group by ID. |
| create_ad_groupA | Create an ad group for a campaign. Returns ad_group_id for chaining to create_ad. Requires campaign_id + bidding_config. |
| update_ad_groupC | Update an ad group by ID. |
| activate_ad_groupC | Activate a paused ad group. |
| pause_ad_groupC | Pause an active ad group. |
| archive_ad_groupC | Archive an ad group (terminal). |
| list_adsA | List ads for the ad account, optionally filtered by campaign_id or ad_group_id. Use ad_id for get_ad / insights / preview. |
| get_adA | Get a single ad by ID. Check review_status to monitor approval (typically minutes). |
| create_adA | Create an ad for an ad group. Requires creative (type/title/body etc.). For chat_card, provide file_id from upload_image. For product_ad_template, use {{product.*}} tokens and omit file_id. Returns ad_id. |
| update_adB | Update an ad by ID. Only provided fields are updated. |
| create_ad_previewA | Create a temporary iframe preview for an existing ad. Returns preview URL/html for QA before activating. |
| activate_adA | Activate a paused ad. Campaign and ad group must also be active + review approved to serve. |
| pause_adC | Pause an active ad. |
| archive_adC | Archive an ad (terminal). |
| get_ad_account_insightsA | Get ad account insights aggregated by time granularity. Attribution for current local day is preliminary. Use time_ranges + fields + segments for breakdowns. Paginated (limit/after/before). |
| get_campaign_insightsA | Get campaign insights. Chain from list_campaigns -> campaign_id. Same params as ad account insights but scoped to one campaign. |
| get_ad_group_insightsB | Get ad group insights. Chain from list_ad_groups -> ad_group_id. |
| get_ad_insightsB | Get ad insights for a single ad. Check creative-level performance. |
| get_conversion_insightsA | Get attributed conversion totals or daily values. POST /conversions/insights. Requires aggregation_level + time_ranges. Use breakdown (device/country) for segments. group_by_entity splits per campaign/ad_group/ad. |
| upload_imageA | Upload a creative image for ads. Provide EITHER image_url (https) OR image_base64 (data). image_url is SSRF-guarded (https only, no private hosts). Returns file_id to use in create_ad creative.file_id. For chat_card ads, upload first then create_ad. |
| upload_audience_fileA | Upload a file for custom audience creation (CSV/TXT up to 500MB). Returns file_id (oaisdmntci_...) to use in create_custom_audience or add_audience_members. Provide file_base64 (base64 of CSV/TXT). Purpose is always custom_audience. |
| list_custom_audiencesB | List custom audiences. Filter by intended_use, ids, or policy_revision for eligibility. Returns audiences with membership_revision for mutations. Paginated. |
| create_custom_audienceA | Create a custom audience from an uploaded file (provide file_id) or as empty/small audience if enabled. Processing is async — poll via get_custom_audience until published. Returns custom_audience_id. |
| get_custom_audienceA | Get a custom audience by ID. Check processing state and membership_revision before mutations. |
| archive_custom_audienceA | Archive a custom audience. Archived audiences cannot be used for targeting. |
| add_audience_membersA | Add identifiers to an existing custom audience (file or inline). Requires Idempotency-Key and expected_revision. Poll operation via get_audience_operation. Supports up to ~10k inline identifiers; use file for larger. |
| remove_audience_membersA | Remove identifiers from a custom audience (file or inline). Requires Idempotency-Key and expected_revision. Poll via get_audience_operation. |
| replace_audience_membersA | Replace all members of a custom audience using an uploaded file and current revision. Requires Idempotency-Key. Poll via get_audience_operation. |
| merge_custom_audiencesA | Create a new audience containing all matched members from 2–64 source audiences. Independent copy. Requires Idempotency-Key. |
| get_audience_operationA | Retrieve lifecycle state of a custom audience mutation (add/remove/replace/merge). Poll with backoff. States: processing → succeeded/failed. Save operation_id from mutation response. |
| list_business_agent_toolsA | List eligible Business Agent tools installed for the authenticated API project. Use to discover connectors/tools available for business agent creation. |
| list_business_agentsB | List Business Agents for the ad account. Each has id, name, status draft/published, etc. |
| create_business_agentA | Create a draft Business Agent. Requires name 1–50 + instructions 1–4000. Optionally attach product feeds, connectors, lead form. Publish separately via publish_business_agent. |
| get_business_agentA | Get a Business Agent by ID. |
| update_business_agentA | Replace a Business Agent's name and config and save as draft. Omitted optional fields reset to defaults (except lead_form preserved if omitted; send null to unlink). Requires full desired state. |
| preview_business_agentA | Preview a response from a Business Agent. Useful for QA before publishing. Provide a test message. |
| publish_business_agentA | Publish a Business Agent draft to make it live. Ensure preview looks good first. |
| list_lead_formsC | List Lead Forms for the ad account. |
| create_lead_formA | Create a draft Lead Form. Requires name 1–256 + fields 3–5 (each: field_id, field_type text|choice, label, required, options for choice). Publish after creation. |
| get_lead_formA | Get a Lead Form by ID. Optionally specify rev_id for a specific revision. |
| update_lead_formB | Save a new draft revision for a Lead Form. Requires expected_draft_revision_id for conflict detection. |
| publish_lead_formB | Publish the current Lead Form draft. After publishing, the form can be attached to a Business Agent. |
| archive_lead_formA | Archive a Lead Form that is not attached to a published Business Agent. |
| create_test_lead_submissionA | Queue a synthetic signed lead-sync webhook test delivery for a Lead Form. Requires Idempotency-Key. Useful to validate webhook handling before going live. |
| create_lead_sync_subscriptionA | Provision lead delivery to a managed webhook endpoint for an ad account. Requires Idempotency-Key and destination URL. Leads will be POSTed with Standard Webhooks HMAC signature. |
| list_lead_sync_subscriptionsC | List lead-sync subscriptions for an ad account. Requires ad_account_id query param. |
| get_lead_sync_subscriptionB | Get a lead-sync subscription by ID. |
| delete_lead_sync_subscriptionA | Delete a lead-sync subscription to stop webhook delivery. |
| create_conversion_pixelA | Create a conversion pixel (client data source) for the ad account. Returns pixel id (pid) used for event attribution and listing sampled events. Chain to create_conversion_api_key and create_conversion_event_setting. |
| list_conversion_pixelsA | List conversion pixels and connected pixel IDs for the ad account. Use pid from here with list_conversion_events. |
| create_conversion_api_keyA | Create a Conversions API key for the ad account (used to send server-side events via bzr.openai.com outside this MCP). Returns api_key — store securely, single display. |
| create_conversion_event_settingA | Create a conversion event setting linking an event type to source pixel(s). Used for conversions bidding (bidding_type=conversions) and conversion_event_setting_ids on campaigns. Requires name + event_type + source_ids. |
| list_conversion_event_settingsB | List conversion event settings for the ad account. Use IDs with campaign conversion_event_setting_ids and conversions bidding. |
| list_conversion_eventsA | List recent sampled conversion events for a pixel (requires pid). Up to 50 per call. Use to verify ingestion from bzr.openai.com. |
| create_product_feedA | Create a product feed for the ad account (merchant catalog). For SFTP-fetched catalogs, configure SFTP after. Use list_product_feeds to see existing. |
| list_product_feedsB | List product feeds for the ad account. Use feed_id with query/patch/sftp tools. |
| archive_product_feedA | Archive a product feed. Archived feeds cannot be used for new campaigns. |
| list_product_feed_uploadsB | List recent product feed uploads (ingestion history). Useful to debug catalog fetch issues. |
| query_product_feed_productsA | List products in a feed matching ad group product filters. Use to validate targeting before creating ad_group with product_set. |
| patch_product_feed_productsA | Update product availability and prices for a feed (delta without full SFTP re-upload). Provide product patches with item identifiers. |
| get_product_feed_sftp_accessA | Get SFTP access details for a product feed (host, username, path). Use to configure catalog uploads. |
| create_product_feed_sftp_accessA | Create or replace SFTP access credentials for a product feed. Returns credentials to configure your SFTP client. |
| activate_product_feed_sftp_accessB | Activate SFTP access for a product feed (resume ingestion). |
| pause_product_feed_sftp_accessB | Pause SFTP access for a product feed (stop ingestion). |
| search_geo_lookupA | Search DMA and standard region codes for advertiser geo targeting. Use returned location IDs with campaign targeting.locations.include. Chain: search_geo_lookup {q:'California'} -> create_campaign {targeting:{locations:{include:[...ids]}}} |
| create_partner_data_uploadB | Create an Ads partner-data upload (for partner integrations). Returns upload id for polling via get_partner_data_upload. |
| get_partner_data_uploadA | Get an Ads partner-data upload by ID (e.g., pdu_...). Poll to check processing status. |
| create_campaign_hierarchyA | Composite workflow: create a full campaign -> ad group -> ad chain in one call. Useful for quick end-to-end creation. Returns all three IDs. If any step fails, earlier objects remain — use update/archive tools to clean up. Prefer atomic tools (create_campaign, create_ad_group, create_ad) for fine-grained control. |
| poll_audience_operationA | Helper to poll a custom audience mutation until terminal. Calls get_audience_operation once and returns current state. Call repeatedly with backoff (processing -> succeeded/failed). Does NOT loop internally — agent controls retry timing to respect rate limits. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/niyogi/chatgpt-ads-manager-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server