The analytics MCP server your AI can't hallucinate.
Ask your funnels, retention, and paths in plain english from Cursor or Claude. Answers are computed from the same deterministic reports the dashboard renders, never guessed, with a CI test that fails the build if the editor's answer ever differs from the dashboard. 47 tools, 13 prompts, your own model, so the AI is free.
An analytics backend your AI can call directly
smolanalytics is a single open-source Go binary that does web and product analytics from one snippet: visitors, referrers, UTM, funnels, retention, paths, and cohorts. On top of that data it speaks the Model Context Protocol, the open standard for connecting AI assistants to external tools. That makes it an analytics MCP server: it publishes your metrics as 47 callable tools and 13 prompts, so the model in your editor can fetch a funnel or a retention curve the same way it calls any other MCP tool.
There are two ways to ask, reading the exact same reports: a plain-english ask bar inside the dashboard, and your own coding agent over MCP for code-aware questions in the window where you already work. What each surface is for is spelled out on how it works, and the term itself is defined on the MCP analytics server glossary page.
Why can't the AI just make up your numbers?
Every assistant admits it hallucinates your metrics. This one is built so it can't. Three things make the answer trustworthy, and they are the whole reason to use it over a chatbot pointed at a spreadsheet:
- 1Computed, not generated. Each tool returns a value from the same deterministic report the dashboard renders. The language model phrases the reply, but the figure itself is calculated from your events, never invented by the model.
- 2A CI agreement test proves it. A test in the build asserts the answer an assistant gets over MCP equals the number the dashboard shows. If they ever drift apart, the build fails. Your editor and your dashboard can't disagree, by construction.
- 3Bring your own model, so the AI is free. The AI already in your editor (your Cursor, Claude, or VS Code subscription) does the asking. The MCP server just answers with computed numbers, so there is no second AI bill from the analytics tool.
That is the difference between "the model guessed a plausible number" and "the model read the real number and read it out loud." A bare chatbot can do the first. Only a computed MCP server with an agreement test can promise the second.
Point Cursor or Claude at it in one command
Once events are flowing, run one command. It wires smolanalytics into every coding assistant you have, so your editor's own model answers from your real data over MCP:
smolanalytics connect # wires up Cursor, Claude Code, VS Code, Windsurf, …
That is the hosted-cloud path. If you self-host, run the binary and point your editor's MCP config at that instance instead; the tools and prompts are identical. Either way, after a restart you ask your metrics in the same window you write code. Exact per-editor config is in the docs, and the Cursor / Claude walkthrough is on the Cursor page.
Ask it like you'd ask a data person
Your analytics questions arrive while you write code, not while you stare at a dashboard. So ask them where you already are:
The 47 tools cover funnels, retention, paths, cohorts, channels, and the daily verdict on what to fix; the 13 prompts are ready-made investigations you can trigger by name. See the full list on every feature.
Run the whole thing with one docker line
The dashboard, ingestion, and the MCP server are all in one binary. No Kafka, no ClickHouse, no Postgres, just the standard library. Kick the tyres locally:
docker run -p 8080:8080 ghcr.io/arjun0606/smolanalytics # dashboard on http://localhost:8080, ingestion at /v1/events, MCP server ready to connect
Prefer real data first? The live demo is a populated instance you can ask right now, no install. Full self-host notes are in the GitHub README.