Privacy policy

This page describes what mcp-analytics stores, why, and how you can exercise your GDPR rights. Last updated April 2026.

1. Controller

Spreenovate GmbH, Prenzlauer Allee 186, 10405 Berlin, Germany.
Managing directors: Fabian Hallstein, Alexander Kamphorst.
Contact: info@mcp-analytics.com.

We have not appointed a Data Protection Officer because the company is below the German DPO threshold (§ 38 BDSG).

2. Two roles to keep apart

mcp-analytics has two very different relationships with personal data:

(a) You, the mcp-analytics account holder

We store your email address and an API token. Legal basis: contract performance (Art. 6 (1)(b) GDPR). The email is used for transactional messages only (verification link, occasional service notices, plan-limit warnings). No marketing.

(b) Visitors of your sites

When a visitor loads a page that includes our tracking snippet, we record pseudonymous event data. You are the controller for that data; we are your processor (Art. 28 GDPR). A separate data-processing agreement is available on request.

3. What we collect from your visitors

The data set per pageview / event:

Raw IP addresses are not persisted in the analytics database. The IP is used in-memory to compute the visitor/session hash and is then discarded. Geo data (country/region/city) is reserved in the schema but currently empty.

One narrow exception: if an IP repeatedly sends invalid payloads (unknown site IDs) to our ingest endpoint, we record that IP in a separate abuse_events table for anti-abuse purposes (legal basis: Art. 6 (1)(f) GDPR, legitimate interest in service availability). These records are not used for analytics and are not joined with visitor data.

4. How visitors are counted (and why no banner)

The strict privacy mode (recommended default for new sites) computes the visitor identifier as:

session_id = SHA-256(daily_salt + site_salt + ip + user_agent + site_id)

The daily_salt rotates at 00:00 UTC. The IP is used in-memory for this hash and then dropped; it is not written to the analytics database. The User-Agent is stored separately as a string (used for bot classification, not for re-identification).

Result: visitors cannot be re-identified across days; no cookie, no localStorage, no fingerprint that survives midnight UTC. The German DSK and the EDPB consider this sufficient anonymisation to skip the cookie banner requirement (ePrivacy / TTDSG § 25). The balanced mode uses a yearly-rotating site-salt instead and is also cookie-free; the all mode opts into a 2-year first-party cookie and shifts consent responsibility to you (the site owner).

Do-Not-Track signals are honoured as a hard opt-out in strict and balanced; in all mode the site owner decides.

5. Where the data lives

6. Retention

7. Your rights

You have the right to:

8. Cookies on this site

The mcp-analytics website (the one you are reading) does not set any tracking cookies. Rails sets a single transactional session cookie (_mcp_analytics_session) only after you submit a form. It expires when you close the browser.