Umami MCP Server
Umami MCP Server
Ein Model Context Protocol-Server für Umami Analytics. Fragen Sie Claude, Cursor oder einen beliebigen MCP-Client nach Ihrem Traffic – und lassen Sie ihn Websites erstellen und verwalten – während Ihre Anmeldedaten auf Ihrem eigenen Rechner bleiben.
"Which pages drove the most visitors last month, and where did that traffic come from?"
"Build a funnel from /pricing to /signup to /welcome for the last 30 days."
"Add analytics for my new site blog.example.com and give me the tracking snippet."Warum es das gibt
Umami hat keinen offiziellen MCP-Server. Es gibt mehrere Community-Versionen, und wenn Sie nur eine breite API-Abdeckung möchten, sollten Sie sich zuerst 0xtlt/umami-mcp ansehen – es kapselt mehr von der API als dieses Projekt. Einige der älteren Server
(jakeyShakey,
mikusnuz,
mittwald,
Macawls) wurden gegen die v2-API geschrieben und
brechen auf einer modernen Instanz, weil v3 Dinge ohne Aliase umbenannt hat:
Umami v2 | Umami v3 | |
Top-Seiten |
|
|
Hostnamen |
|
|
UTM-Daten |
|
|
Trichter, Retention, Journeys, Attribution, Umsatz | — |
|
Dieser Server existiert für zwei Dinge, die die anderen nicht tun:
1. Vollständige, verifizierte v3-Report-Abdeckung. Alle sieben v3-Report-Typen – Trichter, Retention,
Journey, Ziel, Umsatz, Attribution und UTM – wurden gegen eine Live-Umami-3.3.1-Instanz getestet.
Der Report-Envelope ist leicht falsch zu machen: Daten kommen in parameters als ISO-8601-Strings,
nicht in filters und nicht als die Epochen-Millisekunden, die der Rest der API verwendet. Attribution nimmt
first-click / last-click, nicht die camelCase-Schreibweisen, die man vermuten würde.
2. Ein Fähigkeitsmodell statt eines booleschen Werts. Siehe unten.
Related MCP server: Umami MCP Server
Sicherheitsmodell
Ein Analytics-MCP-Server hält eine Anmeldeinformation, die jede Besuchersitzung lesen kann, die Sie je aufgezeichnet haben – und, wenn Sie es zulassen, das Ganze löschen kann. Das Design folgt daraus.
Ihre Anmeldedaten verlassen niemals Ihre Umgebung. Die Konfiguration wird nur aus der Prozessumgebung gelesen. Es gibt keine Telemetrie, kein Phone-Home und kein gehostetes Relay. Der einzige Host, den dieser Server je kontaktiert, ist die von Ihnen gesetzte UMAMI_URL. Wenn Sie ihn selbst hosten, gelangen keine Ihrer Analysedaten jemals an Dritte – einschließlich des Autors dieser Software.
Seien Sie vorsichtig bei jedem Umami-MCP, das einen gehosteten Endpunkt anbietet, den Sie auf Ihre Instanz richten. Selbst gehostetes Umami hat keine API-Schlüssel, daher bedeutet „bequemes Hosting", dass Sie Ihr Admin-Passwort an den Server von jemand anderem mailen.
Least Privilege standardmäßig. Der Server startet im Modus read. Eine Erweiterung ist eine bewusste Handlung:
Modus | Fügt hinzu |
| Analysen, Reports, Auflisten von Websites |
| Websites und Teams erstellen und aktualisieren |
| Benutzerverwaltung |
| Website löschen, Daten zurücksetzen, Benutzer löschen |
Zurückgehaltene Tools werden überhaupt nicht registriert, sodass sie nie in der Tool-Liste des Modells erscheinen.
Das ist der Teil, der sich von einem READONLY=true-Flag unterscheidet: Ein Tool, das nie beworben wurde,
kann nicht durch eine prompt-injizierte Anweisung aufgerufen werden, die in, sagen wir, einer Referrer-URL oder einem Seitentitel in Ihren eigenen Analysedaten versteckt ist. Es gibt keine Laufzeitprüfung, die man vergessen oder umgehen könnte, weil es kein Tool gibt.
Zerstörerische Aktionen benötigen eine getippte Bestätigung, die gegen die Realität geprüft wird. umami_delete_website
nimmt ein confirmDomain-Argument, holt den Live-Datensatz und lehnt ab, es sei denn, sie stimmen überein. Ein Modell
das nach der falschen Website-UUID greift, erhält einen Fehler, nicht einen gelöschten Datensatz.
Anmeldedaten bleiben außerhalb der Client-Konfiguration. Anstatt Ihr Passwort in
~/.claude.json oder mcp.json zu verlangen, liest der Server es aus einer Datei, die Sie unter
~/.config/umami-mcp/env kontrollieren, und warnt, wenn diese Datei für andere Benutzer lesbar ist. Siehe
Anmeldedaten.
Geheimnisse werden aus der Ausgabe entfernt. MCP-Ausgabe fließt in ein Modell und oft in ein Chat-Transkript, das nicht mehr zurückgenommen werden kann. Passwörter, Bearer-Tokens und JWTs werden aus jedem Fehler und jeder Antwort entfernt, bevor sie den Prozess verlassen.
Weigert sich, Anmeldedaten über die Leitung zu leaken. Klartext-HTTP zu einem Remote-Host wird beim Start abgelehnt; es ist nur für localhost erlaubt, für die lokale Entwicklung.
Installation
Drei Möglichkeiten, es auszuführen. Self-Hosting ist die Standard- und die empfohlene Option – die gehostete Instanz existiert, damit Sie es in zwei Minuten ausprobieren können, ohne etwas zu klonen.
Läuft auf | Anmeldedaten leben | Am besten für | |
Gehostet | asif.dev | In Ihrem Token versiegelt, nie gespeichert | Ausprobieren; Claude Web und Cowork |
Quellcode | Dein Rechner | Eine Datei, die nur du lesen kannst | Tägliche Nutzung in Claude Code |
Docker | Dein Server | Ihre | Teams, immer an |
Wenn Sie selbst hosten und es in Claude Web verwenden möchten, führen Sie es mit UMAMI_MCP_OAUTH=true hinter Ihrer eigenen Domain aus – dann berührt nichts von Ihnen die Infrastruktur anderer.
1. Gehostete Instanz nutzen (nichts zu installieren)
Fügen Sie in Claude einen benutzerdefinierten Connector hinzu, der auf Folgendes zeigt:
https://umami-mcp.asif.dev/mcpSie werden auf einem Zustimmungsbildschirm nach Ihrer eigenen Umami-URL und Ihrem Login gefragt. Siehe Claude Web, Cowork und Claude Code im Web für die Handhabung der Anmeldedaten.
2. Aus dem Quellcode
git clone https://github.com/Asif2BD/umami-mcp.git
cd umami-mcp
npm install && npm run buildRichten Sie dann Anmeldedaten ein und registrieren Sie sie bei Ihrem Client:
claude mcp add umami --scope user -- node "$PWD/dist/index.js"Erfordert Node 20 oder neuer.
3. Docker
git clone https://github.com/Asif2BD/umami-mcp.git
cd umami-mcp
cp .env.example .env # then edit .env
docker compose up -dnpm: noch nicht veröffentlicht. Sobald es das ist, wird
npx -y @asif2bd/umami-mcpden Clone-and-Build-Schritt oben ersetzen. Bis dahin verwenden Sie Quelle oder Docker.
Anmeldedaten
Selbst gehostetes Umami hat keine API-Schlüssel, daher ist die Anmeldeinformation, die dieser Server hält, ein echtes Kontopasswort.
MCP-Clients möchten das normalerweise in ihrer Konfigurations-JSON eingebettet haben – ~/.claude.json,
mcp.json und ähnliche – die weit verbreitet lesbar sind, in Issues und Screen-Shares eingefügt werden und von einigen Clients zwischen Maschinen synchronisiert werden.
Dieser Server liest Anmeldedaten also aus einer Datei, die Sie kontrollieren. Erstellen Sie sie einmal:
mkdir -p ~/.config/umami-mcp
cat > ~/.config/umami-mcp/env <<'EOF'
UMAMI_URL=https://analytics.example.com
UMAMI_USERNAME=mcp-bot
UMAMI_PASSWORD=your-password
UMAMI_MCP_MODE=read
EOF
chmod 600 ~/.config/umami-mcp/envDer Server lädt sie automatisch. Er warnt beim Start, wenn die Datei für andere Benutzer lesbar ist.
Suchreihenfolge – die zuerst gefundene Datei gewinnt, und echte Umgebungsvariablen überschreiben immer die Datei, sodass Sie Einstellungen weiterhin von der Client-Konfiguration übergeben können, wenn Sie möchten:
$UMAMI_MCP_ENV_FILE, falls gesetzt~/.config/umami-mcp/env(oder$XDG_CONFIG_HOME/umami-mcp/env)./.envim Arbeitsverzeichnis
Verbinden Sie Ihren Client
Claude Code
Mit der obigen Anmeldedaten-Datei enthält die Registrierung überhaupt keine Geheimnisse:
claude mcp add umami --scope user -- node ~/umami-mcp/dist/index.jsVerwenden Sie den absoluten Pfad zu Ihrem Checkout. Wenn Ihr Node unter nvm lebt, geben Sie auch den vollständigen Interpreter-Pfad an, da MCP-Clients Ihr Shell-Profil nicht laden:
claude mcp add umami --scope user -- ~/.nvm/versions/node/v22.22.0/bin/node ~/umami-mcp/dist/index.jsClaude Desktop / Cursor / VS Code
{
"mcpServers": {
"umami": {
"command": "node",
"args": ["/absolute/path/to/umami-mcp/dist/index.js"]
}
}
}Wenn Sie alles an einem Ort behalten möchten, funktionieren Umgebungsvariablen weiterhin und haben Vorrang vor der Datei:
{
"mcpServers": {
"umami": {
"command": "node",
"args": ["/absolute/path/to/umami-mcp/dist/index.js"],
"env": {
"UMAMI_URL": "https://analytics.example.com",
"UMAMI_USERNAME": "mcp-bot",
"UMAMI_PASSWORD": "your-password"
}
}
}
}Funktionsprüfung
Bitten Sie Ihren Client, umami_whoami auszuführen. Es meldet die Instanz, das Konto und den Berechtigungsmodus – der schnellste Weg, die Verbindung zu bestätigen und zu sehen, wie viel der Server darf:
{
"instance": "https://analytics.example.com",
"authenticatedAs": "mcp-bot",
"role": "admin",
"serverMode": "read",
"destructiveOperations": "disabled"
}Dann versuchen Sie: "Liste meine Umami-Websites auf", oder "Was waren meine Top-Seiten letzte Woche?"
Claude Web, Cowork und Claude Code im Web
Diese Clients können keinen lokalen Prozess starten, daher benötigen sie einen öffentlichen HTTPS-MCP-Server – und ihre Connector-Oberfläche akzeptiert nur OAuth, ohne Feld für ein statisches Bearer-Token oder einen benutzerdefinierten Header.
Das Offensichtliche zu hosten, mit einem Satz Umami-Anmeldedaten eingebacken und ohne Authentifizierung, macht die URL zu einem offenen Proxy für dieses Umami. Dieser Server macht also stattdessen OAuth – und das, ohne ein Anmeldedaten-Speicher zu werden.
Gehostete Instanz verwenden
Fügen Sie in Claude einen benutzerdefinierten Connector mit dieser URL hinzu:
https://umami-mcp.asif.dev/mcpClaude registriert sich selbst, sendet Sie zu einem Zustimmungsbildschirm und fragt nach Ihrer eigenen Umami-URL, Benutzername und Passwort. Nichts wird mit anderen Benutzern des Hosts geteilt.
Eigenes Hosting
UMAMI_MCP_OAUTH=true
UMAMI_MCP_TRANSPORT=http
UMAMI_MCP_ISSUER=https://mcp.example.com # public HTTPS URL of this server
UMAMI_MCP_TOKEN_KEY=<32 random bytes> # keep stable; see below
UMAMI_MCP_TOKEN_TTL=2592000 # 30 daysGenerieren Sie den Schlüssel einmal und bewahren Sie ihn auf:
node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"Setzen Sie außerdem UMAMI_URL, um jeden Benutzer auf eine Instanz festzulegen, anstatt ihm die Wahl zu lassen.
Wie die Anmeldedaten behandelt werden
Der Zustimmungsbildschirm verifiziert die Anmeldedaten gegen die vom Benutzer benannte Umami-Instanz und versiegelt sie dann mit AES-256-GCM in das Zugriffstoken. Der Server führt keine Session-Tabelle und speichert keine Anmeldedaten: Jede Anfrage entschlüsselt das Token, erstellt einen MCP-Server, der auf diesen einen Benutzer beschränkt ist, bedient den Aufruf und verwirft ihn.
Der ehrliche Kompromiss: Wer UMAMI_MCP_TOKEN_KEY hält, kann jedes erfasste Token entschlüsseln. Behandeln Sie es als den sensibelsten Wert in der Bereitstellung. Eine Rotation macht jedes ausgestellte Token ungültig – das ist die beabsichtigte Blast-Radius-Kontrolle.
Zerstörerische Tools werden über OAuth niemals exponiert, egal welche Berechtigung der Benutzer wählt. Ihr getippter Bestätigungsschutz setzt einen lokalen Bediener voraus, der sehen kann, was er löschen wird, und einem entfernten Aufrufer kann das nicht gezeigt werden.
Als einfacher HTTP-Dienst ausführen
Setzen Sie UMAMI_MCP_TRANSPORT=http ohne UMAMI_MCP_OAUTH für einen Single-Tenant-Endpunkt unter /mcp, plus /health.
In diesem Modus hat der Server keine eigene Authentifizierung. Jeder, der den Port erreichen kann, kann Ihre Umami-Anmeldedaten verwenden. Halten Sie ihn auf Loopback und tunneln Sie zu ihm:
ssh -N -L 3334:127.0.0.1:3334 you@your-server
claude mcp add --transport http umami http://127.0.0.1:3334/mcpDer Server warnt beim Start, wenn er an etwas anderes als Loopback gebunden ist.
Tools
Tool | Erfordert | Beschreibung |
| read | Listet die von dieser Umami-Instanz verfolgten Websites mit ihren UUIDs auf. |
| read | Ruft eine einzelne Website per UUID ab, einschließlich Domain, Besitzer und Erstellungsdatum. |
| write | Registriert eine neue Website für das Tracking und gibt ihre UUID zurück, die der Wert ist, der in das |
| write | Ändert den Namen, die Domain oder den Share-Slug einer Website. |
| destructive | LÖSCHT DAUERHAFT alle gesammelten Analysedaten für eine Website, behält aber die Website selbst. |
| destructive | LÖSCHT DAUERHAFT eine Website und alle jemals für sie aufgezeichneten Ereignisse. |
| read | Gibt das fertige HTML-Script-Tag zurück, das Daten an diese Umami-Instanz für eine bestimmte Website sendet. |
| read | Übersichtszahlen für eine Website über einen Zeitraum: Seitenaufrufe, Besucher, Besuche, Absprünge und Gesamtzeit auf der Website. |
| read | Seitenaufrufe und Sitzungen in Zeitintervallen, um den Verkehr zu diagrammen. |
| read | Top-Werte für eine Dimension, sortiert nach Besucherzahl – Top-Seiten, Referrer, Länder, Browser usw. |
| read | Anzahl der Besucher, die in den letzten Minuten auf der Website aktiv sind. |
| read | Live-Schnappschuss der aktuellen Aktivität: aktuelle Ereignisse mit Land, URL, Browser und Gerät, plus Zusammenfassungen nach Land, URL und Referrer. |
| read | Summen für benutzerdefinierte getrackte Ereignisse über einen Zeitraum: Ereigniszahl, eindeutige Ereignisnamen, Besucher und Besuche, mit einem Vergleich zum vorherigen Zeitraum. |
| read | Einzelne Besuchersitzungen mit Browser, Betriebssystem, Gerät, Land und Region. |
| read | Die geordnete Abfolge von Seitenaufrufen und Ereignissen für eine Besuchersitzung – ihr Pfad durch die Website. |
| read | Aufschlüsselung des Traffics nach UTM-Parametern: Quelle, Medium, Kampagne, Begriff und Inhalt. |
| read | Schrittweiser Conversion-Funnel. |
| read | Kohortenbindung: Von den Besuchern, die an einem bestimmten Tag erstmals gesehen wurden, wie viele an jedem Folgetag zurückkehrten. |
| read | Häufigste geordnete Pfade, die Besucher durch die Website nehmen, als Seitenfolgen mit einer Anzahl für jeden. |
| read | Fortschritt in Richtung eines einzelnen Ziels: Wie viele Besucher einen bestimmten Pfad oder ein benutzerdefiniertes Ereignis erreichen. |
| read | Umsatz im Zeitverlauf aus Ereignissen mit einer Umsatz-Eigenschaft, aufgeschlüsselt nach Land, Region, Referrer und Kanal. |
| read | Schreibt Conversions Akquisitionskanälen zu – Referrer, bezahlte Anzeigen und UTM-Parameter – entweder nach dem First-Click- oder Last-Click-Modell. |
| admin | Listet Umami-Benutzerkonten mit ihren Rollen auf. |
| admin | Erstellt ein Umami-Benutzerkonto. |
| destructive | LÖSCHT DAUERHAFT ein Benutzerkonto und die Websites, die ihm gehören. |
| read | Listet Teams und ihre Mitglieder auf. |
| write | Erstellt ein Team, damit Websites zwischen Benutzern geteilt werden können. |
| read | Überprüft, ob dieser MCP-Server die konfigurierte Umami-Instanz erreichen kann, und meldet, mit welchem Konto er authentifiziert ist, sowie den Berechtigungsmodus, in dem der Server läuft. |
Zeiträume
Jedes Analysetool akzeptiert eine period-Kurzform – 24h, 7d, 30d, 12m, today,
yesterday – anstelle von Epochen-Millisekunden. Modelle sind zuverlässig gut bei „letzte 30 Tage“ und
unzuverlässig gut bei Zeitstempel-Arithmetik, und ein falsch berechneter Epochenwert liefert Daten für das falsche
Zeitfenster ohne Fehler. Explizite startAt/endAt in Epochen-Millisekunden funktionieren weiterhin und haben Vorrang.
Konfiguration
Siehe .env.example für alle Optionen. Die wichtigsten:
Variable | Standard | Zweck |
| erforderlich | Ihre Umami-Instanz |
| Self-Hosted-Anmeldung | |
| Umami-Cloud-Alternative | |
|
|
|
|
| Entsperrt Löschen und Zurücksetzen |
|
|
|
|
| HTTP-Bind-Adresse |
|
| HTTP-Port |
| Expliziter Pfad zu einer Anmeldedaten-Datei |
Empfohlene Einrichtung
Erstellen Sie ein dediziertes Umami-Konto für den MCP-Server, anstatt Ihren Admin-Login wiederzuverwenden, und geben Sie ihm nur die Websites, die er benötigt. Wenn die Anmeldedaten dann jemals offengelegt werden, ist der Schadensradius ein Bot-Konto, das Sie löschen können – nicht Ihr Administrator.
Kompatibilität
Verifiziert gegen Umami 3.3.1 (selbst gehostet, PostgreSQL). Umami Cloud funktioniert über UMAMI_API_KEY. Umami v2 wird nicht unterstützt: Die oben umbenannten Metriktypen bedeuten, dass v2 und v3 unterschiedliche Clients benötigen, und dieser zielt auf v3.
Entwicklung
npm install
npm run build
npm test # unit tests, no network requiredtest/e2e.mjs und test/write-e2e.mjs steuern den gebauten Server über einen echten MCP-Client gegen eine Live-Instanz. Der Schreibtest erstellt eine Wegwerf-Website auf einer .invalid-Domain und löscht sie wieder; richten Sie ihn auf eine Nicht-Produktions-Instanz.
Mitwirken
Issues und Pull-Requests sind willkommen. Umami v3 stellt rund 127 API-Routen bereit, und dieser Server deckt die nützlichsten ab – Session Replay, Heatmaps, Pixel, Link-Tracking, Boards und Segmente sind noch nicht abgebildet. Wenn Sie Tools hinzufügen, halten Sie die Stufe und die destructive-Flags ehrlich, denn das gesamte Sicherheitsmodell beruht auf ihnen.
Wenn das Umami-Team dies übernehmen, forken oder upstreamen möchte, öffnen Sie bitte ein Issue – das ist das Ziel, für das dies gebaut wurde.
Lizenz
MIT © M Asif Rahman
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceConnect your Umami Analytics to any MCP client to derive insights from natural language.30GoMIT
- AlicenseAqualityFmaintenanceEnables AI assistants to interact with Umami Analytics for both Cloud and self-hosted instances. It provides tools to retrieve website statistics, visitor metrics, pageview trends, and real-time active user counts.51MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for Umami Analytics that provides read-only tools to query website stats, events, sessions, reports, and more, enabling natural language analytics queries.262MIT
- AlicenseAqualityBmaintenanceA read-only MCP server for Umami analytics, enabling natural language queries of website stats, traffic trends, events, sessions, and analytics reports.13121Elastic 2.0
Related MCP Connectors
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.
Privacy-first web analytics. Query pageviews, referrers, trends, and AI insights.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Asif2BD/umami-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server