Skip to main content
Glama
niyogi

chatgpt-ads-manager-mcp

by niyogi

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
OPENAI_ADS_API_KEYNoAdvertiser API key (primary). Required if CHATGPT_ADS_API_KEY is not set. If both are set, this key takes precedence.
CHATGPT_ADS_API_KEYNoAlias fallback for OPENAI_ADS_API_KEY. Required if OPENAI_ADS_API_KEY is not set.
OPENAI_ADS_BASE_URLNoOverride API base URL. Default is https://api.ads.openai.com/v1https://api.ads.openai.com/v1
OPENAI_AD_ACCOUNT_IDNoDefault 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

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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