meta-ads-connector
Allows managing Meta Ads accounts, campaigns, ad sets, ads, creatives, budgets, audiences, lookalikes, and reporting, including image/video upload via optional CLI.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@meta-ads-connectorshow my top performing ads from last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Meta Ads Connector
Connect Claude to Meta Ads in one shot, and give it full management of your ad accounts.
Status: built, pending a live run-through. The skill and the package behind it are complete and tested. One full run against a real ad account is still required before release — see Before release.
The problem
Getting Claude connected to Meta Ads is unreliable, and it isn't your fault:
Meta's official connectors shipped on 29 April 2026 — after Claude's training data. Claude doesn't know they exist, so it improvises.
Most guides on the web are wrong. They tell you to run
npm install -g @meta/ads-cli. That package does not exist. The real one ismeta-adson PyPI.Once connected, Claude often tries to connect again, because nothing tells it the job is already done.
Related MCP server: Meta Ads MCP Server
Getting started — one prompt
Copy everything in the box below and paste it into Claude Code as one message. Claude installs the kit for you; there is nothing else to run. Pasting it again later is also how you update.
Install the Meta Ads connector kit on this machine. Follow these steps exactly, in order, and do nothing beyond them.
1. Check that you are running as Claude Code with access to a terminal and a ~/.claude/skills folder. If you are not — for example this is the Claude desktop or web app — stop here and tell me to open Claude Code and paste this prompt there. If I only use the desktop app, tell me to instead add the connector under Settings → Connectors → Add custom connector, using the URL https://mcp.facebook.com/ads
2. Check that git is available. If it is not, stop and tell me the one thing to install (git), with the easiest way to get it on my operating system.
3. Clone https://github.com/lukeselr/meta-ads-connector into ~/meta-ads-connector. If that folder already exists, run git pull inside it instead of cloning a second copy.
4. Create ~/.claude/skills if it does not exist, then copy ~/meta-ads-connector/skills/meta-ads-connect into ~/.claude/skills/, replacing any earlier copy.
5. Optional, and allowed to fail: install the helper package with pip install ~/meta-ads-connector. If this fails for any reason — no Python, a managed environment, anything at all — do not try to fix it. Note that the optional helper did not install, and carry on: the kit works without it.
6. Finish by telling me, in plain language: exactly what you installed and where; that I must start a NEW Claude session before the skill exists; and that in that new session I should type /meta-ads-connect, or just say "connect my Meta ads".
Do not connect to anything, do not open a browser, do not touch my Meta account, and do not create or store any token or credential. Installing and connecting are separate steps — this prompt only installs.Then start a new Claude session and type /meta-ads-connect — or just say
"connect my Meta ads". You'll log in to Meta in your browser once, approve
access, and you're connected. No access token is stored on your machine, and no
Python is needed.
The prompt is versioned at setup-prompt.md; the Skool post
and this README both reproduce it from there.
What this kit does
One skill, meta-ads-connect. It:
Registers Meta's official Ads MCP server with Claude — the primary connection. You log in to Meta once in your browser; no long-lived credential ever sits on your disk.
Checks first. If you're already connected, it says so and stops.
Optionally layers on Meta's official Ads CLI for the main thing the MCP server can't do: uploading image and video files from your own machine.
After that, you just talk to Claude about your ads.
What you get access to
Campaigns, ad sets, ads, creatives, budgets, audiences and lookalikes, and reporting — including Meta-internal signals like opportunity score and industry benchmarks that aren't available through the API at all. With the optional CLI added, image and video upload from your own files as well.
No read-only mode, no artificial limits. Claude will confirm with you before anything that changes spend or sets an ad live.
Requirements
A Meta ad account
Claude Code, in the terminal. (Claude Desktop users can add the connector directly instead: Settings → Connectors → Add custom connector →
https://mcp.facebook.com/ads— no install needed.)That's it. Python is only needed if you later add the optional CLI path.
The optional CLI path
The main connection needs none of this. Adding the CLI gets you local image and video upload. It installs Meta's official Ads CLI at a pinned version, mints a system user token that never expires (driving the browser itself — no copying secrets by hand), and sets up Business Manager access if you don't have it. It needs Python 3.13 or 3.12; the kit sorts the version out for you.
You never need to run these yourself — Claude does — but each one is safe to re-run:
Command | What it does |
| Live connection check, one line per transport. Always the first thing to run. |
| Checks each part separately and says what to fix. |
| Registers Meta's official Ads MCP server (the primary connection). |
| Installs Meta's official Ads CLI at a pinned version. |
| Opens a browser, creates a token, saves it straight to disk. |
| Stores a token you already have, read from standard input. |
| Fixes a missing Business Manager or an unassigned ad account. |
| Runs Meta's Ads CLI with your token in place, e.g. |
The probe JSON includes a transports block reporting the MCP server and the
CLI separately, so a working connection is never hidden behind a broken
optional one.
What lives on your machine, and how to leave
The MCP connection stores no credential of its own — you approve it in your browser, and you can revoke it at Meta's end at any time under facebook.com → Settings & privacy → Business integrations.
If you add the optional CLI path, its token lives at ~/.meta-ads/.env,
readable only by your user account, inside a folder only your user account can
open. It is loaded per command — by exec, which is the only thing that puts
it into an environment — and never written into your shell profile or your
operating system's keychain. The CLI itself is installed into
~/.meta-ads/venv rather than onto your PATH, so it cannot collide with any
other Python you use.
To undo everything:
claude mcp remove meta-ads # removes the MCP server — the main connection
rm -rf ~/.meta-ads # removes the optional CLI path: token and installed CLIAnd to remove the kit itself:
rm -rf ~/.claude/skills/meta-ads-connect ~/meta-ads-connectorTo revoke the CLI token at Meta's end — which you should do if you ever think it has leaked — go to Business Settings → System users, select the system user, and remove its token.
Claude is instructed never to print the token, and doctor redacts it from all
output, including error messages relayed back from Meta.
Development
uv venv && uv pip install -e '.[dev]'
.venv/bin/python -m pytest # full suite
.venv/bin/python -m mypy # strictTests fake exactly two boundaries — outbound HTTP to Meta, and subprocess execution — and
assert on what each subcommand actually does: its exit code, its output, and the state of
the filesystem afterwards. No test asserts which internal function was called, so a
refactor that keeps behaviour identical cannot break the suite. The two load-bearing
prose artifacts — SKILL.md and setup-prompt.md — are asserted on directly by
tests/test_skill_routing.py and tests/test_setup_prompt.py.
Before release
One full live run-through against a real ad account is still required. It doubles as the capability inventory the routing rules depend on:
Paste the setup prompt into a clean Claude Code session on a machine with no prior setup; confirm the skill exists in the next session. Repeat on a machine with no Python at all.
Run connect. Does MCP consent succeed, and what does the consent screen list?
Capture a live
tools/listfrom the MCP server and commit it with its capture date.Exercise the promised surface end to end through the MCP alone — enumerate accounts, create a paused campaign, an ad set and an ad, attach a creative, pull reporting, clean up. Note anything that cannot be done.
Does the Claude Code
redirect_uribug still bite in practice? If so, walk the bring-your-own-app fallback as a user would.End to end on the optional CLI: upload an image creative → verify in Ads Manager → clean up. Confirm the browser selectors in
src/meta_ads_connect/minting.pyagainst live Business Settings.
Keeping it accurate
Meta ships changes to these connectors without version bumps and without a changelog. This
kit pins what it can and is due a re-check in September 2026. See
docs/research/findings-and-decisions.md
section 9 for what to check and why.
Licence
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/luke-heka/meta-ads-connector'
If you have feedback or need assistance with the MCP directory API, please join our Discord server