What we collect
Glider products send a small amount of anonymous usage telemetry so we can see how the tools are really used: how many people use them, on which platforms, which tools matter, and what breaks. This page lists every field, what is never collected, and how to turn it off.
Telemetry is anonymous and on by default. It never contains your source code, prompts, or anything that identifies your project. You can disable it with a single flag.
What is collected
Each MCP server sends batches of small JSON events containing only:
- A random install id (a GUID generated once and stored locally; no machine, user, or hardware fingerprinting).
- Product and version (for example, glider 6.16.0).
- Operating system and architecture (for example, macos / arm64).
- Runtime version (for example, .NET 10).
- Per tool call: the tool name, a duration bucket (not the exact time), and the outcome (success, error, timeout, or cancelled).
- Error categories: the exception type name or a stable error code only — never the message text.
- Error fingerprints: for a failure, a short list of method names (as <code>Namespace.Type.Method</code>). A frame is kept only when its namespace begins with a known framework prefix (<code>Glider.</code>, <code>Microsoft.CodeAnalysis.</code>, <code>Microsoft.Build.</code>, <code>Microsoft.Extensions.</code>, <code>System.</code>); any other frame is collapsed to <code><external></code>. This is decided by the namespace name, not the assembly, so code you place under one of those prefixes would also be kept — but never any file path, line number, argument, or message. A grouping hash is included so identical failures can be counted.
- Coarse workspace shape as counts and buckets only: number of projects and files, SDK-style vs legacy project counts, whether Central Package Management is used, target-framework families, and how long the workspace took to load (a duration bucket, not the exact time). No names or paths.
- A recognized MCP client name (for example, claude-code or cursor), or "other" — the name your client reports is matched to a known list and never forwarded verbatim.
- Country, derived at our edge from the network request. The IP address is never stored or forwarded.
What is never collected
- Source code or file contents.
- File paths, file names, symbol names, or project names.
- Prompts or any LLM conversation content.
- Command arguments or environment variables.
- Raw error messages or exception text.
- Full stack traces, file paths, or line numbers — only method names whose namespace begins with a known framework prefix are kept (see the error fingerprint above); everything else is collapsed to <code><external></code>.
- Runtime evidence such as memory dumps or variable values.
How it travels
Events are sent to a small ingest service at telemetry.glidermcp.com, which derives your country from the network edge, drops the IP address, validates that only the fields above are present, and forwards anonymized records to our analytics backend (Grafana Cloud). Sending is best-effort and never blocks or slows a tool call.
To keep network use minimal, events are batched and sent rarely — when a small buffer fills, every few minutes, or when the server stops. If sending fails (you are offline) or the server is interrupted, the pending anonymous events are stored locally in a small capped file at ~/.glidermcp/spool.jsonl and sent the next time the server runs. CI runs are tagged so they can be told apart from interactive use.
How to turn it off
Use either of these where you launch the MCP server, then restart it:
- --no-telemetry — pass this flag to the server (in your MCP client’s args), and it sends nothing.
- DO_NOT_TRACK=1 — the standard cross-tool opt-out environment variable, also honored.
Per-product status
- glider (C#/.NET): telemetry enabled.
- glider-trace (.NET runtime evidence): telemetry enabled (same anonymous events — tool name, duration bucket, outcome, and error fingerprint). Captured runtime evidence, traces, and dumps always stay on your machine and are never sent.
- tglider (TypeScript/JavaScript): telemetry enabled (same anonymous events — tool name, duration bucket, outcome, and error fingerprint). Stack frames are reduced to method names from tglider’s own code only; your code, file paths, and arguments are never sent.