mcpField
V
Vitrus analytics

Vitrus analytics

远程服务
vitrus.dev数据与分析45 天前更新

关于 Vitrus analytics

Vitrus analytics 是面向多款 Web 和移动应用的开源分析工具,可自托管或使用托管版本。它提供隐私保护的流量、用户、留存和收入指标,并为每个数字附上生成它的 SQL。

主要功能

  1. 01无 Cookie 的网站与应用分析
  2. 02跨应用用户生命周期与收入指标
  3. 03指标附带 SQL 查询证据
  4. 04实时、漏斗、路径与留存分析
  5. 05AI 流量和 Web Vitals 分析

适用场景

  1. 01比较多款应用的用户变化
  2. 02核查报告数字对应的 SQL
  3. 03分析 AI 助手带来的访问
  4. 04查看转化漏斗和用户留存

MCP 相关

提供只读 MCP 服务,包含 17 个分析工具,可查询指标、应用组合、生命周期、收入、漏斗等数据,并随结果返回查询证据。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://app.vitrus.dev/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

Vitrus — 为你发布的每个应用提供开源分析。一个面板,随时查看。

为你发布的每个应用提供开源分析。一个面板,随时查看。
适用于网站、iOS 和 Android 应用的无 Cookie 网站与产品分析——并排查看流量、用户、留存和
收入,无需存储用户身份信息。每个数字都附有生成它的 SQL,
你的 AI Agent 也可以通过 MCP 查询所有数据。只需一个进程,运行在你自己的服务上。

在线演示 · 与 ChatGPT / Claude 搭配使用 · 网站 · 云服务 · 文档 · 快速开始 · 对比 · 更新日志 · 讨论

许可证:Apache-2.0 运行时依赖:0 跟踪器:gzip 压缩后 3.0 KB 需要安装的服务:0 CI 发布版本

Vitrus 仪表板的浅色和深色模式,展示包含示例数据的演示工作区:带证据徽标的 KPI、与上一时段对比的趋势,以及确定性摘要

快速开始

你需要 Bun 1.3 或更高版本。仅此而已。

bun install -g @vitrus-dev/cli

vitrus init                                   # creates ./vitrus.db and a secret salt
vitrus site add "My site" example.com         # prints your script tag
VITRUS_PASSWORD="a long secret" vitrus start  # ingest + dashboard on http://localhost:3000

也可以从源代码开始:git clone https://github.com/Vitrus-Dev/vitrus && cd vitrus && bun install && bun run build:tracker, 然后在这里写着 vitrus 的地方运行 bun packages/cli/src/cli.ts。

接着在网站的 <head> 中添加一行:

<script defer data-site="SITE_ID" src="https://YOUR-HOST/v.js"></script>

移动应用:Vitrus for Swift(iOS、iPadOS、macOS — Swift Package Manager) 和 Vitrus for Flutter & Dart。使用同一个面板,用户 ID 在设备上进行哈希处理, 不使用设备标识符。

无需 Docker Compose 文件、数据库服务或迁移步骤。不想自行运行?app.vitrus.dev 使用相同的引擎,由托管服务提供,并有免费方案;**在线演示**可打开完整的托管仪表板, 查看示例数据,无需账户。

每个数字都能打开生成它的查询

点击某个数字,就能查看实际运行的 SQL、参数、时间范围和结果——不是对数字的描述,而是数字的来源。 AI 摘要也会依据同样的证据进行核验。

证据面板中打开的独立访客数字:SQL 查询、参数、结果和时间范围(演示工作区,示例数据)

现在模型会编写报告,这一点就更加重要。当 AI 撰写的句子包含证据中没有的数字时,Vitrus 会在你看到之前删除该句子:

Visitors are down 18% against the previous period. [e1]
The drop coincides with the last deploy. [e1, e7]
✗ dropped: "The new theme caused a 41.7% fall in conversion."
   → 41.7 is in no evidence record, and "caused" is a claim nobody can make from this data.

你发布的每个应用,都在一个面板中

发布多个应用——包括 Web 和移动应用——通常意味着每个应用都要有一个管理页面,才能查看注册用户。 只需在应用知道用户已登录的地方添加一行代码,Vitrus 就会按应用分别统计,也会并列展示所有应用的数据:谁是新用户、谁回来了、谁流失了,以及谁开始付费:

