AI & Automation12 min read

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

Tarek Kekhia

Tarek Kekhia

Jun 3, 2026
Share
Facebook MCP OAuth Fix: 4 Errors and How to Resolve Each One

TL;DR

Facebook MCP auth failures fall into four distinct categories. Error #1 is a redirect_uris are not registered bug affecting Claude Code CLI — no user-side fix; you must switch clients. Error #2 is an is_ads_mcp_enabled: false account flag tied to Meta's phased rollout; wait or use a third-party MCP. Error #3 is an expired 60-day OAuth token; reconnect to fix it. Error #4 is missing permission scopes granted at consent; re-authenticate with the correct access level. AdAdvisor MCP bypasses all four: pre-approved app, managed token refresh, pre-configured scopes.

Quick Answer

  • redirect_uris are not registered for this client → switch clients (no user-side fix exists)
  • is_ads_mcp_enabled: false → wait for Meta's phased rollout (or use a third-party MCP now)
  • Connection was working, now returns empty results → expired 60-day token; reconnect via OAuth
  • "Insufficient permissions" or write actions failing → reconnect with read/write scopes selected
  • AdAdvisor MCP avoids all four issues through a pre-approved app and managed authentication

If you're seeing a Meta MCP OAuth error, you're likely looking at one of four completely different problems that happen to share the same label. The facebook mcp oauth fix most people search for doesn't exist as a single answer. Each error type has a different cause, a different affected audience, and a different resolution. This article gives you the diagnosis and the exact fix for each one.

New to Meta MCP? See What is Facebook MCP? for background before troubleshooting.

Which Error Do You Have?

Find your symptom below and jump to the relevant section.

Quick Diagnosis: Which Meta MCP OAuth Error Do You Have?

What you seeYour errorJump to
redirect_uris are not registered for this clientError #1: OAuth client not whitelistedError #1
is_ads_mcp_enabled: false in the responseError #2: Account not yet in rolloutError #2
Connection was working, now returns empty resultsError #3: Token expiredError #3
"Insufficient permissions" or missing campaign dataError #4: Wrong scopes at consentError #4

If you're not sure which error you have, start with Error #1 - it's the most common.

Facebook MCP OAuth Error Comparison

Meta MCP OAuth Error Types Compared

ErrorUser Fix Available?SeverityResolution Time
redirect_uris not registeredNoHighImmediate client switch
is_ads_mcp_enabled: falseNoMediumWait 2-4 weeks for rollout
Expired OAuth tokenYesLow~2 minutes to reconnect
Missing permission scopesYesLow~5 minutes to re-authenticate

Error #1: redirect_uris are not registered for this client

Cause

Meta's OAuth server only accepts callback URLs that have been pre-registered in the Meta app configuration. Claude Code CLI uses a dynamic localhost loopback redirect URI (http://localhost:<port>/callback), which is standard for HTTP MCP servers. The problem: Meta's app hasn't whitelisted these dynamic URLs. Claude.ai (web) and Claude Desktop use different, static callback URLs that Meta has whitelisted. That's why this error is client-specific: same MCP server, same credentials, different behavior depending on which Claude client initiates the flow.

Who is affected

Users running Meta MCP through Claude Code CLI (terminal). This error does not affect Claude.ai web users or Claude Desktop users.

Symptom

The OAuth flow fails before the browser opens, or the browser opens and immediately returns the error string redirect_uris are not registered for this client. No ad account access is granted.

Status

This is an active, unresolved issue tracked across multiple GitHub reports:

The fix requires Meta and Anthropic to update the OAuth client configuration on the server side. As of June 2026, there is no user-side fix for this error.

Fix (workarounds only)

Switch to a client whose callback URL Meta has already whitelisted:

  • Option A: Claude.ai web - Pro or Max plan subscribers can connect Meta Ads natively via Settings → Integrations. OAuth works correctly in this client.
  • Option B: Claude Desktop - Configure the MCP via claude_desktop_config.json. Claude Desktop uses a registered callback URL and completes OAuth without this error.
  • Option C: AdAdvisor MCP - Connects through AdAdvisor's pre-approved app, which has already passed Meta's Business Verification and uses registered redirect URIs. This error does not occur in that path, regardless of which Claude client you use.

Do not attempt manual token workarounds, MCP server config edits (not user-accessible), or try to "register" your own redirect URI. None of these address the root cause.

Error #2: is_ads_mcp_enabled: false

