# io.github.mikusnuz/umami (npm · @mikusnuz/umami-mcp)

MCP server for Umami Analytics API v2 — websites, stats, events, reports, and realtime

- Trust score: 70/100 (medium)
- Change this week: +17
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@mikusnuz/umami-mcp`: 70/100 (this document), [markdown](https://verifymcp.io/servers/mikusnuz-umami/mikusnuz-umami-mcp.md), [page](https://verifymcp.io/servers/mikusnuz-umami/mikusnuz-umami-mcp)

## Channel facts

- Registry: `npm`
- Package: `@mikusnuz/umami-mcp`
- Version: `1.2.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 136 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 82/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 3599 tokens (~52/item across 68 items; 66 tools + 2 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add mikusnuz-umami -- npx -y @mikusnuz/umami-mcp
```

### Codex

```bash
codex mcp add mikusnuz-umami -- npx -y @mikusnuz/umami-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mikusnuz-umami": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@mikusnuz/umami-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add mikusnuz-umami --command npx --arg -y --arg @mikusnuz/umami-mcp
```

### Hermes

```yaml
mcp_servers:
  mikusnuz-umami:
    command: "npx"
    args: ["-y", "@mikusnuz/umami-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "mikusnuz-umami": {
      "command": "npx",
      "args": [
        "-y",
        "@mikusnuz/umami-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 70, +3)

- [functional improvement] Stability: unverified → 0.23

### 2026-08-02 (score 67, +41)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional regression] Security disclosure: fail → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional improvement] Schema quality: unverified → good
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional] Licence: MIT

### 2026-07-31 (score 26, −27)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 53, +27)

- [functional regression] Dependency health: partial → unverified
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] Tool coverage: unverified → 100

### 2026-07-28 (score 26, −27)

- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional improvement] Dependency health: unverified → partial

### 2026-07-27 (score 53)

First indexed and scored.

## MCP tools (66)

### `list_websites` (~77 tokens)

List all websites tracked in Umami

Input parameters:

- `orderBy` (string): Field to order by (e.g. 'name', 'domain')
- `page` (number): Page number (1-based)
- `pageSize` (number): Results per page (default 10)
- `query` (string): Search query to filter websites

### `get_website` (~28 tokens)

Get details of a specific website by ID

Input parameters:

- `websiteId` (string, required): Website UUID

### `create_website` (~61 tokens)

Create a new website to track in Umami

Input parameters:

- `domain` (string, required): Website domain (e.g. 'example.com')
- `name` (string, required): Display name for the website
- `shareId` (string): Unique share ID for public access

### `update_website` (~61 tokens)

Update an existing website's configuration

Input parameters:

- `domain` (string): New domain
- `name` (string): New display name
- `shareId` (string): Share ID (set to null to remove)
- `websiteId` (string, required): Website UUID

### `delete_website` (~28 tokens)

Delete a website from Umami

Input parameters:

- `websiteId` (string, required): Website UUID to delete

### `get_active_visitors` (~31 tokens)

Get the number of currently active visitors on a website

Input parameters:

- `websiteId` (string, required): Website UUID

### `reset_website` (~34 tokens)

Reset a website by removing all its analytics data (irreversible)

Input parameters:

- `websiteId` (string, required): Website UUID to reset

### `transfer_website` (~43 tokens)

Transfer website ownership to another user

Input parameters:

- `userId` (string, required): Target user UUID to transfer ownership to
- `websiteId` (string, required): Website UUID to transfer

### `get_website_reports` (~29 tokens)

Get all reports associated with a specific website

Input parameters:

- `websiteId` (string, required): Website UUID

### `get_stats` (~85 tokens)

Get summary statistics for a website (pageviews, visitors, visits, bounces, totaltime)

Input parameters:

- `endAt` (number, required): End timestamp in milliseconds
- `referrer` (string): Filter by referrer
- `startAt` (number, required): Start timestamp in milliseconds
- `url` (string): Filter by URL path
- `websiteId` (string, required): Website UUID

### `get_pageviews` (~106 tokens)

Get pageview and session counts over time for a website

Input parameters:

- `endAt` (number, required): End timestamp in milliseconds
- `referrer` (string): Filter by referrer
- `startAt` (number, required): Start timestamp in milliseconds
- `timezone` (string): Timezone (e.g. 'Asia/Seoul')
- `unit` (string, required): Time grouping unit
- `url` (string): Filter by URL path
- `websiteId` (string, required): Website UUID

### `get_metrics` (~114 tokens)

