Authorization
OAuth 2.1 is the only credential. What a connected session reaches, how to revoke it, and the projectId-first flow.
The MCP server authenticates with OAuth 2.1 — there is no token to mint, copy, or store. Every client
discovers the authorization server from /api/mcp, registers itself, and sends you to a browser to approve.
The consent screen lives at /oauth/consent; protected-resource metadata is served at
/.well-known/oauth-protected-resource for automatic discovery.
Personal access tokens (gads_…) were removed. If a client config still sends an Authorization: Bearer gads_…
header, delete the header — it no longer authenticates anything, and the OAuth flow needs nothing in its place.
The bsk_ keys used by the REST API are a separate credential and are unaffected.
What a session reaches
A connected session is always workspace-scoped with write access: every account in the workspace, the setup
tools, the money-moving gads_propose_* writes, and the approval tools. There is no read-only credential and no
single-account credential — a session acts as the person who approved it, and the
safe-apply policy, not a credential scope, is what bounds money-moving
changes.
See Connect Claude Code and Connect claude.ai for the per-client steps.
The projectId-first flow
Because a session reaches the whole workspace, account-scoped tools have to be told which account you mean:
List accounts
gads_list_ad_accounts() returns every account in the workspace, each with a projectId.
Pass projectId
Give the account's projectId to every account-scoped tool — gads_get_optimization_plan,
gads_list_campaigns, the gads_propose_* writes, and so on. Omitting it is the most common
"no account is in scope" error.
Workspace-level tools — gads_list_ad_accounts, gads_get_connection_status, gads_discover_ad_accounts,
gads_import_ad_account, and the approval tools — take no projectId.
Revoking access
Remove the connector (claude.ai) or the server entry (Claude Code, Codex) and revoke the OAuth grant.
Verification is revocation-aware, so a revoked session stops working on its next call rather than at some later
expiry. Revoking here does not touch your bsk_ REST keys, and vice versa.
Rate limits
Limits are per user, not per session: 60 reads/min and 10 writes/min. Opening a second client does not raise your ceiling. See Rate limits.