The open control plane for paid media

Manage your ads from ChatGPT, Claude, Claude Code, Codex, Cursor, or any MCP client.

Every change is previewed, checked against your caps and logged before it runs.

Watch the demo View on GitHub

How it works

Your agent proposes. You see the diff. Then it runs.

Agent session adport MCP
  1. You

    Brand Search is at 4.1× ROAS and capped by budget. Raise it from $40 to $48 a day.

  2. Agent

    I’ll ask adport for a preview first.

  3. google_set_budgetpreview
    {
      "account_id": "8204417795",
      "campaign_id": "21490387612",
      "daily_budget_micros": 48000000
    }
Preview, not applied

Brand Search US daily budget

$40.00to$48.00+20.0%

  • Account is not protected
  • +20.0% is inside the 25% change cap
  • Google validate_only accepted it
pending_operation_id 7c41e9b2-5d0a-4f6e… Expires in

Press and hold. A deliberate approval, not a click.

audit-2026-10.jsonl
  1. {"ts":"2026-10-01T14:02:09.418Z","event":"validated","provider":"google","tool":"google_set_budget","accountId":"8204417795","pendingId":"7c41e9b2-5d0a-4f6e-9b13-2a8e60c4d1f7","summary":"Change \"Brand Search US\" daily budget 40000000 → 48000000 micros"}

A simulation of adport’s default policy. The rejections are the messages the policy engine returns.

See it in action

The whole loop in 23 seconds.

What you can ask

Ask in plain words. Get a preview first.

Anything that would change an account comes back as a preview, with every adjustment the policy made spelled out.

Create campaigns safely

“Set up a search campaign for the autumn sale, $60 a day.”

New campaigns are created paused, even when the agent asks for them to go live. Adport reports every coercion like this one instead of applying it silently.

google_create_campaignpreview
Name
Autumn Sale 2026
Daily budget
$60.00
Bidding
Maximize conversions
Status
Enabled Paused

Changed by policy paused_creation

Pause what isn’t working

“Pause Retargeting EU on Meta.”

Status changes get the same preview as budgets. Meta checks the request with validate_only before you approve, and the change is logged once it runs.

meta_set_campaign_statuspreview
Campaign
Retargeting EU
Ad sets
4 active
Status
Active Paused

Meta validate_only accepted it. Nothing changed yet.

Stay inside your limits

“Double the Spark test budget on TikTok.”

Budget caps are checked before a preview is issued. A change over the cap is refused with the reason, and nothing reaches TikTok.

tiktok_set_budgetrejected
Daily budget
$50.00 → $100.00
Change
+100.0%
Result
Rejected

Over the 25% cap. No token issued, nothing sent to TikTok.

Add keywords in one go

“Add these three keywords to Generic Tents.”

Bulk edits come back as one preview that lists every keyword and match type. Applying runs exactly that list, nothing more.

google_add_keywordspreview
tent footprint
Exact
ultralight 2 person tent
Phrase
family camping tent
Broad

Apply runs exactly these 3 keywords.

Safety

Rules your agent can’t talk its way around.

A prompt is not a permission system. These checks sit in the code path every write takes, on every platform, from any MCP client or the CLI.

~/.config/adport/policy.yaml
# Defaults shown. Change them, and the gate changes.
require_validation: true
paused_creation: true
max_budget_delta_pct: 25
max_daily_budget_micros: 500000000  # $500/day
protected_accounts:
  - "1150938260"  # the client who said no
pending_ttl_minutes: 15
Read the write-safety contract

Get started

One URL. Your choice of AI.

Add Adport to the AI you already use. Every write still goes through the same gate.

Adport Cloud

Invite-only

Hosted MCP with OAuth sign-in. Connect your ad accounts in Adport, then add one URL to your assistant.

Open Plugins, choose +, then Add custom MCP server. Name it Adport, paste this server URL, and choose OAuth. Open ChatGPT Plugins ↗

