TL;DR
When Meta Ads MCP is not working, the cause is usually one of three things. Your ad account has not been switched on in Meta's gradual Ads MCP rollout (is_ads_mcp_enabled: false), your AI client cannot complete or keep Meta's OAuth session (reported mostly in Claude Code), or your stored session or token has expired. Find your symptom in the table below and follow the link to its fix.
Quick answer
Meta Ads MCP troubleshooting means working out where a failed connection stopped. Problems with the official connector at mcp.facebook.com/ads tend to fall into five layers: your AI client, your ad account's rollout flag, your permissions, your session, and the query itself. Each layer usually fails with a different signature, so the error you see is the best clue to the cause.
This page routes you to a fix. It does not repeat the fixes, which live on dedicated pages for each error.
Reviewed by the AdAdvisor team: more than 8 years in media buying, over $60M in managed ad spend, and an ex-Meta engineer on the team. Last checked against Meta documentation and Claude Code GitHub issues on October 15, 2026.
Why is Meta Ads MCP not working? Match your error
Match what you see to the row below, then go to the matching fix in the list under the table. The causes are the ones most often reported by users, vendors, and Claude Code GitHub issues since Meta's Ads AI Connectors entered open beta for eligible advertisers on April 29, 2026. Treat each cause as the likeliest explanation rather than the only one.
| What you see | Most likely cause | Where to go next |
|---|---|---|
| is_ads_mcp_enabled: false after a successful login | Your ad account is not yet enabled in Meta's gradual Ads MCP rollout. Users and setup guides report no self-serve way to switch it on. | 1. Facebook MCP OAuth Fix, Error #2 |
| SDK auth failed: The provided redirect_uris are not registered for this client. | Your AI client, usually Claude Code, sent a local callback address that Meta's OAuth client did not accept. Widely reported in spring 2026 versions. | 2. Facebook MCP OAuth Fix, Error #1 |
| Claude Code times out after 30 seconds, or shows OAuth session expired and could not be refreshed, while claude.ai works | A Claude Code client issue reported in August 2026 versions, not a problem with your Meta account. | 3. The client check on this page |
| A permission error, or every write is refused while reads work | The token lacks ads_management, or your user has no editing role on that ad account. | 4. Why Facebook MCP Write Actions Fail, Error #2 |
| The AI says a change worked, but Ads Manager shows no change | The write hit a different account, object, or level, is still processing, or the assistant misreported the response. | 5. Why Facebook MCP Write Actions Fail, Error #1 |
| It worked for weeks, then went silent, returned a 401, or asked you to log in again | Often an expired or rejected session, though a client that fails to reuse a valid token can look the same. | 6. Meta MCP Token Expiry Fix |
| Connected, but results come back empty | Wrong ad account, wrong object level, or a date or attribution window that excludes the data. | 7. The empty-results check on this page |
| The connector will not set up at all in Claude, ChatGPT, or another MCP client | A setup step is missing, such as the ad account role or the connector not being added in the client. | 8. Official Meta Ads MCP setup guide |
Go to the fix for your row:
is_ads_mcp_enabled: false: what the rollout flag means and what you can do while you wait. It sits on the OAuth fix page, but it is an account gate, not a login failure.redirect_uris are not registered: the Claude Code OAuth error and its workarounds.- Claude Code timeouts and session errors: the client check below.
- Writes refused for missing permissions:
ads_managementscope and account roles. - Writes that report success but change nothing: ghost confirmations and how to verify every write.
- A connection that breaks silently after weeks: token lifetime, detection, and prevention.
- Empty results: the query check below.
- First-time setup that never connects: prerequisites and per-client setup for Claude, ChatGPT, and Cursor.
For an overview of what the official connector can and cannot do, see Facebook MCP: free actions and known fixes. For a ranked comparison of connectors, see the best Meta Ads MCP servers.

