EntraID MCP Server

by hieuttmmo

Integrations

  • Integrates with .ENV files for secure configuration management, storing Azure AD credentials and other sensitive information outside of version control.

  • Supports integration with GitHub through FastMCP installation, with specific notes on not committing secrets to repositories.

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:
    • .env und geheime Dateien sind von der Versionskontrolle ausgeschlossen.
    • Verwendet bewährte Methoden von Microsoft zur Authentifizierung.

Projektstruktur

src/msgraph_mcp_server/ ├── auth/ # Authentication logic (GraphAuthManager) ├── resources/ # Resource modules (users, signin_logs, mfa, ...) │ ├── users.py # User operations (search, get by ID, etc.) │ ├── signin_logs.py # Sign-in log operations │ ├── mfa.py # MFA status operations │ ├── permissions_helper.py # Graph permissions utilities and suggestions │ ├── applications.py # Application (app registration) operations │ ├── service_principals.py # Service principal operations │ └── ... # Other resource modules ├── utils/ # Core GraphClient and other ultilities tool, such as password generator.. ├── server.py # FastMCP server entry point (registers tools/resources) ├── __init__.py # Package marker

Verwendung

1. Einrichtung

  • Klonen Sie das Repo.
  • Erstellen Sie eine config/.env Datei 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:

fastmcp dev '/path/to/src/msgraph_mcp_server/server.py'

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 suchen
  • get_user_by_id(user_id, ctx) — Benutzerdetails nach ID abrufen
  • get_privileged_users(ctx) — Listet alle Benutzer in privilegierten Verzeichnisrollen auf
  • get_user_roles(user_id, ctx) — Alle einem Benutzer zugewiesenen Verzeichnisrollen abrufen
  • get_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 ab
  • search_groups_by_name(name, ctx, limit=50) — Suche nach Gruppen nach Anzeigenamen
  • get_group_members(group_id, ctx, limit=100) — Mitglieder einer Gruppe nach Gruppen-ID abrufen
  • create_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 ID
  • add_group_member(group_id, member_id, ctx) — Ein Mitglied (Benutzer, Gruppe, Gerät usw.) zu einer Gruppe hinzufügen
  • remove_group_member(group_id, member_id, ctx) — Entfernt ein Mitglied aus einer Gruppe
  • add_group_owner(group_id, owner_id, ctx) — Einen Besitzer zu einer Gruppe hinzufügen
  • remove_group_owner(group_id, owner_id, ctx) — Einen Besitzer aus einer Gruppe entfernen

Beispiel für die Gruppenerstellung/-aktualisierung:

  • group_data für create_group und update_group sollte 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 abrufen
  • get_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 abrufen
  • get_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 auf
  • get_all_graph_permissions() – Alle Microsoft Graph-Berechtigungen direkt von der Microsoft Graph-API abrufen
  • search_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 Paging
  • get_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_data für create_application und update_application sollte 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 Seitennummerierung
  • get_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_data für create_service_principal und update_service_principal sollte 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.py mit dem FastMCP @mcp.tool() -Dekorator.
  • Verwenden Sie den gemeinsam genutzten GraphClient für alle API-Aufrufe.

Sicherheit und bewährte Methoden

  • Geben Sie niemals Geheimnisse preis: .env und 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 / BerechtigungTypBeschreibung