https://app.adport.dev/mcp

Create the plugin, sign in to Adport, and install it. In a new chat, type @ and select Adport before asking your first question.

Run this command in your terminal. It adds Adport to the MCP configuration shared by your local Codex clients.

codex mcp add adport --url https://app.adport.dev/mcp

Complete the browser sign-in when prompted. If sign-in has not started, run the command below.

codex mcp login adport

Open Customize → Connectors, choose + Add, then Add custom connector. Name it Adport and paste this server URL. Open Claude Connectors ↗

https://app.adport.dev/mcp

Keep sign-in enabled and finish connecting to Adport. In your conversation, open + → Connectors and enable Adport.

Run this command in your terminal. User scope makes Adport available across your local Claude Code projects.

claude mcp add --transport http --scope user adport https://app.adport.dev/mcp

Open Claude Code and run /mcp. Select Adport and follow the browser sign-in.

Open the install link and confirm Add in Cursor. Adport uses browser sign-in, so no API key is needed. Add to Cursor ↗

{
  "mcpServers": {
    "adport": {
      "url": "https://app.adport.dev/mcp"
    }
  }
}

Complete the sign-in from Cursor’s MCP settings, then start a conversation with Agent.

Add a remote MCP server in your assistant. Name it Adport, paste this URL, and choose Streamable HTTP with OAuth.

https://app.adport.dev/mcp

Follow your assistant’s sign-in prompt. If it does not support OAuth, an admin can create an API key under Advanced on the AI assistants page.

Adport Cloud is currently invite-only. Join the waitlist

Adport Cloud pricing

One organization. Your whole team in control.

Cloud is currently invite-only. Unlimited projects, free read-only viewers, and fixed pricing with no percentage of ad spend.

For owners and small teams

Pro

Operate your ads with a preview before every change.

€19/ month

Billed monthly

5 active ad accounts2 editing members
Join the waitlist

Early access by invitation

Included with Pro

  • Preview and approve ad changes
  • Budget caps & protected accounts
  • 90-day audit history
  • Unlimited isolated projects
  • Free read-only viewers
  • MCP, CLI, REST & dashboard
  • Ad platforms
  • ChatGPT & Claude
  • Any MCP client

For larger teams

Business

Coordinate more accounts and people across your organization.

€79/ month

Billed monthly

60 active ad accounts15 editing members
Join the waitlist

Early access by invitation

Included with Business

  • Preview and approve ad changes
  • Budget caps & protected accounts
  • 730-day audit history
  • Unlimited isolated projects
  • Free read-only viewers
  • MCP, CLI, REST & dashboard
  • Ad platforms
  • ChatGPT & Claude
  • Any MCP client
Free

Start with a read-only view.

3 active ad accounts · 1 member · 30-day audit history. Unlimited projects and free read-only viewers.

€0forever
Join the waitlistNo card required
11 ad platforms
ChatGPT PluginClaude ConnectorAny MCP client Other AI agents

Prices are per organization. Active accounts and editing members are shared across its projects. Viewers can see results, but cannot change ads.

Enterprise

A little more room for your team.

More than 60 active accounts or 15 editing members? Let’s put together a plan for your organization.

Talk to us

Prefer to host it yourself? The open-source CLI and local MCP server remain free. Explore the source.

Resources

Make the next review easier.

Practical guides to AI workflows, Google Ads, and client operations.

All guides

Early access

Bring your whole team behind the gate.

Adport Cloud is in early access: hosted MCP with sign-in, team workspaces and the same preview on every change. Join the Cloud waitlist and we’ll write once, when your spot opens.

By joining, you agree to receive an early-access email. No newsletter. Privacy

Message Yannick

Yannick, Adport founder
Hey, I’m Yannick, the founder.

Have a question? Send me a message. I read every one.

Your email and message are used to reply. Privacy

Prefer email? yannick@adport.dev ↗