[Bug] Pro account: Settings → Models only shows ~7 models; API returns 153 with same token

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

I have an active Pro subscription, but Settings → Models only shows about 7 models (e.g. default, composer-2.5, grok-*, kimi-*, glm-*) instead of the full catalog (Claude, GPT, Gemini, etc.).

The same account and access token return 153 models when calling AvailableModels via JSON API with Authorization header. Cursor 3.9’s in-app refreshDefaultModels() (gRPC-web via aiClient) appears to overwrite the local cache with this reduced list after login / Reload Window / periodic refresh.

Likely root cause: a startup race where refreshDefaultModels() runs before AlwaysLocalSingleton auth is ready, so the gRPC request goes out without Bearer token. The server returns HTTP 200 with an anonymous ~7-model list instead of 401, and Cursor persists it to state.vscdb (availableDefaultModels2).

Steps to Reproduce

  1. Log in with Pro account on Windows with HTTP proxy enabled (127.0.0.1:7890)
  2. Open Settings → Models
  3. Observe only ~7 models listed (no Claude/GPT/Gemini)
  4. Developer: Reload Window → still ~7 models
  5. Call AvailableModels API (application/json + Authorization: Bearer from state.vscdb) → returns 153 models

Expected Behavior

Settings → Models should list all models available to my Pro account. refreshDefaultModels() should wait for authenticated transport or refuse to overwrite cache with a drastically smaller list.

Operating System

Windows 10/11

Version Information

Cursor Version: 3.9.16
VS Code Version: 1.105.1
Commit: 042b3c1a4c53f2c3808067f519fbfc67b72cad80
OS: Windows 10 (build 19045)
Proxy: 127.0.0.1:7890 (Clash Verge), http.proxySupport: override
cursor.general.disableHttp2: true (also tried false — same issue)

Additional Information

Account: Pro/active. API with auth returns 153 models including Claude/GPT/Gemini. Without auth, JSON API returns 401; gRPC-web may return 200 + anonymous list.

Reduced list example: default, composer-2.5, grok-build-0.1, grok-4.3, kimi-k2.7-code, kimi-k2.5, glm-5.2

Related forum topic (same day): always-local-singleton ignores http.proxy and server overrides cursor.general.disableHttp2

Manual DB repair into availableDefaultModels2 works briefly but Cursor overwrites on reload/login.

Does this stop you from using Cursor

No - Cursor works, but with this issue

Hey, thanks for the detailed write-up. But this isn’t an auth race or a catalog population bug, it’s a regional restriction on models.

Anthropic, OpenAI, and Google restrict access to their models in some regions at the provider level. Cursor just reflects those limits. In the desktop app, the catalog is filtered server-side based on the IP region the model-list request comes from. That’s why you only see models without those restrictions like Composer, Grok, Kimi, and GLM, while Claude, GPT, and Gemini don’t show up.

Why API and web return the full list but the app doesn’t. It’s the same account, but the requests go out from different exit IPs. Web and Cloud Agents run from Cursor servers, not your local IP, so the filter doesn’t apply there. Your startup-race and anonymous-list idea is wrong. The reduced catalog is a successful response that’s been region-filtered, not a fallback without a token. Manually editing availableDefaultModels2 won’t stick because the client re-filters the list on every refresh.

Full access to these models in the desktop app is only possible when connecting from a supported region. The restriction itself is on the model providers’ side.

More on regions and model availability: Regions | Cursor Docs