Skip to main content
Glama
Sultan-zd

Entra ID SecOps MCP Server

by Sultan-zd

Entra ID SecOps MCP Server

CI Python MCP Licence

Server MCP, der die Sicherheitsprotokolle von Microsoft Entra ID als ausführbare Werkzeuge für einen KI-Agenten (Claude Desktop, Cursor oder jeden anderen MCP-Client) bereitstellt.

Ziel: einem Analysten zu ermöglichen, eine Frage in natürlicher Sprache zu stellen — „Warum kann sich dieses Konto nicht mehr anmelden?“ — und in wenigen Sekunden eine Antwort zu erhalten, die auf den tatsächlichen Daten des Mandanten basiert.

📖 Installations- und Testanleitung — die drei Möglichkeiten, den Server Schritt für Schritt zu starten. 🔍 Technisches Briefing — Marktscan und sichere Exposition.

Designprinzip

Eine rohe Antwort von Microsoft Graph enthält etwa sechzig Felder pro Ereignis. Der Server wendet eine aggressive Kürzung an: Nur etwa ein Dutzend Sicherheitsindikatoren erreichen das Modell. Das ist sowohl eine Kostenoptimierung (Faktor ~35 bei den Tokens) als auch eine Sicherheitskontrolle, da die nicht aufgeführten Felder — von denen einige von einem Angreifer kontrolliert werden — nie in den Kontext gelangen.

Die Aggregate (Anzahl der Fehlschläge, verschiedene IPs, verdächtige Muster) werden in Python berechnet, nicht vom Modell abgeleitet.

Werkzeuge

Werkzeug

Zweck

Graph-Berechtigung

Lizenz

get_user_context

Kontoprofil: Position, Gruppen, gehaltene Rollen. Bestimmt die Schwere eines Vorfalls.

Directory.Read.All

get_user_signins

Letzte Anmeldungen eines UPN, mit Zusammenfassung und verdächtigen Mustern

AuditLog.Read.All

P1

get_risky_users

Von Identity Protection als riskant gemeldete Konten

IdentityRiskyUser.Read.All

P2

get_risk_detections

Einzelne Erkennungen: warum ein Konto riskant ist

IdentityRiskEvent.Read.All

P2

get_directory_audits

Administrative Änderungen; meldet Persistenzmaßnahmen

AuditLog.Read.All

get_conditional_access_policies

Aktive Richtlinien und Abdeckungslücken

Policy.Read.All

Alle Werkzeuge sind schreibgeschützt: Der Server ändert niemals den Mandanten.

Empfohlene Untersuchungsreihenfolge

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é ?

Diese Abfolge ist auch in den instructions des Servers beschrieben, die der MCP-Client an das Modell übermittelt.

Schnellstart (ohne Azure-Mandanten)

Der Modus fixture spielt einen Demo-Vorfall erneut ab und erfordert weder Mandant, Lizenz noch Geheimnis.

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

Verbindung zu einem echten Mandanten

  1. Erstellen Sie eine App Registration im Entra-Portal.

  2. Fügen Sie die Anwendungsberechtigungen aus der obigen Tabelle hinzu und erteilen Sie dann die Administratorzustimmung.

  3. Generieren Sie ein Client-Geheimnis.

  4. Füllen Sie die .env-Datei aus:

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

Erforderliche Lizenz. Der Zugriff auf die Anmeldeprotokolle über die API erfordert eine P1-Lizenz für Entra ID, und die Identity-Protection-Tools erfordern P2. Ohne diese antwortet Graph mit 403. Die anderen Tools funktionieren ohne kostenpflichtige Lizenz. Überprüfen Sie die Lizenz des Mandanten bevor Sie beginnen: Das ist das klassische Hindernis, das mehrere Tage kostet.

Sicherheit

  • Kein Geheimnis ist im Code oder im Docker-Image vorhanden. Sie werden beim Start über --env-file injiziert.

  • .env ist durch .gitignore von Git ausgeschlossen. Ein Geheimnis, das in ein Repository gepusht wurde, muss in Azure widerrufen werden, nicht nur aus der Datei gelöscht werden.

  • Die Protokollierung erfolgt auf stderr: Bei stdio-Transport überträgt stdout das JSON-RPC-Protokoll und toleriert keine überflüssigen Bytes.

Konfiguration

Alle Variablen sind in .env.example dokumentiert.

Docker

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

Finales Image: 277 MB, mehrstufiger Build, Ausführung als Nicht-Root-Benutzer (uid=1000), keine Geheimnisse in den Schichten.

-i hält den Standardeingang offen — hierüber läuft das MCP-Protokoll. Kein -t: Ein Pseudo-Terminal injiziert Farbcodes, die die JSON-Frames beschädigen.

Entwicklung

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

Status

Werkzeuge

6, alle schreibgeschützt

Tests

81, ohne erforderlichen Azure-Mandanten

Typen

mypy --strict ohne Warnungen

MCP-Protokoll

2026-07-28 (SDK mcp 2.0)

Container

über einen echten MCP-Client verifiziert: Start 2,4 s, Tool-Aufruf ~110 ms

Lizenz

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