|
| 1 | +import type { Metadata } from "next"; |
| 2 | +import { DocsBody } from "@/components/layout/page"; |
| 3 | + |
| 4 | +export const dynamic = "force-static"; |
| 5 | + |
| 6 | +export const metadata: Metadata = { |
| 7 | + title: "Telemetry - xmcp", |
| 8 | + description: |
| 9 | + "Learn what xmcp collects, why the data matters, and how to disable telemetry at any time.", |
| 10 | + alternates: { |
| 11 | + canonical: "https://xmcp.dev/telemetry", |
| 12 | + }, |
| 13 | +}; |
| 14 | + |
| 15 | +export default function TelemetryPage() { |
| 16 | + return ( |
| 17 | + <main className="flex w-full justify-center px-4 lg:px-8"> |
| 18 | + <article className="flex w-full max-w-[860px] flex-col gap-6 py-16"> |
| 19 | + <header className="flex flex-col gap-4"> |
| 20 | + <h1 className="display font-medium text-white">Telemetry</h1> |
| 21 | + <p> |
| 22 | + xmcp traces a handful of anonymous build events so we can keep |
| 23 | + product decisions grounded in real-world usage. You stay in control |
| 24 | + and can switch it off at any moment. |
| 25 | + </p> |
| 26 | + </header> |
| 27 | + <DocsBody className="w-full"> |
| 28 | + <section> |
| 29 | + <h2>Why we collect telemetry</h2> |
| 30 | + <p> |
| 31 | + Anonymous signals highlight whether transports, adapters, or new |
| 32 | + compiler behavior works in practice without requiring manual bug |
| 33 | + reports. Seeing which builds succeed, how long they take, and |
| 34 | + where they fail lets us prioritize fixes that unblock the most |
| 35 | + people. |
| 36 | + </p> |
| 37 | + </section> |
| 38 | + |
| 39 | + <section> |
| 40 | + <h2>What is being collected?</h2> |
| 41 | + <p> |
| 42 | + We capture general usage information tied to the command you run ( |
| 43 | + <code>xmcp dev</code> or <code>xmcp build</code>) so we can spot |
| 44 | + regressions. Specifically, we track the following anonymously: |
| 45 | + </p> |
| 46 | + <ul> |
| 47 | + <li> |
| 48 | + <strong>Command + versions.</strong> Which command was invoked, |
| 49 | + the xmcp release, and the Node.js version in use. |
| 50 | + </li> |
| 51 | + <li> |
| 52 | + <strong>General machine info.</strong> OS family and release, |
| 53 | + CPU architecture and count, total memory, and whether the run |
| 54 | + happened in CI, Docker, or WSL. |
| 55 | + </li> |
| 56 | + <li> |
| 57 | + <strong>Project traits.</strong> The selected adapter/transport |
| 58 | + and counts of components (tools, prompts, resources) so we know |
| 59 | + which surfaces are being exercised. |
| 60 | + </li> |
| 61 | + <li> |
| 62 | + <strong>Performance snapshots.</strong> Duration of each run, |
| 63 | + bundle size for successful builds, and a coarse error category |
| 64 | + if something fails. |
| 65 | + </li> |
| 66 | + <li> |
| 67 | + <strong>Privacy guardrails.</strong> A random install ID links |
| 68 | + related events so we can detect regressions, but it never |
| 69 | + contains repository details. No code, prompts, environment |
| 70 | + variables, logs, or secrets leave your machine. |
| 71 | + </li> |
| 72 | + </ul> |
| 73 | + <p> |
| 74 | + This list is audited regularly to ensure it stays accurate, and it |
| 75 | + explicitly excludes personal data, email addresses, access tokens, |
| 76 | + and any identifiers tied to you or your organization. |
| 77 | + </p> |
| 78 | + <p> |
| 79 | + Set <code>XMCP_DEBUG_TELEMETRY=true</code> to print every payload |
| 80 | + locally. This flag mirrors the data to <code>stderr</code> with |
| 81 | + the <code>[telemetry]</code> prefix but does <em>not</em> stop |
| 82 | + events from being sent; use{" "} |
| 83 | + <code>XMCP_TELEMETRY_DISABLED=true</code> if you want to pause |
| 84 | + telemetry entirely. |
| 85 | + </p> |
| 86 | + </section> |
| 87 | + |
| 88 | + <section> |
| 89 | + <h2>Opt out at any time</h2> |
| 90 | + <p> |
| 91 | + Telemetry is optional. Disable it temporarily, per environment, or |
| 92 | + everywhere: |
| 93 | + </p> |
| 94 | + <ul> |
| 95 | + <li> |
| 96 | + <strong>Per command or CI job.</strong>{" "} |
| 97 | + <code>XMCP_TELEMETRY_DISABLED=true npx xmcp dev</code> (or{" "} |
| 98 | + <code>build</code>) prevents telemetry from booting for that |
| 99 | + run, which is ideal for sensitive builds or automated pipelines. |
| 100 | + </li> |
| 101 | + <li> |
| 102 | + <strong>Persistent opt-out.</strong> Add |
| 103 | + <code>XMCP_TELEMETRY_DISABLED=true</code> to your shell profile, |
| 104 | + project <code>.env</code>, or CI secrets. xmcp checks the |
| 105 | + variable before creating an anonymous ID, so no data leaves your |
| 106 | + machine. |
| 107 | + </li> |
| 108 | + <li> |
| 109 | + <strong>Re-enabling.</strong> Remove the environment variable |
| 110 | + (or delete <code>telemetry.json</code>) and rerun{" "} |
| 111 | + <code>xmcp dev</code> to recreate a fresh anonymous ID along |
| 112 | + with the opt-in notice. |
| 113 | + </li> |
| 114 | + </ul> |
| 115 | + <p> |
| 116 | + If you have additional privacy requirements, please reach out at{" "} |
| 117 | + <a href="mailto:support@xmcp.dev">support@xmcp.dev</a>—your |
| 118 | + feedback directly shapes what we measure next. |
| 119 | + </p> |
| 120 | + </section> |
| 121 | + </DocsBody> |
| 122 | + </article> |
| 123 | + </main> |
| 124 | + ); |
| 125 | +} |
0 commit comments