Model Context Protocol · Meta Marketing API — Graph v25
An MCP server that wires Claude into the Meta Marketing API — read insights with per-campaign ROAS, create campaigns, ad sets, ads and creatives, duplicate what works and send server-side conversions (CAPI), without opening Ads Manager. Embedded Meta login, never-expiring token. Status: LIVE.
MCP META ADS B2 TECH is a Model Context Protocol server that gives Claude real access to your ad accounts — not a chatbot that guesses, but typed calls into the Meta Marketing API (Graph v25).
List accounts, campaigns, ad sets, ads, creatives, pages and pixels; read synchronous insights with a summary that fits the context, or run async reports for large ranges. "What's the ROAS of my active campaigns?" becomes an API call, not a guess.
The sibling MCPs (GA4, Google Ads, GTM, Cloudflare, Instagram) measure, tag and publish; Meta Ads creates the campaign, ships the creative, reads the result and sends the conversion back via CAPI. All in one conversation.
Multi-tenant deploy at mcp-meta-ads-alpha.vercel.app — embedded OAuth 2.1 Authorization Server bridging to Meta's Login for Business, tokens encrypted in Supabase, cache on Upstash. Same stack as the sibling MCPs.
29 tools grouped by function — from account discovery to the ROAS report, from the creative to the server-side conversion. Everything below is implemented and live.
effective_status=["ACTIVE"] server-side, in a single call.object_story_spec), image by URL/hash, Advantage+ enhancements opted in per feature.confirm, returns a preview of what would be paused — and executes nothing.confirm=true.event_id defaults to uuid4 for Pixel dedup; test_event_code targets the Test Events tab.From diagnosis to result in one conversation: get_insights → duplicate what works → ship a new creative → send_capi_event closing the measurement loop.
A live campaign is money leaving your account — so every write goes through explicit barriers, inherited from the sibling MCPs.
Writes are born PAUSED
create_campaign, create_adset, create_ad and the copies deliver the object paused. Nothing starts delivering until you explicitly ask to activate it.
Pausing requires confirm=true
pause_campaign, pause_adset and pause_ad without confirm return a preview of what would be paused and execute nothing — nothing goes offline by accident.
Encrypted BISU token, clean logs
The login issues a Business Integration System User (BISU) token that never expires, AES-GCM-encrypted in Supabase with default-deny RLS. No tool ever returns a token; HTTP loggers are silenced so it can't leak.
appsecret_proof on every call
Every Graph request is signed, with bounded retry/backoff. Meta errors become safe messages with a "what to do" hint — raw payloads and tokens never reach the model.
Hashed PII in CAPI
Identifiers in send_capi_event are normalized and hashed (SHA-256) server-side — never logged or echoed. event_id defaults to uuid4 for dedup with the browser Pixel.
Tenant is never an argument
The tenant is derived from your Meta login and resolved per request. No tool accepts "which client" — impossible to operate the wrong account. OAuth with PKCE and state validation.
Hosted, multi-tenant server, zero setup: add the connector, log in with your Meta account and Claude is already operating your campaigns. One login — the token never expires.
Add the MCP server as a connector in Claude and log in with Meta. Nothing to install; one login handles everything.
https://mcp-meta-ads-alpha.vercel.app/api/mcp. In Claude Code, use the command below.# Claude Code claude mcp add --transport http \ meta-ads https://mcp-meta-ads-alpha.vercel.app/api/mcp
/mcp. The login issues a token that never expires — one login, durable access, CAPI included. B2Tech student with the same email as your purchase? Access links automatically — otherwise run connect_hotmart.meta_token_status to validate the credential and list_ad_accounts to see your ad accounts. Ready to operate.Real requests the server resolves end to end — everything created is born paused.
# you, in the chat: "How much did I spend per active campaign in the last 7 days, and what was the ROAS?" # → get_insights level=campaign, ACTIVE only
"Create a conversion campaign with an ad set
for this audience and this creative"
# → everything born PAUSED; you activate when ready"Duplicate the winning ad set and send a
test Purchase to the pixel"
# → copy_adset + send_capi_event (hashed PII)Still unsure about something? Write to bruno@b2tech.io.
connect_hotmart emails a 6-digit code to the purchase address and confirm_hotmart completes the link. Not a student yet? Check out the training at claude-code.b2tech.io.PAUSED — activation is always an explicit request from you. And pausing what is live requires confirm=true: without it, the pause_* tools return a preview of what would be paused and execute nothing.mcp-meta-ads-alpha.vercel.app) and the source code is private — there is no version to run on your own machine. You just add the connector in Claude and log in with your Meta account; we handle the rest.meta_token_status points it out and meta_login redoes the link.appsecret_proof, and structured logs carry no PII and no tokens.get_insights with the default summary returns spend, clicks, CPC, purchases and ROAS already flattened — one row per campaign/ad set/ad — and filters by effective_status=["ACTIVE"] server-side, in a single call. Large reports come back with the low-spend tail trimmed into an informational _truncated row — not an error. For long ranges or many objects, run_insights_report runs asynchronously.send_capi_event posts events to the Conversions API using the tenant's own token — no Events Manager token needed. PII is normalized and hashed (SHA-256) server-side, never logged or echoed; event_id defaults to uuid4 for dedup with the browser Pixel; test_event_code targets the Test Events tab before going to production.Campaigns, ad sets, ads, creatives, duplication of what works, insights with ROAS and server-side conversions — from diagnosis to result in one conversation, with writes born PAUSED and pausing locked behind confirm=true.
29 tools · Meta login · multi-tenant on Vercel