Add it to Claude Code
claude mcp add umami-mcp-dac2 -- uvx --from git+https://github.com/lukasschmit/umami-mcp umami-mcpMake your agent remember this setup
umami-mcp-dac2's config, env vars, and the gotchas you hit — recalled in every future Claude Code, Cursor, and Codex session.
npx conare@latestFree · one command · indexes the sessions already on disk. Set up in the browser instead →
What it does
- Supports both Umami Cloud and self-hosted instances
- Zero dependencies, pure Python implementation
- Retrieves real-time active visitor counts
- Provides detailed time-series pageview and session data
- Supports complex metric breakdowns including browser, OS, and geography
Tools 5
get_websitesList all tracked websitesget_statsSummary stats: pageviews, visitors, visits, bounces, totaltimeget_pageviewsTime-series pageview/session dataget_metricsBreakdown by type: path, url, entry, exit, referrer, domain, title, query, event, tag, hostname, browser, os, device, screen, language, country, region, city, channelget_activeNumber of currently active visitors (last 5 minutes)Environment Variables
UMAMI_URLBase URL for Umami instanceUMAMI_API_KEYAPI key for Umami CloudUMAMI_USERNAMELogin username for self-hostedUMAMI_PASSWORDLogin password for self-hostedUMAMI_CF_ACCESS_CLIENT_IDCloudflare Access service token client IDUMAMI_CF_ACCESS_CLIENT_SECRETCloudflare Access service token secretUMAMI_USER_AGENTCustom User-Agent for outbound requestsUMAMI_DEBUGSet to 1/true to log outbound request URLsTry it
Original README from lukasschmit/umami-mcp
Umami MCP Server
An MCP server for Umami Analytics — works with both Umami Cloud and self-hosted instances.
Zero dependencies. No cloning, no install steps — just point your MCP client at it.
Why?
Existing Umami MCP servers either don't support Umami Cloud (which uses API key auth, not username/password) or are broken and bloated (torch, faiss, sentence-transformers for… analytics?).
This server talks to the Umami API and exposes 5 tools over MCP. Pure Python, zero dependencies.
Tools
| Tool | Description |
|---|---|
get_websites |
List all tracked websites |
get_stats |
Summary stats: pageviews, visitors, visits, bounces, totaltime (seconds) |
get_pageviews |
Time-series pageview/session data (unit: minute/hour/day/month/year; timezone: IANA, e.g. UTC) |
get_metrics |
Breakdown by type: path/url/entry/exit/referrer/domain/title/query/event/tag/hostname/browser/os/device/screen/language/country/region/city/channel |
get_active |
Number of currently active visitors (last 5 minutes) |
Quick Start
1. Get your credentials
Umami Cloud: Go to Settings → API Keys in your Umami Cloud dashboard and create an API key.
Self-hosted: Use the username and password you log in with.
2. Add to your MCP client
No cloning required — uvx fetches and runs it directly from GitHub.
Requires `uv`. Install with:
curl -LsSf https://astral.sh/uv/install.sh | sh
Claude Desktop / Claude Code
Add to your MCP config (~/.claude.json, Claude Desktop settings, etc.):
Umami Cloud:
{
"mcpServers": {
"umami": {
"command": "uvx",
"args": ["--from", "git+https://github.com/lukasschmit/umami-mcp", "umami-mcp"],
"env": {
"UMAMI_URL": "https://api.umami.is",
"UMAMI_API_KEY": "your_api_key_here"
}
}
}
}
Self-hosted:
{
"mcpServers": {
"umami": {
"command": "uvx",
"args": ["--from", "git+https://github.com/lukasschmit/umami-mcp", "umami-mcp"],
"env": {
"UMAMI_URL": "https://your-umami-instance.com",
"UMAMI_USERNAME": "admin",
"UMAMI_PASSWORD": "your_password"
}
}
}
}
Cursor
Add to .cursor/mcp.json in your project root (or global settings):
{
"mcpServers": {
"umami": {
"command": "uvx",
"args": ["--from", "git+https://github.com/lukasschmit/umami-mcp", "umami-mcp"],
"env": {
"UMAMI_URL": "https://api.umami.is",
"UMAMI_API_KEY": "your_api_key_here"
}
}
}
}
VS Code (Copilot)
Add to your VS Code settings.json:
{
"mcp": {
"servers": {
"umami": {
"command": "uvx",
"args": ["--from", "git+https://github.com/lukasschmit/umami-mcp", "umami-mcp"],
"env": {
"UMAMI_URL": "https://api.umami.is",
"UMAMI_API_KEY": "your_api_key_here"
}
}
}
}
}
BoltAI
Go to Settings → MCP Servers → Add Server, then enter:
- Command:
uvx - Arguments:
--from git+https://github.com/lukasschmit/umami-mcp umami-mcp - Environment Variables:
UMAMI_URL=https://api.umami.isUMAMI_API_KEY=your_api_key_here
Environment Variables
| Variable | Required | Description |
|---|---|---|
UMAMI_URL |
Self-hosted: Yes, Cloud: Optional | Base URL — defaults to https://api.umami.is in Cloud mode |
UMAMI_API_KEY |
Cloud | API key from Umami Cloud dashboard |
UMAMI_USERNAME |
Self-hosted | Login username |
UMAMI_PASSWORD |
Self-hosted | Login password |
UMAMI_CF_ACCESS_CLIENT_ID |
Optional | Cloudflare Access service token client ID (for protected self-hosted APIs) |
UMAMI_CF_ACCESS_CLIENT_SECRET |
Optional | Cloudflare Access service token secret |
UMAMI_USER_AGENT |
Optional | Custom User-Agent for outbound requests (default: umami-mcp/1.0) |
UMAMI_DEBUG |
Optional | Set to 1/true to log outbound request URLs to stderr for debugging |
Set either UMAMI_API_KEY (Cloud) or both UMAMI_USERNAME + UMAMI_PASSWORD (self-hosted). The server auto-detects which mode to use.
For convenience, UMAMI_URL may include /v1 (Cloud) or /api (self-hosted); suffixes are normalized automatically.
If your self-hosted Umami is behind Cloudflare Access, set both UMAMI_CF_ACCESS_CLIENT_ID and UMAMI_CF_ACCESS_CLIENT_SECRET so machine-to-machine MCP calls can pass Access checks.
get_metrics accepts both type="path" and type="url" for compatibility across Umami versions.
startAt and endAt accept Unix-millisecond integers or numeric strings from MCP clients.
For time-based tools, you can use range instead of raw timestamps:
last_24h, last_7d, last_30d, this_month, `last_mon