entraadm-mcp
entraadm-mcp
Английский | 日本語
MCP-сервер для разбора журналов входа и аудита Microsoft Entra ID. Только чтение.
Почему это вместо официального Microsoft MCP Server for Enterprise
Microsoft поставляет официальный MCP Server for Enterprise для данных Entra ID. Он хорошо подходит для интерактивного администратора за клавиатурой и не подходит для автоматического бота разбора журналов:
Только делегированная аутентификация. Официальный сервер не поддерживает аутентификацию только для приложения (client credentials), поэтому он не может работать без головы за служебной учётной записью. entraadm-mcp создан для этого случая: только приложение в продакшене, с делегированным (
az login) запасным вариантом для локальной разработки.Универсальный инструмент запросов к Graph, а не фиксированный набор инструментов. Официальный сервер предоставляет один инструмент, который позволяет модели выполнять произвольные вызовы
GET/обнаружения схемы к Microsoft Graph. Это гибко для человека, но неудобно для размещения за списком разрешений для автоматического профиля разбора. entraadm-mcp вместо этого предоставляет семь фиксированных инструментов только для чтения.Нет перевода AADSTS. Сбои входа возвращаются в виде необработанных кодов ошибок; для разбора всё ещё нужна справочная таблица. entraadm-mcp аннотирует каждый сбой входа с указанием фактического значения кода.
Нет агрегации между запросами. Сам Microsoft Graph не может фильтровать входы по
status/errorCodeна стороне сервера и не имеет встроенного представления для перебора паролей.signin_failure_statsагрегирует на стороне клиента и помечает IP-адреса с неудачными входами против многих разных пользователей — это тот паттерн, который умная блокировка Entra для каждой учётной записи сама по себе не ловит.
Related MCP server: Microsoft Graph MCP Server
Инструменты
Инструмент | Что он отвечает |
| Доступен ли Graph, и может ли эта учётная запись читать журналы входа? |
| Включена ли эта учётная запись, синхронизирована ли она из локальной среды, и какие у неё лицензии? |
| Почему вход этого пользователя не удался (или удался), с переводом кода AADSTS? |
| Агрегация сбоев по всему тенанту: основные коды ошибок, пользователи, приложения, исходные IP-адреса и подозреваемые в переборе паролей |
| Кто что изменил в каталоге (блокировка/разблокировка, изменения атрибутов) и когда? |
| Действительно ли MFA зарегистрирован для этой учётной записи? |
| Сводка за один вызов, объединяющая |
Каждый инструмент доступен только для чтения. Операции записи (разблокировка учётной записи, сброс пароля, отзыв сеанса) выходят за рамки этого сервера.
Модель аутентификации
Два режима аутентификации, выбираемые в зависимости от того, какие переменные окружения установлены:
Режим | Когда | Переменные окружения |
app-only | Все три установлены |
|
azure-cli | Ни одна не установлена | (использует текущий сеанс |
Установка одной или двух из трёх переменных app-only является ошибкой конфигурации, и сервер отказывается запускаться, а не молча переключается на другой режим аутентификации, чем предполагалось.
Требуемые разрешения Graph
Инструмент(ы) | Разрешение | Примечания |
|
| |
|
| |
|
| Только для приложения; недоступно при делегированной ( |
Отсутствующее разрешение никогда не приводит к сбою инструмента. Оно понижает этот инструмент (или это одно поле) до {"error": "...", "missing_permission": "..."} с понятным объяснением того, какая роль или разрешение необходимы, поэтому health_check и все остальные инструменты остаются работоспособными даже до предоставления полных разрешений.
Настройка
uv tool install entraadm-mcp
# or
pip install entraadm-mcpКонфигурация
Установите три переменные app-only для продакшена/неавтоматического использования:
export ENTRAADM_TENANT_ID=00000000-0000-0000-0000-000000000000
export ENTRAADM_CLIENT_ID=00000000-0000-0000-0000-000000000000
export ENTRAADM_CLIENT_SECRET=your-client-secretИли оставьте все три неустановленными и сначала выполните az login для локальной разработки.
Необязательно:
# Default page cap for the log-scanning tools (1-50, default 5).
export ENTRAADM_MAX_PAGES_DEFAULT=5Использование
Claude Code (плагин)
/plugin marketplace add shigechika/entraadm-mcp
/plugin install entraadm-mcp@entraadm-mcpClaude Code (вручную)
Добавьте в .mcp.json:
{
"mcpServers": {
"entraadm-mcp": {
"type": "stdio",
"command": "uvx",
"args": ["entraadm-mcp"],
"env": {
"ENTRAADM_TENANT_ID": "${ENTRAADM_TENANT_ID:-}",
"ENTRAADM_CLIENT_ID": "${ENTRAADM_CLIENT_ID:-}",
"ENTRAADM_CLIENT_SECRET": "${ENTRAADM_CLIENT_SECRET:-}"
}
}
}
}Прямое выполнение
entraadm-mcpПараметры CLI
Параметр | Эффект |
| Вывести версию и выйти |
| Разрешить аутентификацию, проверить доступность Graph и доступ к журналам входа, вывести отчёт, выйти с кодом 0 (или 1 при ошибке конфигурации) |
Примечания
Контракт покрытия. Каждый результат, который проходит по разбитой на страницы коллекции Graph, содержит логическое значение
capped, когда его окно не было полностью просканировано — частичное сканирование никогда не выдаётся за исчерпывающее.found: false— это не ошибка.get_userиget_user_auth_methodsотвечают на несуществующую учётную запись с{"found": false, ...}, а не с ключомerror— опечатка в userPrincipalName никогда не должна выглядеть как сбой этого сервера.Хранение. Entra ID P1 хранит журналы входа и аудита каталога в течение 30 дней. Окно за пределами этого срока возвращает пустой результат, а не ошибку.
Разработка
uv sync --dev
uv run pytest -v
uv run ruff check .
uv run ruff format --check .Живой смоук-тест
uv run python scripts/smoke_test.pyТолько чтение, без вывода полезных данных (только имена инструментов/статусы/количество строк) и ограничено (небольшие явные окна/лимиты страниц) — здесь ничего не записывается в тенант и не сканируется более чем за день журналов.
Релиз
Этот репозиторий использует release-please на основе Conventional Commits. Объедините PR с feat:/fix: в main, и release-please откроет (или обновит) PR релиза; объединение этого PR создаёт тег релиза и запускает конвейер публикации (PyPI, MCP Registry).
Лицензия
MIT
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
- -licenseNot gradedqualityNot gradedmaintenanceProvides secure access to Microsoft Entra ID (Azure AD) resources including users, devices, and applications through Microsoft Graph API. Enables querying organizational data with comprehensive audit logging to Azure Blob Storage.
- AlicenseNot gradedqualityDmaintenanceProvides read-only access to Microsoft 365 services including SharePoint, OneDrive, Outlook, Teams, and Calendar through the Microsoft Graph API, enabling users to search, browse, and retrieve content across their M365 suite.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to query Microsoft Entra data using natural language, converting requests into Microsoft Graph API calls for read-only enterprise IT scenarios.46CC BY-4.0
- AlicenseAqualityBmaintenanceEnables auditing and monitoring of Microsoft Entra ID security posture, Conditional Access policies, and Zero Trust alignment via Microsoft Graph API.5MIT
Related MCP Connectors
Read-only access to Auralogs production logs: search logs, inspect errors, review AI analyses.
Read-only MCP access to sessions, funnels, campaigns, errors, live visitors, and anomalies.
Read-only access to your VortexIQ store data: audits, KPIs, alerts, Brand DNA, reports, Ask VIQ.
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/shigechika/entraadm-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server