Get aggregated metrics for a website (e.g. top pages, browsers, countries, devices, OS, events)

Input parameters:

- `endAt` (number, required): End timestamp in milliseconds
- `limit` (number): Max results to return (default 500)
- `referrer` (string): Filter by referrer
- `startAt` (number, required): Start timestamp in milliseconds
- `type` (string, required): Metric type to aggregate
- `url` (string): Filter by URL path
- `websiteId` (string, required): Website UUID

### `get_events` (~90 tokens)

Get event data for a website over time

Input parameters:

- `endAt` (number, required): End timestamp in milliseconds
- `startAt` (number, required): Start timestamp in milliseconds
- `timezone` (string): Timezone (e.g. 'Asia/Seoul')
- `unit` (string, required): Time grouping unit
- `url` (string): Filter by URL path
- `websiteId` (string, required): Website UUID

### `get_sessions` (~93 tokens)

Get session data for a website

Input parameters:

- `endAt` (number, required): End timestamp in milliseconds
- `orderBy` (string): Field to order by
- `page` (number): Page number (1-based)
- `pageSize` (number): Results per page
- `query` (string): Search query
- `startAt` (number, required): Start timestamp in milliseconds
- `websiteId` (string, required): Website UUID

### `get_daterange` (~31 tokens)

Get the date range of available data for a website

Input parameters:

- `websiteId` (string, required): Website UUID

### `get_event_series` (~108 tokens)

Get event metrics over time (event series data) for a website

Input parameters:

- `endAt` (number, required): End timestamp in milliseconds
- `eventName` (string): Filter by event name
- `startAt` (number, required): Start timestamp in milliseconds
- `timezone` (string): Timezone (e.g. 'Asia/Seoul')
- `unit` (string, required): Time grouping unit
- `url` (string): Filter by URL path
- `websiteId` (string, required): Website UUID

### `get_session_stats` (~82 tokens)

Get summarized session statistics for a website (total sessions, unique visitors, etc.)

Input parameters:

- `endAt` (number, required): End timestamp in milliseconds
- `referrer` (string): Filter by referrer
- `startAt` (number, required): Start timestamp in milliseconds
- `url` (string): Filter by URL path
- `websiteId` (string, required): Website UUID

### `get_sessions_weekly` (~52 tokens)

Get weekly session data for a website

Input parameters:

- `endAt` (number, required): End timestamp in milliseconds
- `startAt` (number, required): Start timestamp in milliseconds
- `websiteId` (string, required): Website UUID

### `get_session` (~35 tokens)

Get details of a specific session

Input parameters:

- `sessionId` (string, required): Session UUID
- `websiteId` (string, required): Website UUID

### `get_session_activity` (~43 tokens)

Get activity log for a specific session (pages visited, events fired)

Input parameters:

- `sessionId` (string, required): Session UUID
- `websiteId` (string, required): Website UUID

### `get_session_properties` (~38 tokens)

Get custom properties attached to a specific session

Input parameters:

- `sessionId` (string, required): Session UUID
- `websiteId` (string, required): Website UUID

### `get_session_data_properties` (~57 tokens)

Get session data property names and their data types for a website

Input parameters:

- `endAt` (number, required): End timestamp in milliseconds
- `startAt` (number, required): Start timestamp in milliseconds
- `websiteId` (string, required): Website UUID

### `get_session_data_values` (~72 tokens)

Get session data values (aggregated counts for session properties) for a website

Input parameters:

- `endAt` (number, required): End timestamp in milliseconds
- `propertyName` (string): Filter by property name
- `startAt` (number, required): Start timestamp in milliseconds
- `websiteId` (string, required): Website UUID

### `send_event` (~147 tokens)

Send a custom event or pageview to Umami (useful for server-side tracking)

Input parameters:

- `eventData` (object): Custom event data as key-value pairs
- `eventName` (string): Custom event name (omit for pageview)
- `hostname` (string, required): Hostname of the site (e.g. 'example.com')
- `language` (string): Browser language (e.g. 'en-US')
- `referrer` (string): Referrer URL
- `title` (string): Page title
- `url` (string, required): URL path (e.g. '/checkout')
- `websiteId` (string, required): Website UUID (used as the 'website' field in payload)

### `get_event_values` (~53 tokens)

Get event or session property values for a website

Input parameters:

- `endAt` (number, required): End timestamp in milliseconds
- `startAt` (number, required): Start timestamp in milliseconds
- `websiteId` (string, required): Website UUID

### `get_event_data_events` (~71 tokens)

Get event data events (custom event names and counts) for a website

