Connect
Bring your own Claude.Ripple brings the guardrails.
One hosted MCP endpoint puts your Meta and Google Ads accounts in front of the assistant you already use. It reads what Ripple has synced and asks Ripple for changes — and Ripple applies a change only if every one of your spend ceilings passes, then reads it back and keeps the undo.
Live, inside your guardrails.Two minutes
Three steps, then a conversation.
No server to host, no OAuth app to register, no developer token to apply for. Ripple already did that part.
Connect your ad accounts
Sign in with Meta and Google. Pick the ad accounts Ripple may see. Set the spend ceilings you want every change checked against.
Create a token
Read-only, or read-and-change. Scope it to some accounts or some tools if you like. Copy it once — Ripple keeps only a hash.
Paste one URL into your assistant
Claude Code, Claude Desktop, Cursor, ChatGPT, n8n — anything that speaks MCP over HTTP. Then ask a question.
MCP server URL
https://ads.ripplestrategies.ca/api/mcpStreamable HTTP, bearer-authenticated. The same address serves Meta and Google.
Connect
Your assistant asks.Your guardrails answer.
Other MCP servers hand your assistant the keys and hope it is careful. Ripple's tools cannot reach Meta or Google at all — every write becomes a proposed change that only executes if your daily and monthly ceilings, per-change limits and kill switches all pass. When one refuses, the tool says which, so the answer is a sentence instead of a surprise on the invoice.
- Read-only tokens, or tokens scoped to some tools and some ad accounts
- Every call logged with the token that made it
- Every executed change read back from the platform and reversible
Which of my Meta campaigns spent the most for the fewest leads this week?
↳ list_campaigns · 7 days
“Spring promo — broad” spent $612 for 4 leads ($153 each). Your other two campaigns are at $38 and $41 a lead. Want me to cut its budget?
Drop it to $40 a day and put the difference on the $38 one.
⊘ set_campaign_daily_budget · $120 → $40
Refused by a guardrail: “percentage budget-decrease limit exceeded” — your maximum step down is 50%. I can take it to $60 today.
Do that.
↳ set_campaign_daily_budget · $120 → $60 · executed · rollback: chg_7f2k
Done and read back from Meta. The other campaign is at $80 — the increase cleared every ceiling. Say “undo” and I roll either one back.
Tools
What your assistant can do.
Reads answer from the data Ripple has already synced, so a question costs nothing against platform quotas. Writes are proposed changes that the same executor Ripple's own agents use must clear.
Read
get_workspaceStart here. The workspace name, plan, connected ad accounts (with currency and whether Ripple may change them), data freshness, and the spend ceilings every change is checked against.
list_campaignsCampaigns across the connected accounts with budget, status, whether Ripple manages them, and spend/results over the window. Use the returned id with get_campaign and the write tools.
get_campaignOne campaign in depth: its ad sets / ad groups and ads, each with status, bids or targets, and performance over the window.
get_performance_summaryTotals across the connected accounts over the window — spend, impressions, clicks, conversions, leads, revenue — per platform and per ad account, with derived cost-per-result figures.
get_breakdownOne campaign split by a dimension — device, placement, age_gender, region, hour, conversion_category, or search_term (Google search terms; the input to add_negative_keyword). Sorted by spend.
get_changesEvery change Ripple made or refused recently — from this assistant, from the dashboard, or from an agent — with who asked, why, the guardrail that blocked it if one did, and whether it can still be rolled back.
get_pending_approvalsChanges Ripple has proposed and is waiting on, including approval packages.
get_leads_summaryHow many leads arrived and what state they are in. Counts and statuses only — never a name, phone number or email.
get_seo_auditThe most recent on-page SEO audit of the customer’s website (Dashboard → SEO): score, pages crawled, every finding with how many pages it affects and the fix, and the worst pages. Pass auditId for an earlier one. Audits are started from the dashboard, not from here.
get_rankingsEvery keyword the workspace tracks (Dashboard → SEO → Rankings) with its latest Google position, the change since the previous reading, its best ever, and the three domains above it. Positions come from the daily check; sample: true means no data provider is configured yet.
recallStart every conversation here, right after get_workspace. Returns what you saved for this person in this workspace — most recent first, the last session summary flagged — plus when the last session was, so get_changes(days) can show what happened since. Optional query matches title, content and tags.
rememberSave something for next time — a decision, a thing to watch, or (kind "session") a summary of what was done and discussed in this conversation. Call it before the conversation ends. Private to you in this workspace; never store a lead’s name, phone or email. Pass memoryId to update a note instead of adding one.
forgetDelete one saved memory by memoryId, or every memory for this person in this workspace with all: true. Only what you saved; nothing about the ad accounts changes.
Change — guardrail-checked
set_campaign_statusPause or resume a campaign. Resuming puts money back on the air, so it is checked against every spend ceiling before it is applied.
set_campaign_daily_budgetChange a campaign’s daily budget, in cents of the account currency. Increases are checked against the per-change limit, the campaign, account and workspace ceilings, and the plan’s managed-spend ceiling; decreases against the maximum step down. Read the current budget with list_campaigns first.
set_ad_set_statusPause or resume one ad set (Meta) or ad group (Google) inside a campaign Ripple manages. Ids come from get_campaign.
set_ad_statusPause or resume one ad inside a campaign Ripple manages. Ids come from get_campaign.
set_bid_targetSet the target cost per acquisition (cents) or target return on ad spend (ratio, e.g. 3.5) on one ad set / ad group that already bids to that target. Exactly one of the two. The executor re-reads the current target first and refuses if it has changed since get_campaign.
add_negative_keywordExclude a search term from a Google campaign at campaign level. Read candidates with get_breakdown(dimension: "search_term"). Never excludes a keyword the customer listed as protected.
rollback_changeUndo one executed change by its changeId (from a write tool’s result or get_changes). Restores the exact previous value through the same guardrail-checked path.
Not here yet, on purpose: creating campaigns and ads from chat, duplication and creative upload. Each is a new money path and ships once it has run against a funded account.
Safety model
Four things that are true of every token.
The token is your assistant acting as you — never more than you.
Mode is a ceiling
A read token cannot reach a write tool whatever else it is allowed. A write token needs your authenticator to create.
Your role bounds it
The token carries the permissions of the person who made it, re-read on every call. Lose the role, the token narrows with you.
Scope it down
Limit a token to some ad accounts and some tools. A junior buyer, a reporting bot and an agency client each get their own.
Every change crosses the executor
Daily, weekly and monthly ceilings, per-change limits, protected campaigns, the emergency stop — re-checked at the moment of the write, not when the token was made.
Memory, prompts, skills
It remembers you. It comes with a playbook.
A new chat used to start from nothing. Now the endpoint keeps a private notebook per person per workspace, serves seven ready-made workflows, and ships as a Claude Code plugin.
Memory that is yours
recall at the start, remember at the end. What you decided, what to watch, what to check first next time — private to you in that workspace, listed on the Connect page, deletable in one click. Never a lead’s contact details.
Seven preset prompts
Catch me up, weekly review, budget pacing, search-term clean-up, what changed, leads pulse, save this session. Slash commands in Claude Desktop, Claude Code and Cursor; copy-paste anywhere else.
A plugin and the skills beside it
github.com/Dallenlol/ripple-ads-skills installs the skill, the prompts and the connector in two commands. Pair it with claude-ads for audits and planning across twelve platforms.
Claude Code
claude plugin marketplace add Dallenlol/ripple-ads-skills
claude plugin install ripple-ads@ripple-adsTry asking
Prompts that work on day one.
- “Which of my campaigns spent the most for the fewest leads this week?”
- “Compare Meta and Google cost per lead over the last 30 days.”
- “Which search terms on my Google campaign are wasting money? Exclude the three worst.”
- “Pause every ad set with a cost per result over $60 this week and tell me what you paused.”
- “Undo the budget change you made this morning.”
- “What did Ripple change in the last two weeks, and what did each change do?”
Questions
Does this work with Claude Pro, or do I need the API?
Can the assistant spend money without me?
What happens when a change is refused?
Does it remember what we talked about last time?
Does it check my website too?
How fresh is the data?
Is there a free plan?
Which platforms?
Connect an account.Choose who runs it.
Point your own assistant at Ripple and work in chat, or start the agents in dry run and promote them when a week of decisions has earned it. The guardrails are the same either way.
Meta and Google Ads OAuth · You choose the accounts · Disconnect at any time
