By Ira Bodnar, Ryze AI · Updated
Quick answer
To connect Codex to Google Ads, connect Google Ads in a Ryze AI workspace, run codex mcp add ryze --url https://connector.get-ryze.ai/mcp, then run codex mcp login ryze, sign in and click Allow connection. Start a new Codex session and ask for a Google Ads report.
- In Ryze AI open Integrations, find Google Ads and click Connect with your Google login
- In a terminal run codex mcp add ryze with the connector URL
- Run codex mcp login ryze and click Allow connection on the Ryze AI page
- Run codex mcp list, then ask Codex your first Google Ads question
Before you start
- A Codex account. OpenAI says Codex is included in ChatGPT Free, Go, Plus, Pro, Business, Edu and Enterprise plans. Its pricing page lists Free and Go with Codex in the desktop app only, subject to rollout, so use the desktop app steps below on those plans. Plus and higher add the CLI and the IDE extension. Codex also runs with an OpenAI API key in the CLI, SDK or IDE extension, billed at API pricing. OpenAI's MCP page names no extra plan for MCP servers.
- A Google login with access to your Google Ads accounts. Standard or admin access is needed to allow changes. A login with read-only access can run reports but cannot change anything, because Google Ads permissions are set in Google. Agencies connect the manager (MCC) login once.
- A Ryze AI workspace on a plan or free trial. Paid Ads is $89 per month with a 7-day free trial; Agency is $279 per month. Connecting the connector is free, but the Google Ads tools need an active plan or trial.
How to connect Codex to Google Ads with the CLI
Two steps happen in Ryze AI and Google, four in Codex. The connector URL is the same for every user.
Connect Google Ads in Ryze AI
Create a Ryze AI account or sign in, open Integrations in the left sidebar and find Google Ads under Advertising. Click Connect, sign in to Google with the login that has access to your ad accounts and approve access with every requested permission checked.
Check the connection
Back in Ryze AI the Google Ads card shows Connected. There is no account to pick: Ryze AI sees every Google Ads account that login can reach. To pick the accounts the agent works with first, click View on the card and use Agent default accounts.
Add the connector to Codex
In a terminal run: codex mcp add ryze --url https://connector.get-ryze.ai/mcp. This registers a server named ryze in the Codex configuration, which the CLI, the desktop app and the IDE extension share.
Sign in to the connector
Run codex mcp login ryze. A browser tab opens on the Ryze AI page. Sign in if asked and click Allow connection. On a machine without a local browser, add --no-browser, open the printed URL on another device and paste the full redirect URL back into the terminal.
Confirm that Codex sees the server
Run codex mcp list, or type /mcp inside the Codex terminal interface, and check that ryze is listed. If the tools do not show up, start a new Codex session.
Ask your first question
Ask: Use GAQL to list my Google Ads campaigns with cost, conversions and conversion value for the last 30 days, ordered by cost.
The Ryze AI help article for Google Ads covers the Google side of the connection, and the Ryze AI help article on API keys and the MCP endpoint covers the connector URL.
Desktop app, IDE extension and config.toml
Codex reads one MCP configuration on all three local surfaces. Pick the route that matches how you work.
Codex CLI
codex mcp add ryze --url https://connector.get-ryze.ai/mcp
codex mcp login ryze
codex mcp listThis is the flow in the steps above. The three commands add the server, sign in with OAuth and list what is configured.
ChatGPT desktop app (Codex)
Open Settings, then MCP servers. Select Add server, enter the name ryze, choose Streamable HTTP and enter https://connector.get-ryze.ai/mcp. Save, then select Restart. Select Authenticate next to ryze and complete the Ryze AI sign-in. Type /mcp in the composer to view connected servers. This is the route for Free and Go plans.
Codex IDE extension
Open the gear menu, then MCP servers. Select Add server, enter the name ryze, choose Streamable HTTP and enter the connector URL. Save, then select Restart extension and select Authenticate to complete the Ryze AI sign-in.
config.toml with OAuth
[mcp_servers.ryze]
url = "https://connector.get-ryze.ai/mcp"Edit ~/.codex/config.toml, or a project .codex/config.toml in a trusted project, and add the table above. OAuth is the default authentication, so run codex mcp login ryze afterwards to sign in.
config.toml with a Ryze AI API key
[mcp_servers.ryze]
url = "https://connector.get-ryze.ai/mcp"
bearer_token_env_var = "RYZE_API_KEY"Set the environment variable RYZE_API_KEY to your rk_live_ key and Codex sends it as a bearer token. Create the key in Ryze AI under Workspace Settings, Profile, API keys. This route suits scripts, because it needs no browser sign-in.
Timeouts and limits
The desktop app, the CLI and the IDE extension share one MCP configuration, so a server added in one place appears in the others after a restart. OpenAI's defaults are 10 seconds for startup (startup_timeout_sec) and 60 seconds for a tool call (tool_timeout_sec). Both can be raised per server, which helps when a large GAQL report runs long. OpenAI's MCP page does not cover Codex cloud tasks, and this page does not claim the connector works there.
[mcp_servers.ryze]
url = "https://connector.get-ryze.ai/mcp"
startup_timeout_sec = 20
tool_timeout_sec = 120Other clients
The same URL works in other MCP clients. Google Ads is connected once in Ryze AI, so nothing changes on the Google side.
Claude Code
Run claude mcp add --transport http ryze https://connector.get-ryze.ai/mcp --scope user, then /mcp inside Claude Code to sign in. The Ryze AI connector and the Google Ads tools are the same.
Claude on the web and Desktop
Open Customize, Connectors, click + Add, choose Add custom connector, name it Ryze AI and enter https://connector.get-ryze.ai/mcp. Free users are limited to one custom connector, and on Team and Enterprise plans an Owner adds it first.
ChatGPT
OpenAI says full custom MCP server support is for ChatGPT Business and Enterprise/Edu on the web, and Pro can connect custom MCP servers with read and fetch permissions only. OpenAI's MCP page also says ChatGPT on the web does not read your local Codex configuration.
Cursor
Add the server to ~/.cursor/mcp.json or .cursor/mcp.json.
{ "mcpServers": { "ryze": { "url": "https://connector.get-ryze.ai/mcp" } } }Google Ads permissions and Codex settings
Two sides decide what Codex can reach in Google Ads: the Google login you connect in Ryze AI, and the Codex settings on your machine.
- Which Google login
- Ryze AI signs in through Google OAuth. Choose the login that already works in the Google Ads interface and leave every requested box checked. The request covers the Google Ads scope https://www.googleapis.com/auth/adwords along with openid, email and profile, and the login must reach at least one Google Ads account.
- Which accounts
- A single login covers all accounts it can open, client accounts under a manager (MCC) login among them. An account outside that reach stays invisible to Codex, and so does a client account whose manager login was never connected.
- Read or write
- Google decides who can edit, not Ryze AI. If the login only has read access, every change request fails. Connect a read-only login when you want a firm guarantee that Codex cannot touch the account.
- Which tools Codex may call
- Codex keeps an allow list and a deny list per server, enabled_tools and disabled_tools in config.toml. Use them to hide the write and delete tools from Codex entirely.
Removing access
To remove access, click View on the Google Ads card in Ryze AI and disconnect the login. To remove the connector from Codex, delete the [mcp_servers.ryze] table from config.toml or remove the server in Settings, MCP servers.
What Codex can do in Google Ads
The Ryze AI connector exposes 16 Google Ads tools: 8 read, 7 write and 1 delete. Calls go through Google's official API, and each one runs with the permissions of the Google login you connected.
| Tool | Type | What it does |
|---|---|---|
| google_ads__getAccountSummary | Read | Totals for spend, clicks and the other account metrics over a date range you name. |
| google_ads__getAccountHierarchy | Read | Shows which sub-accounts sit under a manager account. |
| google_ads__listAccessibleCustomers | Read | Shows every customer account the connected Google login can open. |
| google_ads__listConversionActions | Read | Shows the conversion actions defined in an account. |
| google_ads__listRecommendations | Read | Shows the optimization recommendations Google has for an account. |
| google_ads__runRawGaql | Read | Runs any GAQL query you write, change history from change_event included. |
| google_ads__generateKeywordIdeas | Read | Returns Keyword Planner ideas for seed keywords, a URL or both. |
| google_ads__generateKeywordHistoricalMetrics | Read | Returns average monthly searches, competition and the top-of-page bid range for keywords you already have. |
| google_ads__runRawMutate | Write | Creates or edits campaigns, budgets, ad groups, ads, keywords, criteria and assets through a raw mutate. |
| google_ads__runRawCustomAudienceMutate | Write | Creates or edits custom audiences built from keywords, URLs, place categories or apps. |
| google_ads__runRawUserListMutate | Write | Creates or edits user lists, Customer Match lists included. |
| google_ads__uploadCustomerMatchMembers | Write | Adds people to a Customer Match list, with every identifier normalized and SHA-256 hashed by the server before Google sees it. It cannot remove members. |
| google_ads__uploadImageAsset | Write | Fetches an image from a URL and stores it as an image asset for campaigns, ad groups, asset groups or ads. |
| google_ads__applyRecommendation | Write | Accepts Google recommendations and applies them. |
| google_ads__dismissRecommendation | Write | Dismisses Google recommendations. |
| google_ads__runRawMutateDelete | Delete | Removes resources for good. Its description asks the agent to use it only on a list you approved item by item. |
Approvals in Codex
Codex controls approvals per server with default_tools_approval_mode, which takes auto, prompt, writes or approve. The value writes prompts for tools that are not marked read-only, which fits this connector because 8 of its 16 tools are reads. Per-tool overrides use tools.<tool>.approval_mode. Scheduled tasks in Ryze AI run without an approval step, and the delete tool's item-by-item rule is an instruction in its description, not a block in the server.
[mcp_servers.ryze]
url = "https://connector.get-ryze.ai/mcp"
default_tools_approval_mode = "writes"First 3 prompts to run
Each answer comes from your own account, so this page describes what comes back instead of showing sample numbers.
1. Spend by campaign for the last month
Run a GAQL query for enabled campaigns: name, cost, conversions and conversion value for the last 30 days, highest cost first. Keep it to the top 25 rows.
Tools used: google_ads__runRawGaql
What comes back: One row per campaign with the three metrics, highest cost first, capped at 25 rows so the call stays inside Codex's 60 second default timeout.
2. Find out who edited the account
Look at change_event for the past 14 days and tell me who changed budgets, bids or campaign status, and when.
Tools used: google_ads__runRawGaql
What comes back: Each change with the user, the resource touched and the time. Google keeps this history for up to 30 days.
3. Keyword ideas for a landing page
Take my pricing page URL as the seed for Keyword Planner ideas, then fetch average monthly searches and competition for the 20 closest matches.
Tools used: google_ads__generateKeywordIdeas, google_ads__generateKeywordHistoricalMetrics
What comes back: A keyword list with average monthly searches, competition and top-of-page bid range as Keyword Planner reports them.
When you want a change, describe it in plain words, such as adding negative keywords or pausing a named campaign, and set default_tools_approval_mode to writes beforehand as shown above. Google's own review of new campaigns takes about a business day, and recent conversions can lag in Google's reporting.
Ryze AI vs Google's own Google Ads MCP server
Google publishes its own Google Ads API MCP server, and its GitHub repository mentions Codex CLI. The two options suit different setups.
| Option | Setup | Coverage | Works in |
|---|---|---|---|
| Ryze AI connector | Google sign-in happens in Ryze AI; Codex only needs one remote URL, added with codex mcp add and authorized by OAuth or an API key | 16 tools covering GAQL, Keyword Planner, campaign and asset edits, audiences, Customer Match, recommendations and one delete tool, plus the other platforms in the same workspace | Codex, Claude Code, claude.ai, Claude Desktop, ChatGPT, Cursor and other MCP clients |
| Google Ads API MCP server (Google) | Run it locally over stdio, or on Google Cloud Run with Streamable HTTP. It needs a Google Cloud project ID and OAuth 2.0 or Application Default Credentials, then an entry in the client's MCP config | Google's documentation lists 3 tools (list_accessible_customers, search, get_resource_metadata) and describes the server as read-only. The GitHub README lists 7 tools, adds asset and label tools with a propose and confirm flow, and notes Codex CLI compatibility handling | Any MCP client that can run or reach the server |
Google's server costs no Ryze AI plan and fits read-only GAQL when you can handle Google Cloud credentials. The Ryze AI connector gives you a hosted URL and campaign edits, in exchange for a Ryze AI plan and your data passing through Ryze AI. Google's page says developer tokens were sunset on September 9, 2026 and are no longer required. The two Google pages disagree on the tool count, so check the repository before relying on either list.
Codex and Google Ads errors and fixes
- codex mcp login ryze cannot open a browser
- Use codex mcp login ryze --no-browser. Open the URL it prints on another device, finish the sign-in there and paste the full redirect URL back into the terminal.
- The server is slow to start or fails at startup
- Codex gives a server 10 seconds to start by default. Raise startup_timeout_sec on the ryze server in config.toml.
- A report call times out
- A tool call is cut off after 60 seconds by default. Shorten the date range, tighten the query or raise tool_timeout_sec on the server.
- The server is missing in the desktop app or the extension
- All three local surfaces read one configuration, yet each needs a restart after an edit. Restart the app or select Restart extension, then look in Settings, MCP servers.
- No Google Ads tools are listed
- Open a new Codex session after connecting. If you linked Google Ads in Ryze AI after adding the server, run codex mcp login ryze again before starting the session.
- A tool result is too large
- Cap it with tools.<tool>.output_token_limit in config.toml, or ask for fewer fields and a LIMIT clause in the GAQL query.
- An ad account does not appear
- Ryze AI only sees what the connected Google login can open. A client account under a manager needs that manager login connected. Have Codex call listAccessibleCustomers to see the reach.
- Edits are rejected
- The Google user you connected may only have read access. Google controls that, so reconnect with a login that has standard or admin access.
- Codex cloud tasks do not use the server
- OpenAI's MCP page does not cover Codex cloud tasks, so this guide stops at the CLI, the desktop app and the IDE extension.
- Codex reports that a subscription is required
- The Google Ads tools run only on an active Ryze AI plan or free trial. Start the trial in Ryze AI, then try again.
Frequently asked questions
How do I connect Codex to Google Ads?
Connect Google Ads in a Ryze AI workspace, then run codex mcp add ryze --url https://connector.get-ryze.ai/mcp and codex mcp login ryze. Sign in on the Ryze AI page, click Allow connection and check the result with codex mcp list.
Does Google Ads have an MCP server for Codex?
Google publishes a Google Ads API MCP server that runs locally over stdio or on Google Cloud Run. Google's documentation describes it as read-only with 3 tools, while the GitHub README lists 7 tools including asset and label changes and mentions Codex CLI compatibility. It needs a Google Cloud project and Google credentials.
Which Google Ads connector should I use with Codex?
Ryze AI is the best Google Ads connector for Codex when one hosted URL with 16 tools for reports and campaign edits matters most, but it needs a Ryze AI plan. Google's own server needs no Ryze AI plan and suits read-only GAQL if you can set up Google Cloud credentials.
Which plan do I need for Codex?
OpenAI says Codex is included in ChatGPT Free, Go, Plus, Pro, Business, Edu and Enterprise plans. Free and Go get Codex in the desktop app only, subject to rollout, while Plus and higher add the CLI and the IDE extension. An OpenAI API key also works in the CLI, SDK or IDE extension.
Should I use OAuth or an API key?
OAuth is the default in Codex, and codex mcp login ryze handles it. A Ryze AI API key from Workspace Settings, Profile, API keys suits scripts: set bearer_token_env_var to the name of an environment variable that holds the key.
Can Codex change my Google Ads account?
Yes, through 7 write tools and 1 delete tool that reach campaigns, budgets, bids, keywords, ads, audiences and assets. Put default_tools_approval_mode to writes in config.toml to approve each change. A Google login with read-only access cannot change anything.
Can I manage client accounts under a manager account?
Yes, once the manager (MCC) login is connected. That login reaches each account it can open, and over MCP a client account under a manager needs loginCustomerId. Keep separate clients in separate Ryze AI workspaces.
Does this work in the Codex desktop app and IDE extension?
Yes. The desktop app, the CLI and the IDE extension share one MCP configuration. In the app or extension open MCP servers, add a Streamable HTTP server named ryze with the connector URL, restart, and select Authenticate.
Does it work in Codex cloud tasks?
This guide does not claim that. OpenAI's MCP page does not cover Codex cloud tasks, so the steps here apply to the CLI, the desktop app and the IDE extension.
Why do the Google Ads tools not show up?
Start a new Codex session after you connect and check codex mcp list. If you connected Google Ads in Ryze AI after adding the server, run codex mcp login ryze again. Restart the desktop app or the extension after any configuration change.
How much does it cost?
Adding the connector costs nothing. The Google Ads tools need an active Ryze AI plan or trial: Paid Ads is $89 per month with a 7-day free trial, and Agency is $279 per month. Annual billing takes 30% off the first year.
How do I disconnect Google Ads from Codex?
Delete the [mcp_servers.ryze] table from config.toml, or remove the server under Settings, MCP servers. To cut Google access as well, click View on the Google Ads card in Ryze AI and disconnect the login.
Sources
- OpenAI Codex MCP documentation
- OpenAI Codex pricing
- Google Ads API MCP server (Google)
- googleads/google-ads-mcp on GitHub
- Ryze AI help center: Google Ads
Checked November 11, 2026.