Input parameters:

- `endAt` (number, required): End timestamp in milliseconds
- `eventName` (string): Filter by event name
- `startAt` (number, required): Start timestamp in milliseconds
- `websiteId` (string, required): Website UUID

### `get_event_data_fields` (~72 tokens)

Get event data fields (property keys and their data types) for a website

Input parameters:

- `endAt` (number, required): End timestamp in milliseconds
- `eventName` (string): Filter by event name
- `startAt` (number, required): Start timestamp in milliseconds
- `websiteId` (string, required): Website UUID

### `get_event_data_values` (~85 tokens)

Get event data values (aggregated counts for a specific property) for a website

Input parameters:

- `endAt` (number, required): End timestamp in milliseconds
- `eventName` (string): Filter by event name
- `propertyName` (string): Filter by property name
- `startAt` (number, required): Start timestamp in milliseconds
- `websiteId` (string, required): Website UUID

### `get_event_data_stats` (~68 tokens)

Get event data statistics (summary counts) for a website

Input parameters:

- `endAt` (number, required): End timestamp in milliseconds
- `eventName` (string): Filter by event name
- `startAt` (number, required): Start timestamp in milliseconds
- `websiteId` (string, required): Website UUID

### `batch_events` (~32 tokens)

Send multiple events or pageviews in a single batch request

Input parameters:

- `events` (array, required): Array of events to send

### `list_reports` (~48 tokens)

List all saved reports

Input parameters:

- `orderBy` (string): Field to order by
- `page` (number): Page number (1-based)
- `pageSize` (number): Results per page

### `get_report` (~26 tokens)

Get details of a specific saved report

Input parameters:

- `reportId` (string, required): Report UUID

### `create_report` (~65 tokens)

Create and save a new report

Input parameters:

- `description` (string): Report description
- `name` (string, required): Report name
- `parameters` (object): Report-specific parameters (JSON object)
- `type` (string, required): Report type
- `websiteId` (string, required): Website UUID

### `update_report` (~74 tokens)

Update an existing saved report

Input parameters:

- `description` (string): Report description
- `name` (string): Report name
- `parameters` (object): Report-specific parameters (JSON object)
- `reportId` (string, required): Report UUID
- `type` (string): Report type
- `websiteId` (string): Website UUID

### `delete_report` (~25 tokens)

Delete a saved report

Input parameters:

- `reportId` (string, required): Report UUID to delete

### `run_report` (~71 tokens)

Execute a report by type and get results (funnel, retention, utm, goals, insights, revenue, journey, attribution)

Input parameters:

- `parameters` (object, required): Report-specific parameters (varies by type)
- `type` (string, required): Report type to run
- `websiteId` (string, required): Website UUID

### `list_users` (~76 tokens)

List all users (admin only)

Input parameters:

- `orderBy` (string): Field to order by (e.g. 'username', 'createdAt')
- `page` (number): Page number (1-based)
- `pageSize` (number): Results per page (default 10)
- `query` (string): Search query to filter users

### `create_user` (~62 tokens)

Create a new user (admin only)

Input parameters:

- `password` (string, required): Password for the new user
- `role` (string): User role: 'admin' or 'user' (default: 'user')
- `username` (string, required): Username for the new user

### `get_user` (~28 tokens)

Get details of a specific user (admin only)

Input parameters:

- `userId` (string, required): User UUID

### `update_user` (~65 tokens)

Update a user's username, password, or role (admin only)

Input parameters:

- `password` (string): New password
- `role` (string): New role: 'admin' or 'user'
- `userId` (string, required): User UUID
- `username` (string): New username

### `delete_user` (~27 tokens)

Delete a user (admin only)

Input parameters:

- `userId` (string, required): User UUID to delete

### `get_user_websites` (~69 tokens)

Get the list of websites a user has access to (admin only)

Input parameters:

- `page` (number): Page number (1-based)
- `pageSize` (number): Results per page
- `query` (string): Search query to filter websites
- `userId` (string, required): User UUID

### `get_user_usage` (~54 tokens)

Get usage statistics for a specific user (admin only)

Input parameters:

- `endAt` (number): End timestamp in milliseconds
- `startAt` (number): Start timestamp in milliseconds
- `userId` (string, required): User UUID

### `get_user_teams` (~68 tokens)

Get the list of teams a user belongs to (admin only)

Input parameters:

- `page` (number): Page number (1-based)
- `pageSize` (number): Results per page
- `query` (string): Search query to filter teams
- `userId` (string, required): User UUID

### `list_teams` (~74 tokens)

