Skip to main content
Glama
Sultan-zd

Entra ID SecOps MCP Server

by Sultan-zd

Entra ID SecOps MCP Server

CI Python MCP Licence

Сервер MCP, который предоставляет журналы безопасности Microsoft Entra ID в виде инструментов, выполняемых ИИ-агентом (Claude Desktop, Cursor или любой другой MCP-клиент).

Цель: позволить аналитику задать вопрос на естественном языке — «почему эта учётная запись больше не может войти?» — и получить за несколько секунд ответ, основанный на реальных данных тенанта.

📖 Руководство по установке и тестированию — три способа запуска сервера, пошагово. 🔍 Технический обзор — анализ рынка и безопасная экспозиция.

Принцип проектирования

Необработанный ответ Microsoft Graph содержит около шестидесяти полей на каждое событие. Сервер применяет агрессивное усечение: до модели доходят только около дюжины индикаторов безопасности. Это одновременно и оптимизация затрат (фактор ~35 по токенам), и контроль безопасности, поскольку неперечисленные поля — некоторые из которых контролируются атакующим — никогда не попадают в контекст.

Агрегаты (количество сбоев, различные IP-адреса, подозрительные паттерны) вычисляются на Python, а не выводятся моделью.

Инструменты

Инструмент

Назначение

Разрешение Graph

Лицензия

get_user_context

Карточка учётной записи: должность, группы, роли. Определяет серьёзность инцидента.

Directory.Read.All

get_user_signins

Недавние входы UPN с сводкой и подозрительными паттернами

AuditLog.Read.All

P1

get_risky_users

Учётные записи, отмеченные как рискованные службой Identity Protection

IdentityRiskyUser.Read.All

P2

get_risk_detections

Отдельные обнаружения: почему учётная запись в зоне риска

IdentityRiskEvent.Read.All

P2

get_directory_audits

Административные изменения; выявляет действия по закреплению

AuditLog.Read.All

get_conditional_access_policies

Активные политики и пробелы в покрытии

Policy.Read.All

Все инструменты только для чтения: сервер никогда не изменяет тенант.

Рекомендуемый порядок расследования

get_user_context     le compte est-il privilégié ? l'incident est-il grave ?
      ↓
get_user_signins     que s'est-il passé sur l'authentification ?
      ↓
get_risk_detections  qu'a détecté Identity Protection, et pourquoi ?
      ↓
get_directory_audits l'attaquant a-t-il modifié quelque chose une fois entré ?

Эта последовательность также описана в instructions сервера, которые MCP-клиент передаёт модели.

Быстрый старт (без тенанта Azure)

Режим fixture воспроизводит демонстрационный инцидент и не требует ни тенанта, ни лицензии, ни секрета.

python -m venv venv
venv/Scripts/activate          # Windows ; sur Linux/macOS : source venv/bin/activate
pip install -e ".[dev]"

cp .env.example .env           # ENTRA_DATA_SOURCE=fixture est déjà la valeur par défaut
python -m entra_secops_mcp

Подключение к реальному тенанту

  1. Создайте App Registration на портале Entra.

  2. Добавьте прикладные разрешения из таблицы выше, затем предоставьте согласие администратора.

  3. Сгенерируйте секрет клиента.

  4. Заполните .env:

AZURE_TENANT_ID=...
AZURE_CLIENT_ID=...
AZURE_CLIENT_SECRET=...
ENTRA_DATA_SOURCE=graph

Требуется лицензия. Доступ к журналам входа через API требует лицензии Entra ID P1, а инструменты Identity Protection требуют P2. Без них Graph отвечает 403. Остальные инструменты работают без платной лицензии. Проверьте лицензию тенанта до начала: это классическая проблема, из-за которой теряются несколько дней.

Безопасность

  • Никаких секретов в коде или Docker-образе. Они внедряются при запуске через --env-file.

  • .env исключён из git файлом .gitignore. Секрет, попавший в репозиторий, нужно отозвать в Azure, а не просто удалить из файла.

  • Журналирование направляется в stderr: при stdio-транспорте stdout передаёт протокол JSON-RPC и не терпит ни одного постороннего байта.

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

Все переменные описаны в .env.example.

Docker

docker build -t entra-secops-mcp .
docker run -i --rm --env-file .env entra-secops-mcp

Финальный образ: 277 МБ, многоэтапная сборка, запуск от непривилегированного пользователя (uid=1000), никаких секретов в слоях.

-i держит стандартный ввод открытым — именно через него проходит протокол MCP. Без -t: псевдотерминал добавляет цветовые коды, которые портят JSON-кадры.

Разработка

pytest              # 81 tests
ruff check src tests
mypy src            # mode strict
pre-commit install  # contrôles avant chaque commit
python demo.py      # investigation de démonstration

Статус

Инструменты

6, все только для чтения

Тесты

81, без необходимости тенанта Azure

Типы

mypy --strict без предупреждений

Протокол MCP

2026-07-28 (SDK mcp 2.0)

Контейнер

проверен через реальный MCP-клиент: запуск 2,4 с, вызов инструмента ~110 мс

Лицензия

MIT.

-
license - not tested
-
quality - not tested
C
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 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/Sultan-zd/mcp-entra-secops'

If you have feedback or need assistance with the MCP directory API, please join our Discord server