What it does
Most-viewed URL paths. Counts both direct browser visits and AI-mediated human browsing (ai_user_action) — see traffic_class_breakdown if you need to separate them. With conversion_event a row counts everyone who viewed the page at any point in the period, wherever they entered; for "which landing pages convert" use top_entry_pages.
Example prompts
Ask:
"What are my top pages on mysite.com last 30 days?"
"Top 20 pages for example.com this week."
"Which URLs are getting the most traffic right now?"
A typical response, formatted by Claude:
Top pages for mysite.com (last 30 days):
1. / 14,232 views
2. /pricing 8,914 views
3. /blog/llms-txt-explained 4,847 views
4. /docs 3,210 views
5. /vs/google-analytics 2,891 views
6. /blog/claude-mcp-setup 2,447 views
7. /vs/plausible 2,108 views
8. /de/blog/mcp-server-anleitung 1,963 views
9. /docs/setup 1,442 views
10. /privacy 1,287 views
Returns an array of { path, pageviews } objects. Counts
include both direct browser visits and AI-mediated human browsing
(ai_user_action, e.g. Claude fetching a page on a user's
behalf). If you need to separate them, follow up with
traffic_class_breakdown.
For long-tail SEO investigation you can stack this with
compare_periods to
identify pages that grew or fell sharply between periods.
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
|
limit |
integer | optional |
Maximum number of rows to return. Capped at 1000 server-side.
default: 10
|
conversion_event |
string | optional | Optional custom event name (case-sensitive, from list_events) to treat as the conversion. Each row then gains conversion_base (units in that row), converted (how many of them fired the event anywhere in the period) and conversion_rate (ratio 0–1: 0.05 means 5%; null when no unit is attributed to the row: it has no browser sessions/visitors at all, e.g. purely server-ingested traffic, or — on privacy_mode=all sites in top_referrers/top_sources/top_entry_pages — the row was never any visitor's first entry in the period, even though it has sessions). The response gains a site-wide `conversion` block: conversion_base (units in the period), converted (how many fired the event), conversion_rate (ratio 0–1: 0.05 means 5%), `unit` and a `note` to relay. Use it to compare conversion rates between rows — absolute counts alone favour whatever row has the most traffic. The unit depends on the site's privacy_mode: 'session' on strict and balanced sites (no identity survives UTC midnight there, so only conversions within one visit count), 'visitor' on privacy_mode=all sites (first-party cookie, so a visitor who arrives Monday and converts Thursday counts as converted, if both days are inside the period). The auto-tracked 'pageview' and 'engagement' are rejected — pick one of the site's own events. |
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": "top_pages",
"arguments": {
"site_id": "abc12345"
}
}
}'
Token comes from /settings after you sign up. Replace any required arguments above.
Related tools
add_site: Register a new site.event_details: Details for one event.traffic_class_breakdown: Hit counts and percentages by traffic_class for the period.remove_site: Soft-delete a site.color_scheme_breakdown: Share of visitors with prefers-color-scheme: dark vs light.