ChatGPT Ads MCP server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OPENAI_ADS_API_KEY | Yes | Required. An Advertiser API key created on the Settings page of Ads Manager. Each key is scoped to one ad account. This is not an OpenAI Platform API key. | |
| OPENAI_ADS_ACCOUNT_ID | Yes | Required. The `adacct_` ID of the account the key belongs to. Every other account ID is refused, and the first request checks that the key matches. | |
| OPENAI_ADS_ENABLE_WRITES | No | Defaults to `false`. Only the exact value `true` registers the write tools. | false |
| OPENAI_ADS_ENABLE_ACTIVATION | No | Defaults to `false`. `true` allows activation and changes to `status: "active"`, which can start delivery and spend budget. Requires writes. | false |
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
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| openai_ads_get_accountA | Read the configured ChatGPT Ads account: name, currency, time zone, status and brand review. Also verifies that the API key belongs to OPENAI_ADS_ACCOUNT_ID. Run it first. |
| openai_ads_get_campaignsA | List one page of campaigns in the account. Follow last_id only when has_more is true. Budget amounts use integer account-currency micros. |
| openai_ads_get_campaignA | Read one campaign with its native status, budget, schedule and targeting. |
| openai_ads_get_ad_groupsA | List one page of ad groups in a campaign. Native ad group IDs start with adgrp_. Follow last_id only when has_more is true. |
| openai_ads_get_ad_groupB | Read one ad group with its native bidding, context hints and product set. |
| openai_ads_get_adsA | List one page of ads in an ad group with native creative metadata and review status. Follow last_id only when has_more is true. |
| openai_ads_get_adA | Read one ad with its creative and review status. No preview or change is requested. |
| openai_ads_list_ad_creativesA | List chat card creatives of the account or of one ad group, 20 ads per page, or read up to 60 exact adIds. Each item has the native file_id, signed image_url, title, body, destination and review status. An expired image link is refreshed with one ad read. Follow nextCursor when hasMore. |
| openai_ads_get_insightsA | Read performance by account, campaign, ad group or ad over inclusive account-local dates. One optional country, device or platform breakdown supports delivery metrics only; use openai_ads_get_conversion_insights for conversions by country or device. Attribution defaults to 30-day click, 1-day view and ad_event_time. CTR and CVR are fractions; money uses major units of the account currency. Pages are followed up to maxRows and truncation is explicit. |
| openai_ads_search_locationsA | Search country, region and market location IDs for campaign geographic targeting. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_audit_logsA | List recorded changes to the account's campaigns, ad groups and ads, optionally filtered by entity, actor or time. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_spend_limitsB | Read the account's spend limit windows and daily recurrence rules. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_landing_page_crawlB | Read the saved landing page crawl evidence for an ad's submitted version. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_conversion_settingsA | List the account's conversion event settings, the goals a campaign can use. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_conversion_pixelsB | List the account's conversion pixels and connected pixel IDs. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_conversion_eventsA | List recent sampled conversion events, for checking that a pixel or server integration sends data. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_conversion_insightsA | Read attributed conversion totals or daily values, optionally by country or device and with event details. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_feedsA | List the account's product feeds, optionally with product counts. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_feed_uploadsB | List recent product feed uploads and their processing results. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_feed_settingsB | Read a feed's display and organic-listing settings. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_feed_productsB | List products in a feed that match ad group product filters. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_custom_audiencesA | List the account's custom audiences. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_custom_audienceB | Read one custom audience and its matched count. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_audience_operationsB | List the accepted operations of a custom audience. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_audience_operationB | Read the lifecycle state of one custom audience operation. Native fields and pagination are preserved. See openai_ads_get_write_schema for nested request fields. |
| openai_ads_get_bulk_jobA | Read one Bulk API job (limited preview, enabled per account). Only completed, partially_failed and failed are terminal. A completed job still requires reading every operation result and the native entities. |
| openai_ads_get_bulk_job_operationsA | Read one page of Bulk API operation outcomes: created, updated, validated, failed or skipped. Pass the last operation_id as after only when has_more is true. A partial failure never rolls back earlier operations; do not resubmit an uncertain job. |
| openai_ads_get_write_schemaA | Read the pinned native request definitions, paths and parameters of every operation, the upload and bulk limits, and what this server leaves out. Schema support does not imply that the account is eligible for a feature. |
| openai_ads_get_write_contextA | Read the account, its conversion settings and its product feeds before proposing a campaign. Lists the native objective, billing and bid strategy combinations and the missing prerequisites. It grants no eligibility and creates nothing. |
| openai_ads_get_mutationA | Read a write preview or receipt held by this server process: its state, the native state it was approved against and the result. Receipts live in memory and a restart forgets them. Never resubmit a write whose state is UNKNOWN or APPLYING. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| openai-ads-guide | How this server scopes the account, previews writes and reports units, with the supported metrics, levels and attribution options. |
TDQS
Scored across 30 tools
Most tools target a clearly distinct resource/action, and list-vs-singular pairs are explicitly separated. Minor overlap remains around ad/creative reads and performance vs conversion insights, but the descriptions mostly resolve the boundaries.
Every tool follows the openai_ads_{verb}_{noun} snake_case pattern. The use of get, list, and search is intentional and consistent with each tool's read behavior.
Thirty tools is heavy for an MCP surface, especially with many list/singleton pairs and meta read tools. The broad ads domain justifies some breadth, but the set is borderline and could be consolidated.
Read coverage is broad across campaigns, ads, feeds, audiences, conversions, and bulk jobs. However, there are no create, update, delete, or apply-write tools; the write schema/context/mutation tools only inspect or read receipts, leaving core management workflows as dead ends.