Skip to main content
Glama
shigechika

entraadm-mcp

by shigechika

entraadm-mcp

Englisch | 日本語

MCP-Server für die Sichtung von Microsoft-Entra-ID-Anmelde- und Überwachungsprotokollen. Nur lesend.

Warum dies statt des offiziellen Microsoft MCP Server for Enterprise

Microsoft bietet einen offiziellen MCP Server for Enterprise für Entra-ID-Daten an. Er eignet sich gut für einen interaktiven Administrator an der Tastatur, ist jedoch nicht für einen unbeaufsichtigten Triage-Bot geeignet:

  • Nur delegierte Authentifizierung. Der offizielle Server unterstützt keine App-only-Authentifizierung (Client-Anmeldeinformationen), daher kann er nicht unbeaufsichtigt hinter einem Dienstkonto ausgeführt werden. entraadm-mcp ist für diesen Fall gebaut: App-only in Produktion, mit einem delegierten (az login) Fallback für die lokale Entwicklung.

  • Ein allgemeines Graph-Abfragetool, kein festes Toolset. Der offizielle Server stellt ein Tool bereit, mit dem das Modell beliebige GET-/Schema-Erkennungsaufrufe an Microsoft Graph konstruieren kann. Das ist für einen Menschen flexibel, aber schwierig hinter eine Zulassungsliste für ein automatisiertes Triage- Profil zu setzen. entraadm-mcp stellt stattdessen sieben feste, schreibgeschützte Tools bereit.

  • Keine AADSTS-Übersetzung. Anmeldefehler kommen als rohe Fehlercodes zurück; die Triage benötigt dennoch eine Nachschlagetabelle. entraadm-mcp kommentiert jeden Anmeldefehler mit der tatsächlichen Bedeutung des Codes.

  • Keine anfrageübergreifende Aggregation. Microsoft Graph selbst kann Anmeldungen nicht serverseitig nach status/errorCode filtern und hat keine eingebaute Passwort-Spray-Ansicht. signin_failure_stats aggregiert clientseitig und kennzeichnet IPs mit fehlgeschlagenen Anmeldungen gegen viele verschiedene Benutzer – das Muster, das Entras pro-Konto intelligente Sperre nicht von selbst erkennt.

Related MCP server: Microsoft Graph MCP Server

Tools

Tool

Was es beantwortet

health_check

Ist Graph erreichbar und kann diese Anmeldeinformation Anmeldeprotokolle lesen?

get_user

Ist dieses Konto aktiviert, aus der lokalen Umgebung synchronisiert, und welche Lizenzen hat es?

signin_logs

Warum ist die Anmeldung dieses Benutzers fehlgeschlagen (oder erfolgreich), mit übersetztem AADSTS-Code?

signin_failure_stats

Mandantenweite Fehleraggregation: häufigste Fehlercodes, Benutzer, Apps, Quell-IPs und Passwort-Spray-Verdächtige

directory_audits

Wer hat was im Verzeichnis geändert (Sperren/Entsperren, Attributänderungen) und wann?

get_user_auth_methods

Ist MFA tatsächlich für dieses Konto registriert?

daily_brief

Zusammenfassung mit einem Aufruf, die signin_failure_stats und directory_audits kombiniert

Jedes Tool ist schreibgeschützt. Schreiboperationen (Entsperren eines Kontos, Zurücksetzen eines Passworts, Widerrufen einer Sitzung) liegen außerhalb des Anwendungsbereichs dieses Servers.

Authentifizierungsmodell

Zwei Authentifizierungsmodi, ausgewählt durch die gesetzten Umgebungsvariablen:

Modus

Wann

Umgebungsvariablen

app-only

Alle drei gesetzt

ENTRAADM_TENANT_ID, ENTRAADM_CLIENT_ID, ENTRAADM_CLIENT_SECRET

azure-cli

Keine gesetzt

(verwendet die aktuelle az login-Sitzung)