Cause

Meta's official MCP is in phased rollout. Even after a successful OAuth flow, the underlying per-account flag is_ads_mcp_enabled must be activated by Meta. This is not a permissions problem. It is a deployment queue. You can complete the OAuth authorization perfectly and still encounter this flag returning false.

This is the most commonly misdiagnosed Meta MCP issue. Forums frequently label it as "OAuth broken," but OAuth is functioning correctly; the account simply hasn't been enrolled yet.

Who is affected

Any advertiser in a non-priority region or below Meta's spend threshold for early access. US accounts go first; higher-spend accounts are prioritized. Accounts in Australia, New Zealand, and parts of the EU were still in the rollout queue as of June 2026. You can connect a single Facebook profile and see five ad accounts: two may return is_ads_mcp_enabled: true and three may return false. That mix is normal during phased rollout.

Symptom

OAuth completes successfully. The connection appears active in your Claude client. Queries return is_ads_mcp_enabled: false or empty results with no clear error message.

Fix

There is no user-initiated fix. Your options:

  1. Wait. Meta is rolling out progressively; most accounts receive access within 2-4 weeks of the product becoming available in their region.
  2. Request prioritization. If you spend $10,000+/month on Meta ads, contact your Meta account representative and request early access.
  3. Use a third-party MCP in the meantime. Pipeboard, Adzviser, and Ryze all have independent Meta Marketing API connections that bypass the is_ads_mcp_enabled flag. AdAdvisor MCP also operates independently of this flag.

Error #3: Expired OAuth Token

Cause

Meta Marketing API OAuth tokens have a lifespan of approximately 60 days. When a token expires, MCP calls fail silently. Claude returns empty results or generic errors rather than a clear "token expired" message. This is the most common reason a previously working Meta MCP connection stops responding.

Symptom

  • MCP was working, then suddenly returns empty responses or incomplete data
  • Claude reports that it "retrieved" data but shows nothing useful
  • No explicit error message is shown in the Claude interface

Fix

Reconnecting via OAuth (Claude.ai web)

1
Go to Settings → Integrations

Navigate to Settings and find the Integrations section in your Claude.ai account.

2
Disconnect the Meta Ads MCP

Find the Meta Ads MCP connection and select disconnect.

3
Reconnect via OAuth

Complete the authorization flow again to get a fresh token.

4
Confirm the new token is active

Ask Claude: "Which ad accounts do I have access to?" to verify the connection is working.

For Claude Desktop

Delete the stored token from your claude_desktop_config.json, restart Claude Desktop, and re-authenticate.

Prevention

Set a calendar reminder to re-authenticate every 55 days. The official Meta MCP server's current beta implementation does not include auto-refresh; token expiry is a manual maintenance task. For a deeper look at token expiry patterns and how to detect silent failures early, see Meta MCP token expiry: causes and fixes.

AdAdvisor MCP handles token refresh automatically. The managed infrastructure monitors token validity and re-authenticates before expiry, which eliminates this category of failure entirely. That operational gap is one of the practical differences between the beta connector and a managed solution, covered in more detail in Compare raw API access vs managed optimization - Meta MCP vs AdAdvisor.

Error #4: Missing Permissions / Insufficient Scopes

Cause

During Meta OAuth consent, the user selects permission scopes. If ads_management or ads_read are not granted, or if a read-only tier was selected when write access is needed, subsequent MCP calls return permission errors or silently return no data for certain operations.

Common scenarios

  • User selected "read-only" at consent, then asks Claude to pause a campaign (write action fails)
  • User didn't grant business_management for multi-account or Business Manager setups
  • User authenticated with a personal Facebook account instead of the Business Manager admin account

Symptom

  • "Insufficient permissions" error on write operations
  • Read operations work, but campaign create / edit / pause commands fail
  • Some ad accounts are visible; others are inaccessible

Fix

  1. Disconnect the current MCP connection
  2. Reconnect. At the OAuth consent screen, explicitly select read/write access (or read/write/financial if you need to make budget changes)
  3. Authenticate with the Facebook account that has Admin access to the Business Manager, not just the ad account
  4. For agencies: the authenticated user must have at least Advertiser-level access in Business Manager for each ad account being managed

Quick test

Ask Claude: "Try to pause the lowest-spend active ad set in my account." If it returns a permissions error, you're on read-only. If it asks for confirmation before acting, you have write access.

