Skip to main content
Glama
arttus

umami-mcp-server

by arttus

Full traffic report

umami_traffic_report
Read-onlyIdempotent

Build a complete website traffic report in one call: headline stats, period-over-period changes, and ranked breakdowns by top pages, referrers, channels, countries, devices, and browsers.

Instructions

Build a complete traffic report for a website in one call: headline stats, period-over-period change, and ranked breakdowns for top pages, landing pages, referrers, acquisition channels, countries, devices, and browsers.

Prefer this over chaining umami_get_stats and several umami_get_metrics calls when the question is broad, for example "how is the site doing" or "give me last month's analytics". Use the individual tools instead when you need one specific dimension, deeper pagination, or expanded engagement metrics.

Args:

  • website (string, optional): Website ID, name, or domain.

  • range (string): Date range, default '30d'.

  • start_date / end_date (string, optional): Explicit bounds, overriding 'range'.

  • breakdowns (array of strings, optional): Which dimensions to include. Defaults to path, entry, referrer, channel, country, device, browser.

  • limit (number): Rows per breakdown, 1-50 (default: 10).

  • compare (boolean): Include the previous period of equal length with percent change (default: true).

  • filters (object, optional): Segment filters applied to every part of the report.

  • response_format ('markdown' | 'json'): Output format (default: 'markdown').

Returns: JSON shape: { "website": string, "range": { "start": string, "end": string }, "stats": { "pageviews": number, "visitors": number, "visits": number, "bounce_rate_pct": number, "avg_visit_duration_seconds": number }, "change": { "pageviews": string, "visitors": string, "visits": string } | null, "breakdowns": { "": [ { "name": string, "visitors": number, "share_pct": number } ] } }

Examples:

  • "Give me the analytics rundown for last month" -> range="last_month"

  • "How did the site do this week versus last?" -> range="this_week", compare=true

  • "Full report for US mobile traffic" -> filters={ country: "US", device: "mobile" }

Error handling:

  • Individual breakdowns that fail are omitted rather than failing the whole report; the response notes which ones were skipped.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoRows per breakdown.
rangeNoDate range for the query, default '7d'. Relative ("30m", "24h", "7d", "4w", "3mo", "1y"), named ("today", "yesterday", "this_week", "last_week", "this_month", "last_month", "this_year", "last_year", "mtd", "ytd", "all_time"), or an explicit ISO date via start_date/end_date.
compareNoInclude the previous period of equal length with percent change.
filtersNoOptional segment filters. Supported keys: path, referrer, title, query, browser, os, device, country, region, city, language, hostname, tag, event, distinctId, utmSource, utmMedium, utmCampaign, utmContent, utmTerm, segment, cohort. Example: { country: 'US', device: 'mobile' }.
websiteNoWebsite ID (UUID), name, or domain. Optional if UMAMI_DEFAULT_WEBSITE is set. Use umami_list_websites to discover values.
end_dateNoExplicit end date (YYYY-MM-DD, ISO 8601 timestamp, or epoch ms). Overrides 'range'.
breakdownsNoDimensions to include. Defaults to path, entry, referrer, channel, country, device, browser.
start_dateNoExplicit start date (YYYY-MM-DD, ISO 8601 timestamp, or epoch ms). Overrides 'range'.
response_formatNoOutput format: 'markdown' for a readable summary, 'json' for raw structured data.markdown

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.0.0

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description stays consistent with that safety profile. It adds genuinely useful behavior beyond annotations: partial-failure handling (failing breakdowns are omitted with a note), default behaviors (compare=true, default breakdown set), and the markdown/json output distinction. However, it states the range default as '30d' while the input schema says '7d' — an internal inconsistency that could mislead an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured with labeled sections (Args, Returns, Examples, Error handling) and a strong front-loaded first sentence. The Args block largely duplicates the 100%-covered schema descriptions, which is the main redundancy; the Returns JSON shape and examples earn their space given that no output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with no output schema, this is nearly complete: it provides a full return shape, error-handling semantics, default behaviors, and three worked examples spanning range, compare, and filters usage. Minor gaps: the skipped-breakdowns note in error handling isn't reflected in the documented JSON shape, and the range default conflict creates ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value: website accepts 'ID, name, or domain', filters are clarified as applying 'to every part of the report', and the examples map natural-language requests to concrete parameter values (range='last_month', filters={ country: 'US', device: 'mobile' }). The added value is partly undermined by the conflicting range default ('30d' in description vs '7d' in schema), which keeps this below a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource — 'Build a complete traffic report for a website in one call' — and enumerates exactly what the report contains (headline stats, period-over-period change, ranked breakdowns across eight dimensions). It also names its closest siblings (umami_get_stats, umami_get_metrics), so an agent can distinguish it from the other analytics tools without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit preference rule: prefer this over 'chaining umami_get_stats and several umami_get_metrics calls' for broad questions, and lists concrete route-to-alternative conditions ('one specific dimension, deeper pagination, or expanded engagement metrics'). Named alternatives plus selection criteria make the decision unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.