Files
umami/packages/mcp/README.md
T

4.9 KiB

@umami/mcp

Model Context Protocol server for Umami analytics. Lets Claude, ChatGPT, Cursor and other MCP clients answer questions about your website traffic using read-only tools that call the Umami API through @umami/api-client.

The MCP server never talks to a database; every tool goes through the public API and the same user/team permission checks as the web app.

Tools

Tool Purpose
list_websites Find the websites you can access (call first to get a websiteId).
get_website_stats Pageviews, visitors, visits, bounce rate, duration + previous period.
get_website_traffic Pageview/visit time series by minute, hour, day, month or year.
get_website_metrics Top pages, referrers, channels, countries, browsers, devices, UTM, events.
get_realtime Visitors active right now.
get_events Individual tracked events (paginated).
get_sessions Visitor sessions (paginated).
get_session One session with its activity timeline and properties.
run_funnel Conversion funnel across page/event steps.
run_journey Most common paths visitors take.
run_retention Cohort retention table.
run_attribution First/last-click attribution for a conversion.
get_revenue Revenue totals, series and breakdowns.

All tools are read-only. Dates are ISO 8601; results are paginated with a hard cap on page size.

Remote: Umami Cloud

Connect to https://cloud.umami.is/mcp using your existing Cloud API key:

Authorization: Bearer api_<your-cloud-api-key>

Clients that support custom headers may use x-umami-api-key instead. If both headers are provided, they must contain the same key. Use a client that supports API-key or bearer-header configuration.

Cloud MCP has the same subscription requirements and website/team permissions as the Cloud API. All tools call the Cloud API gateway, which validates the key and routes requests to your region.

Remote: self-hosted

Generate an API key under Settings → API keys in your Umami instance, then configure your MCP client with the Streamable HTTP endpoint:

https://your-umami.example.com/mcp

Set the authorization header using your key:

Authorization: Bearer umami_<your-api-key>

Use a client that supports bearer tokens or custom authorization headers. The endpoint accepts self-hosted API keys; browser login tokens are not supported. Tools are read-only and respect the key owner's existing user/team permissions. Revoke the key in Settings to disconnect access. Set MCP_DISABLED=1 to disable the endpoint.

Local / stdio

{
  "mcpServers": {
    "umami": {
      "command": "npx",
      "args": ["-y", "@umami/mcp"],
      "env": {
        "UMAMI_URL": "https://analytics.example.com",
        "UMAMI_API_TOKEN": "umami_…"
      }
    }
  }
}
Variable Description
UMAMI_URL Self-hosted instance URL (/api is appended).
UMAMI_API_URL Full API base URL instead, e.g. https://api.umami.is/v1.
UMAMI_API_TOKEN API key or login token (self-hosted).
UMAMI_API_KEY Umami Cloud API key.

For Cloud stdio, set UMAMI_API_KEY and omit UMAMI_URL and UMAMI_API_TOKEN:

{
  "mcpServers": {
    "umami": {
      "command": "npx",
      "args": ["-y", "@umami/mcp"],
      "env": { "UMAMI_API_KEY": "api_<your-cloud-api-key>" }
    }
  }
}

Example prompts

  • Show my websites.
  • How many visitors did example.com get last week?
  • What were the top 10 pages this month?
  • Compare traffic this month with the previous month.
  • Where is traffic coming from?
  • What signup events occurred yesterday?
  • Show sessions for user abc123.

Programmatic use

import { UmamiClient } from '@umami/api-client';
import { createUmamiMcpServer } from '@umami/mcp';

const server = createUmamiMcpServer({
  client: new UmamiClient({ baseUrl, token }),
});

createUmamiMcpHttpHandler({ createClient }) returns a Streamable HTTP handler for embedding in any web framework; the host verifies the bearer token and passes authInfo.