Auth0 User Monitor MCP Server

Auth0 User Monitor MCP Server

Enables monitoring Auth0 users by collecting summaries, storing reports in SQLite, and auto-blocking suspicious admins, all through MCP tools without an LLM.

Category
访问服务器

README

День 18 — Планировщик и фоновые задачи (Auth0 user-monitor)

Отдельный MCP-сервер БЕЗ LLM (чистый код), который работает 24/7: по расписанию (раз в 10 минут) собирает сводку по пользователям тенанта Auth0, кладёт отчёт в SQLite и авто-блокирует подозрительных админов. Сводка отдаётся по запросу мгновенно из БД. Плюс набор скриптов, моделирующих жизненный цикл пользователей (создание → роли/доступ → активность → блокировка → удаление).

Что внутри

Файл Роль
server.py MCP-сервер (без LLM) — tools + фоновый планировщик (stdio / --http).
scheduler.py Фоновый поток: раз в N сек собирает сводку, авто-блокирует подозрительных, пишет в БД.
collector.py Сбор сводки из РЕАЛЬНОГО Auth0 (users, roles, last_login, fp-логи, доступ к приложениям).
summary_store.py SQLite-хранилище отчётов.
simulate.py / simlib.py Скрипты моделирования жизненного цикла пользователей (запускаются вручную).
client.py Минимальный MCP-клиент для проверки.
auth0_client.py / config.py / logutil.py Транспорт к Auth0 (с retry на 429, полные HTTP-логи, маскирование секретов).

MCP-инструменты (без LLM)

Tool Что делает
get_user_summary Последний отчёт из БД (собран по расписанию) — мгновенно, без обращения к Auth0.
collect_now Собрать свежий отчёт сейчас, сохранить, вернуть (заодно авто-блок подозрительных).
block_suspicious_users Найти админов с ≥ порога неудачных входов и заблокировать; вернуть id.
list_reports История отчётов (время + итоги).
set_schedule Сменить период сбора (сек) и/или порог подозрительности. Сохраняется, действует сразу.

Сводка по пользователю: email, статус (blocked), last_login, logins_count, роли, признак admin, доступ к приложениям (apps), число неудачных входов (failed_logins), флаг suspicious.

Подозрительный = admin-роль И ≥ AUTH0_SUSPICIOUS_THRESHOLD (по умолч. 5) неудачных входов И не заблокирован. Порог и интервал — через env.

Как это «по-настоящему» (анализ осуществимости)

Всё, что можно — реально в тенанте; то, что Auth0 «из коробки» не даёт — решено явно:

Требование Реализация
Создание / отключение (blocked) / удаление пользователей ✅ напрямую Management API
Роли (выдача/отзыв) POST/DELETE /users/{id}/roles
last_login (когда логинился) Реальные входы через ROPG (password-realm grant) → Auth0 проставляет настоящий last_login/logins_count
«Неудачные входы с неправильным паролем» Реальные fp-логи от ROPG с неверным паролем; коллектор считает их из GET /logs?q=type:fp
«Доступ к приложениям» В Auth0 нет прямой связи user→app; моделируется списком в app_metadata.sim.apps (+ реальные роли)
Низкий rate-limit dev-тенанта Retry на 429 с backoff (Retry-After / X-RateLimit-Reset)
Search-индекс q= отстаёт от создания Списки пользователей берём через обычный GET /users (консистентно), не через q=

Для ROPG скрипт setup создаёт изолированные удаляемые ресурсы: отдельное regular-web приложение day18-simulator (с password-realm grant) и отдельную БД-коннекшн day18-sim-db (включены и симулятор, и M2M-клиент). cleanup всё удаляет. Секрет симулятора лежит в .sim_state.json (в .gitignore).

Запуск

pip install -r requirements.txt
cp .env.example .env        # AUTH0_DOMAIN / CLIENT_ID / CLIENT_SECRET

1. Сервер 24/7 (отдельный процесс):

python3 server.py --http                 # http://127.0.0.1:8766/mcp, планировщик внутри
# короткий интервал для проверки:
AUTH0_SUMMARY_INTERVAL=60 python3 server.py --http

2. Запросы (другой терминал):

python3 client.py --http --call get_user_summary
python3 client.py --http --call collect_now
python3 client.py --http --call block_suspicious_users

3. Смоделировать «видимость» (создаёт реальные демо-объекты в тенанте):

python3 simulate.py scenario     # users + роли + доступ + реальные входы + блокировка
python3 simulate.py list
python3 simulate.py cleanup       # удалить всё: users + connection + app + role

scenario создаёт 6 пользователей: 2 админа (day18-admin1/2) и 4 обычных; выдаёт роли/доступ; делает реальные входы; day18-admin2 получает 6 неудачных входов (станет подозрительным → сервер заблокирует), day18-user3 тоже 6 неудачных, но он НЕ админ → НЕ блокируется; day18-user4 отключается.

Переменные окружения

Env По умолч. Назначение
AUTH0_SUMMARY_INTERVAL 600 Период сбора (сек).
AUTH0_SUSPICIOUS_THRESHOLD 5 Порог неудачных входов для подозрительного админа.
DAY18_DB day18.db Файл SQLite с отчётами.

Агент (день 18): чат + панель инструментов

Лёгкий LLM-агент, подключённый ТОЛЬКО к монитору дня 18 (без старого Auth0 98-инструментного MCP). Интерфейс — только чат и описание инструментов сервера.

Файл Роль
web.py Минимальный веб: чат + панель «🧰 Инструменты MCP-сервера».
chat_agent.py Простой агент: диалог + function-calling по тулзам монитора (без этапов/инвариантов/памяти).
mcp_client.py MCP-клиент/мост к монитору (HTTP по URL или stdio).
llm_client.py Транспорт к DeepSeek (function-calling).
# 1) монитор (24/7) в одном терминале:
python3 server.py --http
# 2) агент-чат в другом:
MONITOR_URL=http://127.0.0.1:8766/mcp uvicorn web:app --reload   # http://127.0.0.1:8000

Примеры запросов в чате: «покажи сводку», «собери сейчас», «заблокируй подозрительных», «меняй расписание на 5 минут». Агент сам вызывает нужный инструмент монитора; под ответом видно 🔧 какой тул был вызван.

Сам MCP-сервер по-прежнему без LLM. LLM использует только агент.

Архитектура (24/7)

                       ┌─ scheduler (поток, раз в N сек) ─┐
client / агент ─MCP─▶ server.py ─▶ collector ─HTTPS─▶ Auth0 Mgmt API
                          │            ├─ users + roles + last_login
                          │            ├─ logs (type:fp) → failed_logins
                          │            └─ auto-block (admin + ≥5) → PATCH blocked
                          ▼
                    summary_store (SQLite)  ◀── get_user_summary читает отсюда

Сервер не использует LLM. Скрипты симуляции — отдельно, их запускают вручную.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选