What surprised me
I've been using MCP since Anthropic released it at the end of 2024. Initially mostly for filesystem, GitHub and a couple of databases. Nice, sped up our dev workflows, but nothing relevant for marketing.
A few weeks ago I installed the Meta Ads MCP server, an open-source implementation maintained by pipeboard.co. What surprised me wasn't the tool list itself. It was how quickly you go from "I ask Claude about my campaigns" to "Claude does that independently on a schedule". That's the threshold where tooling becomes operations.
Practical example from last week. I ask Claude: "Which ad sets in account X had a CPA above 45 EUR in the last seven days and are still active?" Claude calls get_adsets, then get_insights with the right date range, compares the CPA values, returns five ad sets. I follow up: "How was the trend over the last 30 days?" Claude re-fetches insights with a different range, builds a trend view. Then: "Pause the three with the worst trend." Claude asks me to confirm, I confirm, three update_adset calls, done. What would otherwise be 20 clicks in Ads Manager becomes three sentences.
MCP in 60 seconds
MCP stands for Model Context Protocol. It's an open JSON-RPC 2.0 protocol that defines how LLMs (Claude, ChatGPT, Cursor, VS Code) talk to external servers. These servers expose three things:
- Tools: functions the LLM can call (e.g.
get_campaigns,pause_ad) - Resources: data the LLM can read (e.g. schema definitions, configs)
- Prompts: reusable templates for complex interactions
Servers run either locally (via stdio pipes with the MCP host) or remotely (via Streamable HTTP). Local is the default for Claude Desktop. Remote is for SaaS tools.
Important to understand: MCP only defines the protocol. It doesn't prescribe how the LLM thinks, what it does, or which rate limits you respect. All of that is server code. The LLM is the caller, your server is the library. Whatever the server offers, the LLM can use. Period.
What the Meta MCP server does
The pipeboard open-source server (github.com/pipeboard-co/meta-ads-mcp) currently exposes about 22 tools, grouped into five areas:
Account and hierarchy
get_ad_accounts, get_account_info, get_account_pages. You ask "which accounts do I have" and Claude lists them.
Campaigns, ad sets, ads
Get, get_details, create, update across all three levels. Important: create_campaign only accepts the new outcome-based objectives (OUTCOME_AWARENESS, OUTCOME_TRAFFIC, etc.). The legacy objectives are gone. You feel that when duplicating old setups, it doesn't work.
Creatives
upload_ad_image, create_ad_creative, update_ad_creative, get_ad_image. You can actually upload images and build new creatives from inside Claude. Including dynamic creative with multiple headlines and descriptions.
Audience and targeting
search_interests, get_interest_suggestions, validate_interests, search_behaviors, search_demographics, search_geo_locations. These are underrated. You tell Claude "find me interests for organic dog food buyers in their forties" and Claude tries a series of searches, validates reach, suggests a targeting list.
Insights and budget
get_insights is the most powerful tool. Performance metrics with breakdowns (age, gender, placement, device, etc.) and custom attribution windows. create_budget_schedule for time-bound budget pushes (Black Friday, season, launches).
What's missing in the current state: deeper custom audience management, no pixel or Conversion API setup, no full asset library handling. Read-heavy tasks are excellent, write-heavy works but is limited.
Setup: three paths
- pipeboard.co (Remote OAuth). Visit the site, log in with Facebook, authorize ad account access, copy a connector URL into Claude Desktop. No local install. Fastest for non-techies.
- Self-host locally.
npm installor Python variant, your own Meta Developer App, System User Access Token with three scopes, edit Claude Desktop config. 20 to 30 minutes. Advantage: full control, token stays with you. - Markifact (commercial SaaS). Hosted version with prebuilt recipes and a UI layer. Monthly fee. Sensible if you manage multiple accounts and don't want to run anything yourself.
We use local self-hosted. Three reasons: token scope control, no external party with access to client accounts, and I can modify the server code when a tool is missing.
Claude Desktop config
If you go the local route, your claude_desktop_config.json looks roughly like this (path: ~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
// claude_desktop_config.json
{
"mcpServers": {
"meta-ads": {
"command": "npx",
"args": ["-y", "@pipeboard/meta-ads-mcp"],
"env": {
"META_ACCESS_TOKEN": "EAAxxxxxxxxxxxxx",
"META_AD_ACCOUNT_ID": "act_1234567890",
"META_API_VERSION": "v22.0"
}
}
}
}json
Restart Claude Desktop, in the chat you should see a small icon bottom-left indicating the server is connected. If not: tail -f ~/Library/Logs/Claude/mcp-server-meta-ads.log tells you why (usually token scope or wrong account prefix).
The first ten minutes
What I typically ask first, to test the connection and get the lay of the land:
- "Which ad accounts do I have access to?"
- "List the active campaigns in account act_xxx with current status and budget."
- "Which ad sets in campaign Y had a ROAS above 3 in the last 7 days?"
- "Compare performance of the top 5 ads in the last 14 days, grouped by placement."
- "Which of my ads had below 0.5% CTR in the last 3 days with more than 50 EUR spend?"
What you notice quickly: Claude understands domain language. "ROAS above 3", "CTR below 0.5%", "last 14 days" get translated into the right API calls without you needing to know field names. That's the actual magic. You speak your language, the LLM maps to API language.
Where it tips: combining MCP servers
Here's where it gets interesting. Claude Desktop can load multiple MCP servers at the same time. That means your setup doesn't just have Meta Ads access, it has every other MCP server you've connected.
Useful combinations:
- Meta Ads + Google Sheets MCP: export performance reports to a sheet
- Meta Ads + Telegram MCP: alerts and commands via Telegram bot
- Meta Ads + Slack MCP: daily standup in the marketing channel
- Meta Ads + GitHub MCP: derive creative briefs from PR descriptions
- Meta Ads + Filesystem MCP: match local CSV conversion data against Meta insights
As soon as you have two MCP servers, Claude can mediate between them. "Fetch performance data from Meta and write it to the sheet 'May 2026 Performance'" is a single command behind which 5 to 10 tool calls run across two servers.
Build idea: Telegram bot for daily ad updates
Telegram daily brief for Meta Ads
What it does: Every morning at 8:00 you get a Telegram message with the key performance numbers from the previous day. Spend, ROAS, CTR, conversions, and a list of worst and best ad sets.
How it works: A cron job triggers a Claude API session once per day. The prompt is static: "Fetch yesterday's Meta Ads performance, format as a Telegram message, send to chat ID 12345." The MCP host (headless setup, not Claude Desktop) has Meta Ads MCP + Telegram MCP bound. Claude orchestrates both.
What you need: Anthropic API key, MCP host library (e.g. the official Python SDK), Telegram bot token, Meta System User token. Plus a cron or cloud scheduler. We use Cloudflare Workers Cron for this, free tier is plenty.
What we learned: formatting matters more than the data. A message with 30 numbers no one reads. A message with 3 numbers and a sentence "Heads up, campaign Y ate 40% more spend overnight" gets read. Let Claude interpret the data, not just fetch it.
Build idea: nightly setup audit
Nightly account audit
What it does: Every night at 3am Claude scans all active campaigns for typical problems: ads without UTM parameters, ad sets with unrealistic daily budgets (more than 10x median), targeting overlap above 30%, disapprovals, expired creatives, misconfigured conversion events.
How it works: A cron triggers an audit routine. The prompt is a checklist: "Walk through all active campaigns, check these 8 points, write findings into the issue tracker." Connection to Linear or GitHub MCP for issue creation. We set up this out-of-the-box pattern for every new client in their first week.
Effect: Issues that previously went undetected for two weeks now get served overnight in a structured report. Junior buyers get a morning checklist. Senior buyers focus on strategy instead of routine hygiene.
Build idea: anomaly alerts
Anomaly detection with Slack alerts
What it does: Hourly scan. If a campaign spends more than 2x its historical hourly spend, or CTR drops more than 50% vs prior week, or a lead form conversion rate falls to 0, a Slack alert fires.
How it works: Cron every 60 minutes. Claude pulls current insights, compares to baseline (stored in Sheets or a simple SQLite DB), classifies findings by severity, sends only critical cases as alerts. Important here: the LLM filters, otherwise you have alert fatigue after three days.
Trapdoor we hit early: Anomalies are often explainable (campaign launch, new creative, changed targeting). We let Claude check first if there was a known config change. That halves false positives.
Build idea: cross-platform reports
Consolidated performance report across all platforms
What it does: Click a button (or Slack slash command), generates a cross-platform report: Meta + Google + TikTok + LinkedIn. Including normalized KPIs (ROAS calculated on a consistent base) and qualitative commentary.
How it works: Setup with all four platform MCPs (Meta, Google Ads, TikTok via community MCP, LinkedIn via REST wrapper MCP) plus Sheets MCP for output. Claude pulls in parallel, normalizes, writes into a sheet template. What would otherwise be a BI tool or your own reporting stack you do with MCP in a third of the time.
Caveat: The platform MCPs vary in maturity. Google Ads MCP is solid, TikTok is community-driven and sometimes buggy, LinkedIn API is generally finicky. Expect 80% solution, not 100%.
Risks and trapdoors
Token scope is delicate. If you give ads_management, the MCP server has full write rights on your account. Claude could theoretically pause every campaign if the prompt is badly worded. For read-only setups use only ads_read. For write access work with confirmation flows (the pipeboard MCP has this built in, custom implementations should have it too).
Auto-execution risk. If you tell Claude "clean up what's not performing" and Claude pauses twenty ad sets, three of which were in a learning phase, you have a problem. Confirmation before every write is mandatory, not optional.
Rate limits. The Meta Marketing API has strict tier-based limits. In aggressive setups (insights calls on 50+ campaigns every 15 min) you get throttled fast. Cache insights where possible, batch calls, respect headers. The pipeboard server does this reasonably well, but for custom setups you have to build it yourself.
Multi-account confusion. If you have access to multiple accounts, Claude can lose context. "Pause campaign X" is ambiguous if both accounts have a campaign X. We preface each prompt with the active account context ("We're working in account act_xxx") or restrict the MCP server per session to one account.
Currency and timezone. Meta delivers insights in the account currency and account timezone. When you ask Claude "last 7 days", the question is: from which timezone? Set it explicitly or document the assumption in the system prompt.
Data protection, the unsolved part. Meta data contains PII (email hashes in custom audiences, etc.). If Claude reads them and sends them to a third party (Anthropic API), that's a contractual issue with your clients. For enterprise setups we insist on Anthropic Workspace with DPA and EU region pinning. For smaller setups we clarify transparently in the DPA.
Which path for whom
- Marketers without setup appetite: pipeboard.co remote OAuth. 5 minutes setup, immediately ready.
- Agency with multiple client accounts: Self-hosted local, separated configurations per account, clear audit logs.
- In-house performance team: Self-hosted on a central server (e.g. a Cloud Run container) plus custom scheduling logic. The real build ideas above pay off here.
- Enterprise with compliance: Markifact or your own implementation with DPA. pipeboard.co can also work with an explicit contract.
- Curious, want to see first: Invest 30 minutes, connect pipeboard remote, talk to it for an hour, then decide.
Closing thought
We've been talking about "AI marketing" for 18 months, but most of what fell under that label was chatbots or auto-caption generators. MCP is the first technology that integrates what we actually do (analyzing campaigns, optimizing, reporting) into the LLM workflow. Not as a toy, but as an operations layer.
The interesting question is no longer "can AI take this over". It's: what do you do with the time you save once routine reporting is gone. Strategy. Creative briefings. Client conversations. The things humans are better at than any LLM stack.
If you haven't tried MCP yet, this is a good May afternoon. Go to pipeboard.co, connect, ask "what campaigns are running right now and what's the worst performer costing me". That first answer, in the tone you're used to asking questions in, is when it clicks.