Agent-native web analytics.

Instrument, ingest, and query — all from your agent, over the CLI or MCP. No browser in the loop.

Scroll
A dashboard for humans. tga for your agents.

The agent fired the events; it wants five numbers back, not a dashboard to render.

No card, no admin in the loop — your agent can bootstrap its own tenant.

# No account yet? Create a tenant and its first key
$ npm install -g analyga
$ tga signup --slug acme --name "Acme" --username you --password ********
$ tga login --key tga_...
# Five numbers, not a dashboard
$ tga stats <websiteId> --from 7d --json

Works with: Claude Code · Cursor · Cline · Windsurf · Aider · Codex · any MCP client

Why this exists

Every analytics tool assumes a human staring at a chart.

But increasingly the thing that needs the numbers is an agent — it fired the events, it wants to know whether they landed, and it wants structured JSON back, not a chart to screen-scrape. analyga is the surface the agent drives itself. The CLI and MCP server are the primary interface here, not a wrapper bolted onto a REST API.

Features

Ask the questions an agent actually asks after it ships.

Did the events land, and did anyone make it through the flow? All read-only, all --json-able.

Web + agent, one surface

One product covering the traffic your site gets and the agent/MCP calls that drive it — query stats and funnels across both.

Stats, events & funnels

Top-line traffic and event counts over any window. Define a funnel once with tga funnel define, then run it whenever.

Network rollups

Cross-site stats for a whole team in one call — tga network <teamId> — so an agent branches on the numbers.

Server-side ingest

Send events with a scoped per-website key. A dropped-as-bot event fails loudly instead of faking a 200.

agent-schema contract

tga agent-schema --json emits every command, flag, type and error code. If it's not in the schema, it doesn't exist.

Classified errors

Every failure carries a stable code and a distinct exit code, so an agent branches on the outcome instead of string-matching.

How it works

One install. Query to funnel in three commands.

01

Point at a tenant

Sign up keyless, or log in with an existing key. tga whoami tells you which tenant you're about to write to.

tga signup --slug acme --name "Acme" tga login --key tga_...
02

Query anything

Stats, events, funnels and network rollups — all read-only, all --json. The machine surface is a first-class citizen.

tga stats <id> --from 7d tga funnel run <funnelId> --from 30d
03

Send events server-side

Mint a scoped ingest key, then send with a stable --id so agents never collapse into one visitor.

tga ingest-key create <id> tga send <id> --name signup --id u_42
MCP server

Prefer tools over a CLI? 13 native tools.

Point Claude Code, Cursor, Cline, Windsurf — any MCP client — at analyga and your agent gets tools covering stats, events, funnels, websites, identity, server-side ingest and billing checkout. A tool result and --json output are the same bytes.

# Local, for Claude Code / Cursor / Cline / Windsurf
$ tga mcp-serve

# Remote — zero install, Bearer your API key
URL:  https://mcp.analyga.com/sse
Auth: Authorization: Bearer tga_...
Pricing

Start free. No card to bootstrap.

Metered only on event volume. Sign up keyless, then hand a human a Stripe Checkout URL when you're ready to upgrade.

Free

$0
Everything an agent needs to start — no card, no admin in the loop.
  • 3 websites
  • 100k events / month
  • 30-day retention
  • 1 seat · full CLI + MCP
Start free

Pro

Metered · by volume
Scale sites and events; billed by event volume.
  • 50 websites
  • 10M events / month
  • 365-day retention
  • 10 seats
Get Pro

An agent authenticates with its tenant key and gets back a checkout URL: tga billing checkout --plan pro

Built for agents

Stable error codes agents branch on.

Failures carry a stable code and a distinct exit code. Once published, codes are never reworded.

ExitMeaningWhat to do
2usagefix the call, do not retry
3authfix the credential
4permissiondo not retry, escalate
5not foundcheck the id
6validationfix the payload
7rate limitedback off and retry
8networkretry is reasonable
9serverretry once, then report
FAQ

Questions

Can my agent sign itself up?

Yes. tga signup is keyless — it works before you have a credential — and creates a tenant plus its first API key with no card and no admin in the loop. The one step an agent can't do is pay: a human opens the Stripe Checkout URL once to upgrade.

How is this different from a normal analytics dashboard?

The dashboard is for humans. analyga's primary interface is the tga CLI and the MCP server — the agent that fired the events queries the numbers itself, as structured JSON, and branches on them. Same product covers web traffic and agent/MCP traffic.

Why do I need to pass --id?

Anonymous identity is derived from IP and user-agent. Agents share both — one CLI version is one user-agent, and agents often share an egress IP — so without a stable --id every agent behind that IP collapses into a single visitor. It cannot be backfilled.

What happens to a dropped event?

A discarded event still answers HTTP 200 — the ingest endpoint returns {"beep":"boop"} when it drops an event as a bot. The CLI treats that as a hard failure with a hint, so an agent never believes a dropped event succeeded.

How do I know I won't guess a flag wrong?

Run tga agent-schema --json. It returns every command, argument, flag, type and the full list of error codes — generated from the same table that drives the parser, help text and MCP tools, so it cannot drift. If it's not in the schema, it doesn't exist.

Give your agents their analytics.

One install, and it queries stats and funnels across web and MCP, sends server-side events, and reads its own schema.

$ npm install -g analyga
$ tga stats <websiteId> --from 7d --json
Get analyga on npm

One more thing…

There’s a full UI for humans, too.

Agents run the instrumentation — but everything they capture lands in a complete, real-time dashboard. Live visitors, funnels, retention, revenue and journeys, all in one place. No terminal required.