What it does

Hit counts and percentages by traffic_class for the period. Sorted by hits descending. Classes with zero hits are omitted (a missing class means no hits in that period, treat as zero). The 8 classes (Phase 2 Cloudflare-compatible taxonomy): - user: real human visitor with their own browser - ai_user_action: live AI browse — a human is chatting with ChatGPT/Claude/Perplexity/Copilot and the assistant fetched the page on their behalf. Counts as human attention, just AI-mediated. - ai_search: AI search-engine indexers (PerplexityBot, OAI-SearchBot) — your page is a candidate answer in their index - ai_training: AI training crawlers (GPTBot, ClaudeBot, CCBot, Bytespider) — your content lands in training data, no human is actively reading right now - search_index: classic search engines (Googlebot, Bingbot, Yandex, DuckDuckBot) - social_unfurl: link-preview / social-card bots (Slackbot, facebookexternalhit, Twitterbot, LinkedInBot) - scanner: security/uptime/perf monitoring (Censys, Pingdom, Lighthouse, headless Chrome from a cloud range) - bot_other: recognized as a bot but not in any specific bucket, OR a UA we caught spoofing (e.g. a fake "GPTBot" coming from a random EC2 IP) For "how much human traffic did I get?" sum hits where traffic_class is 'user' or 'ai_user_action'. The same union is also exposed as the 'humans' alias in top_user_agents' traffic_class filter. Note on consistency: get_overview's `bot_share` field uses the same human/non-human split (excludes user + ai_user_action), so the two tools agree on what counts as bot traffic. Note on history: rows from before Phase 2 deployed were reclassified by User-Agent only (we don't store IPs for privacy), so older data may under-report scanner-via-cloud-IP and over-attribute spoofed UAs.

Example prompts

This is the AI-crawler-and-bot-aware metric. Ask:

"How much of mysite.com's traffic is bots vs humans vs AI?"
"Show me the traffic class breakdown for the last 30 days."
"How much of the spike yesterday was real users?"

A typical response (illustrative example):

Traffic class breakdown for mysite.com (last 30 days):

  user                  62,148 hits   71.4%   real humans
  ai_user_action         8,402 hits    9.7%   Claude/ChatGPT fetching for a user
  search_index           6,221 hits    7.2%   Googlebot, Bingbot (IP-range-verified)
  ai_training            4,210 hits    4.8%   GPTBot, ClaudeBot, CCBot, etc.
  ai_search              1,637 hits    1.9%   PerplexityBot, OAI-SearchBot
  social_unfurl          1,841 hits    2.1%   Slackbot, LinkedInBot, Twitterbot
  scanner                  947 hits    1.1%   uptime, security, headless monitoring
  bot_other                618 hits    0.7%   recognised bot, no specific bucket

The eight classes are Cloudflare-compatible (their AI Crawl Control taxonomy), so cross-tool comparisons work. Returns a list of { traffic_class, hits, percentage }.

Why this matters:

  • user plus ai_user_action = your real human audience. Sum is what most other analytics tools call "pageviews": they fold both buckets together. We keep them separate because AI-mediated browsing has different attribution characteristics.
  • ai_training tells you how aggressively AI training crawlers (GPTBot, ClaudeBot, CCBot) are indexing your content. If they're a meaningful share, your content is in their training pipelines. ai_search covers answer-grounding crawlers (PerplexityBot, OAI-SearchBot). Relevant to AI-search visibility planning.
  • search_index covers traditional search crawlers, verified against the vendors' published IP ranges (Google, Bing). Anthropic's crawlers, which don't publish ranges the same way, are verified via FCrDNS (reverse-DNS plus forward-DNS) instead. Mis-claimed Googlebot lands in bot_other, not here.
  • scanner covers uptime, security, and headless-browser monitoring. Worth knowing if it's unexpectedly high.

For digging into specific bot UAs, follow up with top_user_agents filtered by a class.

Arguments

Name Type Required Description / Default
site_id string required Site identifier from list_sites (8-character base32, e.g. 'wjxayhdd').
period string optional Time window. Keywords: today, yesterday, last_7_days, last_30_days, last_90_days, last_12_months. Or a custom date range YYYY-MM-DD..YYYY-MM-DD (inclusive).
default: last_7_days

How to call it directly

If you're integrating from your own code rather than a chat client, this is the JSON-RPC payload:

curl -X POST https://mcp-analytics.com/mcp \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "traffic_class_breakdown",
    "arguments": {
      "site_id": "abc12345"
    }
  }
}'

Token comes from /settings after you sign up. Replace any required arguments above.

Related tools

  • engagement_overview: Real reading time + scroll depth from the engagement beacon (fired on pagehide).
  • list_sites: List all sites on the authenticated account.
  • top_bots: Named-bot breakdown: which crawlers fetched the site, by canonical bot name (GPTBot, ClaudeBot, PerplexityBot, Googlebot, ...) with their traffic_class and hit counts.
  • get_timeseries: Time-bucketed metric over a period.
  • get_overview: TL;DR for the period: headline metrics (pageviews, visitors, sessions, bounce rate, avg session duration) plus pageviews_change_pct vs the previous equivalent window, top page, top traffic source, bot share, and top 3 custom events.