关于 Vitrus analytics
Vitrus analytics 是面向多款 Web 和移动应用的开源分析工具,可自托管或使用托管版本。它提供隐私保护的流量、用户、留存和收入指标,并为每个数字附上生成它的 SQL。
主要功能
- 01无 Cookie 的网站与应用分析
- 02跨应用用户生命周期与收入指标
- 03指标附带 SQL 查询证据
- 04实时、漏斗、路径与留存分析
- 05AI 流量和 Web Vitals 分析
适用场景
- 01比较多款应用的用户变化
- 02核查报告数字对应的 SQL
- 03分析 AI 助手带来的访问
- 04查看转化漏斗和用户留存
MCP 相关
提供只读 MCP 服务,包含 17 个分析工具,可查询指标、应用组合、生命周期、收入、漏斗等数据,并随结果返回查询证据。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://app.vitrus.dev/mcpclaude mcp add --transport http dev-vitrus-analytics https://app.vitrus.dev/mcp{"mcpServers":{"dev-vitrus-analytics":{"type":"http","url":"https://app.vitrus.dev/mcp"}}}在 Cursor 中打开{"servers":{"dev-vitrus-analytics":{"type":"http","url":"https://app.vitrus.dev/mcp"}}}在 VS Code 中打开{"mcpServers":{"dev-vitrus-analytics":{"type":"http","url":"https://app.vitrus.dev/mcp"}}}{"mcpServers":{"dev-vitrus-analytics":{"serverUrl":"https://app.vitrus.dev/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
为你发布的每个应用提供开源分析。一个面板,随时查看。
适用于网站、iOS 和 Android 应用的无 Cookie 网站与产品分析——并排查看流量、用户、留存和
收入,无需存储用户身份信息。每个数字都附有生成它的 SQL,
你的 AI Agent 也可以通过 MCP 查询所有数据。只需一个进程,运行在你自己的服务上。
在线演示 · 与 ChatGPT / Claude 搭配使用 · 网站 · 云服务 · 文档 · 快速开始 · 对比 · 更新日志 · 讨论
快速开始
你需要 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 摘要也会依据同样的证据进行核验。
现在模型会编写报告,这一点就更加重要。当 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
- 每位用户都使用虚构名称。 打开一个应用,每位已登录用户都会显示为一行——回访用户、一次性用户或仅注册用户、操作次数、活跃天数、访问次数、加入时间、最近活跃时间;还有打开次数、每日操作次数和最近访问记录——显示为“Amber Falcon · 3f9a2c”,因为系统不会存储电子邮件或姓名。
- 按应用统计生命周期。 新增、活跃、回访、流失、净值、快速比率、仅使用一次、当前套餐、开始付费和停止付费——每项都可以通过对应查询获取。
- 询问你的 AI。“我的哪些应用本周流失用户最多?”——通过 MCP 调用
get_portfolio和get_lifecycle,即可获取统计数据及其背后的查询。 - 离开浏览器前先哈希。 脚本会发送
sha256(site + "|" + id);服务器在存储前会再用密钥对其哈希一次。用户的 ID(通常是电子邮件)永远不会到达服务器。无需 WebCrypto,也不会发送 ID。 - 按应用隔离,设计如此。 同一个人在你的两个应用中会对应两个互不相关的哈希,任何人都无法将它们关联起来。Portfolio 总数会如实说明这一点,而不会假装去重。
- 个人信息字段会被删除两次。 电子邮件、电话号码、姓名、地址、密码、令牌等属性,以及任何格式类似电子邮件或电话号码的值,都会在浏览器端和服务器端各删除一次,并统计删除数量。
- 无需接入身份验证提供商。 Supabase、Clerk、Firebase、Better Auth 或你自己的登录系统都可以使用。
可自托管:在你的服务器上使用 GET /api/people?site=…、GET /api/lifecycle?site=… 和 GET /api/portfolio;通过 MCP 使用 get_lifecycle 和
get_portfolio。了解统计方式 →
一款完整的分析产品
![]() 地球视图。会话显示在所在城市,绘制于我们自建的几何画布上——无需地图服务商,也无需 GeoIP 数据库。 | ![]() 实时分析。查看当前访问网站的用户,以及实时推送的最新事件。 |
![]() AI 流量。查看 ChatGPT 和 Claude 为你带来的访客,并与读取你页面的爬虫流量区分开。 | ![]() 漏斗。按顺序统计——只有完成前一步后,才会计入下一步,因此转化数据不会虚高。 |
![]() 访问路径。以桑基图展示用户的访问路径,并可按起始页和结束页筛选。 | ![]() 收入。按币种分别显示,绝不换算,并归因于访问的起始来源。 |
![]() 网页指标。按你选择的百分位数,逐页查看 LCP、INP、CLS、FCP 和 TTFB。 | ![]() 留存。识别用户的群组数据——对于尚未到来的日期,会如实留空。 |
![]() 热图。按设备类别查看点击和滚动深度,并绘制在你自己的录制页面上——不会额外收集任何数据。 | ![]() 用户。每位已登录用户都以虚构名称显示——包括回访用户、一次性用户和仅注册用户——并按天查看其操作。 |
截图:托管版仪表板的演示工作区,所有数据均为示例数据——亲自打开看看。此代码库中的可自托管 仪表板目前较为简化——具体展示哪些视图,请参阅架构。
向 AI 询问你的分析数据
Vitrus 支持 MCP。你的助手可以读取分析数据(只读),并且返回的每个数字都会附带生成该数字的查询,因此它可以引用数据,而不是直接断言。Vitrus 已列入官方
MCP 注册表,名称为 dev.vitrus/analytics。
插件技能位于 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 日依据各产品自己的文档核对——如果某个单元格已过时,请提交问题。
| GA4 | Plausible | Umami | Rybbit | Vitrus | |
|---|---|---|---|---|---|
| 开源 | ✗ | ✓ AGPL-3.0 | ✓ MIT | ✓ AGPL-3.0 | ✓ Apache-2.0 |
| 无 Cookie,无需同意横幅 | ✗ | ✓ | ✓ | ✓ | ✓ |
| 需要安装的服务 | — | Postgres + ClickHouse | Postgres 或 MySQL | Postgres + ClickHouse | 无(一个 SQLite 文件) |
| 跟踪器大小(gzip 压缩后) | ~28 KB | ~1 KB | ~2 KB | ~18 KB | 3.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:referrer | AI 来源表悄然过时——必须达到 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 历史
License
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。










