AI & Automation9 min read

Meta Ads MCP Not Working? Troubleshooting Every Connector Error (2026)

Tarek Kekhia

Tarek Kekhia

Oct 16, 2026
Share
Meta Ads MCP Not Working? Troubleshooting Every Connector Error (2026)

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 seeMost likely causeWhere to go next
is_ads_mcp_enabled: false after a successful loginYour 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 worksA 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 workThe 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 changeThe 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 againOften 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 emptyWrong 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 clientA 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:

  1. 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.
  2. redirect_uris are not registered: the Claude Code OAuth error and its workarounds.
  3. Claude Code timeouts and session errors: the client check below.
  4. Writes refused for missing permissions: ads_management scope and account roles.
  5. Writes that report success but change nothing: ghost confirmations and how to verify every write.
  6. A connection that breaks silently after weeks: token lifetime, detection, and prevention.
  7. Empty results: the query check below.
  8. 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?

Drowning in Meta Ads?

Put your campaign on autopilot with Nova.

Read more

How 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.

GateWhat to checkHow a failure usually looks
1. Client gateCan 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 gateHas 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 gateDoes 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 gateIs the stored session still accepted?Everything worked, then calls fail, return a 401, or ask you to log in again.
5. Query gateDid 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.

  1. 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.
  2. 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_enabled value for the one you need, using the account ID exactly as the connector returns it. If it is false, reconnecting will not change it.
  3. 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_read covers reporting only, while ads_management covers reading and managing ads.
  4. 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.
  5. 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

It means you logged in successfully, but Meta has not yet enabled that ad account for Ads MCP. Users report the fuller message says Ads MCP is "gradually being rolled out" and to check back later. Reconnecting, creating a developer app, or changing roles does not change the flag.
A missing permission usually produces an explicit error, so a success message with no visible change points elsewhere. The usual causes are a write to a different account, object, or level, an object that is paused or still processing, or an assistant that misreported the tool's response. Ask the assistant to repeat the object ID before and after every change, then check that exact object in Ads Manager.
An expired or rejected session is the most likely cause. Meta does not appear to publish a lifetime for the hosted connector's tokens, though its long-lived user tokens generally last about 60 days, and expiry can show up as a 401, a login prompt, or empty results. If reconnecting does not help and claude.ai works, suspect the client instead.
Ask your AI assistant to list your ad accounts and show the is_ads_mcp_enabled value for each one. If the account you need shows false, it has not been enabled in Meta's rollout yet. The flag is set per ad account, so check each one separately.
In spring 2026, Claude Code versions were reported to send a callback address Meta's OAuth client rejected, producing the redirect_uris are not registered for this client error. In August 2026, users reported 30-second timeouts and OAuth session expired and could not be refreshed on Claude Code 2.1.224 to 2.1.231. The GitHub issues for both are closed, so update Claude Code and test again before assuming either problem is still present.
Look at where it fails. is_ads_mcp_enabled: false after a successful login is on Meta's side, and an error that appears only in one client is usually on the client's side. Missing write access, an expired session, and empty results are usually fixable on your side.
Usually not, because the official connector uses Meta's own app. If you build your own Marketing API app, Meta's authorization documentation says full access for live advertisers comes after App Review, and business verification is required if the app accesses sensitive data. Meta App Review for MCP covers this in detail.

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

Facebook MCP OAuth Fix: 4 Errors and How to Resolve Each One

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
Why Facebook MCP Write Actions Fail: 3 Causes and Fixes

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
Meta MCP Token Expiry Fix: Why Your Connection Breaks Silently and How to Prevent It

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
Meta App Review for MCP Explained: Who Needs It and Who Doesn't

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
Tarek Kekhia

Written by

Tarek Kekhia

Co-Founder of AdAdvisor. Builder. AI and Data Specialist.