Skip to main content
Glama
Asif2BD

Umami MCP Server

by Asif2BD

Umami MCP Server

A Model Context Protocol server for Umami Analytics. Ask Claude, Cursor or any MCP client about your traffic — and let it create and manage websites — while your credentials stay on your own machine.

License: MIT Node Umami

"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."

Зачем это существует

У Umami нет официального MCP-сервера. Существует несколько серверов от сообщества, и если вам нужен просто широкий охват API, сначала стоит посмотреть на 0xtlt/umami-mcp — он оборачивает больше API, чем этот. Некоторые старые серверы (jakeyShakey, mikusnuz, mittwald, Macawls) были написаны под API v2 и ломаются на современном инстансе, потому что v3 переименовала вещи без алиасов:

Umami v2

Umami v3

Самые посещаемые страницы

/metrics?type=url

/metrics?type=path

Имена хостов

/metrics?type=host

/metrics?type=hostname

UTM-данные

/metrics?type=utm_source

POST /api/reports/utm

Воронки, удержание, пути, атрибуция, выручка

POST /api/reports/*

Этот сервер существует для двух вещей, которые другие не делают:

1. Полное проверенное покрытие отчётов v3. Все семь типов отчётов v3 — воронка, удержание, путь, цель, выручка, атрибуция и UTM — были опробованы на живом инстансе Umami 3.3.1. Структуру отчёта легко испортить: даты помещаются в parameters как ISO-8601 строки, а не в filters и не как миллисекунды эпохи, которые использует остальной API. Атрибуция принимает first-click / last-click, а не варианты в camelCase, которые вы бы предположили.

2. Модель возможностей, а не булево значение. См. ниже.

Related MCP server: Umami MCP Server

Модель безопасности

MCP-сервер аналитики хранит учётные данные, которые могут прочитать каждую сессию посетителя, когда-либо записанную вами, — и, если вы позволите, удалить их все. Дизайн следует из этого.

Ваши учётные данные никогда не покидают ваше окружение. Конфигурация читается только из окружения процесса. Никакой телеметрии, никаких звонков домой и никакого размещённого ретранслятора. Единственный хост, с которым этот сервер когда-либо связывается, — это UMAMI_URL, который вы задали. Если вы размещаете его самостоятельно, ничто из вашей аналитики никогда не попадает к третьим лицам — включая автора этого программного обеспечения.

Остерегайтесь любого Umami MCP, который предлагает размещённую конечную точку, на которую вы указываете свой инстанс. Самостоятельно размещённый Umami не имеет API-ключей, поэтому «удобный» хостинг означает отправку вашего пароля администратора на чужой сервер.

Наименьшие привилегии по умолчанию. Сервер запускается в режиме read. Расширение прав — это обдуманное действие:

Режим

Добавляет

read (по умолчанию)

Аналитика, отчёты, список веб-сайтов

write

Создание и обновление веб-сайтов и команд

admin

Управление пользователями

+ UMAMI_MCP_ALLOW_DESTRUCTIVE=true

Удаление веб-сайта, сброс данных, удаление пользователя

Скрытые инструменты вообще не регистрируются, поэтому они никогда не появляются в списке инструментов модели. Именно это отличает данный подход от флага READONLY=true: инструмент, который никогда не анонсировался, не может быть вызван инструкцией, внедрённой через промпт и спрятанной, скажем, в строке реферера или заголовке страницы внутри ваших собственных данных аналитики. Не существует проверки во время выполнения, которую можно забыть или обойти, потому что нет инструмента.

Разрушительные действия требуют текстового подтверждения, сверяемого с реальностью. umami_delete_website принимает аргумент confirmDomain, получает актуальную запись и отказывается, если они не совпадают. Модель, которая обращается не к тому UUID веб-сайта, получает ошибку, а не стёртый набор данных.

Учётные данные не попадают в конфиг клиента. Вместо требования вашего пароля внутри ~/.claude.json или mcp.json, сервер читает его из файла, которым вы управляете, по пути ~/.config/umami-mcp/env, и предупреждает, если этот файл доступен для чтения другим пользователям. См. Учётные данные.

Секреты вычищаются из вывода. Вывод MCP попадает в модель и часто в расшифровку чата, которую невозможно взять назад. Пароли, bearer-токены и JWT удаляются из каждой ошибки и ответа, прежде чем покинуть процесс.

Не допускает утечки учётных данных по сети. Обычный HTTP к удалённому хосту отклоняется при запуске; он разрешён только для localhost при локальной разработке.

Установка

Три способа запуска. Самостоятельный хостинг — это вариант по умолчанию и рекомендуемый — размещённый инстанс существует, чтобы вы могли попробовать его за две минуты, ничего не клонируя.

Где запускается

Где хранятся учётные данные

Лучше всего для

Размещённый

asif.dev

Запечатаны в вашем токене, никогда не хранятся

Чтобы попробовать; Claude web и Cowork

Из исходников

Ваша машина

Файл, который можете прочитать только вы

Ежедневное использование в Claude Code

Docker

Ваш сервер

Ваш .env

Команды, постоянная работа

Если вы размещаете сервер самостоятельно и хотите использовать его в Claude web, запустите его с UMAMI_MCP_OAUTH=true за своим собственным доменом — тогда ничто ваше не коснётся чужой инфраструктуры.

1. Используйте размещённый инстанс (ничего устанавливать не нужно)

Добавьте пользовательский коннектор в Claude, указав:

https://umami-mcp.asif.dev/mcp

Вас попросят указать ваш собственный URL Umami и логин на экране согласия. См. Claude web, Cowork, and Claude Code on web о том, как обрабатываются учётные данные.

2. Из исходного кода

git clone https://github.com/Asif2BD/umami-mcp.git
cd umami-mcp
npm install && npm run build

Затем настройте учётные данные и зарегистрируйте его в вашем клиенте:

claude mcp add umami --scope user -- node "$PWD/dist/index.js"

Требуется Node 20 или новее.

3. Docker

git clone https://github.com/Asif2BD/umami-mcp.git
cd umami-mcp
cp .env.example .env    # then edit .env
docker compose up -d

npm: ещё не опубликован. Как только это произойдёт, npx -y @asif2bd/umami-mcp заменит шаг клонирования и сборки выше. А пока используйте исходники или Docker.

Учётные данные

У самостоятельно размещённого Umami нет API-ключей, поэтому учётные данные, которые хранит этот сервер, — это настоящий пароль от аккаунта. MCP-клиенты обычно ожидают, что он будет встроен в их JSON-конфиг — ~/.claude.json, mcp.json и тому подобное, — который широко доступен для чтения, попадает в issue и скриншоты, а некоторыми клиентами синхронизируется между машинами.

Поэтому этот сервер вместо этого читает учётные данные из файла, которым вы управляете. Создайте его один раз:

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/env

Сервер загружает его автоматически. При запуске он предупреждает, если файл доступен для чтения другим пользователям.

Порядок поиска — побеждает первый найденный файл, а настоящие переменные окружения всегда имеют приоритет над файлом, так что вы по-прежнему можете передавать настройки из конфига клиента, когда захотите:

  1. $UMAMI_MCP_ENV_FILE, если задан

  2. ~/.config/umami-mcp/env (или $XDG_CONFIG_HOME/umami-mcp/env)

  3. ./.env в рабочем каталоге

Подключение клиента

Claude Code

С указанным выше файлом учётных данных регистрация вообще не содержит секретов:

claude mcp add umami --scope user -- node ~/umami-mcp/dist/index.js

Используйте абсолютный путь к вашему клону. Если ваш Node находится под nvm, укажите также полный путь к интерпретатору, поскольку MCP-клиенты не загружают ваш shell-профиль:

claude mcp add umami --scope user -- ~/.nvm/versions/node/v22.22.0/bin/node ~/umami-mcp/dist/index.js

Claude Desktop / Cursor / VS Code

{
  "mcpServers": {
    "umami": {
      "command": "node",
      "args": ["/absolute/path/to/umami-mcp/dist/index.js"]
    }
  }
}

Если вы предпочитаете хранить всё в одном месте, переменные окружения по-прежнему работают и имеют приоритет над файлом:

{
  "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"
      }
    }
  }
}

Проверьте, что работает

Попросите вашего клиента выполнить umami_whoami. Он сообщает инстанс, аккаунт и режим разрешений — самый быстрый способ подтвердить подключение и увидеть, что серверу разрешено делать:

{
  "instance": "https://analytics.example.com",
  "authenticatedAs": "mcp-bot",
  "role": "admin",
  "serverMode": "read",
  "destructiveOperations": "disabled"
}

Затем попробуйте: «Список моих веб-сайтов Umami» или «Какими были мои самые посещаемые страницы на прошлой неделе?»

Claude web, Cowork, and Claude Code on web

Эти клиенты не могут запускать локальный процесс, поэтому им нужен публичный HTTPS MCP-сервер — а их интерфейс коннектора принимает только OAuth, без поля для статического bearer-токена или пользовательского заголовка.

Хостинг очевидным способом — с одним встроенным набором учётных данных Umami и без аутентификации — превращает URL в открытый прокси к этому Umami. Поэтому этот сервер вместо этого использует OAuth и делает это, не превращаясь в хранилище учётных данных.

Используйте размещённый инстанс

Добавьте пользовательский коннектор в Claude с этим URL:

https://umami-mcp.asif.dev/mcp

Claude регистрируется сам, отправляет вас на экран согласия и запрашивает ваш собственный URL Umami, имя пользователя и пароль. Ничто не передаётся другим пользователям хоста.

Разместите свой собственный

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 days

Сгенерируйте ключ один раз и сохраните его:

node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"

Задайте также UMAMI_URL, чтобы привязать каждого пользователя к одному инстансу, а не позволять им выбирать.

Как обрабатываются учётные данные

Экран согласия проверяет учётные данные на том инстансе Umami, который указал пользователь, а затем запечатывает их в токен доступа с помощью AES-256-GCM. Сервер не хранит ни таблицы сессий, ни учётных данных: каждый запрос расшифровывает токен, создаёт MCP-сервер в рамках этого одного пользователя, обслуживает вызов и отбрасывает его.

Честный компромисс: тот, кто владеет UMAMI_MCP_TOKEN_KEY, может расшифровать любой захваченный токен. Относитесь к нему как к самому чувствительному значению в развёртывании. Его ротация аннулирует каждый выпущенный токен — это и есть предусмотренный контроль радиуса поражения.

Разрушительные инструменты никогда не предоставляются через OAuth, независимо от того, какое разрешение выберет пользователь. Их защита с текстовым подтверждением предполагает локального оператора, который видит, что собирается удалить, а удалённому вызывающему это показать нельзя.

Запуск в качестве обычного HTTP-сервиса

Установите UMAMI_MCP_TRANSPORT=http без UMAMI_MCP_OAUTH для однотенантной конечной точки /mcp, плюс /health.

В этом режиме у сервера нет собственной аутентификации. Любой, кто может дотянуться до порта, может использовать ваши учётные данные Umami. Держите его на loopback и туннелируйте к нему:

ssh -N -L 3334:127.0.0.1:3334 you@your-server
claude mcp add --transport http umami http://127.0.0.1:3334/mcp

Сервер предупреждает при запуске, если он привязан к чему-либо, кроме loopback.

Инструменты

Инструмент

Требуется

Описание

umami_list_websites

чтение

Список сайтов, отслеживаемых этим экземпляром Umami, с их UUID

umami_get_website

чтение

Получение одного сайта по UUID, включая его домен, владельца и дату создания

umami_create_website

запись

Регистрация нового сайта для отслеживания и возврат его UUID — именно это значение указывается в атрибуте data-website-id скрипта отслеживания Umami

umami_update_website

запись

Изменение названия сайта, домена или общего slug

umami_reset_website

необратимое действие

ПОЛНОЕ УДАЛЕНИЕ всех собранных аналитических данных сайта с сохранением самого сайта

umami_delete_website

необратимое действие

ПОЛНОЕ УДАЛЕНИЕ сайта и всех когда-либо зарегистрированных для него событий

umami_get_tracking_snippet

чтение

Возврат готового к вставке HTML-тега script, который отправляет данные в этот экземпляр Umami для заданного сайта

umami_get_stats

чтение

Итоговые показатели сайта за период: просмотры страниц, посетители, визиты, отказы и общее время на сайте

umami_get_pageviews

чтение

Просмотры страниц и сеансы, сгруппированные по времени, для построения графиков трафика

umami_get_metrics

чтение

Лучшие значения по одному измерению, отсортированные по числу посетителей — топ страниц, рефереров, стран, браузеров и т. д.

umami_get_active_visitors

чтение

Количество посетителей, активных на сайте за последние несколько минут

umami_get_realtime

чтение

Живой снимок текущей активности: последние события со страной, URL, браузером и устройством, а также сводки по странам, URL и реферерам

umami_get_event_stats

чтение

Итоги по пользовательским отслеживаемым событиям за период: количество событий, уникальные названия событий, посетители и визиты, со сравнением с предыдущим периодом

umami_list_sessions

чтение

Отдельные сеансы посетителей с браузером, ОС, устройством, страной и регионом

umami_get_session_activity

чтение

Упорядоченная последовательность просмотров страниц и событий одного сеанса посетителя — их путь по сайту

umami_report_utm

чтение

Разбивка трафика по UTM-параметрам: source, medium, campaign, term и content

umami_report_funnel

чтение

Пошаговая воронка конверсии

umami_report_retention

чтение

Удержание когорты: из посетителей, впервые увиденных в определённый день, сколько вернулось в каждый последующий день

umami_report_journey

чтение

Наиболее частые упорядоченные пути посетителей по сайту в виде последовательностей страниц с количеством для каждой

umami_report_goal

чтение

Прогресс в достижении одной цели: сколько посетителей прошли по заданному пути или совершили пользовательское событие

umami_report_revenue

чтение

Выручка за период по событиям со свойством revenue, с разбивкой по стране, региону, рефереру и каналу

umami_report_attribution

чтение

Приписывает конверсии каналам привлечения — реферерам, платной рекламе и UTM-параметрам — по модели первого или последнего клика

umami_list_users

администрирование

Список учётных записей пользователей Umami с их ролями

umami_create_user

администрирование

Создание учётной записи пользователя Umami

umami_delete_user

необратимое действие

ПОЛНОЕ УДАЛЕНИЕ учётной записи пользователя и принадлежащих ему сайтов

umami_list_teams

чтение

Список команд и их участников

umami_create_team

запись

Создание команды, чтобы сайтами можно было делиться между пользователями

umami_whoami

чтение

Проверка, что этот MCP-сервер может связаться с настроенным экземпляром Umami, а также вывод сведений о том, под какой учётной записью он аутентифицирован, и о режиме разрешений, в котором работает сервер

Диапазоны времени

Каждый аналитический инструмент принимает сокращённую форму period24h, 7d, 30d, 12m, today, yesterday — вместо миллисекунд с начала эпохи Unix. Модели надёжно справляются с запросом «последние 30 дней», но ненадёжны в арифметике меток времени, а ошибочно вычисленная эпоха вернёт данные за неверный период без ошибки. Явные startAt/endAt в миллисекундах с начала эпохи Unix по-прежнему работают и имеют приоритет.

Конфигурация

Все параметры перечислены в .env.example. Основные:

Переменная

По умолчанию

Назначение

UMAMI_URL

обязательно

Ваш экземпляр Umami

UMAMI_USERNAME / UMAMI_PASSWORD

Логин для self-hosted

UMAMI_API_KEY

Альтернатива для Umami Cloud

UMAMI_MCP_MODE

read

read / write / admin

UMAMI_MCP_ALLOW_DESTRUCTIVE

false

Разблокировать удаление и сброс

UMAMI_MCP_TRANSPORT

stdio

stdio или http

UMAMI_MCP_HOST

127.0.0.1

Адрес привязки HTTP

UMAMI_MCP_PORT

3334

HTTP-порт

UMAMI_MCP_ENV_FILE

Явный путь к файлу учётных данных

Рекомендуемая настройка

Создайте для MCP-сервера отдельную учётную запись Umami, а не используйте повторно свой административный логин, и предоставьте ей только те сайты, которые нужны. Тогда даже при раскрытии учётных данных зона поражения ограничится одним бот-аккаунтом, который можно удалить, — а не вашим администратором.

Совместимость

Проверено на Umami 3.3.1 (self-hosted, PostgreSQL). Umami Cloud работает через UMAMI_API_KEY. Umami v2 не поддерживается: переименованные выше типы метрик означают, что для v2 и v3 нужны разные клиенты, а этот ориентирован на v3.

Разработка

npm install
npm run build
npm test          # unit tests, no network required

test/e2e.mjs и test/write-e2e.mjs управляют собранным сервером через реальный MCP-клиент, подключаясь к живой инстанции. Write-тест создаёт временный сайт на домене .invalid, а затем удаляет его; направляйте его на непродакшн-инстанцию.

Вклад в проект

Приветствуются issues и pull request'ы. Umami v3 предоставляет около 127 API-маршрутов, и этот сервер покрывает самые полезные из них — воспроизведение сеансов, тепловые карты, пиксели, отслеживание ссылок, доски и сегменты пока не реализованы. Добавляя инструменты, честно указывайте уровень и флаг destructive, поскольку на них строится вся модель безопасности.

Если команда Umami захочет перенять, форкнуть или включить это в свой проект, пожалуйста, откройте issue — именно для этого он и создавался.

Лицензия

MIT © M Asif Rahman

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    F
    maintenance
    Enables 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.
    5
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for Umami Analytics that provides read-only tools to query website stats, events, sessions, reports, and more, enabling natural language analytics queries.
    26
    2
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    A read-only MCP server for Umami analytics, enabling natural language queries of website stats, traffic trends, events, sessions, and analytics reports.
    13
    12
    1
    Elastic 2.0

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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