vitrus.identify(user.id)           // required: hashed in the browser, never sent raw
vitrus("signup")                   // optional
vitrus("plan", { plan: "pro" })    // optional: your own plan labels

Portfolio 页面:每个应用对应一张卡片,显示活跃用户数、趋势线、Web/iOS/Android 徽标、活跃、新增和流失用户、付费用户及收入(演示工作区,示例数据)

  • 每位用户都使用虚构名称。 打开一个应用,每位已登录用户都会显示为一行——回访用户、一次性用户或仅注册用户、操作次数、活跃天数、访问次数、加入时间、最近活跃时间;还有打开次数、每日操作次数和最近访问记录——显示为“Amber Falcon · 3f9a2c”,因为系统不会存储电子邮件或姓名。
  • 按应用统计生命周期。 新增、活跃、回访、流失、净值、快速比率、仅使用一次、当前套餐、开始付费和停止付费——每项都可以通过对应查询获取。
  • 询问你的 AI。“我的哪些应用本周流失用户最多?”——通过 MCP 调用 get_portfolio 和 get_lifecycle,即可获取统计数据及其背后的查询。
  • 离开浏览器前先哈希。 脚本会发送 sha256(site + "|" + id);服务器在存储前会再用密钥对其哈希一次。用户的 ID(通常是电子邮件)永远不会到达服务器。无需 WebCrypto,也不会发送 ID。
  • 按应用隔离,设计如此。 同一个人在你的两个应用中会对应两个互不相关的哈希,任何人都无法将它们关联起来。Portfolio 总数会如实说明这一点,而不会假装去重。
  • 个人信息字段会被删除两次。 电子邮件、电话号码、姓名、地址、密码、令牌等属性,以及任何格式类似电子邮件或电话号码的值,都会在浏览器端和服务器端各删除一次,并统计删除数量。
  • 无需接入身份验证提供商。 Supabase、Clerk、Firebase、Better Auth 或你自己的登录系统都可以使用。

Users 页面:回访用户、一次性用户和仅注册用户;每位用户都以虚构名称显示为一行,并列出操作次数、活跃天数和访问次数;展开的一行显示每日操作次数和最近访问记录(演示工作区,示例数据)

可自托管:在你的服务器上使用 GET /api/people?site=…、GET /api/lifecycle?site=… 和 GET /api/portfolio;通过 MCP 使用 get_lifecycle 和 get_portfolio。了解统计方式 →

一款完整的分析产品

在城市中显示会话的 3D 地球
地球视图。会话显示在所在城市,绘制于我们自建的几何画布上——无需地图服务商,也无需 GeoIP 数据库。
实时访客和实时事件流
实时分析。查看当前访问网站的用户,以及实时推送的最新事件。
将 AI 助手引荐流量与 AI 爬虫读取区分开
AI 流量。查看 ChatGPT 和 Claude 为你带来的访客,并与读取你页面的爬虫流量区分开。
一个按顺序排列并显示流失情况的漏斗
漏斗。按顺序统计——只有完成前一步后,才会计入下一步,因此转化数据不会虚高。
页面访问路径的桑基图
访问路径。以桑基图展示用户的访问路径,并可按起始页和结束页筛选。
按渠道划分的收入
收入。按币种分别显示,绝不换算,并归因于访问的起始来源。
p75 的核心网页指标
网页指标。按你选择的百分位数,逐页查看 LCP、INP、CLS、FCP 和 TTFB。
留存群组矩阵
留存。识别用户的群组数据——对于尚未到来的日期,会如实留空。
记录页面上的点击热图
热图。按设备类别查看点击和滚动深度,并绘制在你自己的录制页面上——不会额外收集任何数据。
用户页面
用户。每位已登录用户都以虚构名称显示——包括回访用户、一次性用户和仅注册用户——并按天查看其操作。

截图:托管版仪表板的演示工作区,所有数据均为示例数据——亲自打开看看。此代码库中的可自托管 仪表板目前较为简化——具体展示哪些视图,请参阅架构。

向 AI 询问你的分析数据

Vitrus 支持 MCP。你的助手可以读取分析数据(只读),并且返回的每个数字都会附带生成该数字的查询,因此它可以引用数据,而不是直接断言。Vitrus 已列入官方 MCP 注册表,名称为 dev.vitrus/analytics。