Drowning in Meta Ads?
Put your campaign on autopilot with Nova.
Read moreHow does the Five-Gate Check isolate the failure?
The Five-Gate Check is the diagnostic sequence we use to sort Meta Ads MCP failures into five layers: client, account availability, permission, session, and query. It is a troubleshooting order, not a documented execution order inside Meta's connector. Checking the layers in this order usually stops you from reconnecting a token when the real block is an account flag.
| Gate | What to check | How a failure usually looks |
|---|---|---|
| 1. Client gate | Can your AI client complete and hold Meta's OAuth session? | Login fails before or during the browser step, or Claude Code times out while claude.ai works. |
| 2. Account gate | Has Meta enabled this specific ad account for Ads MCP? | Login succeeds and the tools load, but calls return is_ads_mcp_enabled: false. |
| 3. Permission gate | Does the token carry ads_management, and does your user have a role on the account? | Reads work, but writes return a permission error. |
| 4. Session gate | Is the stored session still accepted? | Everything worked, then calls fail, return a 401, or ask you to log in again. |
| 5. Query gate | Did the request ask for the right account, level, and dates? | No error, but the results are empty or partial. |
Authentication and account enablement are separate checks. A user can be fully logged in, with every tool loaded, and still be blocked at the account gate. A Claude Code user, by contrast, can be blocked at the client gate before Meta ever evaluates the account.
Client gate. The redirect_uris error was reported on Claude Code 2.1.123 in issue #55002 and was still reproducing on 2.1.141 in May 2026, according to comments on the tracking issue #37747. Anthropic closed that issue on May 24, 2026, with a maintainer comment describing planned changes rather than a confirmed fix for the Meta connector, so test on your current version before applying an older workaround. In August 2026, users on Claude Code 2.1.224 to 2.1.231 reported new symptoms with the same connector: a 30-second handshake timeout (issue #86023) and OAuth session expired and could not be refreshed on a token that was still valid (issue #86430). Both issues were later closed without a fix (one as stale, one for lack of a reproduction). If the same connector works in claude.ai, the problem is very likely in the client.
Account gate. The flag is set per ad account, not per business, and The Ad Spend and other users report that it can differ between accounts in the same Business Manager. One user managing hundreds of ad accounts on Reddit reported that only 3 of them had access, and Pipeboard, which sells a competing connector, notes that some accounts still get false. Meta does not appear to publish what share of accounts are enabled, so treat both as anecdotes rather than a rollout rate.
Session gate. Meta does not appear to publish a token lifetime for the hosted connector. Its OAuth metadata lists authorization code with PKCE and refresh_token as supported grants, while Meta's documentation says a long-lived user token "generally lasts about 60 days." One August 2026 GitHub report describes a 60-day token issued without a refresh token in practice, so a failed connection does not prove the token expired: client refresh bugs and stale stored credentials produce similar symptoms. The token expiry fix covers detection and prevention.
How do I check what's wrong in 2 minutes?
Run these five checks in order and stop at the first one that fails. Each check maps to one gate above. If your client only shows a generic "MCP connection failed" message with no error string, these checks are the quickest way to find out which gate it stopped at.
- Capture the exact error. Copy the full message rather than the summary the assistant gives you. In Claude Code, debug output can reveal the real error behind a generic timeout, as the reporter of issue #86430 found.
- Confirm the account and whether the connector is enabled for it. Ask the assistant to list your ad accounts, then check the
is_ads_mcp_enabledvalue for the one you need, using the account ID exactly as the connector returns it. If it isfalse, reconnecting will not change it. - Check your role and permissions. Confirm your user has an editing role on that ad account and that you approved ads management during login. In Meta's permissions reference,
ads_readcovers reporting only, whileads_managementcovers reading and managing ads. - Check the session only if the error points to authentication. A 401, a login prompt, or a session error points here. Reconnect once and test the same request in claude.ai to separate a token problem from a client problem.
- Repeat the query with exact parameters. Name the ad account ID, the object level, and exact start and end dates.
A prompt you can paste for step 2:
Copy this prompt
List every Meta ad account you can access. For each one, show the account name, the account ID exactly as returned, and the value of is_ads_mcp_enabled. Do not make any changes.
Why is my Meta Ads MCP returning empty results?
Empty results with no error usually mean the query asked for the wrong thing, not that the connection is broken. If the account lists correctly and the flag is true, check the query before anything else.
The most common gaps are these:
- Wrong ad account. Business users often manage many accounts, and the assistant may default to one you did not intend. Name the account ID in the prompt.
- Wrong object level. Account, campaign, ad set, and ad calls return different fields. A metric that exists at ad set level may come back empty at campaign level.
- A date range the model interpreted loosely. Phrases like "last week" can be read in more than one way. Give exact dates, and remember the most recent days are usually incomplete because conversions keep attributing after the fact.
- The attribution window. A default reporting window can hide conversions you see in Ads Manager under a different setting. Ask for the same attribution setting you use there.
If the results were fine before and went empty suddenly, a session problem is more likely. The Meta MCP token expiry fix explains how a stale session can return nothing without an obvious error, and the OAuth fix page covers the case where Claude connects but shows no campaign data at all.
When is the problem the connector, not your setup?
If you are stuck at the account gate, or at a client bug you have confirmed on your current version, there is usually nothing left to fix on your side, so waiting, switching clients, or switching connectors become the reasonable options. Meta controls the rollout flag and client fixes depend on Anthropic, while MCP servers that connect through their own Meta-approved Marketing API app, such as AdAdvisor MCP, do not depend on the hosted connector's per-account flag; the options are compared side by side in Meta Ads MCP alternatives.
Frequently asked questions
Summary
When Meta Ads MCP is not working, the failure usually sits in one of five layers: client, account, permission, session, or query. The three most common causes are an ad account that is not yet enabled (is_ads_mcp_enabled: false), an AI client that cannot complete or hold Meta's OAuth session, and an expired or rejected session. Identify the layer from your exact error, then follow the router table to the page that fixes it.
Sources
- Meta for Developers: Ads MCP Server overview (remote-hosted at mcp.facebook.com/ads)
- Meta Business Help Center: Manage ads from an AI agent with Meta ads AI connectors
- Digiday: Meta opens its ad ecosystem to third-party AI tools (April 29, 2026)
- Meta: Ads MCP OAuth authorization server metadata
- Meta for Developers: Get long-lived tokens
- Meta for Developers: Permissions reference (
ads_read,ads_management) - Meta for Developers: Marketing API authorization (access tiers, App Review, business verification)
- Meta for Developers: Marketing API changelog, versions
- GitHub, anthropics/claude-code #55002: Official Meta Ads MCP fails OAuth with "redirect_uris are not registered for this client" (April 30, 2026, closed as duplicate of #37747)
- GitHub, anthropics/claude-code #37747: MCP OAuth regression, redirect_uris missing port (closed May 24, 2026)
- GitHub, anthropics/claude-code #86023: Meta MCP connector times out in Claude Code CLI while working in claude.ai (August 2026)
- GitHub, anthropics/claude-code #86430: Valid token treated as expired, "OAuth session expired and could not be refreshed" (August 2026)
- The Ad Spend: Meta Ads MCP not enabled
- Reddit r/ClaudeAI: "Meta Ads MCP: auth works, but is_ads_mcp_enabled: false for my ad account"
- Reddit r/ClaudeAI: "Anyone playing around (successfully) with the new Meta Ads MCP?"
- Pipeboard: Meta Ads MCP guide (competing vendor)

AI & Automation
Facebook MCP OAuth Fix: 4 Errors and How to Resolve Each One
Facebook MCP OAuth failures fall into four distinct categories. This article covers the redirect_uris bug, is_ads_mcp_enabled phased rollout, expired 60-day tokens, and missing permission scopes — with the diagnosis and exact fix for each.
Read more
AI & Automation
Why Facebook MCP Write Actions Fail: 3 Causes and Fixes
Facebook MCP write actions fail for three distinct reasons: ghost confirmations, wrong permission scope, and rollout flags. Here's how to diagnose and fix each one.
Read more
AI & Automation
Meta MCP Token Expiry Fix: Why Your Connection Breaks Silently and How to Prevent It
Meta MCP tokens expire after ~60 days. Claude returns empty results instead of an error. Here's how to detect, fix, and prevent it.
Read more
AI & Automation
Meta App Review for MCP Explained: Who Needs It and Who Doesn't
End users of the official Meta MCP or already-approved third-party tools typically do not submit App Review themselves; they authenticate via OAuth through an app that has already been reviewed. App Review is required for developers building their own Meta app that calls the Marketing API.
Read more



