Where does the bug appear (feature/product)?
Somewhere else…
Describe the Bug
Summary
After updating to Cursor 3.3.30, OAuth for a custom remote MCP server no longer completes. Cursor connects to the MCP SSE transport and successfully fetches OAuth discovery metadata, but it never performs Dynamic Client Registration and never opens the browser to /oauth/authorize.
This worked 5/9/26 before the latest Cursor update and is now failing on 5/11/26.
Environment
- Cursor:
3.3.30 - OS: macOS / Darwin arm64
- MCP transport: Remote SSE endpoint
- OAuth flow: Authorization Code + PKCE
- Client registration: OAuth 2.0 Dynamic Client Registration
- Redirect URI:
cursor://anysphere.cursor-mcp/oauth/callback
Expected Behavior
When adding the MCP server, Cursor should:
- Connect to the MCP server.
- Receive a
401for protected MCP requests. - Fetch
/.well-known/oauth-protected-resource. - Fetch
/.well-known/oauth-authorization-server. - Call the advertised
registration_endpoint. - Open browser to the advertised
authorization_endpoint. - Complete OAuth via PKCE callback.
- Reconnect with Bearer token and list tools.
Actual Behavior
Cursor does steps 1-4, then stops. It never calls:
POST /api/oauth/registerGET /oauth/authorize
No browser window opens. The MCP server remains connected over SSE, pings work, but tools never appear because authorization never completes.
Cursor Output previously showed:
MCP OAuth provider initialized Error connecting to streamableHttp server, falling back to SSE: Streamable HTTP error: Error POSTing to endpoint: Method Not Allowed Successfully connected to sse server Saving PKCE code verifier MCP OAuth redirect to authorization Stored server URL for OAuth flow OAuth provider needs auth callback during connection Client error: Unauthorized Unauthorized
After deleting/re-adding the MCP connection and restarting Cursor, the Cursor output panel showed no new useful logs, but server logs still show the same pattern: OAuth discovery succeeds, then no registration or authorization request occurs.
Relevant Server Logs
Cursor probes Streamable HTTP, then falls back to SSE successfully:
Started POST "/mcp/sse" Started GET "/mcp/sse" Successfully connected / SSE client registered
Cursor initializes MCP successfully:
Request body: {“method”:“initialize”, … “protocolVersion”:“2025-11-25” …}
Server response: {protocolVersion: “2024-11-05”, capabilities: {resources: …, tools: …}}
Request body: {“method”:“notifications/initialized”,“jsonrpc”:“2.0”}
Client initialized, beginning normal operation
Then Cursor sends protected MCP requests without a token. The server returns 401 before FastMCP handles the JSON-RPC body:
Started POST "/mcp/messages?client_id=..." Account Load SELECT "accounts".* FROM "accounts" ORDER BY "accounts"."id" ASC LIMIT 1 Immediately after each 401, Cursor fetches OAuth metadata:
Started GET "/.well-known/oauth-protected-resource" Completed 200 OK Started GET "/.well-known/oauth-authorization-server" Completed 200 OK
But Cursor never requests:
POST /api/oauth/register
GET /oauth/authorize
POST /oauth/token
OAuth Metadata Shape
Protected resource metadata returns (example.com is a placeholder for the real endpoints):
{
“resource”: “``https://example.com``”,
“authorization_servers”: [“``https://example.com``”],
“scopes_supported”: [“read”, “write”]
}
Authorization server metadata returns:
{
“issuer”: “``https://example.com``”,
“authorization_endpoint”: “``https://example.com/oauth/authorize``”,
“token_endpoint”: “``https://example.com/oauth/token``”,
“registration_endpoint”: “``https://example.com/api/oauth/register``”,
“code_challenge_methods_supported”: [“S256”],
“scopes_supported”: [“read”, “write”],
“response_types_supported”: [“code”],
“grant_types_supported”: [“authorization_code”, “refresh_token”],
“token_endpoint_auth_methods_supported”: [“none”]
}
### Steps to Reproduce
Configure a remote MCP SSE server URL in Cursor.
The server requires OAuth for protected MCP requests and advertises RFC 9728 protected resource metadata.
The auth server metadata includes registration_endpoint, authorization_endpoint, token_endpoint, and PKCE S256 support.
Add the MCP server in Cursor 3.3.30.
Observe server logs.
### Expected Behavior
Cursor calls POST /api/oauth/register, then opens browser to /oauth/authorize.
Actual: Cursor fetches both well-known metadata endpoints repeatedly, but never calls the registration endpoint or authorization endpoint. No browser window opens.
### Operating System
MacOS
### Version Information
Version: 3.3.30
VSCode Version: 1.105.1
### Additional Information
This appears to fail between “authorization server metadata loaded” and “client registration / authorization started.”
It may be related to newer MCP 2025-11-25 OAuth behavior. Cursor advertises protocol version 2025-11-25 during MCP initialize. If Cursor now prioritizes Client ID Metadata Documents or static client registration, it still appears not to fall back to the advertised Dynamic Client Registration endpoint.
### Does this stop you from using Cursor
No - Cursor works, but with this issue