Meta Ads MCP in Claude Code (CLI, Not the Connector UI)
An r/ClaudeCode post asked about Meta Ads MCP in terminal Claude Code. CLI install path + Scavio for competitor SERP context.
An r/ClaudeCode post asked the right question:can I wire Meta Ads MCP into Claude Code in the terminal? Most tutorials only show the claude.ai connector UI. The answer is yes, the path is straightforward, and pairing it with Scavio MCP for competitor SERP context turns the setup into an actual paid-ads agent rather than a thin wrapper over the Ads Manager UI.
Why most Meta Ads MCP tutorials cover claude.ai only
claude.ai connectors expose an OAuth flow inside the web UI. It's the easy demo. Claude Code (CLI) is a different world: MCPs are configured via claude mcp add on the command line, OAuth tokens or access tokens go into env vars or config files. The functionality is identical; the path is just less documented because the demos target the UI flow.
Picking a maintained Meta Ads MCP repo
Several community Meta Ads MCP servers exist on GitHub. Pick by:
- Active commits in the last 90 days.
- Explicit scope handling (ads_read, ads_management, business_management).
- A reasonable license you can read in 5 minutes.
- Working examples in the README, not aspirational ones.
The CLI install path
# Get a long-lived Meta access token via Business Manager
export META_ACCESS_TOKEN=...
# Install per the repo's README
claude mcp add meta-ads <node-or-python-cmd-from-repo>
# Add Scavio MCP for competitor SERP context
claude mcp add scavio https://mcp.scavio.dev/mcp \
--header 'x-api-key: $SCAVIO_API_KEY'Why Scavio is the natural complement
A daily ad-account audit is half the job. The other half is creative iteration: what are competitors running this week, what ad copy is in market, what keywords are spiking. Scavio handles that:
site:facebook.com/ads/library COMPETITOR— what creative is running now.COMPETITOR ad copy 2026— current messaging.reddit r/SUBREDDIT COMPETITOR ad— what users say about competitor ads.- AI Overview lookup for the campaign keyword — what Google's answer surface shows.
Routing rules in the system prompt
With both MCPs attached, give the LLM clear affordance:
For account/campaign/ad performance lookups, call meta-ads. For competitor ad copy, recent SERP for keywords, or Reddit signal on ad creative, call scavio.
The daily audit pattern
Single Claude Code prompt that drives the whole thing:
Pull the last 7 days of campaign performance from meta-ads. For each campaign with CTR below 1.5% or ROAS below threshold, run scavio competitor SERP for the campaign keyword. Show me three creative variations to test, with rationale based on what competitors are running.
OAuth scope is the dangerous part
Meta Ads MCPs commonly request ads_management, which gives the agent edit + spend authority on the account. Read the scope before approval. Two safer patterns: (1) use a sandbox / test ad account first, (2) wrap edit calls behind explicit user confirmation in Claude ("Pause Campaign X. Confirm? y/n"). Treating an LLM with ads_management like a junior intern is the right mental model.
Cost math
Meta Ads MCP is free. Scavio: 50 reports + 30 competitor SERP queries per account per month ≈ 80 calls × $0.0043 = $0.34 per account per month. Negligible vs typical paid-ads spend. The valuable output isn't cost savings on the MCP layer — it's the time freed from manual creative iteration.
Multi-channel: add Google Ads MCP
If the team runs Google Ads too, attach a Google Ads MCP using the same pattern. Three MCPs (meta-ads, google-ads, scavio), each named clearly. Routing in system prompt: meta-ads for FB/IG performance, google-ads for SEM performance, scavio for competitor + organic SERP context.
What this stack doesn't replace
Madgicx, Smartly, and similar paid-ads platforms ship faster — paste the account, get bid management + auto-creative testing + dashboards. The MCP route is for teams that want their dev/agent stack to BE the platform, not paste data into a third platform. Pick by how much of the workflow you want to own.