List all teams

Input parameters:

- `orderBy` (string): Field to order by (e.g. 'name', 'createdAt')
- `page` (number): Page number (1-based)
- `pageSize` (number): Results per page (default 10)
- `query` (string): Search query to filter teams

### `create_team` (~22 tokens)

Create a new team

Input parameters:

- `name` (string, required): Team name

### `get_team` (~25 tokens)

Get details of a specific team

Input parameters:

- `teamId` (string, required): Team UUID

### `update_team` (~33 tokens)

Update a team's name

Input parameters:

- `name` (string, required): New team name
- `teamId` (string, required): Team UUID

### `delete_team` (~24 tokens)

Delete a team

Input parameters:

- `teamId` (string, required): Team UUID to delete

### `join_team` (~29 tokens)

Join a team using an access code

Input parameters:

- `accessCode` (string, required): Team access/invite code

### `list_team_users` (~61 tokens)

List all members of a team

Input parameters:

- `page` (number): Page number (1-based)
- `pageSize` (number): Results per page
- `query` (string): Search query to filter members
- `teamId` (string, required): Team UUID

### `add_team_user` (~58 tokens)

Add a user to a team

Input parameters:

- `role` (string, required): Role in the team: 'team-owner' or 'team-member'
- `teamId` (string, required): Team UUID
- `userId` (string, required): User UUID to add

### `update_team_user` (~54 tokens)

Update a team member's role

Input parameters:

- `role` (string, required): New role: 'team-owner' or 'team-member'
- `teamId` (string, required): Team UUID
- `userId` (string, required): User UUID

### `get_team_user` (~37 tokens)

Get details of a specific team member

Input parameters:

- `teamId` (string, required): Team UUID
- `userId` (string, required): User UUID

### `remove_team_user` (~38 tokens)

Remove a user from a team

Input parameters:

- `teamId` (string, required): Team UUID
- `userId` (string, required): User UUID to remove

### `list_team_websites` (~64 tokens)

List all websites that belong to a team

Input parameters:

- `page` (number): Page number (1-based)
- `pageSize` (number): Results per page
- `query` (string): Search query to filter websites
- `teamId` (string, required): Team UUID

### `add_team_website` (~42 tokens)

Add a website to a team

Input parameters:

- `teamId` (string, required): Team UUID
- `websiteId` (string, required): Website UUID to add to the team

### `remove_team_website` (~42 tokens)

Remove a website from a team

Input parameters:

- `teamId` (string, required): Team UUID
- `websiteId` (string, required): Website UUID to remove from the team

### `get_realtime` (~48 tokens)

Get real-time data for a website (last 30 minutes). Returns current visitors, active URLs, referrers, countries, and events.

Input parameters:

- `websiteId` (string, required): Website UUID

### `get_me` (~16 tokens)

Get the currently authenticated user's profile information

### `get_my_websites` (~56 tokens)

Get the list of websites belonging to the current user

Input parameters:

- `page` (number): Page number (1-based)
- `pageSize` (number): Results per page
- `query` (string): Search query to filter websites

### `get_my_teams` (~56 tokens)

Get the list of teams the current user belongs to

Input parameters:

- `page` (number): Page number (1-based)
- `pageSize` (number): Results per page
- `query` (string): Search query to filter teams

### `update_my_password` (~35 tokens)

Update the current user's password

Input parameters:

- `currentPassword` (string, required): Current password
- `newPassword` (string, required): New password

### `verify_auth` (~16 tokens)

Verify the current authentication token is valid

### `get_share` (~43 tokens)

Get shared website data by share ID (public access, no auth required for the share itself)

Input parameters:

- `shareId` (string, required): The share ID of a publicly shared website

### `heartbeat` (~18 tokens)

Check if the Umami server is running and healthy

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/mikusnuz-umami/mikusnuz-umami-mcp#diagnostics

## Score history

- 2026-08-03: 70
- 2026-08-02: 67
- 2026-08-01: 26
- 2026-07-31: 26
- 2026-07-30: 53
- 2026-07-28: 26
- 2026-07-27: 53

## Links

- npm package: https://www.npmjs.com/package/@mikusnuz/umami-mcp
- Socket report: https://socket.dev/npm/package/@mikusnuz/umami-mcp
- Repository: https://github.com/mikusnuz/umami-mcp
- Changelog RSS feed: https://verifymcp.io/servers/mikusnuz-umami/mikusnuz-umami-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/mikusnuz-umami/mikusnuz-umami-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/mikusnuz-umami/mikusnuz-umami-mcp