Das Setzen von einer oder zwei der drei App-only-Variablen ist ein Konfigurationsfehler und der Server weigert sich zu starten, anstatt stillschweigend auf einen anderen Authentifizierungsmodus als beabsichtigt zurückzufallen.

Erforderliche Graph-Berechtigungen

Tool(s)

Berechtigung

Hinweise

get_user (Basisfelder)

User.Read.All

signin_logs, signin_failure_stats, directory_audits, get_user's sign_in_activity-Feld

AuditLog.Read.All (nur App) oder die Reports-Reader-Verzeichnisrolle (delegiert)

get_user_auth_methods

UserAuthenticationMethod.Read.All

Nur App-only; nicht verfügbar unter delegierter (az login)-Authentifizierung bei einer typischen Rollenzuweisung im Mandanten

Eine fehlende Berechtigung bringt ein Tool nie zum Absturz. Es degradiert dieses Tool (oder dieses eine Feld) zu {"error": "...", "missing_permission": "..."} mit einer menschenlesbaren Erklärung, welche Rolle oder Berechtigung benötigt wird, sodass health_check und alle anderen Tools auch vor der Erteilung vollständiger Berechtigungen nutzbar bleiben.

Setup

uv tool install entraadm-mcp
# or
pip install entraadm-mcp

Konfiguration

Setzen Sie die drei App-only-Variablen für Produktions-/unbeaufsichtigten Einsatz:

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

Oder lassen Sie alle drei ungesetzt und führen Sie zuerst az login für die lokale Entwicklung aus.

Optional:

# Default page cap for the log-scanning tools (1-50, default 5).
export ENTRAADM_MAX_PAGES_DEFAULT=5

Verwendung

Claude Code (Plugin)

/plugin marketplace add shigechika/entraadm-mcp
/plugin install entraadm-mcp@entraadm-mcp

Claude Code (manuell)

Fügen Sie zu .mcp.json hinzu:

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

Direkte Ausführung

entraadm-mcp

CLI-Optionen

Option

Wirkung

--version

Version ausgeben und beenden

--check

Authentifizierung auflösen, Graph-Erreichbarkeit und Zugriff auf Anmeldeprotokolle prüfen, Bericht ausgeben, Exit 0 (oder 1 bei Konfigurationsfehler)

Hinweise

  • Abdeckungsvertrag. Jedes Ergebnis, das eine paginierte Graph-Sammlung durchläuft, trägt ein capped-Boolesches Feld, wenn sein Fenster nicht vollständig gescannt wurde – ein teilweiser Scan wird nie als vollständig gemeldet.

  • found: false ist kein Fehler. get_user und get_user_auth_methods antworten auf ein nicht vorhandenes Konto mit {"found": false, ...}, nicht mit einem error- Schlüssel – ein falsch geschriebener userPrincipalName sollte niemals wie ein defekter Server aussehen.

  • Aufbewahrung. Entra ID P1 speichert Anmelde- und Verzeichnis-Überwachungsprotokolle für 30 Tage. Ein Fenster darüber hinaus gibt ein leeres Ergebnis zurück, keinen Fehler.

Entwicklung

uv sync --dev
uv run pytest -v
uv run ruff check .
uv run ruff format --check .

Live-Smoke-Test

uv run python scripts/smoke_test.py

Nur lesend, keine Nutzlasten werden ausgegeben (nur Toolnamen/Status/Zeilenanzahlen), und begrenzt (kleine explizite Fenster/Seitengrenzen) – nichts hier schreibt in den Mandanten oder scannt mehr als einen Tag Protokolle.

Veröffentlichung

Dieses Repository verwendet release-please gesteuert von Conventional Commits. Mergen Sie einen feat:/fix:-PR in main, und release-please öffnet (oder aktualisiert) einen Release-PR; das Mergen dieses PRs taggt ein Release und löst die Veröffentlichungspipeline aus (PyPI, MCP Registry).

Lizenz

MIT

Install Server
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (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

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Provides 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.

View all related MCP servers

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.

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/shigechika/entraadm-mcp'

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