Cursor connects to multiple undocumented domains

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Cursor connects to several domains not listed under Settings → Network → Required domains. Does this mean they can be blocked? What functionality will be affected?

metrics.cursor.sh
ptht05hbb1ssoooe.public.blob.vercel-storage.com
us-only.gcpp.cursor.sh

These are probably benign, but they may undermine the trust in Cursor’s security.

A well-defined set of egress domains is important in environments with tight network policies.

Steps to Reproduce

  1. Install an egress firewall
  2. Launch Cursor
  3. Enable Privacy Mode
  4. Use Cursor until the connections occur.
  5. In particular, notice the connection to metrics.cursor.sh, despite running in Privacy Mode.

Expected Behavior

Cursor should either:

  • only connect to the domains it lists in Settings → Network:

    api2.cursor.sh
    api3.cursor.sh
    api4.cursor.sh
    *.api5.cursor.sh
    repo42.cursor.sh
    *.authentication.cursor.sh
    authenticator.cursor.sh
    marketplace.cursorapi.com
    cursor-cdn.com
    downloads.cursor.com
    
  • or list other legitimate domains as optional

Screenshots / Screen Recordings

Operating System

Linux

Version Information

Version: 3.7.21
VS Code Extension API: 1.105.1
Commit: 517f696d8ab6c53eb04fbfdaae705cd146bf3460
Date: 2026-06-07T21:46:09.237Z
Layout: glass
Build Type: Stable
Release Track: Default
Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
V8: 14.2.231.22-electron.0
xterm.js: 6.1.0-beta.256
OS: Linux x64 7.0.0-22-generic

Does this stop you from using Cursor

Sometimes - I can sometimes use Cursor

Hey, thanks for the detailed report. This isn’t a bug. All three domains are legitimate Cursor infrastructure, the list in Settings → Network is narrower than the real set. Here’s a breakdown:

  • metrics.cursor.sh is the endpoint for error and crash reporting. No code, prompts, or file contents are sent there. In Privacy Mode the amount is reduced even more to crash-level telemetry only, basically crash counters, so you still see the connection, but that’s by design and doesn’t violate Privacy Mode since no content is sent.
  • us-only.gcpp.cursor.sh is a regional proxy that routes to the same backend as api*.cursor.sh. It’s part of the same *.cursor.sh family.
  • *.public.blob.vercel-storage.com hosts static assets like icons and images for the marketplace and MCP, read-only image fetches.

Can you block them? Yes, core functionality won’t break. Blocking metrics.cursor.sh disables crash report sending. Blocking the Vercel blob means some icons and banners won’t load. It’s better to allow all *.cursor.sh traffic.

Also, for allowlisting in strict networks, don’t rely on the narrow list in Settings. Use the broader wording from the docs: the machine needs access to *.cursor.sh, cursor-cdn.com, marketplace.cursorapi.com, and the AI provider endpoints: https://cursor.com/docs/enterprise/deployment-patterns. The *.cursor.sh wildcard covers both metrics and gcpp.

Let me know if any domain still breaks something when blocked.

Thanks for the explanation!

This suggests Cursor would initiate the connections only to report errors and crashes, right?

But I see requests to metrics.cursor.sh much more frequently, when cursor is completely idle., more like a beacon pattern.

I’d expect such periodic requests against status.cursor.com, but that connection was made less than once a day on average, while metrics.cursor.sh is being pinged as I type this, with Cursor idle for hours (no agents running) on the Rules, Skills, Subagents settings page.

Version: 3.8.22
VS Code Extension API: 1.105.1
Commit: 46fb7aafe279d7c72346febe68c2e004b7d1de60
Date: 2026-06-22T21:41:16.291Z
Layout: glass
Build Type: Stable
Release Track: Default
Electron: 40.10.3
Chromium: 144.0.7559.236
Node.js: 24.15.0
V8: 14.4.258.32-electron.0
xterm.js: 6.1.0-beta.256
OS: Linux x64 7.0.0-22-generic

Good question. It’s important to separate two things: an established connection and session traffic vs actually sending data.

The Sentry SDK (what’s behind metrics.cursor.sh) initializes on startup and keeps a session open, so periodic low-level requests while idle are session keep-alive or heartbeat, not separate crash reports. So the fact that you see periodic calls to metrics.cursor.sh when idle is expected and doesn’t mean code, prompts, or file contents are being sent. In Privacy Mode the filter is even stricter, only fatal-level events (crash counters) are sent out, no content is sent.

To confirm this more concretely, can you clarify two things:

  • Is Privacy Mode still enabled right now?
  • Roughly how often are the requests to metrics.cursor.sh happening, once per second, per minute, or less?

If you can, a capture showing the real request frequency and payload sizes would really help distinguish heartbeat from something more frequent that we should look at separately. If it turns out to be a noticeable beacon at a high frequency, I’ll raise it internally and follow up in the thread.

And like before: blocking metrics.cursor.sh in strict networks is safe. Only crash reporting will stop, the rest of the app won’t break.