v0.1 · MCP-first

Analytics
your agent
can query.

Abner is a privacy-first analytics primitive for the LLM era. Drop a 2 KB script, connect Claude or Cursor over MCP, and ask your data anything.

$ claude mcp add --transport http abner https://mcp.abner.app/mcp
2 KB tracker Cookieless · GDPR OAuth 2.1 + DCR 9 MCP tools
claude · session abner · mcp
how are my sites doing? anything weird?
→ calling query_portfolio(period: 7d) …
→ calling get_changes(period: 7d) …
┌──────────────┬────────────┬────────┐
 site          visitors    status 
├──────────────┼────────────┼────────┤
 soundshine    415 ↑ 18%   live   
 blindfold      56 ↑ 17x   live   
 conjugo        21 ↓ 63%   live   
 … 26 more                        
└──────────────┴────────────┴────────┘
Two swings worth a look: blindfold jumped 17x on one blog post, and conjugo is slipping, mostly lost search traffic. Everything else is steady. Want the pages behind either?

A real conversation. No mockup.

// three steps

From zero to "hey claude, how did we do this week?" in five minutes.

01 install

Drop a tracker.

A 2 KB cookieless script. No consent banner. Works behind your own subdomain via Cloudflare.

<script defer
  data-site="abc123"
  src="https://www.abner.app/abner.js">
</script>
02 authorize

Connect your agent.

OAuth 2.1 with PKCE and dynamic client registration. Works with Claude Code, Claude Desktop, Cursor, and anything that speaks MCP.

# one command, browser opens for consent
claude mcp add \
  --transport http \
  abner https://mcp.abner.app/mcp
03 ask

Query in plain English.

No SQL. No dashboard. Questions that span your whole portfolio are one tool call: every site, compared to the previous period, ranked by what moved.

"Compare visitor trends across all my sites for the last two weeks and tell me which one's slipping."

// the surface

Nine tools.
One question
away.

Designed to be picked up by an LLM in one take. No knobs the model has to guess. Each tool returns structured JSON with the comparison math already done server-side, so the agent narrates instead of calculating.

plus list_sites · query_vitals · query_funnel · create_site · delete_site

full reference
query_portfolio one call

Every site in your account, each metric compared to the previous period, with liveness status. "How are all my sites doing" is one round trip.

get_changes anything weird?

Sites that moved past the noise floor, ranked by swing size, each with the pages and referrers that explain it. An empty list means nothing moved.

query_metrics swiss army

Visitors, pageviews, sessions: grouped by any dimension, filtered by anything, over any date range, with server-computed period-over-period comparison.

query_realtime live

Active visitors in the last five minutes plus a stream of recent events.

// for builders

An engine, not a dashboard.

Abner doesn't try to be the last-mile UI. We collect the events and expose them through one well-designed API. You — or your favorite agent — build whatever the moment calls for.

// example

Scriptable end to end.

Every metric is one curl away. Pipe your analytics into cron jobs, CI checks, or a Claude session — no dashboard clicking required.

curl -H "Authorization: Bearer $KEY" \
  api/v1/stats?period=7d | jq .visitors

// example

Hosting platforms.

Resell native analytics to your customers. OAuth and multi-tenant are already there.

your.app/sites/:id/analytics
powered by abner

// example

Standalone agents.

A Slack bot that answers "how was last week?" every Monday. A weekly digest emailer. A dashboard your CEO actually opens.

cron + claude + abner
= weekly_brief()
// or just call it from code
# python — using mcp client
from mcp.client.streamable_http import streamablehttp_client
from mcp import ClientSession

async with streamablehttp_client("https://mcp.abner.app/mcp") as (read, write, _):
    async with ClientSession(read, write) as session:
        await session.initialize()
        result = await session.call_tool(
            "query_metrics",
            {"site_id": site_id, "metrics": ["visitors"], "period": "7d"},
        )
        print(result.structuredContent)

// privacy

Built to be
boring to lawyers.

no cookies

No tracking cookies, no fingerprinting, no consent banner. The script doesn't set anything in storage.

no PII

Visitor identity is a daily-rotating salted hash. No raw IPs are stored. No emails, no names.

data lives in the EU and US

GDPR compliant by construction. CCPA compliant. SCCs available on request.

// pricing

Two plans. Unlimited pageviews. No per-seat math.

Every account starts with a 14-day free trial. No credit card, no feature gates: the full API, the dashboard, and all nine MCP tools from minute one.

popular

Indie

$29/mo

$23/mo billed annually

  • 5 sites
  • Unlimited pageviews
  • MCP server, REST API, management API
  • Funnels, Web Vitals, realtime, custom events
  • 12-month data retention

Studio

$79/mo

$63/mo billed annually

  • Unlimited sites
  • Everything in Indie
  • Full data retention
  • Portfolio queries at any scale

// next step

Spend an afternoon
building with us.

A free tier so you can try it. Real billing when you're ready. No surprises in between.

// or skip the signup: live demo, real data, read-only

claude mcp add --transport http abner-demo \
  https://mcp.abner.app/mcp \
  --header "Authorization: Bearer abner_ws_demo_portfolio_readonly"