1. Connect your agent
Add https://www.askmyads.ai/api/mcp to your agent as a remote MCP server. It walks you through AskMyAds sign-in and a consent screen that says, in plain words, exactly what the agent can and cannot do.
For power users
A raw Google Ads token is too much to hand an LLM. AskMyAds MCP is the safe version of that idea: any MCP client, Claude Code, Codex, ChatGPT, Cursor or Grok, gets read access and an approval-first write path where a human confirmation code is the only way anything reaches your account. Included with every paid plan.
Set up AskMyAds MCP for me, finish the account-readiness steps with me, and then review my measured ad waste. Server: https://www.askmyads.ai/api/mcp Transport: remote MCP over Streamable HTTP with OAuth. Security rules: - Never ask me to paste an AskMyAds API key, password, Google token, session cookie, or confirmation code into a config file or this setup prompt. Authentication must use the browser OAuth flow. - Determine which application is hosting this conversation from your own runtime context. Configure exactly that client; do not configure both Codex and Claude Code just because both commands may be installed. If you cannot identify the host, ask me before running setup commands. - Inspect any existing MCP entry named askmyads before changing it. If it points to a URL other than https://www.askmyads.ai/api/mcp, stop and report the conflict. Do not overwrite it. Client setup: - In Codex, inspect with `codex mcp get askmyads`. If absent, run `codex mcp add askmyads --url https://www.askmyads.ai/api/mcp`. Then run `codex mcp login askmyads`. - In Claude Code, inspect with `claude mcp get askmyads`. If absent, run `claude mcp add --scope user --transport http askmyads https://www.askmyads.ai/api/mcp`. Then run `claude mcp login askmyads`. - In another client, do not invent commands. Tell me to add the server URL as a remote HTTP MCP server, then continue after its browser OAuth flow finishes. - Let me complete sign-in and consent in the browser. Verify the connection and tool list afterward. If OAuth succeeds but the tools are unavailable in this conversation, tell me to restart the client or open a fresh conversation; do not repeatedly reinstall the server. Account readiness: - Call list_projects first. If there is one project, use its id. If there are several, show me their names and ids and ask which one to use; never guess. Pass the chosen projectId to get_setup_status and every later tool call. - Treat get_setup_status as the source of truth and follow only its nextAction, one step at a time. - If nextAction.kind is call_tool, call the named MCP tool with its supplied arguments yourself. In particular, run Waste Scans with run_waste_scan; do not send me to the dashboard for something you can do. After it returns successfully, check setup once. If it reports a failure, tell me and stop instead of retrying automatically. - If nextAction.kind is open_url, give me the URL and explain the required browser action in one sentence. Re-check setup only after I say it is complete. - If nextAction.kind is wait, explain what is still running and stop. Do not poll in the background. - list_projects, get_setup_status, and run_waste_scan work before a paid plan is active. The remaining advertising reads and proposal tools require a paid plan. Analysis and safety: - Once ready is true, read the latest Waste Scan and relevant account data. Use only numbers returned by the tools. Never estimate, extrapolate, or fill a gap with a plausible figure. If a read fails, report the failure without guessing at its cause. - Tell me the single most expensive measured issue worth fixing and why. Before proposing any spend increase, show the current and proposed values side by side and explain the expected effect. - A proposal is a DRAFT and does not change an ad account. Never claim a proposal was applied. - Applying or reverting requires a one-time code emailed to me. The code never appears in MCP output. Ask me to relay it only after showing the exact proposal. Codes expire after 15 minutes, work once, and are void after 5 wrong attempts. If delivery fails or a code expires, call request_confirmation. - New campaigns are created paused. Nothing spends until I enable it.
Add https://www.askmyads.ai/api/mcp to your agent as a remote MCP server. It walks you through AskMyAds sign-in and a consent screen that says, in plain words, exactly what the agent can and cannot do.
Your agent reads live campaign settings, performance with deltas, Waste Scan findings, and your saved business context - the same server-computed numbers the AskMyAds dashboard shows. No raw API tokens, no scraping.
When your agent proposes a change - negative keywords, a budget, a whole new campaign - AskMyAds emails you a one-time confirmation code. You relay it to your agent to approve. The agent never sees the code on its own, every change shows its exact contents first, and every change has one-click undo.
Every client uses the same server URL. Sign-in and consent happen in your browser; manage or revoke connected agents any time from Settings. The server publishes the AskMyAds logo so connect cards can show the mark instead of a generic icon.
codex mcp add askmyads --url https://www.askmyads.ai/api/mcp codex mcp login askmyads
Add the remote server, then start OAuth. Codex opens AskMyAds sign-in and consent in your browser.
claude mcp add --scope user --transport http askmyads https://www.askmyads.ai/api/mcp claude mcp login askmyads
Add the remote server for your user account, then start OAuth. Claude Code opens AskMyAds sign-in and consent in your browser.
https://www.askmyads.ai/api/mcp
In ChatGPT, open Settings, then Apps, then Advanced settings, and turn on Developer mode - a one-time step required before custom connectors are available. Back in Apps, choose Create and add a new connector with the server URL below. ChatGPT handles the sign-in and consent flow in your browser.
https://www.askmyads.ai/api/mcp
In Cursor, open Customize from the sidebar, go to MCPs, and add a custom server with the URL below, then complete the browser sign-in and consent flow. Treat this as manual setup rather than asking a chat prompt to edit Cursor's settings.
https://www.askmyads.ai/api/mcp
Any client that speaks MCP over Streamable HTTP with OAuth works the same way: point it at the URL below, sign in to AskMyAds in the browser, and review the consent screen. Grok and other agents connect through their own MCP or connector settings.
23 tools in three groups. Project and setup checks work before upgrade; advertising data requires a paid plan. Anything that would change your account is a proposal until you confirm it.
The same server-computed numbers the AskMyAds dashboard shows. No raw API access, no scraping.
list_projectsYour projects, one business each. Pass a project's id as projectId to any tool to work in it.
get_setup_statusThe exact connection, advertiser, Waste Scan, and plan steps still needed for one project.
list_accountsThe Google Ads accounts connected to your workspace.
get_business_contextYour saved business profile: offerings, customers, goals, terms to avoid.
get_campaign_settingsLive campaign settings: budgets, bidding, networks, geo targeting.
get_performance_summarySpend, clicks, conversions, and cost deltas over a window.
get_country_performanceSpend and conversions per country over the last 90 days.
get_ad_performanceEach headline and description with Google's rating, and the combinations Google served.
forecast_budget_changeWhat a campaign would do at another daily budget, from Google's simulation when it has one.
get_keyword_costsGoogle's Keyword Planner costs for a campaign's keywords per country, and what a daily budget buys at them.
get_reels_performanceThe project's organic Instagram reels ranked against their own history. Coming soon - pending Meta approval.
get_meta_scan_reportYour latest Meta Waste Scan findings for the selected Meta account. Coming soon - pending Meta approval.
get_scan_reportYour latest Waste Scan findings with evidence.
run_waste_scanRun the same read-only Google Ads Waste Scan available on the Ask page and return its finished report.
list_proposalsRecent change proposals and their current status.
get_proposalOne proposal in full: exact changes, status, outcome.
Drafts only. Every proposal passes the same spend guardrails and write gates as the dashboard, and nothing touches Google Ads or Meta yet.
create_change_proposalDraft a change to existing campaigns: negative keywords, budgets, bidding, and more.
draft_campaignDraft a complete new Search campaign, created paused so nothing spends until you enable it.
propose_reel_boostPropose boosting an Instagram reel inside your approved Boost Policy. Coming soon - pending Meta approval.
Applying a proposal requires the one-time code from your email. Your agent can never approve on its own.
approve_proposalApply a proposal (a Google change or a reel boost) using the confirmation code you relay.
reject_proposalDiscard a proposal. No code needed to say no.
revert_proposalUndo an applied change, also code-confirmed.
request_confirmationSend a fresh code to your email if the last one expired.
You ask for a change, or your agent suggests one. It calls the propose tool and AskMyAds records a proposal with the exact changes, line by line. Nothing has touched Google Ads.
AskMyAds emails a one-time code to the account owner. The code is never included in any MCP response, so your agent cannot approve its own work.
You read the proposed changes, then tell your agent the code. Codes expire after 15 minutes, work exactly once, and are voided after 5 wrong attempts. Expired? Your agent can request a fresh one.
The change executes through the same pipeline as the dashboard: spend guardrails, a preflight validation, and one-click undo. New campaigns are created paused, so nothing spends until you enable it.
An AskMyAds account. Every account can connect an agent, list its projects, check setup, and run its value-first Waste Scan. An active paid plan unlocks the remaining advertising-data and proposal tools.
No. Approval requires a one-time code that is emailed to the account owner and never appears in any MCP response. Codes expire after 15 minutes, work exactly once, and are voided after 5 wrong attempts. Relaying the code to your agent is the approval.
Everything a proposal shows in the dashboard, your agent gets as text: the exact changes line by line before you approve, and one-click undo after. Reverting over MCP is code-confirmed too.
From Settings, under Connected agents. Revoking deletes every live token immediately; the agent's next request is a 401 and it has to go through sign-in and consent again.
Yes: 30 requests per 5 minutes and 300 per day per workspace, separate from the in-app chat, so a runaway agent cannot starve your dashboard.
It is the first thing to ask for. In about five minutes, read-only, it names what your account wasted last month in dollars from your own numbers. Then keep asking: how the ads are doing, which keywords to add, what a new campaign should look like. Any fix it suggests waits for your approval, and so does any campaign it drafts.
Run your free Waste Scan