EntraID MCP-Server (Microsoft Graph FastMCP)
Dieses Projekt bietet einen modularen, ressourcenorientierten FastMCP-Server für die Interaktion mit der Microsoft Graph-API. Es ist auf Erweiterbarkeit, Wartung und Sicherheit ausgelegt und unterstützt erweiterte Abfragen für Benutzer, Anmeldeprotokolle, MFA-Status und privilegierte Benutzer.
Merkmale
Modulare Ressourcenstruktur:
Jede Ressource (Benutzer, Anmeldeprotokolle, MFA usw.) wird in einem eigenen Modul unter
src/msgraph_mcp_server/resources/implementiert.Einfache Erweiterung mit neuen Ressourcen (z. B. Gruppen, Geräten).
Zentralisierter Graph-Client:
Behandelt die Authentifizierung und Client-Initialisierung.
Von allen Ressourcenmodulen gemeinsam genutzt.
Umfassende Benutzervorgänge:
Suchen Sie Benutzer nach Name/E-Mail.
Benutzer nach ID abrufen.
Listen Sie alle privilegierten Benutzer (Mitglieder der Verzeichnisrolle) auf.
Vollständiges Gruppenlebenszyklus- und Mitgliedschaftsmanagement:
Gruppen erstellen, lesen, aktualisieren und löschen.
Gruppenmitglieder und Besitzer hinzufügen/entfernen.
Suchen und Auflisten von Gruppen und Gruppenmitgliedern.
Anwendungs- und Service-Principal-Management:
Auflisten, Erstellen, Aktualisieren und Löschen von Anwendungen (App-Registrierungen).
Auflisten, Erstellen, Aktualisieren und Löschen von Dienstprinzipalen.
Zeigen Sie App-Rollenzuweisungen und delegierte Berechtigungen für Anwendungen und Dienstprinzipale an.
Anmeldeprotokollvorgänge:
Abfrage der Anmeldeprotokolle für einen Benutzer für die letzten X Tage.
MFA-Operationen:
Holen Sie sich den MFA-Status für einen Benutzer.
Erhalten Sie den MFA-Status für alle Mitglieder einer Gruppe.
Passwortverwaltung:
Setzen Sie Benutzerkennwörter direkt mit benutzerdefinierten oder automatisch generierten sicheren Kennwörtern zurück.
Option, bei der nächsten Anmeldung eine Kennwortänderung anzufordern.
Berechtigungshelfer:
Schlagen Sie geeignete Microsoft Graph-Berechtigungen für allgemeine Aufgaben vor.
Suchen und erkunden Sie verfügbare Graph-Berechtigungen.
Hilft bei der Umsetzung des Prinzips der geringsten Privilegien, indem nur notwendige Berechtigungen empfohlen werden.
Fehlerbehandlung und -protokollierung:
Konsistente Fehlerbehandlung und Fortschrittsberichterstattung über den FastMCP-Kontext.
Detaillierte Protokollierung zur Fehlerbehebung.
Sicherheit:
.envund geheime Dateien sind von der Versionskontrolle ausgeschlossen.Verwendet bewährte Methoden von Microsoft zur Authentifizierung.
Related MCP server: Cloud PC Management MCP Server
Projektstruktur
Verwendung
1. Einrichtung
Klonen Sie das Repo.
Erstellen Sie eine
config/.envDatei mit Ihren Azure AD-Anmeldeinformationen:TENANT_ID=your-tenant-id CLIENT_ID=your-client-id CLIENT_SECRET=your-client-secret(Optional) Richten Sie bei Bedarf eine zertifikatsbasierte Authentifizierung ein.
2. Testen und Entwickeln
Sie können Ihren MCP-Server direkt mit der FastMCP-CLI testen und entwickeln:
Dadurch wird eine interaktive Entwicklungsumgebung mit dem MCP Inspector gestartet. Weitere Informationen und erweiterte Nutzungsmöglichkeiten finden Sie in der FastMCP-Dokumentation .
3. Verfügbare Tools
Benutzertools
search_users(query, ctx, limit=10)— Benutzer nach Name/E-Mail suchenget_user_by_id(user_id, ctx)— Benutzerdetails nach ID abrufenget_privileged_users(ctx)— Listet alle Benutzer in privilegierten Verzeichnisrollen aufget_user_roles(user_id, ctx)— Alle einem Benutzer zugewiesenen Verzeichnisrollen abrufenget_user_groups(user_id, ctx)— Alle Gruppen (einschließlich transitiver Mitgliedschaften) für einen Benutzer abrufen
Gruppentools
get_all_groups(ctx, limit=100)— Alle Gruppen abrufen (mit Paging)get_group_by_id(group_id, ctx)— Ruft eine bestimmte Gruppe anhand ihrer ID absearch_groups_by_name(name, ctx, limit=50)— Suche nach Gruppen nach Anzeigenamenget_group_members(group_id, ctx, limit=100)— Mitglieder einer Gruppe nach Gruppen-ID abrufencreate_group(ctx, group_data)— Erstellt eine neue Gruppe (siehe unten für group_data-Felder)update_group(group_id, ctx, group_data)— Aktualisieren einer vorhandenen Gruppe (Felder: displayName, mailNickname, Beschreibung, Sichtbarkeit)delete_group(group_id, ctx)— Löscht eine Gruppe anhand ihrer IDadd_group_member(group_id, member_id, ctx)— Ein Mitglied (Benutzer, Gruppe, Gerät usw.) zu einer Gruppe hinzufügenremove_group_member(group_id, member_id, ctx)— Entfernt ein Mitglied aus einer Gruppeadd_group_owner(group_id, owner_id, ctx)— Einen Besitzer zu einer Gruppe hinzufügenremove_group_owner(group_id, owner_id, ctx)— Einen Besitzer aus einer Gruppe entfernen
Beispiel für die Gruppenerstellung/-aktualisierung:
group_datafürcreate_groupundupdate_groupsollte ein Wörterbuch mit Schlüsseln wie den folgenden sein:displayName(erforderlich zum Erstellen)mailNickname(erforderlich zum Erstellen)description(optional)groupTypes(optional, zB["Unified"])mailEnabled(optional)securityEnabled(optional)visibility(optional, „Privat“ oder „Öffentlich“)owners(optional, Liste der Benutzer-IDs)members(optional, Liste der IDs)membershipRule(erforderlich für dynamische Gruppen)membershipRuleProcessingState(optional, „Ein“ oder „Pausiert“)
Weitere Einzelheiten zu unterstützten Feldern und Verhaltensweisen finden Sie in den groups.py Dokumentationszeichenfolgen.
Tools für das Anmeldeprotokoll
get_user_sign_ins(user_id, ctx, days=7)— Anmeldeprotokolle für einen Benutzer abrufen
MFA-Tools
get_user_mfa_status(user_id, ctx)— MFA-Status für einen Benutzer abrufenget_group_mfa_status(group_id, ctx)— MFA-Status für alle Gruppenmitglieder abrufen
Gerätetools
get_all_managed_devices(filter_os=None)— Alle verwalteten Geräte abrufen (optional nach Betriebssystem filtern)get_managed_devices_by_user(user_id)— Alle verwalteten Geräte für einen bestimmten Benutzer abrufen
Tools für Richtlinien für bedingten Zugriff
get_conditional_access_policies(ctx)— Alle Richtlinien für bedingten Zugriff abrufenget_conditional_access_policy_by_id(policy_id, ctx)— Ruft eine einzelne bedingte Zugriffsrichtlinie anhand ihrer ID ab
Prüfprotokoll-Tools
get_user_audit_logs(user_id, days=30)— Ruft alle relevanten Verzeichnis-Audit-Protokolle für einen Benutzer nach Benutzer-ID innerhalb der letzten N Tage ab
Tools zur Kennwortverwaltung
reset_user_password_direct(user_id, password=None, require_change_on_next_sign_in=True, generate_password=False, password_length=12)— Setzt das Passwort eines Benutzers mit einem bestimmten Passwortwert zurück oder generiert ein sicheres, zufälliges Passwort
Hilfstools für Berechtigungen
suggest_permissions_for_task(task_category, task_name)– Schlagen Sie Microsoft Graph-Berechtigungen für eine bestimmte Aufgabe basierend auf allgemeinen Zuordnungen vor.list_permission_categories_and_tasks()— Listet alle verfügbaren Kategorien und Aufgaben für Berechtigungsvorschläge aufget_all_graph_permissions()– Alle Microsoft Graph-Berechtigungen direkt von der Microsoft Graph-API abrufensearch_permissions(search_term, permission_type=None)– Suche nach Microsoft Graph-Berechtigungen nach Stichwort
Anwendungstools
list_applications(ctx, limit=100)— Listet alle Anwendungen (App-Registrierungen) im Mandanten auf, mit Pagingget_application_by_id(app_id, ctx)– Ruft eine bestimmte Anwendung anhand ihrer Objekt-ID ab (einschließlich App-Rollenzuweisungen und delegierter Berechtigungen).create_application(ctx, app_data)— Erstellt eine neue Anwendung (siehe unten für app_data-Felder)update_application(app_id, ctx, app_data)– Aktualisieren Sie eine vorhandene Anwendung (Felder: displayName, signInAudience, Tags, identifierUris, web, api, requiredResourceAccess)delete_application(app_id, ctx)— Löscht eine Anwendung anhand ihrer Objekt-ID
Beispiel für die Erstellung/Aktualisierung einer Anwendung:
app_datafürcreate_applicationundupdate_applicationsollte ein Wörterbuch mit Schlüsseln wie den folgenden sein:displayName(erforderlich zum Erstellen)signInAudience(optional)tags(optional)identifierUris(optional)web(optional)api(optional)requiredResourceAccess(optional)
Dienstprinzipaltools
list_service_principals(ctx, limit=100)— Listet alle Dienstprinzipale im Mandanten auf, mit Seitennummerierungget_service_principal_by_id(sp_id, ctx)– Ruft einen bestimmten Dienstprinzipal über seine Objekt-ID ab (einschließlich App-Rollenzuweisungen und delegierter Berechtigungen).create_service_principal(ctx, sp_data)— Einen neuen Dienstprinzipal erstellen (siehe unten für sp_data-Felder)update_service_principal(sp_id, ctx, sp_data)– Aktualisieren Sie einen vorhandenen Dienstprinzipal (Felder: displayName, accountEnabled, tags, appRoleAssignmentRequired)delete_service_principal(sp_id, ctx)— Löscht einen Dienstprinzipal anhand seiner Objekt-ID
Beispiel für die Erstellung/Aktualisierung von Dienstprinzipalen:
sp_datafürcreate_service_principalundupdate_service_principalsollte ein Wörterbuch mit Schlüsseln wie den folgenden sein:appId(zum Erstellen erforderlich)accountEnabled(optional)tags(optional)appRoleAssignmentRequired(optional)displayName(optional)
Beispielressource
greeting://{name}— Gibt eine personalisierte Begrüßung zurück
Erweiterung des Servers
Fügen Sie unter
resources/neue Ressourcenmodule hinzu (z. B.groups.py,devices.py).Registrieren Sie neue Tools in
server.pymit dem FastMCP@mcp.tool()-Dekorator.Verwenden Sie den gemeinsam genutzten
GraphClientfür alle API-Aufrufe.
Sicherheit und bewährte Methoden
Geben Sie niemals Geheimnisse preis:
.envund andere sensible Dateien werden bei Git ignoriert.Verwenden Sie das Prinzip der geringsten Berechtigungen: Erteilen Sie Ihrer Azure AD-App nur die erforderlichen Microsoft Graph-Berechtigungen.
Prüfen und Überwachen: Verwenden Sie die Protokollausgabe zur Fehlerbehebung und Überwachung.
Erforderliche Graph-API-Berechtigungen
API / Berechtigung | Typ | Beschreibung |
AuditLog.Alles lesen | Anwendung | Lesen aller Audit-Protokolldaten |
AuthenticationContext.Read.All | Anwendung | Lesen aller Authentifizierungskontextinformationen |
DeviceManagementManagedDevices.Read.All | Anwendung | Lesen von Microsoft Intune-Geräten |
Verzeichnis.Alles.Lesen | Anwendung | Verzeichnisdaten lesen |
Gruppe.Alles.Lesen | Anwendung | Alle Gruppen lesen |
Gruppenmitglied.Lesen.Alles | Anwendung | Alle Gruppenmitgliedschaften lesen |
Gruppe.Lesen.Schreiben.Alle | Anwendung | Gruppen erstellen, aktualisieren, löschen; Gruppenmitglieder und -besitzer verwalten |
Richtlinie.Alles.Lesen | Anwendung | Lesen Sie die Richtlinien Ihrer Organisation |
RoleManagement.Read.Directory | Anwendung | Lesen aller Verzeichnis-RBAC-Einstellungen |
Benutzer.Alles.Lesen | Anwendung | Lesen Sie die vollständigen Profile aller Benutzer |
Benutzer-PasswortProfil.Lesen/Schreiben.Alle | Anwendung | Geringste Berechtigung zum Aktualisieren der passwordProfile-Eigenschaft |
UserAuthenticationMethod.Read.All | Anwendung | Lesen Sie die Authentifizierungsmethoden aller Benutzer |
Anwendung.Lesen/Schreiben.Alles | Anwendung | Erstellen, Aktualisieren und Löschen von Anwendungen (App-Registrierungen) und Dienstprinzipalen |
Hinweis: Group.ReadWrite.All ist zum Erstellen, Aktualisieren und Löschen von Gruppen sowie zum Hinzufügen/Entfernen von Gruppenmitgliedern oder -besitzern erforderlich. Group.Read.All und GroupMember.Read.All reichen für schreibgeschützte Gruppen- und Mitgliedschaftsabfragen aus.
Erweitert: Verwendung mit Claude oder Cursor
Verwendung mit Claude (Anthropisch)
Um diesen Server als Claude MCP-Tool zu installieren und auszuführen, verwenden Sie:
Ersetzen Sie
/path/to/durch Ihren tatsächlichen Projektpfad.Das Flag
-fverweist auf Ihre.envDatei (geben Sie niemals Geheimnisse preis!).
Verwendung mit Cursor
Fügen Sie Folgendes zu Ihrer .cursor/mcp.json hinzu (schließen Sie keine tatsächlichen Geheimnisse in die Versionskontrolle ein):
Ersetzen Sie
/path/to/und die Umgebungsvariablen durch Ihre tatsächlichen Werte.Übergeben Sie Ihrem Repository niemals echte Geheimnisse!
Lizenz
MIT