AuditLog.Alles lesenAnwendungLesen aller Audit-Protokolldaten
AuthenticationContext.Read.AllAnwendungLesen aller Authentifizierungskontextinformationen
DeviceManagementManagedDevices.Read.AllAnwendungLesen von Microsoft Intune-Geräten
Verzeichnis.Alles.LesenAnwendungVerzeichnisdaten lesen
Gruppe.Alles.LesenAnwendungAlle Gruppen lesen
Gruppenmitglied.Lesen.AllesAnwendungAlle Gruppenmitgliedschaften lesen
Gruppe.Lesen.Schreiben.AlleAnwendungGruppen erstellen, aktualisieren, löschen; Gruppenmitglieder und -besitzer verwalten
Richtlinie.Alles.LesenAnwendungLesen Sie die Richtlinien Ihrer Organisation
RoleManagement.Read.DirectoryAnwendungLesen aller Verzeichnis-RBAC-Einstellungen
Benutzer.Alles.LesenAnwendungLesen Sie die vollständigen Profile aller Benutzer
Benutzer-PasswortProfil.Lesen/Schreiben.AlleAnwendungGeringste Berechtigung zum Aktualisieren der passwordProfile-Eigenschaft
UserAuthenticationMethod.Read.AllAnwendungLesen Sie die Authentifizierungsmethoden aller Benutzer
Anwendung.Lesen/Schreiben.AllesAnwendungErstellen, 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:

fastmcp install '/path/to/src/msgraph_mcp_server/server.py' \ --with msgraph-sdk --with azure-identity --with azure-core --with msgraph-core \ -f /path/to/.env
  • Ersetzen Sie /path/to/ durch Ihren tatsächlichen Projektpfad.
  • Das Flag -f verweist auf Ihre .env Datei (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):

{ "EntraID MCP Server": { "command": "uv", "args": [ "run", "--with", "azure-core", "--with", "azure-identity", "--with", "fastmcp", "--with", "msgraph-core", "--with", "msgraph-sdk", "fastmcp", "run", "/path/to/src/msgraph_mcp_server/server.py" ], "env": { "TENANT_ID": "<your-tenant-id>", "CLIENT_ID": "<your-client-id>", "CLIENT_SECRET": "<your-client-secret>" } } }
  • Ersetzen Sie /path/to/ und die Umgebungsvariablen durch Ihre tatsächlichen Werte.
  • Übergeben Sie Ihrem Repository niemals echte Geheimnisse!

Lizenz

MIT

-
security - not tested
F
license - not found
-
quality - not tested

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Ein modularer Server für die Interaktion mit der Microsoft Graph-API, der die Verwaltung von Benutzern, Gruppen, Anwendungen, Anmeldeprotokollen, MFA-Status und anderen Azure AD-Ressourcen über Befehle in natürlicher Sprache ermöglicht.

  1. Merkmale
    1. Projektstruktur
      1. Verwendung
        1. 1. Einrichtung
        2. 2. Testen und Entwickeln
        3. 3. Verfügbare Tools
      2. Erweiterung des Servers
        1. Sicherheit und bewährte Methoden
          1. Erforderliche Graph-API-Berechtigungen
            1. Erweitert: Verwendung mit Claude oder Cursor
              1. Verwendung mit Claude (Anthropisch)
              2. Verwendung mit Cursor
            2. Lizenz

              Related MCP Servers

              • A
                security
                A
                license
                A
                quality
                Enables natural language interaction with Azure services through Claude Desktop, supporting resource management, subscription handling, and tenant selection with secure authentication.
                Last updated -
                3
                4
                13
                TypeScript
                MIT License
              • A
                security
                A
                license
                A
                quality
                This server provides a convenient API for interacting with Azure DevOps services, enabling AI assistants and other tools to manage work items, code repositories, boards, sprints, and more. Built with the Model Context Protocol, it provides a standardized interface for communicating with Azure DevOps
                Last updated -
                96
                18
                TypeScript
                MIT License
              • -
                security
                A
                license
                -
                quality
                Enables management of Azure Cloud PCs using the Microsoft Graph API, allowing users to list available Cloud PCs in their tenant through Claude Desktop.
                Last updated -
                Python
                MIT License
              • A
                security
                A
                license
                A
                quality
                A Model Context Protocol server for querying and analyzing Azure resources at scale using Azure Resource Graph, enabling AI assistants to explore and monitor Azure infrastructure.
                Last updated -
                1
                5
                TypeScript
                MIT License
                • Linux
                • Apple

              View all related MCP servers

              ID: vkz9jbsesl