Run codex mcp add paidsync --url https://mcp.paidsync.ai/mcp, then codex mcp login paidsync, and sign in with your PaidSync login. Codex then has 610+ tools across 14 platforms, including Google Ads, Meta Ads, TikTok Ads and LinkedIn Ads. The Codex CLI, the IDE extension and Codex in the ChatGPT desktop app all read that one entry.
One command. OAuth sign-in, no key pasted. Free plan, 15 tasks a month, no card.
Connect Google Ads in the PaidSync dashboard, then add PaidSync to Codex once. PaidSync is a remote MCP server, so Codex needs one URL and a sign-in:
codex mcp add paidsync --url https://mcp.paidsync.ai/mcp
codex mcp login paidsyncThe login opens a browser window. Sign in with your PaidSync login and Codex stores the token. The same entry reaches Meta Ads, LinkedIn Ads, TikTok Ads, GA4 and every other platform you connect in PaidSync, so there is nothing extra to add per platform.
Takes 10 seconds. Google or email sign-in. The free plan is 15 tasks a month at $0, no card.
Click Connect on each platform you run. Google Ads authorizes via Google OAuth, Meta Ads via Facebook OAuth, LinkedIn Ads via LinkedIn OAuth and TikTok Ads via TikTok OAuth. Merchant Center, GA4 and Search Console use the same Google sign-in. PaidSync stores the tokens encrypted at rest with AES-256-GCM.
After each sign-in, PaidSync lists the ad accounts that login can reach. Tick the ones that belong in this workspace. Codex only ever sees the accounts you pick.
In your terminal, run:
codex mcp add paidsync --url https://mcp.paidsync.ai/mcpThen run codex mcp login paidsync and sign in with your PaidSync login in the browser window that opens. Codex registers itself with PaidSync automatically, so there is no client ID or key to paste.
The command writes a [mcp_servers.paidsync] entry to ~/.codex/config.toml. The Codex CLI, the Codex IDE extension and Codex in the ChatGPT desktop app all read that file, so one setup covers all three. Type /mcp in a Codex CLI session to see paidsync listed.
In Codex ask: “List my ad accounts”
Codex returns the account names and IDs across every platform you connected. Then try: “Show me last 7 days spend by platform”
Prefer to edit the file? Codex keeps MCP servers in ~/.codex/config.toml, or in .codex/config.toml inside a trusted project. PaidSync is a streamable HTTP server, so the entry is one URL:
[mcp_servers.paidsync]
url = "https://mcp.paidsync.ai/mcp"
default_tools_approval_mode = "writes"The default_tools_approval_mode = "writes" line makes Codex ask before any PaidSync tool that is not marked read-only. Save the file, then run codex mcp login paidsync and sign in.
For headless runs where nobody can sign in, send an API key in a header instead. Keep the key in an environment variable and name it in the entry:
[mcp_servers.paidsync]
url = "https://mcp.paidsync.ai/mcp"
bearer_token_env_var = "PAIDSYNC_API_KEY"Codex sends it in the Authorization: Bearer header, so the key never sits in the URL or in the file. Applying a change to Google Ads still requires the OAuth sign-in. On other platforms a key can apply changes too, so treat it like a password and prefer OAuth.
The Codex extension for VS Code, Cursor and Windsurf reads the same config.toml, so if you already ran the command there is nothing to add. To add PaidSync from the editor instead, open the gear menu, then MCP servers, then Add server. Name it paidsync, choose Streamable HTTP, and paste the URL:
https://mcp.paidsync.ai/mcpSave the server and select Restart extension. The server list marks servers that need OAuth, so select Authenticate next to paidsync and sign in with your PaidSync login.
On the desktop, Codex runs inside the ChatGPT desktop app for macOS, Windows and Linux, and it reads the same config.toml as the CLI. To add PaidSync from the app, open Settings, then MCP servers, then Add server. Name it paidsync, choose Streamable HTTP, enter https://mcp.paidsync.ai/mcp, save, and select Restart.
Select Authenticate when the list shows paidsync needs a sign-in, then type /mcp in the composer to check it is connected.
Yes, in the ChatGPT desktop app. OpenAI runs one plugin directory for ChatGPT and Codex, and PaidSync is listed in it. Open Plugins, search PaidSync, install it, and sign in with your PaidSync login when prompted. The Codex IDE extension does not support plugins, so in the editor use the command or the MCP servers menu above. The ChatGPT setup guide covers the same directory from ChatGPT itself.
The same server covers every platform, so one Codex session can move from Google Ads to Meta to GA4. The last column says whether the call can change anything in the account.
| Ask | Tools it calls | Changes your account? |
|---|---|---|
| “Audit the Google Ads account and list the five biggest fixes” | run_account_audit | No |
| “Which search terms spent money this month with zero conversions?” | get_search_terms_report | No |
| “Show Meta performance by placement for the last 14 days” | get_fb_performance_by_placement | No |
| “Break down LinkedIn spend by job title” | get_linkedin_performance_by_dimension | No |
| “Sessions and key events by source and medium, last 28 days” | run_ga4_report | No |
| “Pause the TikTok campaign with the worst cost per conversion” | pause_tiktok_campaign | Yes, after you confirm |
| “Add these five terms as negatives on the Brand campaign” | add_negative_keywords | Yes, after you confirm |
Yes. Reports, audits and lookups only read. Budget, bid, status, keyword, audience and campaign changes are writes. Over MCP, the human check is Codex’s own approval prompt, and default_tools_approval_mode = "writes" on the paidsync server makes it ask before any tool that is not marked read-only. On the PaidSync side, most create tools preview with dry_run first, destructive operations such as the delete, remove and pause tools need confirm_destructive, and a pre-write rule check blocks unsafe arguments. Some Google Analytics, Tag Manager and upload tools have no dry run and apply on the first call. Applied changes are logged, on a best-effort basis, with a 7-day before-and-after outcome. The approval card and one-tap undo exist only in the PaidSync workspace.
Sign up at paidsync.ai and connect Google Ads in the PaidSync dashboard. Then run codex mcp add paidsync --url https://mcp.paidsync.ai/mcp and codex mcp login paidsync, and sign in with your PaidSync login. The same entry reaches Meta Ads, LinkedIn Ads, TikTok Ads and every other platform you connect.
No. The Codex CLI, the Codex IDE extension and Codex in the ChatGPT desktop app share ~/.codex/config.toml, so a server added in one is there in the others. If the IDE extension or the app lists paidsync as needing a sign-in, select Authenticate and sign in with your PaidSync login.
No. OAuth is the primary path. Run codex mcp login paidsync once and sign in with your PaidSync login. For headless runs, bearer_token_env_var in config.toml sends a key in the Authorization header, never in the URL. Applying a change to Google Ads still requires the OAuth sign-in.
Yes. Over MCP, the human check is Codex’s own approval prompt. Set default_tools_approval_mode = "writes" on the paidsync server and Codex asks before any PaidSync tool that is not marked read-only. On the PaidSync side, dry_run previews most creates, and destructive operations need confirm_destructive.
Yes, in the ChatGPT desktop app. OpenAI runs one plugin directory for ChatGPT and Codex, and PaidSync is listed in it. Open Plugins, search PaidSync, install it, and sign in with your PaidSync login. The IDE extension does not support plugins, so there you add the server with the command or the MCP servers menu.
Yes. Put the [mcp_servers.paidsync] entry in a .codex/config.toml at the repo root. Codex reads project config in trusted projects, and every engineer signs in with their own PaidSync login.
Yes. The free plan is $0 for 15 tasks a month with no card. Pro starts at $99 a month and Team at $249 a month.
610+ tools. 14 platforms. One codex mcp add.