位置使用方式
ChatGPT · Claude(网页版和桌面版)添加自定义连接器,输入 https://app.vitrus.dev/mcp,登录,选择工作区,然后点击 Allow。
Claude Code — 含 4 个技能的插件执行 claude plugin marketplace add Vitrus-Dev/vitrus,然后执行 claude plugin install vitrus@vitrus
Claude Code — 仅服务claude mcp add vitrus --transport http https://app.vitrus.dev/mcp
Cursor将 Vitrus 添加到 Cursor
Gemini CLIgemini extensions install https://github.com/Vitrus-Dev/vitrus
其他客户端{"type": "http", "url": "https://app.vitrus.dev/mcp"} — 使用 OAuth,或使用 Authorization: Bearer vk_…(工作区 API 密钥)

插件技能位于 plugins/vitrus/skills:

  • /vitrus:weekly-report — 对比上周和前一周的数据,包括渠道、AI 助手和目标;每项数据都有引用。
  • /vitrus:traffic-drop — 找出数据出现异常的日期及其所属细分,然后检查错误和 Web Vitals。
  • /vitrus:measurement-plan — 读取你的代码,并建议应添加的事件、目标、漏斗和收入调用。
  • /vitrus:ai-search-audit — 了解哪些助手为你带来访客、AI 爬虫读取了哪些页面,以及两者在哪些方面不一致。

共 17 个工具,全部为只读:query_stats(按任意 20 个维度或日期查询任意指标,并支持筛选)、 get_portfolio(并排查看你的所有应用)、get_lifecycle、get_realtime、get_ai_traffic、get_revenue、 goal_report、analyze_funnel、get_journeys、get_retention、get_web_vitals、get_errors、get_digest 等 — 文档。 连接仅限于单个工作区,随时可以在 Account → Connected apps 下断开。

一段话了解它

Vitrus 会告诉你有多少人访问你的网站、他们来自哪里、做了什么,以及在哪里离开。它不设置 Cookie,因此你无需添加同意横幅。可以使用托管版本 vitrus.dev,也可以自行运行单个程序 — 无需安装数据库服务。

