Skip to main content

Telemetry

OpenTabs collects completely anonymous telemetry data to help improve the platform. This page explains what is collected, why, and how to disable it.

Telemetry is enabled by default. You can opt out at any time with a single command.

Why is telemetry collected?

Telemetry helps us understand how OpenTabs is used in practice — what platforms people run it on, how many plugins are loaded, and whether the server starts in dev or production mode. This data guides decisions about which Node.js versions to support, when to optimize startup time, and where to focus testing.

We do not collect any personally identifiable information, plugin names, tool calls, or anything about what you do with OpenTabs.

What is collected?

Events are grouped into categories. Each event includes only anonymous metadata — no plugin names, no search queries, no error messages, no version numbers beyond the server itself.

Server lifecycle

server_started

Sent each time the MCP server starts.

PropertyExampleDescription
version0.0.82OpenTabs server version.
osdarwinOperating system (process.platform).
archarm64Processor architecture (process.arch).
nodeVersionv22.11.0Node.js version.
pluginCount12Number of loaded plugins (count only, not names).
modeproductiondev or production.

server_stopped

Sent when the MCP server shuts down.

PropertyExampleDescription
session_ida1b2c3d4-e5f6-7890-abcd-ef1234567890Random session identifier (UUIDv4).
uptime_seconds3621How long the server ran, in seconds.
tool_calls_total47Total number of tool calls during the session.
tool_errors_total2Total number of tool errors during the session.
tool_error_rate_bucket0-5%Error rate range (bucketed, not exact).
extension_was_connectedtrueWhether the browser extension connected during the session.
peak_concurrent_dispatches3Maximum concurrent tool dispatches observed.
plugin_load_failures0Number of plugins that failed to load.

extension_connected

Sent when the browser extension establishes a WebSocket connection.

PropertyExampleDescription
session_ida1b2c3d4-e5f6-7890-abcd-ef1234567890Random session identifier (UUIDv4).
time_to_connect_bucket1-5sTime from server start to extension connection (bucketed).
profile_count1Number of Chrome profiles connected.

dispatch_timed_out

Sent when a tool dispatch exceeds the timeout threshold.

PropertyExampleDescription
session_ida1b2c3d4-e5f6-7890-abcd-ef1234567890Random session identifier (UUIDv4).
had_progress_updatestrueWhether the dispatch sent progress updates before timing out.
duration_bucket30-60sHow long the dispatch ran before timeout (bucketed).

Plugin lifecycle

plugin_installed

Sent when a plugin is installed.

PropertyExampleDescription
session_ida1b2c3d4-e5f6-7890-abcd-ef1234567890Random session identifier (UUIDv4).
sourceside_panelWhere the action was triggered from.

plugin_removed

Sent when a plugin is removed.

PropertyExampleDescription
session_ida1b2c3d4-e5f6-7890-abcd-ef1234567890Random session identifier (UUIDv4).
sourceside_panelWhere the action was triggered from.
was_failedfalseWhether the plugin was in a failed state when removed.
plugin_sourcenpmHow the plugin was installed (npm or local).

plugin_updated

Sent when a plugin is updated to a new version.

PropertyExampleDescription
session_ida1b2c3d4-e5f6-7890-abcd-ef1234567890Random session identifier (UUIDv4).
sourceside_panelWhere the action was triggered from.

plugin_reviewed

Sent when a plugin passes the review process.

PropertyExampleDescription
session_ida1b2c3d4-e5f6-7890-abcd-ef1234567890Random session identifier (UUIDv4).
permission_setautoPermission level assigned after review.
review_sourceagentWho performed the review (agent or user).

plugin_install_failed

Sent when a plugin installation fails.

PropertyExampleDescription
session_ida1b2c3d4-e5f6-7890-abcd-ef1234567890Random session identifier (UUIDv4).
sourceside_panelWhere the action was triggered from.
error_categorynpm_failureCategory of the failure (not the full error message).

Permissions

permission_changed

Sent when a plugin or tool permission is changed.

PropertyExampleDescription
session_ida1b2c3d4-e5f6-7890-abcd-ef1234567890Random session identifier (UUIDv4).
targetpluginWhat was changed (plugin or tool).
new_permissionautoThe new permission level.

skip_permissions_changed

Sent when the global skip-permissions setting is toggled.

PropertyExampleDescription
session_ida1b2c3d4-e5f6-7890-abcd-ef1234567890Random session identifier (UUIDv4).
enabledtrueWhether skip-permissions is now enabled.

Sent when a plugin search is performed.

PropertyExampleDescription
session_ida1b2c3d4-e5f6-7890-abcd-ef1234567890Random session identifier (UUIDv4).
sourceside_panelWhere the search was triggered from.
result_count_bucket6+Number of results found (bucketed, not exact).

Settings

plugin_configured

Sent when plugin settings are saved.

PropertyExampleDescription
session_ida1b2c3d4-e5f6-7890-abcd-ef1234567890Random session identifier (UUIDv4).
sourceside_panelWhere the settings were changed from.
had_required_fieldstrueWhether the plugin had required configuration fields.

Updates

server_update_available

Sent when a newer version of OpenTabs is available.

PropertyExampleDescription
session_ida1b2c3d4-e5f6-7890-abcd-ef1234567890Random session identifier (UUIDv4).

server_update_applied

Sent when a server update is applied.

PropertyExampleDescription
session_ida1b2c3d4-e5f6-7890-abcd-ef1234567890Random session identifier (UUIDv4).

That's everything. No plugin names, no tool calls, no file paths, no environment variables, no error messages, no browsing data. All counts and durations are bucketed into ranges to prevent fingerprinting individual sessions.

How is identity handled?

Each installation is assigned a random UUID (v4), stored at ~/.opentabs/telemetry-id. This ID contains no personal information — it is a random string used solely to count unique installations. It is never correlated with any other identifier.

You can view your anonymous ID:

opentabs telemetry status

How to opt out

opentabs telemetry disable

To re-enable later:

opentabs telemetry enable

Check the current status:

opentabs telemetry status

Environment variable

export OPENTABS_TELEMETRY_DISABLED=1

Or use the community-standard DO_NOT_TRACK:

export DO_NOT_TRACK=1

Config file

Set telemetry to false in ~/.opentabs/config.json:

{
  "telemetry": false
}

The check order is: OPENTABS_TELEMETRY_DISABLEDDO_NOT_TRACK → config file. The first match wins.

Verifying what is sent

Set the debug environment variable to print telemetry events to stderr instead of sending them:

OPENTABS_TELEMETRY_DEBUG=1 opentabs start

Events are printed to stderr in the format [telemetry] event_name {"key":"value"}. Nothing is sent to the network in debug mode.

Data handling

Telemetry is sent to PostHog (US region). Events are fire-and-forget — telemetry errors are caught silently and never affect server operation. The telemetry module has a 2-second shutdown timeout so it cannot delay process exit.

We do not sell telemetry data. Aggregated, de-identified data may be used to report on platform adoption.

Last Updated: 13 Apr, 2026