Developers · MCP server

Give your agent an ad account.

The Admux MCP server lets an agent in Claude, Cursor or Codex buy ads in ChatGPT, Google Search (including AI placements) and Gravity from your prepaid balance. It exposes 28 tools over Streamable HTTP, and your API key decides which ones the agent sees.

Connect your agent

Create an API key in the Admux web app, export it as ADMUX_API_KEY, then add the server. Keep the key out of prompts and shared files.

Claude Code

Terminal
claude mcp add --transport http admux https://api.admux.ai/mcp \
  --header "Authorization: Bearer $ADMUX_API_KEY"
.mcp.json (project, shared without the key)
{
  "mcpServers": {
    "admux": {
      "type": "http",
      "url": "https://api.admux.ai/mcp",
      "headers": { "Authorization": "Bearer ${ADMUX_API_KEY}" }
    }
  }
}

Cursor

~/.cursor/mcp.json or .cursor/mcp.json
{
  "mcpServers": {
    "admux": {
      "url": "https://api.admux.ai/mcp",
      "headers": { "Authorization": "Bearer ${env:ADMUX_API_KEY}" }
    }
  }
}

Codex

~/.codex/config.toml
[mcp_servers.admux]
url = "https://api.admux.ai/mcp"
bearer_token_env_var = "ADMUX_API_KEY"

Then ask your agent something like “read /agents.txt, then draft a ChatGPT ads campaign for our launch with a $500 budget”. It will draft, validate and quote; submitting reserves budget only if the key allows it.

Tools

Each tool needs one scope. Tools the key lacks scopes for aren’t listed to the agent at all.

Plan
ToolWhat it doesScope
channels_listChannel capabilities, creative rules, targeting support, current markup and pacing disclosurecampaigns:read
assets_listList supplied creative assetscreatives:read
asset_upload_imageUpload a supplied image (base64 PNG/JPEG/WebP)creatives:write
campaign_create_draftCreate an unfunded draft (see channels_list for required fields)campaigns:draft
campaign_update_draftUpdate draft fields (version-checked)campaigns:draft
campaign_validateValidate a draft without money or deliverycampaigns:validate
asset_save_copySave advertiser-supplied copy to the librarycreatives:write
campaign_duplicateDuplicate into a new unfunded draft (fresh dates, quote and review required)campaigns:draft
campaign_update_metadataRename or retag (internal only; never triggers review)campaigns:draft
campaign_archiveArchive or unarchive a finished, cancelled or draft campaigncampaigns:draft
readiness_getPer-channel provider readiness (stubbed in local build)campaigns:read
Price and fund
ToolWhat it doesScope
offer_createIssue a 15-minute price offer for the draft (reserves nothing)campaigns:read
campaign_submitReserve the full budget and submit for review. launchMode "auto" (Launch as approved) also requires campaigns:launch. Returns an operation to poll.campaigns:reserve
offer_getRead an offer (server-enforced expiry)campaigns:read
balance_getOperational available/reserved funds (USD cents)balance:read
Run
ToolWhat it doesScope
campaign_launchLaunch approved legscampaigns:launch
campaign_pausePause legs (a request; poll for confirmation)campaigns:pause
campaign_resumeResume paused legscampaigns:resume
campaign_remove_legsRemove legs (allocation stays reserved to the campaign)campaigns:cancel
campaign_cancelCancel: stop delivery, settle, release unused funds after evidencecampaigns:cancel
change_previewDiff of pending draft edits against running revisionscampaigns:read
change_offerQuote pending changes (reprices all remaining delivery)campaigns:read
change_applyApply pending changes under an accepted change offer (increases also need campaigns:reserve)campaigns:modify_live
campaign_review_noteSend an explanation or evidence note to the policy reviewer of an open casecampaigns:draft
operation_getOperation status with per-leg stepsoperations:read
Read
ToolWhat it doesScope
campaigns_listList campaignscampaigns:read
campaign_getCampaign with per-leg review, delivery, funding and settlement statecampaigns:read
report_getPerformance report (UTC, delivery-dated)reports:read

What stays with you

  • Launch. Approved campaigns wait for an explicit launch unless the key has campaigns:launch.
  • Money. The key’s daily, weekly, monthly and lifetime limits cap new budget it can reserve. Payments, refunds and billing stay in the web app.
  • Creative. Admux never writes ad copy: the agent supplies it, and Admux screens it against each channel’s rules.
  • Retries. Tools that move money or change delivery take an idempotency key, so a retried call can’t double-spend.
Gravity also documents its own MCP server, which uses an account key with full access and no spending limit. Admux keeps provider credentials server-side and gives your agent only its scoped key.

Questions

Is there an MCP server for ChatGPT ads?

OpenAI doesn’t document an ads MCP server; it offers a REST Advertiser API and a ChatGPT Ads Manager plugin. The Admux MCP server buys ChatGPT ads, Google Search ads (including AI placements) and Gravity ads with one key.

Which MCP clients work?

Any client that supports Streamable HTTP with a Bearer header. This page shows Claude Code, Cursor and Codex.

Can the agent see my billing details?

No. balance_get returns available and reserved funds only; payment methods, invoices and refunds aren’t exposed to keys.