功能

  • 每个数字背后的查询。 每项指标都以 { id, sql, params, window, value } 的形式传递, 点击数字旁的徽标时,仪表板会打开对应的确切 SQL。
  • 不会凭空编造的 AI 摘要。 数字首先来自确定性的 SQL。可选模型 (本地 Ollama,或你自己的密钥——两者默认都未启用)可以改写这些数字,也可以不生成摘要;数值校验器会丢弃任何无法由数据支持的句子,黄金集评估则将信息泄漏控制在 0。
  • AI 引荐 ≠ AI 爬虫。 chatgpt.com 带来访客,与 GPTBot 读取页面,是两种 不同事件,会分别分类,绝不合并统计——经版本化规则表分类,并由其专属评估将精确率和召回率维持在 100%。
  • 爬虫读取了哪些页面,按页面统计——这是 GEO/AEO 工作真正需要的反馈闭环。
  • 已验证的 Agent 身份。 使用 Web Bot Auth(RFC 9421 HTTP Message Signatures)签名的请求, 会根据其运营者发布的 Ed25519 密钥进行验证,因此可以确认签署者的身份。用户代理字符串只是一句话;签名才是证明。
  • Agent 会话作为独立类别——不会计入访客数据,而是单独报告,绝不会悄然丢弃或计作真人。
  • 两层机器人检测,包含在开源核心中。 用户代理表加上请求头规则,用于检查请求是否符合其声称使用的浏览器。检测结果会记录并展示,但不会自动应用:怀疑并非定论。
  • 你期待的一切其他功能——页面浏览量、会话数、独立访客和实时访客、跳出率、访问时长、热门页面 / 入口页面 / 退出页面、引荐来源、渠道、UTM 活动、设备、浏览器、操作系统、屏幕、语言、国家/地区、带属性的自定义事件、外链点击、表单提交、字段级表单放弃、暴怒点击和无效点击、滚动深度、有序漏斗、 留存群组、p75 Core Web Vitals 和 JavaScript 错误。
  • 会话回放,可选择启用并默认遮蔽数据。 对站点启用前保持关闭;仅在带有 data-replay 的页面上作为独立脚本加载;默认遮蔽每个文本节点和输入值。密码、银行卡和一次性验证码字段始终会被屏蔽。录制内容会在可自托管仪表板的沙盒播放器中播放。
  • 城市、地区和坐标,无需 GeoIP 数据库——从代理已设置的请求头中读取(Cloudflare、Vercel、CloudFront),坐标精确到 0.1°。
  • 摘要:发生了什么 → 为什么 → 应该怎么做。 vitrus digest 会在终端中生成摘要,每一行都标注其依据的证据 ID。Slack / 电子邮件 / webhook 渠道,以及确保绝不重复发送的调度器,均包含在核心中。
  • 只读 MCP 服务,提供 17 种工具——按任意维度查询任意指标、并排查看所有应用、用户生命周期、实时数据、AI 流量、收入、目标、漏斗、用户旅程、留存、性能指标、错误——每个数字都会连同证据一起返回,让 Agent 可以引用依据,而非直接断言。在云端,ChatGPT 和 Claude 通过 OAuth 连接(添加 https://app.vitrus.dev/mcp,登录并选择工作区);Claude Code 只需一行: claude mcp add vitrus --transport http https://app.vitrus.dev/mcp。
  • 从设计上保护隐私。 不使用 Cookie,不存储标识符,不进行指纹识别,也不需要同意横幅。默认尊重 Do Not Track。追踪器仅 3.0 KB。零个运行时依赖,由 CI 强制执行。

刻意不包含:广告平台归因(ROAS/CPA)和多触点归因模型,因为我们无法证明某个模型的判断正确。

更详细地了解自托管

快速入门 就是完整的安装过程。**在端口可从外部访问之前设置 VITRUS_PASSWORD:**这样一来,仪表板和读取 API 会要求输入密码(HTTP Basic,用户名不限),而跟踪器和数据接收端仍保持公开,因为访客的浏览器需要调用它们。如果未设置,vitrus start 会打印警告,任何能访问该端口的人都能读取你的分析数据。

想立即在屏幕上看到数据?vitrus demo <site-id> 会生成一周逼真的流量样例。

vitrus site ls                                        # list your sites
vitrus digest <site-id> --days 7                      # deterministic summary, in your terminal
vitrus digest <site-id> --llm ollama:gemma3:4b        # phrased by a local model; data never leaves the box
vitrus start --port 8080

数据库路径由 VITRUS_DB 指定(默认值为 ./vitrus.db)。在前面接入 Cloudflare、Vercel、Fly、CloudFront 或 Netlify 后,系统会从这些服务已设置的标头中读取国家信息(如果使用 Cloudflare、Vercel 或 CloudFront,还会读取地区和城市信息)——无需下载 GeoIP 数据库;如果没有代理,仪表板会显示数据缺失,而不会猜测。

对比

开源替代方案都不错,其中有几款还提供了我们没有的功能。下表只列出我们能够明确说明的差异。于 2026 年 9 月 24 日依据各产品自己的文档核对——如果某个单元格已过时,请提交问题。

GA4PlausibleUmamiRybbitVitrus
开源✗✓ AGPL-3.0✓ MIT✓ AGPL-3.0✓ Apache-2.0
无 Cookie,无需同意横幅✗✓✓✓✓
需要安装的服务—Postgres + ClickHousePostgres 或 MySQLPostgres + ClickHouse无(一个 SQLite 文件)
跟踪器大小(gzip 压缩后)~28 KB~1 KB~2 KB~18 KB3.0 KB
将 AI 助手作为渠道✗✓✓✓✓
将爬虫读取与其带来的真人访客分开统计✗✗✗✓✓
界面中展示每个数字背后的查询✗✗✗✗✓
数字无法证实时舍弃 AI 生成的句子✗✗✗✗✓
已验证的 Agent 身份(Web Bot Auth)✗✗✗✗✓
开源版本中可检测 User-Agent 以外的机器人✗✗✗✗✓
漏斗、用户旅程和目标✓✓(漏斗功能仅限付费方案)✓✓✓
会话回放✗✗✓✓默认关闭,字段默认遮蔽
带密钥的公共 API✓✓✓✓✓ 只读
城市级地理信息✓✓✓✓来自代理标头
每月数亿条事件✓✓✓✓每台服务器约 100 万条/月
Vitrus 的优势
  • **每个数字都可以核查。**点击数字即可查看对应的查询、参数和行。此表中的其他工具都做不到这一点。
  • **AI 摘要不会编造数字。**如果某个数字不在证据中,对应的句子就会被移除。
  • **正确区分 AI 流量。**ChatGPT 或 Perplexity 为你带来的访客是一类;读取你页面的 AI 爬虫是另一类;为请求签名的 Agent 则会得到验证并标明身份。
  • **无需维护任何服务。**只需运行一个进程和一个 SQLite 文件(已内置于 Bun 运行时)。其他产品都需要数据库服务器——Postgres 或 MySQL,其中两款还需要 ClickHouse。
  • **默认采用严格的隐私设置。**访客 ID 每天都会重新加盐,始终如此。
其他产品领先的方面
  • 热力图 — Umami 提供热力图;我们没有。
  • 导入历史数据 — 我们只支持从 Umami 导入;Plausible 支持导入 Google Analytics 历史数据,Rybbit 也支持导入 Plausible 导出数据。
  • 成熟度和规模。 会话回放、自动捕获每次按钮点击,以及每月数亿条事件,在 Rybbit 和 Umami 中都更加成熟;它们运行在 ClickHouse 或 Postgres 上。我们的嵌入式数据库让免服务安装成为可能,但也限制了处理上限(每台设备每月约 100 万条事件)。
  • 广告归因。 如果你的报告依赖 Google 或 Meta 的广告支出,GA4 可以把这条链路打通,而我们永远不会支持这一点。
  • 不使用代理时的城市数据。 其他产品都捆绑 GeoIP 数据库;我们从 Cloudflare、Vercel 或 CloudFront 的标头中读取城市和地区,否则只显示国家。

每款工具的单页介绍:vitrus.dev/compare。

隐私

访客 ID 是单向哈希,无法跨天追踪任何人:

sha256(secret_salt | day | site | ip_prefix | user_agent)

盐值每天轮换,IP 永不存储(IPv6 地址会先缩减至 /64),并且不会向浏览器写入任何内容。这也就是为什么留存页面会在无法计算群组时明确告知你,而不是显示零值——对已登录用户调用 vitrus.identify(user.id),即可获得真实的留存数据,同时原始 ID 永远不会写入磁盘。

架构

packages/
  core      ingest · classifiers · MetricBundle · numeric guard · digest · agent verifier ·
            explore queries (sessions, users, journeys, goals, geo) · replay ingest + player
  tracker   the browser script, 3.0 KB gzipped (+ an opt-in replay recorder, under 5 KB)
  server    one process: ingest + query API + tracker + evidence dashboard
  cli       init · site · start · digest · demo
  mcp       read-only MCP module (JSON-RPC over HTTP) for AI agents

每个包都没有运行时依赖。SQL 字符串就是证据——Store.select 有意接收原始 SQL,因为用 ORM 将它隐藏起来,就会失去这个项目存在的唯一意义。

有些组件会先作为库随核心发布,之后可自托管服务才会将它们开放出来。目前,服务尚未挂载 MCP 模块、运行定时摘要发送、接受服务端转发请求(签名 Agent 和不进行渲染的爬虫正是通过这种方式被识别——浏览器脚本无法发现它们)、接受行过滤条件,也未渲染会话、用户、旅程、目标和地球视图;这些基础组件已经就绪,将它们接入 vitrus start 已列入路线图。

运行门禁

bun install && bun run build:tracker
bun run gates

类型检查、测试套件、两项黄金集评估以及构建门禁:

门禁防止的问题
eval:referrerAI 来源表悄然过时——必须达到 100%
eval:insight无法证明的数字出现在文案中——不允许有任何遗漏
gate:core-purity指标层导入大模型层
gate:no-deps未经深思熟虑就引入运行时依赖
gate:tracker-size跟踪器悄然膨胀至超过 3 KB
gate:inline-js错误的转义导致仪表板脚本失效,而页面仍能正常渲染

云服务

app.vitrus.dev 是托管版本:团队和角色、配额、欧盟托管,以及无需运行自己的邮件服务提供商即可发送摘要;还提供会话、用户、旅程、目标、实时和地球视图。分析引擎保持不变:这些视图运行的每个查询都位于本仓库的 packages/core 中。

社区

  • 问题和想法 — GitHub 讨论区
  • Bug — 提交 issue。提供一个失败案例比文字描述更有帮助;尤其是 AI 来源表,它通过示例进行测试。
  • 安全 — 请参阅 SECURITY.md。请勿针对漏洞公开提交 issue。
  • 贡献 — 请参阅 CONTRIBUTING.md。最有价值的入门贡献,是添加一条 AI 来源规则及其对应的固定测试用例。

Star 历史

Star 历史图表 ## Contributors Contributors

License

Apache-2.0.

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。