Vitrus analytics
概览
作者提供的说明(英文原文)
Read-only analytics for all your apps: users, AI traffic, revenue, with the SQL behind every number.
PopNx MCP 的三大支柱
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
- 用户评价i暂无评价评价功能将在后续阶段与账户功能一起开放
- 我们的基础检查i3 项中通过 3 项依据公开信息检查;尚未扫描代码
- 使用情况i非常新★ –
它能帮你做什么
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
- 连接方式: 在云端运行
- 传输方式: Streamable HTTP
- 分类: 营销与社交媒体
安装
选择你使用的 AI 应用,然后复制设置。
安装之前
- 基础检查:3 项中通过 3 项
- 在作者的服务器上运行:你向它提出的内容会经过他们的服务器。
- 注册中心没有列出需要填写的密钥。
你需要
- 在云端运行无需安装任何东西,通过互联网连接
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
适用于网页版、桌面版和手机版 Claude:
- 打开 Settings → Connectors
- 点击 Add custom connector
- 粘贴下面的地址,然后点击 Add
- 如果要求登录,请登录作者的服务
https://app.vitrus.dev/mcp在终端中运行这条命令
claude mcp add --transport http analytics https://app.vitrus.dev/mcp或者自己复制设置
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"analytics": {
"url": "https://app.vitrus.dev/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
或者自己复制设置
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"analytics": {
"type": "http",
"url": "https://app.vitrus.dev/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
ChatGPT 只能连接互联网上的服务器:
- 打开网页版 ChatGPT → Settings → Connectors (Apps)
- 点击 Create 或 Add(部分套餐需要先在 Advanced 中开启 Developer mode)
- 粘贴下面的地址,起个名字,然后保存
- 如果要求登录,请登录作者的服务
https://app.vitrus.dev/mcp菜单名称可能因套餐和版本不同而略有差异。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它能做什么
服务器要求先登录,才会列出它的工具。
基础检查i
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日
- ✓ 通过
作者与仓库一致
注册名称已通过域名 vitrus.dev 验证(注册中心会核实域名所有权)
- … 尚未检查
仍在维护
我们还没有从 GitHub 读取这个仓库
- … 尚未检查
有许可证
我们还没有从 GitHub 读取这个仓库
- ✓ 通过
端点有响应
在 793 毫秒内响应(HTTP 401)
- ✓ 通过
使用 OAuth 登录
声明支持 OAuth 登录,你的 AI 应用可以带你去登录
- … 尚未检查
工具描述中没有隐藏指令
尚未检查;我们会在检查端点时读取工具列表
与“营销与社交媒体”中的其他服务器比较i
- 星标数多于此分类中其他 3593 个服务器的 0%
- 发布到注册中心的时间比此分类中其他 3593 个服务器的 60% 更新
- 基础检查结果等于或优于此分类中其他 3593 个服务器的 100%
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
常见问题
Vitrus analytics 安全吗?
它在 3 项适用的基础检查中通过了 3 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
它需要哪些密钥或代码?
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在我的电脑上运行还是在云端?
它在作者的云端运行。通过互联网连接,无需安装,但你发送的内容会经过作者的服务器。
它还在维护吗?
GitHub 仓库最后更新于–,最新版本(0.11.1)于20天前进入注册中心。
哪些应用可以使用它?
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
有什么可以替代它?
同一分类中有:MCP YouTube Transcript, Google Analytics MCP, BibiGPT YouTube Video Summarizer
替代选择
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Google Analytics MCP
GA4 MCP server for AI agents: schema discovery, server-side aggregation, analysis-ready defaults.
BibiGPT YouTube Video Summarizer
AI video summarizer: summarize and transcribe YouTube, Bilibili, TikTok and podcast videos.
作者的 README
打开 README
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Open-source analytics for every app you ship. One panel you can check.
Cookie-free web and product analytics for websites, iOS and Android apps — traffic, users, retention and
revenue side by side, without storing who your users are. Every number carries the SQL that produced it,
and your AI agent can ask about all of them over MCP. One process, on your own server.
Live demo · Use with ChatGPT / Claude · Website · Cloud · Documentation · Quickstart · Compare · Changelog · Discussions
Quickstart
You need Bun 1.3 or newer. That is the whole list.
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
From source instead: git clone https://github.com/Vitrus-Dev/vitrus && cd vitrus && bun install && bun run build:tracker, then run bun packages/cli/src/cli.ts wherever this says vitrus.
Then one line in your site's :
<script defer data-site="SITE_ID" src="https://YOUR-HOST/v.js"></script>
Mobile apps: Vitrus for Swift (iOS, iPadOS, macOS — Swift Package Manager) and Vitrus for Flutter & Dart. Same panel, user ids hashed on the device, no device identifier.
No Docker Compose file, no database server, no migration step. Rather not run it? [app.vitrus.dev](https://app.vitrus.dev) is the same engine, hosted, with a free plan — and [the live demo](https://vitrus.dev/demo) opens the full hosted dashboard on sample data, no account needed.
Every number opens the query that made it
Click a figure and you get the SQL that ran, its parameters, the window and the result — not a description of the number, the number's origin. It is the same evidence the AI summary is checked against.
That matters more now that models write the reports. When an AI-written sentence contains a number that is not in the evidence, Vitrus drops the sentence before it reaches you:
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.
Every app you ship, one panel
Shipping several apps — web and mobile — usually means one admin page per app just to see who signed up. Add one line where your app knows the user is signed in, and Vitrus counts who is new, who came back, who you lost and who started paying, per app and for all of them side by side:
vitrus.identify(user.id) // required: hashed in the browser, never sent raw
vitrus("signup") // optional vitrus("plan", { plan: "pro" }) // optional: your own plan labels
- Every user, under a made-up name. Open an app and each signed-in user is a row — returning, one-time or signed up only, actions, active days, visits, joined, last active; opened, actions by day and recent visits — shown as "Amber Falcon · 3f9a2c", because no email or name is stored to show.
- Lifecycle per app. New, active, came back, lost, net, quick ratio, one-and-done, current plans, became and stopped paying — each with its query.
- Ask your AI. "Which of my apps lost the most users this week?" —
get_portfolioandget_lifecycleover MCP answer with counts and the queries behind them. - Hashed before it leaves the browser. The script sends
sha256(site + "|" + id); the server hashes that again with a secret before storing it. Your users' ids — often emails — never reach the server. No WebCrypto, no id sent. - Separate per app, by design. The same person in two of your apps is two unrelated hashes; nobody can join them. Portfolio totals say so instead of pretending to deduplicate.
- Personal fields dropped twice. Email, phone, name, address, password, token and similar properties — and any value shaped like an email or phone number — are removed in the browser and again on the server, and the removal is counted.
- No auth provider to connect. Works the same with Supabase, Clerk, Firebase, Better Auth or your own login.
Self-hosted: GET /api/people?site=…, GET /api/lifecycle?site=… and GET /api/portfolio on your server; over MCP, get_lifecycle and get_portfolio. How it is counted →
A whole analytics product
Globe. Sessions at their city, on a canvas drawn from our own geometry — no map provider, no GeoIP database.
Real-time. Who is on the site now, and the latest events, streamed as they arrive.
AI traffic. Visitors ChatGPT and Claude sent you, kept apart from the crawlers that read your pages.
Funnels. Ordered — a step counts only after the one before it, so the conversion is not inflated.
Journeys. The paths people take, as a Sankey you can filter by start and end.
Revenue. Per currency, never converted, attributed to where the visit began.
Web Vitals. LCP, INP, CLS, FCP and TTFB at the percentile you choose, per page.
Retention. Cohorts of identified users — and an honest blank for days that have not happened yet.
Heatmaps. Clicks and scroll depth per device class, drawn over the page from your own recordings — nothing extra collected.
Users. Every signed-in user under a made-up name — returning, one-time, signed up only — with actions by day.
Screenshots: the hosted dashboard on a demo workspace; every figure is sample data — open it yourself . The self-hosted dashboard in this repository is simpler today — see Architecture for exactly which views it renders.
Ask your AI about your analytics
Vitrus speaks MCP. Your assistant reads your analytics — read-only — and every number it gets back comes with the query that produced it, so it can cite instead of assert. Listed in the official MCP Registry as dev.vitrus/analytics.
| Where | How |
|---|---|
| ChatGPT · Claude (web & desktop) | Add a custom connector with https://app.vitrus.dev/mcp, sign in, pick a workspace, Allow. |
| Claude Code — plugin with 4 skills | claude plugin marketplace add Vitrus-Dev/vitrus then claude plugin install vitrus@vitrus |
| Claude Code — server only | claude mcp add vitrus --transport http https://app.vitrus.dev/mcp |
| Cursor | |
| Gemini CLI | gemini extensions install https://github.com/Vitrus-Dev/vitrus |
| Anything else | {"type": "http", "url": "https://app.vitrus.dev/mcp"} — OAuth, or Authorization: Bearer vk_… (a workspace API key) |
The plugin's skills, under plugins/vitrus/skills:
- `/vitrus:weekly-report` — last week against the week before, channels, AI assistants, goals; every figure cited.
- `/vitrus:traffic-drop` — finds the day a number broke and the segment it lives in, then checks errors and Web Vitals.
- `/vitrus:measurement-plan` — reads your code and proposes the events, goals, funnels and revenue calls to add.
- `/vitrus:ai-search-audit` — which assistants send people, which pages the AI crawlers read, and where the two disagree.
17 tools, all read-only: query_stats (any metric by any of 20 dimensions or by day, with filters), get_portfolio (all your apps side by side), get_lifecycle, get_realtime, get_ai_traffic, get_revenue, goal_report, analyze_funnel, get_journeys, get_retention, get_web_vitals, get_errors, get_digest and more — docs. Connections are scoped to one workspace and can be disconnected any time under Account → Connected apps.
What it is, in one paragraph
Vitrus tells you how many people visit your website, where they come from, what they do and wh
只显示了开头部分;其余内容请在仓库中阅读