umami-mcp-server
A lean MCP Server for Umami analytics
Documentation
Umami MCP Server
Connect your Umami Analytics to any MCP client - Claude Desktop, VS Code, Cursor, Windsurf, Zed, Smithery, and more.
Prompts
Analytics & Traffic
- "Give me a comprehensive analytics report for my website over the last 30 days"
- "Which pages are getting the most traffic this month? Show me the top 10"
- "Analyze my website's traffic patterns - when do I get the most visitors?"
User Insights
- "Where are my visitors coming from? Break it down by country and city"
- "What devices and browsers are my users using?"
- "Show me the user journey - what pages do visitors typically view in sequence?"
Sessions & Replay
- "How many sessions were recorded last month? List the most active ones"
- "Walk me through what session did — the pages and events in order"
- "Which recorded sessions came from mobile in Sweden?"
Real-time Monitoring
- "How many people are on my website right now? What pages are they viewing?"
- "Is my website experiencing any issues? Check if traffic has dropped significantly"
Content & Campaign Analysis
- "Which blog posts should I update? Show me articles with declining traffic"
- "How did my recent email campaign perform? Track visitors from the campaign UTM"
- "Compare traffic from different social media platforms"
Quick Start
Option 1: Download Binary
Get the latest release for your platform from Releases
Option 2: Docker
docker run -i --rm \
-e UMAMI_URL="https://your-instance.com" \
-e UMAMI_USERNAME="username" \
-e UMAMI_PASSWORD="password" \
ghcr.io/macawls/umami-mcp-serverOption 3: Go Install
go install github.com/Macawls/umami-mcp-server@latestInstalls to `~/go/bin/umami-mcp-server` (or `$GOPATH/bin`)
Setup
Pick one of the two approaches below based on your preference.
Remote (No Install)
A hosted instance is available at `https://umami-mcp.macawls.dev/mcp`. Connect directly from any MCP client that supports HTTP transport — no binary or Docker needed.
Credentials are passed via `X-Umami-*` headers on the `initialize` request.
Claude Desktop
Add to your config (`%APPDATA%\Claude\claude_desktop_config.json` on Windows, `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
{
"mcpServers": {
"umami": {
"type": "http",
"url": "https://umami-mcp.macawls.dev/mcp",
"headersHelper": "echo X-Umami-Host: https://your-instance.com && echo X-Umami-Username: admin && echo X-Umami-Password: pass"
}
}
}VS Code (GitHub Copilot)
Add to `.vscode/mcp.json`:
{
"servers": {
"umami": {
"type": "http",
"url": "https://umami-mcp.macawls.dev/mcp",
"headers": {
"X-Umami-Host": "https://your-instance.com",
"X-Umami-Username": "${input:umami-username}",
"X-Umami-Password": "${input:umami-password}"
}
}
}
}Claude Code
claude mcp add --transport http \
--header "X-Umami-Host: https://your-instance.com" \
--header "X-Umami-Username: admin" \
--header "X-Umami-Password: pass" \
umami https://umami-mcp.macawls.dev/mcpCursor
Add to `.cursor/mcp.json`:
{
"mcpServers": {
"umami": {
"url": "https://umami-mcp.macawls.dev/mcp",
"headers": {
"X-Umami-Host": "https://your-instance.com",
"X-Umami-Username": "admin",
"X-Umami-Password": "pass"
}
}
}
}Windsurf
Add to `~/.codeium/windsurf/mcp_config.json`:
{
"mcpServers": {
"umami": {
"serverUrl": "https://umami-mcp.macawls.dev/mcp",
"headers": {
"X-Umami-Host": "https://your-instance.com",
"X-Umami-Username": "admin",
"X-Umami-Password": "pass"
}
}
}
}OpenCode
Add to `opencode.json`:
{
"mcp": {
"umami": {
"type": "remote",
"url": "https://umami-mcp.macawls.dev/mcp",
"headers": {
"X-Umami-Host": "https://your-instance.com",
"X-Umami-Username": "admin",
"X-Umami-Password": "pass"
}
}
}
}Other Clients
Any MCP client that supports Streamable HTTP can connect to `https://umami-mcp.macawls.dev/mcp` with credentials in `X-Umami-Host`, `X-Umami-Username`, and `X-Umami-Password` headers.
Local
Run the binary or Docker image locally. Credentials are set via environment variables.
Claude Desktop
Add to your config (`%APPDATA%\Claude\claude_desktop_config.json` on Windows, `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
{
"mcpServers": {
"umami": {
"command": "~/go/bin/umami-mcp-server",
"env": {
"UMAMI_URL": "https://your-umami-instance.com",
"UMAMI_USERNAME": "your-username",
"UMAMI_PASSWORD": "your-password"
}
}
}
}VS Code (GitHub Copilot)
Create `.vscode/mcp.json`:
{
"servers": {
"umami": {
"command": "~/go/bin/umami-mcp-server",
"env": {
"UMAMI_URL": "https://your-umami-instance.com",
"UMAMI_USERNAME": "your-username",
"UMAMI_PASSWORD": "your-password"
}
}
}
}Claude Code
claude mcp add \
umami-mcp-server \
-e UMAMI_URL="https://your-umami-instance.com" \
-e UMAMI_USERNAME="your-username" \
-e UMAMI_PASSWORD="your-password" \
-- ~/go/bin/umami-mcp-serverCursor
Add to `.cursor/mcp.json`:
{
"mcpServers": {
"umami": {
"command": "~/go/bin/umami-mcp-server",
"env": {
"UMAMI_URL": "https://your-umami-instance.com",
"UMAMI_USERNAME": "your-username",
"UMAMI_PASSWORD": "your-password"
}
}
}
}Windsurf
Add to `~/.codeium/windsurf/mcp_config.json`:
{
"mcpServers": {
"umami": {
"command": "~/go/bin/umami-mcp-server",
"env": {
"UMAMI_URL": "https://your-umami-instance.com",
"UMAMI_USERNAME": "your-username",
"UMAMI_PASSWORD": "your-password"
}
}
}
}Zed
Add to your Zed settings under `assistant.mcp_servers`:
{
"umami": {
"command": "~/go/bin/umami-mcp-server",
"env": {
"UMAMI_URL": "https://your-umami-instance.com",
"UMAMI_USERNAME": "your-username",
"UMAMI_PASSWORD": "your-password"
}
}
}Docker
For clients that use a `command` field (Claude Desktop, Cursor, etc.):
{
"mcpServers": {
"umami": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "UMAMI_URL",
"-e", "UMAMI_USERNAME",
"-e", "UMAMI_PASSWORD",
"ghcr.io/macawls/umami-mcp-server"
],
"env": {
"UMAMI_URL": "https://your-umami-instance.com",
"UMAMI_USERNAME": "your-username",
"UMAMI_PASSWORD": "your-password"
}
}
}
}Available Tools
| Tool | Description |
|---|---|
| `get_websites` | List all websites (call this first to get website IDs) |
| `get_stats` | Aggregated statistics — pageviews, visitors, bounces, total time |
| `get_pageviews` | Pageview and session counts grouped by time unit |
| `get_metrics` | Breakdown by page, referrer, browser, OS, device, country, etc. |
| `get_active` | Current active visitor count in real-time |
| `get_sessions` | List individual visitor sessions, with total count — the sessions session replay records |
| `get_session_stats` | Aggregated session totals — pageviews, visitors, visits, countries, events |
| `get_session_activity` | Ordered pageview/event timeline for a single session |
Configuration
Environment Variables
| Variable | Default | Description |
|---|---|---|
| `UMAMI_URL` | *required* | Your Umami instance URL (use `https://api.umami.is` for Umami Cloud) |
| `UMAMI_USERNAME` | *required for self-hosted* | Umami username |
| `UMAMI_PASSWORD` | *required for self-hosted* | Umami password |
| `UMAMI_API_KEY` | *required for Umami Cloud* | API key from your Umami Cloud account (alternative to username/password) |
| `UMAMI_TEAM_ID` | Team ID for team-based setups | |
| `TRANSPORT` | `stdio` | Transport mode (`stdio` or `http`) |
| `PORT` | `8080` | HTTP server port |
| `ALLOWED_ORIGINS` | `*` | Comma-separated CORS allowed origins |
| `MAX_SESSIONS` | `1000` | Maximum concurrent HTTP sessions |
Config File
Instead of environment variables, create a `config.yaml` file next to the binary:
umami_url: https://your-umami-instance.com
username: your-username
password: your-password
team_id: your-team-id # optionalFor Umami Cloud, use an API key instead:
umami_url: https://api.umami.is
api_key: your-api-keyEnvironment variables take priority over the config file.
Umami Cloud
Umami Cloud (the hosted version at cloud.umami.is) does not support username/password authentication. Use an API key from your Umami Cloud account settings and set `UMAMI_URL=https://api.umami.is` together with `UMAMI_API_KEY=...`. For HTTP transport, send the `X-Umami-Api-Key` header instead of `X-Umami-Username`/`X-Umami-Password`.
Team Websites
If your Umami instance uses teams and your websites are assigned to a team rather than individual users, `get_websites` may return an empty list. Set `UMAMI_TEAM_ID` to fetch websites from your team instead. For HTTP transport, use the `X-Umami-Team-Id` header.
You can find your team ID in your Umami dashboard under Settings > Teams.
Self-Hosting (HTTP Transport)
The server supports Streamable HTTP for remote deployments. Set `TRANSPORT=http` to expose a `/mcp` endpoint:
TRANSPORT=http PORT=9999 ./umami-mcp-serverCredentials are passed via `X-Umami-*` headers on the `initialize` request. The response includes a `Mcp-Session-Id` header for subsequent requests.
Docker defaults to HTTP mode:
docker run -p 8080:8080 ghcr.io/macawls/umami-mcp-serverBuild from Source
git clone https://github.com/Macawls/umami-mcp-server.git
cd umami-mcp-server
go build -o umami-mcpTroubleshooting
- macOS binary won't run: `xattr -c umami-mcp-server` to remove quarantine
- Linux binary won't run: `chmod +x umami-mcp-server`
- Connection errors: Verify your Umami instance is accessible and credentials are correct
- Tools not showing up: Check your MCP client logs, verify the binary path is absolute
License
MIT
Frequently asked questions
What is umami-mcp-server?
umami-mcp-server is A lean MCP Server for Umami analytics
How do I install umami-mcp-server?
Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.
Is umami-mcp-server open source?
Yes — it is hosted on GitHub at https://github.com/Macawls/umami-mcp-server and has 33 stars.
Related MCP tools
Browser MCP is a Model Context Provider (MCP) server that allows AI applications to control your browser
AI Skills, MCP Tools, and CLI for Unity Engine. Full AI develop and test loop. Use cli for quick setup. Efficient token usage, advanced tools. Any C# method may be turned into a tool by a single line. Works with Claude Code, Gemini, Copilot, Cursor and any other absolutely for free.
Cut AI token costs 95%+ on code exploration. The leading MCP server for precise, symbol-level GitHub code retrieval via tree-sitter AST. Works with Claude Code, Cursor & any MCP client. 313B+ tokens saved.
Official remote MCP server for Atlassian. Securely connect Jira, Confluence, Jira Service Management, Bitbucket, and Compass to Claude, ChatGPT, Cursor, VS Code, and other AI tools using OAuth 2.1 or API tokens.
Open-source coding agent memory. Records issues, attempts, fixes and decisions, then warns your agent before it repeats an approach that already failed. Native MCP server for Claude Code, Cursor, Antigravity and Codex. 100% local, no cloud, no telemetry. MIT.
The missing open-source Kubernetes UI with a built-in MCP server for AI agents. See what's broken, why, and what changed. Issues, Topology, event timeline, Helm, GitOps, live service traffic, and cluster audits - all in one Go binary.
Run your own MCP server? See who uses it and what to fix.
Measure it with TrackMCP