MCP OAuth succeeds (token + initialize OK) but ChatGPT web still re-opens auth on tool call

We are debugging a reproducible re-auth loop on ChatGPT web with a custom MCP server.

Environment

  • MCP server behind OAuth endpoints authorize/token/register
    • Transport: streamable HTTP (stateless)
  • Observed behavior
    1. Connector setup succeeds in ChatGPT (OAuth completes and connector appears active).
    1. In chat, invoking a tool triggers Connect/auth again.
    1. This repeats even though backend logs show successful auth + MCP handshake.

What server logs confirm

  • register returns 201 (public client, token_endpoint_auth_method=none)
    • authorize issues code (302)
      • token returns 200 with refresh token
        • api/mcp receives and authorizes bearer token
          • initialize, notifications/initialized, tools/list, resources/list return 200
            • Mcp-Session-Id is returned and later