Meta Ads MCP: dynamic registration invalid_client_metadata

Meta's ads MCP rejected a direct public-client registration on 2026-09-06 (invalid_client_metadata), so Sume uses a pre-approved Meta client id.

5 min readSume
All posts

If a Meta Ads MCP connection fails at registration with invalid_client_metadata and "Dynamic registration is not available for this client", the client was not pre-approved. Sume saw exactly that on 2026-09-06 and solved it by configuring a Meta client id that is approved for its callback URL, instead of relying on dynamic registration.

What was checked

Sume's workspace integrations doc records that Meta's protected resource metadata returned resource: https://mcp.facebook.com/ads, and that an unauthenticated initialize request returned HTTP 401 pointing at that metadata URL. The authorization metadata advertised Facebook v26 authorization, Graph v26 token exchange, S256 PKCE, public-client authentication and a registration endpoint.

What failed

A direct public-client registration attempt was rejected with invalid_client_metadata and the message above. Advertising a registration endpoint is not the same as accepting any client.

What Sume does instead

The server environment sets META_ADS_MCP_CLIENT_ID to a client that has approval for the callback URL, which is /api/integrations/meta-ads/callback on the web host. If that value is not set, Connect still tries the advertised dynamic registration, and when registration fails the page shows a connection error. The development demo stays usable either way.

From the Sume workspace integrations doc (checked 2026-09-06)
StepResult
Metadata resourcehttps://mcp.facebook.com/ads
Unauthenticated initializeHTTP 401 with metadata URL
PKCE methodS256
Direct public registrationRejected: invalid_client_metadata

Rollout is account-level too

Sume's doc lists what must be verified per environment and account: consent, exact tool schemas under each grant, read-only scope acceptance, and Meta's account rollout flag (is_ads_mcp_enabled). A successful fixture is never reported as a successful Meta consent.

If you hit this yourself

If you are wiring Meta's server into your own client, a registration error like this means you need a client id that Meta has approved for your redirect URI. If you only need ad data in a Sume agent, use the Meta Ads row on the Integrations page and skip registration entirely. For the direct route see adding Meta's server to Claude Code, and note that this post describes what was observed in September, which can change.

Reading the error text

The two parts of the message do different jobs. invalid_client_metadata is the registration error code from the OAuth dynamic registration flow. The sentence "Dynamic registration is not available for this client" tells you the refusal is about this client, not about a malformed request. Fixing JSON fields will not help.

The practical lesson is to separate discovery from permission. Discovery documents tell you where the endpoints are. Whether your client may use them is a separate decision made by the vendor.

Related posts

More in Integrations

All Integrations posts

Written by Sume