Skip to main content
Glama
go-ai-now

Plausible Analytics MCP Server

by go-ai-now

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PLAUSIBLE_API_KEYYesStats API key. The server exits with a clear message if it is missing.
PLAUSIBLE_BASE_URLNoBase URL for self-hosted instances, e.g. https://stats.example.com. Must be http(s) and must not contain credentials. Default is https://plausible.iohttps://plausible.io
PLAUSIBLE_MCP_DEBUGNoSet to 1 or true to log one line per request (site, status, duration) to stderr.
PLAUSIBLE_TIMEOUT_MSNoPer-request timeout (1000–120000). Default is 15000.15000
PLAUSIBLE_DEFAULT_SITE_IDNoSite used when a tool call omits site_id.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
plausible_check_site_accessA

Verify that the configured API key can query a site, and show today's visitor count as a smoke test.

Call this first when a user mentions a new site, or when other tools return authentication or "not found" errors. The Stats API has no "list sites" endpoint (that is the separate Sites API with a different key type), so this checks one site at a time.

Example: {"site_id": "example.com"}

plausible_get_aggregateA

Get headline totals for a site over a date range (one number per metric, no grouping).

Use this for questions like "how many visitors last week?" or "what was the bounce rate in March for /pricing?". Use plausible_get_timeseries for trends over time and plausible_get_breakdown for top-N lists.

Examples:

  • Last 7 days overview: {"site_id": "example.com", "date_range": "7d"}

  • Conversions of a goal: {"date_range": "30d", "metrics": ["visitors", "events", "conversion_rate"], "filters": [{"dimension": "event:goal", "operator": "is", "values": ["Signup"]}]}

  • Custom range for one page: {"date_range": {"from": "2024-03-01", "to": "2024-03-31"}, "filters": [{"dimension": "event:page", "operator": "is", "values": ["/pricing"]}]}

Notes: scroll_depth/time_on_page need an event:page filter; conversion_rate and revenue metrics need an event:goal filter; percentage is not available here (it needs a dimension).

plausible_get_timeseriesA

Get metrics bucketed over time (hour/day/week/month) to see trends, spikes and drops.

Examples:

  • Daily visitors for the last 30 days: {"site_id": "example.com", "date_range": "30d", "interval": "day"}

  • Hourly traffic today from one country: {"date_range": "day", "interval": "hour", "filters": [{"dimension": "visit:country_name", "operator": "is", "values": ["Germany"]}]}

  • Monthly signups this year: {"date_range": "year", "interval": "month", "metrics": ["visitors", "events"], "filters": [{"dimension": "event:goal", "operator": "is", "values": ["Signup"]}]}

Dates/times are in the site's reporting timezone. Hourly buckets over long ranges produce many rows; prefer day/week for ranges over a few days.

plausible_get_breakdownA

Rank groups by metrics: top pages, sources, countries, devices, UTM campaigns, goals, custom properties. Paginated.

Examples:

  • Top 10 traffic sources this month: {"site_id": "example.com", "dimensions": ["visit:source"], "date_range": "month", "limit": 10}

  • Top pages with engagement: {"dimensions": ["event:page"], "metrics": ["visitors", "pageviews", "bounce_rate", "time_on_page"]}

  • Goal conversions by campaign: {"dimensions": ["visit:utm_campaign"], "metrics": ["visitors", "conversion_rate"], "filters": [{"dimension": "event:goal", "operator": "is", "values": ["Signup"]}]}

  • Next page of results: repeat the call with "offset" set to next_offset from the previous response.

Rules: session metrics (bounce_rate, views_per_visit, visit_duration) cannot be combined with event dimensions other than event:page. "percentage" gives each group's share of the total.

plausible_get_realtime_visitorsA

Get how many unique visitors are on the site right now (last few minutes), optionally with the pages they are viewing.

Examples:

  • Current visitors: {"site_id": "example.com"}

  • Last 15 minutes, top 10 pages: {"window_minutes": 15, "top_pages": 10}

Implemented with a Stats API v2 query over the last N minutes (UTC). Uses 1 request, or 2 when top_pages > 0.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.5/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a clearly distinct operation: access verification, aggregate totals, time-series trends, dimension breakdowns, and realtime visitors. The descriptions cross-reference when to use each, leaving no meaningful overlap.

Naming Consistency5/5

All tools follow the same pattern: the plausible_ prefix followed by a verb and a resource/query type (check_site_access, get_aggregate, get_timeseries, get_breakdown, get_realtime_visitors). Naming is uniform and predictable.

Tool Count5/5

Five tools is well-scoped for a read-only analytics server. Each tool covers a fundamental Stats API query mode without unnecessary bloat or redundancy.

Completeness5/5

The server covers the core Plausible analytics surface: totals, trends, breakdowns, realtime visitors, and access verification. The lack of site listing is noted as an API limitation, not a gap in this tool set.

Maintenance

ActivityMaintained
ResponsivenessNo issues