MCP OAuth rejects a callback with no iss: what to do
Gemini CLI and Codex validate the RFC 9207 iss parameter on the OAuth callback. Which clients reject a missing iss, and what a server without iss can rely on.

A missing iss on the OAuth callback is rejected only when the client expects one. Gemini CLI rejects a callback without iss whenever an expected issuer is discovered or configured, and Codex rejects it when the server advertises issuer support. The MCP authorization spec rejects a missing iss only when the server's metadata says it sends one. If a login fails on this check, first update the client or check its issuer setting; an API-key header is the documented path only for automation that does not speak OAuth.
The rules below come from the MCP specification, Gemini CLI's MCP page and Codex's MCP page, all read 2026-09-29. The Sume facts come from MCP OAuth and API keys and, where marked, current code.
What is the iss parameter?
It is RFC 9207, OAuth 2.0 Authorization Server Issuer Identification. The authorization server adds iss=<issuer URL> to the redirect back to the client, so a client that talks to several servers can tell which one answered. It defends against mix-up attacks, where a code from one server is replayed to another.
The MCP spec says servers SHOULD include iss in authorization responses and, if they do, MUST set authorization_response_iss_parameter_supported to true in their metadata. It also says a future revision is expected to raise that from SHOULD to MUST.
Which clients reject a callback with no iss?
In the spec's table, a server that neither advertises the flag nor sends iss is the fourth row, and the client action there is to proceed. Codex's page says that when issuer support is not advertised it appends a server-specific callback ID to the callback, and that after a rejected response it neither exchanges the code nor falls back to another callback.
| Source | Missing iss is rejected when |
|---|---|
| MCP spec | The metadata sets authorization_response_iss_parameter_supported to true |
| Gemini CLI | An expected issuer is discovered or configured; the response is rejected with HTTP 400 |
| Codex | Issuer support is advertised; a mismatched iss is always rejected |
Does Sume send iss?
Not in current code. Sume's MCP authorization redirect carries only code and state, and its authorization-server metadata has an issuer field but not authorization_response_iss_parameter_supported. Under the spec's table that is the proceed row.
What this means for Gemini CLI depends on its own logic. Its page says a missing iss is rejected when an expected issuer is discovered or configured, and it does not say what discovery covers. This post does not claim it fails or works against Sume; check with a test login on your version.
What is the fallback if a client rejects the login?
Prefer fixing the client or its issuer setting. Sume's docs say the API-key path is for automation that does not speak OAuth, and they say not to mint API keys for hosted OAuth clients as a workaround, so an API key is a deliberate choice for a headless job, not a patch for a failed login. Sume's MCP accepts Authorization: Bearer <key> or x-api-key on https://mcp.sume.com/mcp, as described in MCP OAuth and API keys. An API-key session sees the full tool set, so keep the key in an environment variable, as in MCP config API key: use an environment variable.
The trade-off between the two paths is in MCP server API key vs OAuth.
Sources
Related posts
More in Integrations
- Meta Ads CLI dynamic creative: limits for videos and text
Meta's Ads CLI dynamic creative takes up to 10 videos, 10 images and 5 each of titles, bodies, descriptions and CTAs. How to size a batch of AI variants.
- Meta Ads CLI video ad: upload an AI-generated MP4
Meta's Ads CLI makes a video ad from a local file with meta ads creative create --video. Download the Sume clip first, then upload; ads start paused.
- Meta ads MCP server in Claude Code: the add command
Meta's docs add its ads MCP server to Claude Code with one claude mcp add line. The same session can also add Sume's hosted MCP to make the video.
- Do I need a Meta developer app for the ads MCP server?
Not always: Meta says owning an app is not a prerequisite. With your own app you choose OAuth or a user access token with seven listed permissions.
Written by Sume