EntraID MCP Server
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: ms-365-admin-mcp-server
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 markerVerwendung
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:
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 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:
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/.envErsetzen 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):
{
"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
This server cannot be installed
Maintenance
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
- AlicenseNot gradedqualityDmaintenanceA comprehensive server that enables AI applications to interact with Microsoft 365 and Azure AD services through standardized Model Context Protocol interfaces.3MIT
- AlicenseNot gradedqualityAmaintenanceA Model Context Protocol server for Microsoft 365 administration using Graph API application permissions, enabling security monitoring, identity audits, incident response, and service health management.17311MIT
- AlicenseBqualityCmaintenanceA FastMCP server for interacting with Microsoft Entra ID via the Microsoft Graph API, enabling management of users, groups, sign-in logs, MFA, applications, devices, conditional access, and more.48MIT
- FlicenseNot gradedqualityFmaintenanceA skill-based Microsoft 365 admin MCP server that exposes 4 base tools to execute Graph and Power Platform API calls, enabling administrative tasks via natural language.
Related MCP Connectors
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Markdown-first MCP server for Notion API with 8 composite tools and 39 actions.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/hieuttmmo/entraid-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server