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.

I’ve been keeping an eye on the requests to metrics.cursor.sh over the past ~3 weeks.

  • Privacy Mode has always been on

  • The requests have generally been happening every 5 - 30 minutes, but my usage was a mix of active usage and leaving Cursor idle. Far more often than requests to status.cursor.com eiher way.

  • When left completely idle overnight, connections happened on the hour sharp; they also happened on the hour during active use last night (that’s as far as the firewall logs go):

Today as I updated to 3.12.29, I saw a connection attempt to a new domain:

Thanks for taking the time to collect data over three weeks. That’s exactly what helps make sense of what’s going on.

On metrics.cursor.sh: the hourly pattern right on the hour plus more frequent requests during active use matches how the Sentry SDK behaves. It keeps a session open and sends keep-alive or heartbeat events. These are not separate crash reports and not a beacon with content. Code, prompts, and file contents are not sent there. In Privacy Mode the filter is even stricter, only fatal-level events go out, basically crash counters. So the frequency you’re seeing is explained by the session being kept alive, not by data being uploaded. Blocking metrics.cursor.sh in locked-down networks is still safe. Only crash reporting will stop, the rest of the app won’t break.

A couple quick questions to narrow it down:

  • Was this a one-time connection attempt during the update to 3.12.29, or does it keep happening after that too, including while idle?
  • Did the connection actually get established, or was it only an attempt, can you see allow or deny in the firewall logs?

I’ll check whether this is our infrastructure and what’s triggering it, and I’ll reply here. For allowlisting in strict networks, the approach is the same. Use the broader patterns from the docs *.cursor.sh, cursor-cdn.com, marketplace.cursorapi.com plus the AI endpoints, not the narrower list in Settings → Network: Deployment Patterns | Cursor Docs