Skip to content

[Bug]: Cursor shows "SDK catalog request failed" when the account plan is rejected (403 plan_required) #15075

Closed

Description

@0xKa

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/server

Steps to reproduce

  1. Sign in to the Cursor provider with a free-plan Cursor account.
  2. Open provider settings, or start a Cursor thread.

Expected behavior

The provider status explains that Cursor rejected the account's plan, e.g. "Cursor's SDK requires a paid plan (plan_required)"

Actual behavior

Cursor shows as Unavailable with "Cursor SDK catalog request failed. Check server logs for details." The real reason only appears in server.trace.ndjson. checkCursorProviderStatus treats only 401 as an auth failure, so a 403 plan_required gets the generic message.`

Impact

Major degradation or frequent failure

Version or commit

0.0.46-nightly.20261003.2610 (8ed276c)

Environment

Fedora 44 (Linux 7.2.8), AppImage desktop build, cursor-agent 2026.10.01-e373342, Cursor free plan

Logs or stack traces

Cursor SDK catalog probe failed
  name: UnknownAgentError
  message: [plan_required] Cloud Agent is not available for free users. Please upgrade to Pro.
  code: plan_required, status: 403, isRetryable: false
  endpoint: GET /v1/models (also GET /v1/me)

Screenshots, recordings, or supporting files

Screenshot_20261003_105815.png

Workaround

Stay on 0.0.45-nightly.20261002.2595, which used cursor-agent and works with a free account.

Activity

  1. added
    bugSomething is broken or behaving incorrectly.
    needs-triageIssue needs maintainer review and initial categorization.
    on Oct 3, 2026
  2. juliusmarminge commented on Oct 15, 2026

    @juliusmarminge
    Member

    Note

    Grok responding on behalf of Julius.

    Carrying over from #19766: the same 403 plan_required also breaks browser sign-in. After login, the verification probe returns auth: unknown (only 401 counts as an auth failure in CursorSdkCatalog), so runLogin in packages/provider-cursor/src/server/auth.ts deletes the new credential and shows the generic "Cursor sign-in failed or expired" instead of the plan error, then the next check reports "Not authenticated". A fix here should surface the plan_required reason both in provider status and in the sign-in failure message. #16224 (Enterprise /v1/me 403) goes through the same path.

  3. pancake37 commented on Oct 17, 2026

    @pancake37

    Note

    Gemini responding on behalf of pancake37.

    Confirmed the same behavior and found a working workaround for free-tier users who want to use Cursor in T3 Code without staying on outdated nightly versions.

    Root Cause Confirmation

    When signing in with a free/hobby Cursor account, @cursor/sdk creates an API key, but Cursor's remote backend rejects Cursor.me / GET /v1/me with:

    {
      "name": "UnknownAgentError",
      "message": "[plan_required] Cloud Agent is not available for free users. Please upgrade to Pro.",
      "code": "plan_required",
      "status": 403
    }

    Because isAuthenticationFailure in packages/provider-cursor/src/server/CursorSdkCatalog.ts only checks for 401 (cause.status === 401), 403 is treated as an unexpected failure. runLogin then immediately executes options.store.clear() and reports "Cursor sign-in failed or expired".

    Working Workaround for Free Accounts: Use Cursor via ACP

    If you have cursor-agent CLI installed locally (~/.local/bin/cursor-agent), it officially supports ACP (cursor-agent acp) and runs against your existing local Cursor session token (no Pro / Cloud Agent subscription required).

    You can register it directly in T3 Code as an ACP provider instance in settings.json:

    "acpRegistry_cursor": {
      "driver": "acpRegistry",
      "displayName": "Cursor Agent (ACP)",
      "enabled": true,
      "config": {
        "agentId": "cursor",
        "commandPath": "/path/to/cursor-agent",
        "distribution": "auto",
        "registryIconUrl": "https://cdn.agentclientprotocol.com/registry/v1/latest/cursor.svg",
        "customModels": []
      }
    }

    This connects to cursor-agent acp via cursor_login auth, discovers all 47 models (Auto, Composer 2.5, Claude Opus 5, Sonnet 5, etc.), and executes prompts cleanly under standard account limits.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is broken or behaving incorrectly.needs-triageIssue needs maintainer review and initial categorization.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions