Umami MCP Server
Umami MCP Server
Un servidor Model Context Protocol para Umami Analytics. Pregunta a Claude, Cursor o cualquier cliente MCP sobre tu tráfico — y deja que cree y gestione sitios web — mientras tus credenciales permanecen en tu propia máquina.
"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."Por qué existe esto
Umami no tiene un servidor MCP oficial. Existen varios comunitarios, y si solo quieres una amplia cobertura de la API, deberías mirar primero 0xtlt/umami-mcp — envuelve más de la API que este. Algunos de los servidores más antiguos (jakeyShakey, mikusnuz, mittwald, Macawls) fueron escritos para la API v2 y fallan en una instancia moderna, porque v3 renombró cosas sin alias:
Umami v2 | Umami v3 | |
Páginas principales |
|
|
Nombres de host |
|
|
Datos UTM |
|
|
Embudos, retención, recorridos, atribución, ingresos | — |
|
Este servidor existe para dos cosas que los demás no hacen:
1. Cobertura completa y verificada de informes v3. Los siete tipos de informes v3 — embudo, retención, recorrido, objetivo, ingresos, atribución y UTM — se probaron contra una instancia real de Umami 3.3.1. El sobre del informe es fácil de equivocar: las fechas van en parameters como cadenas ISO-8601, no en filters, ni como los milisegundos de época que usa el resto de la API. La atribución usa first-click / last-click, no las grafías camelCase que adivinarías.
2. Un modelo de capacidades en lugar de un booleano. Ver más abajo.
Related MCP server: Umami MCP Server
Modelo de seguridad
Un servidor MCP de análisis guarda una credencial que puede leer cada sesión de visitante que hayas registrado — y, si se lo permites, borrarlo todo. El diseño se deriva de eso.
Tus credenciales nunca salen de tu entorno. La configuración se lee solo del entorno del proceso. No hay telemetría, ni llamadas a casa, ni relé alojado. El único host al que este servidor contacta es el UMAMI_URL que configures. Si lo auto-alojas, nada de tus análisis llega jamás a un tercero — incluyendo al autor de este software.
Desconfía de cualquier Umami MCP que ofrezca un endpoint alojado al que apuntes tu instancia. El Umami autoalojado no tiene claves API, así que el alojamiento "conveniente" significa enviar tu contraseña de administrador por correo al servidor de otra persona.
Menor privilegio por defecto. El servidor arranca en modo read. Ampliarlo es un acto deliberado:
Modo | Añade |
| Analítica, informes, listado de sitios web |
| Crear y actualizar sitios web y equipos |
| Gestión de usuarios |
| Eliminar sitio web, restablecer datos, eliminar usuario |
Las herramientas retenidas no se registran en absoluto, por lo que nunca aparecen en la lista de herramientas del modelo. Esta es la parte que difiere de un indicador READONLY=true: una herramienta que nunca se anunció no puede ser invocada por una instrucción inyectada en el prompt oculta, por ejemplo, en una cadena de referer o en un título de página dentro de tus propios datos de analítica. No hay comprobación en tiempo de ejecución que olvidar o eludir, porque no hay herramienta.
Las acciones destructivas requieren una confirmación escrita verificada contra la realidad. umami_delete_website toma un argumento confirmDomain, obtiene el registro en vivo y se niega a menos que coincidan. Un modelo que intente el UUID de un sitio web equivocado recibe un error, no un conjunto de datos borrado.
Las credenciales permanecen fuera de la configuración del cliente. En lugar de requerir tu contraseña dentro de ~/.claude.json o mcp.json, el servidor la lee de un archivo que controlas en ~/.config/umami-mcp/env, y avisa si ese archivo es legible por otros usuarios. Ver Credenciales.
Los secretos se eliminan de la salida. La salida de MCP fluye hacia un modelo y a menudo hacia una transcripción de chat, que no se puede deshacer. Las contraseñas, los tokens de portador y los JWT se redactan de cada error y respuesta antes de salir del proceso.
Se niega a filtrar credenciales por la red. Se rechaza el HTTP en texto plano a un host remoto al iniciar; solo se permite para localhost, para desarrollo local.
Instalación
Tres formas de ejecutarlo. El autoalojamiento es la opción por defecto y la recomendada — la instancia alojada existe para que puedas probarlo en dos minutos sin clonar nada.
Se ejecuta en | Las credenciales viven en | Ideal para | |
Hosted | asif.dev | Selladas en tu token, nunca almacenadas | Probar; Claude web y Cowork |
Source | Tu máquina | Un archivo que solo tú puedes leer | Uso diario en Claude Code |
Docker | Tu servidor | Tu | Equipos, siempre en línea |
Si lo auto-alojas y quieres usarlo en Claude web, ejecútalo con UMAMI_MCP_OAUTH=true detrás de tu propio dominio — entonces nada tuyo toca la infraestructura de nadie más.
1. Usar la instancia alojada (nada que instalar)
Añade un conector personalizado en Claude apuntando a:
https://umami-mcp.asif.dev/mcpSe te pedirá tu propia URL de Umami y el inicio de sesión en una pantalla de consentimiento. Ver Claude web, Cowork y Claude Code en web para saber cómo se manejan las credenciales.
2. Desde el código fuente
git clone https://github.com/Asif2BD/umami-mcp.git
cd umami-mcp
npm install && npm run buildLuego configura las credenciales y regístralo con tu cliente:
claude mcp add umami --scope user -- node "$PWD/dist/index.js"Requiere Node 20 o superior.
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: aún no publicado. Cuando lo esté,
npx -y @asif2bd/umami-mcpreemplazará el paso de clonar y compilar de arriba. Hasta entonces usa el código fuente o Docker.
Credenciales
El Umami autoalojado no tiene claves API, por lo que la credencial que guarda este servidor es una contraseña de cuenta real. Los clientes MCP normalmente quieren que esté incrustada en su JSON de configuración — ~/.claude.json, mcp.json y similares — que son ampliamente legibles, se pegan en incidencias y pantallas compartidas, y algunos clientes los sincronizan entre máquinas.
Así que este servidor lee las credenciales de un archivo que tú controlas. Créalo una vez:
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/envEl servidor lo carga automáticamente. Avisa al iniciar si el archivo es legible por otros usuarios.
Orden de búsqueda — el primer archivo encontrado gana, y las variables de entorno reales siempre tienen prioridad sobre el archivo, así que aún puedes pasar ajustes desde la configuración del cliente cuando quieras:
$UMAMI_MCP_ENV_FILE, si está definida~/.config/umami-mcp/env(o$XDG_CONFIG_HOME/umami-mcp/env)./.enven el directorio de trabajo
Conecta tu cliente
Claude Code
Con el archivo de credenciales de arriba, el registro no lleva ningún secreto:
claude mcp add umami --scope user -- node ~/umami-mcp/dist/index.jsUsa la ruta absoluta a tu clon. Si tu Node vive bajo nvm, da también la ruta completa del intérprete, ya que los clientes MCP no cargan tu perfil de shell:
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"]
}
}
}Si prefieres tenerlo todo en un solo lugar, las variables de entorno siguen funcionando y tienen prioridad sobre el archivo:
{
"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"
}
}
}
}Comprueba que funciona
Pide a tu cliente que ejecute umami_whoami. Informa de la instancia, la cuenta y el modo de permiso — la forma más rápida de confirmar la conexión y ver cuánto puede hacer el servidor:
{
"instance": "https://analytics.example.com",
"authenticatedAs": "mcp-bot",
"role": "admin",
"serverMode": "read",
"destructiveOperations": "disabled"
}Luego prueba: "Lista mis sitios web de Umami", o "¿Cuáles fueron mis páginas principales la semana pasada?"
Claude web, Cowork y Claude Code en web
Esos clientes no pueden lanzar un proceso local, así que necesitan un servidor MCP HTTPS público — y su interfaz de conector acepta solo OAuth, sin campo para un token de portador estático o cabecera personalizada.
Alojarlo de la manera obvia, con un conjunto de credenciales de Umami incrustadas y sin autenticación, convierte la URL en un proxy abierto a ese Umami. Así que este servidor usa OAuth en su lugar, y lo hace sin convertirse en un almacén de credenciales.
Usar la instancia alojada
Añade un conector personalizado en Claude con esta URL:
https://umami-mcp.asif.dev/mcpClaude se registra a sí mismo, te envía a una pantalla de consentimiento y te pide tu propia URL de Umami, nombre de usuario y contraseña. Nada se comparte con otros usuarios del host.
Aloja el tuyo propio
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 daysGenera la clave una vez y consérvala:
node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"Define también UMAMI_URL para fijar a cada usuario a una instancia en lugar de dejar que elijan.
Cómo se manejan las credenciales
La pantalla de consentimiento verifica las credenciales contra la instancia de Umami que nombró el usuario, luego las sella en el token de acceso con AES-256-GCM. El servidor no mantiene ninguna tabla de sesión ni almacena credenciales: cada solicitud descifra el token, construye un servidor MCP limitado a ese único usuario, atiende la llamada y lo descarta.
El compromiso honesto: quien tenga UMAMI_MCP_TOKEN_KEY puede descifrar cualquier token que capture. Trátala como el valor más sensible del despliegue. Rotarla invalida todos los tokens emitidos, que es el control de radio de explosión previsto.
Las herramientas destructivas nunca se exponen a través de OAuth, sea cual sea el permiso que elija el usuario. Su guardia de confirmación escrita asume un operador local que puede ver lo que va a eliminar, y a un llamante remoto no se le puede mostrar eso.
Ejecutarlo como un servicio HTTP simple
Configura UMAMI_MCP_TRANSPORT=http sin UMAMI_MCP_OAUTH para un endpoint de un solo inquilino en /mcp, además de /health.
En este modo el servidor no tiene autenticación propia. Cualquiera que pueda alcanzar el puerto puede usar tus credenciales de Umami. Mantenlo en loopback y haz un túnel hacia él:
ssh -N -L 3334:127.0.0.1:3334 you@your-server
claude mcp add --transport http umami http://127.0.0.1:3334/mcpEl servidor avisa al iniciar cuando está enlazado a algo que no sea loopback.
Herramientas
Tool | Requires | Description |
| read | Lista los sitios web que esta instancia de Umami rastrea, con sus UUID |
| read | Obtiene un único sitio web por su UUID, incluyendo su dominio, propietario y fecha de creación |
| write | Registra un nuevo sitio web para su seguimiento y devuelve su UUID, que es el valor que debe indicarse en el atributo data-website-id del script de seguimiento de Umami |
| write | Cambia el nombre, el dominio o el slug compartido de un sitio web |
| destructive | ELIMINA PERMANENTEMENTE todos los datos analíticos recopilados de un sitio web, conservando el sitio web en sí |
| destructive | ELIMINA PERMANENTEMENTE un sitio web y todos los eventos registrados para él |
| read | Devuelve la etiqueta script HTML lista para pegar que envía datos a esta instancia de Umami para un sitio web determinado |
| read | Cifras principales de un sitio web durante un período: páginas vistas, visitantes, visitas, rebotes y tiempo total en el sitio |
| read | Páginas vistas y sesiones agrupadas en intervalos de tiempo, para representar el tráfico en gráficos |
| read | Principales valores de una dimensión, ordenados por número de visitantes — páginas más visitadas, referentes, países, navegadores, etc. |
| read | Número de visitantes activos en el sitio en los últimos minutos |
| read | Instantánea en tiempo real de la actividad actual: eventos recientes con país, URL, navegador y dispositivo, además de resúmenes por país, URL y referente |
| read | Totales de eventos personalizados rastreados durante un período: número de eventos, nombres de eventos únicos, visitantes y visitas, con una comparación con el período anterior |
| read | Sesiones de visitante individuales con navegador, sistema operativo, dispositivo, país y región |
| read | La secuencia ordenada de páginas vistas y eventos de una sesión de visitante: su recorrido por el sitio |
| read | Desglose del tráfico por parámetros UTM: fuente, medio, campaña, término y contenido |
| read | Embudo de conversión paso a paso |
| read | Retención de cohortes: de los visitantes vistos por primera vez en un día determinado, cuántos regresaron en cada uno de los días posteriores |
| read | Rutas ordenadas más comunes que los visitantes recorren por el sitio, como secuencias de páginas con un recuento para cada una |
| read | Progreso hacia un único objetivo: cuántos visitantes alcanzan una ruta o evento personalizado determinado |
| read | Ingresos a lo largo del tiempo procedentes de eventos con una propiedad de ingresos, desglosados por país, región, referente y canal |
| read | Atribuye las conversiones a los canales de adquisición — referente, anuncios de pago y parámetros UTM — según un modelo de primer clic o de último clic |
| admin | Lista las cuentas de usuario de Umami con sus roles |
| admin | Crea una cuenta de usuario de Umami |
| destructive | ELIMINA PERMANENTEMENTE una cuenta de usuario y los sitios web que posee |
| read | Lista los equipos y sus miembros |
| write | Crea un equipo para que los sitios web puedan compartirse entre usuarios |
| read | Verifica que este servidor MCP puede acceder a la instancia de Umami configurada e informa con qué cuenta está autenticado, además del modo de permisos en el que se ejecuta el servidor |
Rangos de tiempo
Todas las herramientas de analítica aceptan una abreviatura period — 24h, 7d, 30d, 12m, today, yesterday — en lugar de milisegundos epoch. Los modelos son fiables cuando se trata de «últimos 30 días» y poco fiables con la aritmética de marcas de tiempo; un epoch mal calculado devuelve datos de la ventana equivocada sin dar error. Los startAt/endAt explícitos en milisegundos epoch siguen funcionando y tienen prioridad.
Configuración
Consulta .env.example para ver todas las opciones. Lo esencial:
Variable | Por defecto | Propósito |
| obligatorio | Tu instancia de Umami |
| Inicio de sesión para instancias autoalojadas | |
| Alternativa para Umami Cloud | |
|
|
|
|
| Desbloquea la eliminación y el restablecimiento |
|
|
|
|
| Dirección de enlace HTTP |
|
| Puerto HTTP |
| Ruta explícita a un archivo de credenciales |
Configuración recomendada
Crea una cuenta de Umami dedicada para el servidor MCP en lugar de reutilizar tu inicio de sesión de administrador, y dale acceso únicamente a los sitios web que necesite. De este modo, si la credencial llega a exponerse, el radio de explosión será una cuenta de bot que puedes eliminar, no tu administrador.
Compatibilidad
Verificado con Umami 3.3.1 (autoalojado, PostgreSQL). Umami Cloud funciona mediante UMAMI_API_KEY. Umami v2 no es compatible: los tipos de métricas renombrados anteriormente implican que v2 y v3 necesitan clientes distintos, y este apunta a v3.
Desarrollo
npm install
npm run build
npm test # unit tests, no network requiredtest/e2e.mjs y test/write-e2e.mjs ejecutan el servidor compilado a través de un cliente MCP real contra una instancia en vivo. La prueba de escritura crea un sitio web desechable en un dominio .invalid y lo elimina de nuevo; apúntala a una instancia que no sea de producción.
Contribuciones
Las issues y las pull requests son bienvenidas. Umami v3 expone alrededor de 127 rutas de API y este servidor cubre las más útiles —la reproducción de sesiones, los mapas de calor, los píxeles, el seguimiento de enlaces, los paneles y los segmentos siguen sin mapearse—. Si añades herramientas, sé honesto con el nivel y las marcas destructive, porque todo el modelo de seguridad se sustenta en ellos.
Si el equipo de Umami quisiera adoptar esto, hacer un fork o subirlo al upstream, por favor abre una issue; ese es el resultado para el que se construyó.
Licencia
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