If write actions continue to fail after re-authenticating with the correct scopes, see Meta MCP write actions failing: causes and fixes for additional diagnostics.

Which Errors Can You Actually Fix?

Meta MCP OAuth Error Fixability

ErrorFixable by user?Action
Error #1: redirect_uris not registeredNoSwitch clients
Error #2: is_ads_mcp_enabled: falseNoWait for rollout
Error #3: Expired tokenYesReconnect via OAuth
Error #4: Missing scopesYesRe-authenticate with correct permissions

Errors #1 and #2 have no user-side fix. If you're running on Claude Code CLI and need Meta MCP working today, your only real options are switching to Claude.ai web or Claude Desktop, or using a managed MCP that bypasses the official connector entirely.

Error #3 is a solvable problem, but it's operational overhead. If you're running campaigns daily, re-authenticating every 55 days is manageable only if you also build in a process for detecting when the connection silently breaks. That's a real maintenance burden most teams don't account for when evaluating whether to run the official beta.

Error #4 is straightforward to fix on re-authentication, but it requires knowing which scopes to select, which isn't well-documented in Meta's current onboarding flow.

AdAdvisor MCP uses a pre-approved app that has passed Meta's Business Verification, handles token refresh automatically, and pre-configures the correct permission scopes so users don't have to navigate the consent tiers manually. Errors #1, #3, and the scope selection problem in #4 don't occur in that path.

For a full breakdown of what the official MCP handles versus what AdAdvisor adds, see Meta MCP vs AdAdvisor →.

Why Does Meta MCP OAuth Fail?

Meta MCP OAuth failures have four distinct causes: a redirect URI that isn't registered in Meta's app config (client-specific, affects Claude Code CLI only), an account-level rollout flag that Meta hasn't activated yet (is_ads_mcp_enabled: false), an expired 60-day access token that fails silently, or missing permission scopes selected at the OAuth consent screen. Each looks different and has a different fix, or no fix at all.

Why Does Claude Connect to Meta MCP But Show No Campaign Data?

If the connection appears active but queries return nothing, the most likely cause is an expired token (Error #3) or the is_ads_mcp_enabled: false rollout flag (Error #2). Both present as silent failures with no error message, just empty results. Check the Quick Diagnosis table above to distinguish them.

Why Does Meta MCP Stop Working After 60 Days?

Meta Marketing API OAuth tokens have a ~60-day lifespan. The official Meta MCP beta has no auto-refresh mechanism, so when the token expires, MCP calls fail silently. The fix is to disconnect and reconnect via OAuth. Set a 55-day calendar reminder to stay ahead of the expiry. See Meta MCP token expiry: causes and fixes for full detail.

Why Can Claude Read My Campaigns But Not Edit Them?

This is Error #4: missing ads_management write scope. When you authenticated via OAuth, you either selected read-only access or didn't grant the ads_management scope. Read operations work because ads_read was granted; write operations fail because ads_management was not. Fix: disconnect, reconnect, and explicitly select read/write at the consent screen.

Should You Use Official Meta MCP or AdAdvisor MCP?

Use the official Meta MCP if:

  • You're experimenting or evaluating before committing to a workflow
  • Read-only access to campaign data is sufficient for your use case
  • You're on Claude.ai web or Claude Desktop (where OAuth works correctly)
  • You don't mind setting a 55-day reminder to re-authenticate manually

Use AdAdvisor MCP if:

  • Campaigns run daily and a silent token failure would cause real disruption
  • You need write access (pause, edit, create) without navigating OAuth scope tiers
  • Multiple team members need access without each managing their own token
  • You're on Claude Code CLI and can't get the official MCP to authenticate at all

Frequently Asked Questions

Summary

Meta MCP OAuth failures are not a single problem. Error #1 (redirect_uris are not registered) requires a client switch; there is no user-side fix. Error #2 (is_ads_mcp_enabled: false) requires waiting for Meta's phased rollout; nothing you do today changes it. Error #3 (expired token) is periodic maintenance, fixable immediately by reconnecting, but it will recur every 60 days without a reminder system. Error #4 (insufficient scopes) is a one-time re-authentication; connect again with the correct access level and it stays fixed.

Errors #1 and #2 are outside user control. If you need Meta MCP working today and are on Claude Code CLI, your options are Claude.ai web, Claude Desktop, or a managed connector that bypasses the official beta entirely.

Tarek Kekhia

Written by

Tarek Kekhia

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