Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
A comprehensive skill enabling OpenClaw agents to fully manage Microsoft Intune via the Graph API. Covers devices, apps, policies, compliance, users, groups,...
A comprehensive skill enabling OpenClaw agents to fully manage Microsoft Intune via the Graph API. Covers devices, apps, policies, compliance, users, groups,...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
This skill gives the agent full control over Microsoft Intune via the Microsoft Graph API. It covers device management, application deployment, compliance & configuration policies, user & group management, Autopilot, PowerShell scripts, reporting, and all remote device actions.
Before ANY Intune operation, the agent MUST obtain an OAuth 2.0 access token. The following environment variables must be configured: INTUNE_TENANT_ID – Microsoft 365 Tenant ID INTUNE_CLIENT_ID – Entra ID App Registration Client ID INTUNE_CLIENT_SECRET – Entra ID App Registration Secret
POST https://login.microsoftonline.com/{INTUNE_TENANT_ID}/oauth2/v2.0/token Body (x-www-form-urlencoded): client_id={INTUNE_CLIENT_ID} &scope=https://graph.microsoft.com/.default &client_secret={INTUNE_CLIENT_SECRET} &grant_type=client_credentials Extract access_token from the JSON response. Use it as: Authorization: Bearer <access_token>
The Entra ID App Registration needs the following Microsoft Graph Application permissions: DeviceManagementManagedDevices.ReadWrite.All DeviceManagementConfiguration.ReadWrite.All DeviceManagementApps.ReadWrite.All DeviceManagementServiceConfig.ReadWrite.All DeviceManagementRBAC.ReadWrite.All Directory.Read.All User.Read.All Group.ReadWrite.All GroupMember.ReadWrite.All
Read operations (GET): Always safe. Execute without confirmation. Sync/Restart operations: Ask for confirmation: "Soll ich Gerät X wirklich syncen/neustarten?" Destructive operations (Wipe, Retire, Delete): ALWAYS require explicit confirmation. Say: "⚠️ Achtung: Das löscht alle Daten auf dem Gerät. Bist du sicher?" Policy creation/modification: Confirm before applying: "Soll ich diese Policy wirklich erstellen/ändern?" Never dump raw JSON to the user. Always format output as readable Markdown tables or summaries. Error handling: If an API call returns an error, explain the error in simple German and suggest a fix.
GET https://graph.microsoft.com/v1.0/deviceManagement/managedDevices Use $select to limit fields: ?$select=deviceName,operatingSystem,complianceState,lastSyncDateTime,userPrincipalName Present results as a table: | Gerätename | OS | Compliance | Letzter Sync | Benutzer |
GET https://graph.microsoft.com/v1.0/deviceManagement/managedDevices?$filter=deviceName eq '{deviceName}' Alternative search by user: ?$filter=userPrincipalName eq '{user@domain.com}'
GET https://graph.microsoft.com/v1.0/deviceManagement/managedDevices/{managedDeviceId} Show: Device name, Serial number, OS version, Compliance state, Encryption status, Last sync, Enrolled date, Primary user.
Sync Device POST https://graph.microsoft.com/v1.0/deviceManagement/managedDevices/{managedDeviceId}/syncDevice Reboot Device POST https://graph.microsoft.com/v1.0/deviceManagement/managedDevices/{managedDeviceId}/rebootNow Lock Device (Remote Lock) POST https://graph.microsoft.com/v1.0/deviceManagement/managedDevices/{managedDeviceId}/remoteLock Reset Passcode POST https://graph.microsoft.com/v1.0/deviceManagement/managedDevices/{managedDeviceId}/resetPasscode Locate Device (Lost Mode – iOS/Android) POST https://graph.microsoft.com/v1.0/deviceManagement/managedDevices/{managedDeviceId}/locateDevice Retire Device (Remove Company Data Only) POST https://graph.microsoft.com/v1.0/deviceManagement/managedDevices/{managedDeviceId}/retire ⚠️ SAFETY: Requires explicit user confirmation! Wipe Device (Factory Reset) POST https://graph.microsoft.com/v1.0/deviceManagement/managedDevices/{managedDeviceId}/wipe ⚠️ SAFETY: ALWAYS ask twice! This deletes ALL data! Delete Device from Intune DELETE https://graph.microsoft.com/v1.0/deviceManagement/managedDevices/{managedDeviceId} ⚠️ SAFETY: Requires explicit user confirmation! Rename Device POST https://graph.microsoft.com/v1.0/deviceManagement/managedDevices/{managedDeviceId}/setDeviceName Body: {"deviceName": "NEW-NAME"} Enable/Disable Lost Mode (iOS supervised) POST https://graph.microsoft.com/v1.0/deviceManagement/managedDevices/{managedDeviceId}/enableLostMode Body: {"message": "Dieses Gerät wurde als verloren gemeldet.", "phoneNumber": "+49...", "footer": "Kaffee & Code IT"} POST https://graph.microsoft.com/v1.0/deviceManagement/managedDevices/{managedDeviceId}/disableLostMode
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceCompliancePolicies Present as: | Policy Name | Platform | Created | Last Modified |
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceCompliancePolicies/{policyId}
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceCompliancePolicies/{policyId}/assignments
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceCompliancePolicies/{policyId}/deviceStatuses
POST https://graph.microsoft.com/v1.0/deviceManagement/deviceCompliancePolicies ⚠️ SAFETY: Confirm before creating.
DELETE https://graph.microsoft.com/v1.0/deviceManagement/deviceCompliancePolicies/{policyId} ⚠️ SAFETY: Requires explicit user confirmation!
GET https://graph.microsoft.com/v1.0/deviceManagement/configurationPolicies This is the modern, recommended endpoint covering Endpoint Security, Administrative Templates, and Settings Catalog.
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceConfigurations
GET https://graph.microsoft.com/v1.0/deviceManagement/configurationPolicies/{policyId}
GET https://graph.microsoft.com/v1.0/deviceManagement/configurationPolicies/{policyId}/settings
GET https://graph.microsoft.com/v1.0/deviceManagement/configurationPolicies/{policyId}/assignments
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceConfigurations/{configId}/deviceStatuses
POST https://graph.microsoft.com/v1.0/deviceManagement/configurationPolicies ⚠️ SAFETY: Confirm before creating.
DELETE https://graph.microsoft.com/v1.0/deviceManagement/configurationPolicies/{policyId} ⚠️ SAFETY: Requires explicit user confirmation!
GET https://graph.microsoft.com/v1.0/deviceAppManagement/mobileApps Present as: | App Name | Type | Publisher | Created |
GET https://graph.microsoft.com/v1.0/deviceAppManagement/mobileApps/{appId}
GET https://graph.microsoft.com/v1.0/deviceAppManagement/mobileApps/{appId}/assignments
GET https://graph.microsoft.com/v1.0/deviceAppManagement/managedAppPolicies
GET https://graph.microsoft.com/v1.0/deviceAppManagement/managedAppRegistrations
POST https://graph.microsoft.com/v1.0/deviceAppManagement/mobileApps/{appId}/assignments ⚠️ SAFETY: Confirm before assigning.
GET https://graph.microsoft.com/v1.0/deviceManagement/detectedApps
GET https://graph.microsoft.com/v1.0/deviceManagement/detectedApps/{detectedAppId}/managedDevices
GET https://graph.microsoft.com/beta/deviceManagement/configurationPolicies?$filter=templateReference/templateFamily eq 'baseline'
GET https://graph.microsoft.com/beta/deviceManagement/configurationPolicies?$filter=templateReference/templateFamily eq 'endpointSecurityDiskEncryption'
GET https://graph.microsoft.com/beta/deviceManagement/configurationPolicies?$filter=templateReference/templateFamily eq 'endpointSecurityFirewall'
GET https://graph.microsoft.com/beta/deviceManagement/configurationPolicies?$filter=templateReference/templateFamily eq 'endpointSecurityAntivirus'
GET https://graph.microsoft.com/beta/deviceManagement/configurationPolicies?$filter=templateReference/templateFamily eq 'endpointSecurityAttackSurfaceReduction'
GET https://graph.microsoft.com/v1.0/deviceManagement/windowsAutopilotDeviceIdentities Present as: | Serial Number | Model | Group Tag | Enrollment State | Last Seen |
GET https://graph.microsoft.com/v1.0/deviceManagement/windowsAutopilotDeviceIdentities/{id}
GET https://graph.microsoft.com/v1.0/deviceManagement/windowsAutopilotDeploymentProfiles
POST https://graph.microsoft.com/v1.0/deviceManagement/windowsAutopilotDeviceIdentities/{id}/assignUserToDevice Body: {"userPrincipalName": "user@domain.com"}
DELETE https://graph.microsoft.com/v1.0/deviceManagement/windowsAutopilotDeviceIdentities/{id} ⚠️ SAFETY: Requires explicit user confirmation!
GET https://graph.microsoft.com/beta/deviceManagement/deviceManagementScripts
GET https://graph.microsoft.com/beta/deviceManagement/deviceManagementScripts/{scriptId}
GET https://graph.microsoft.com/beta/deviceManagement/deviceManagementScripts/{scriptId}/deviceRunStates
POST https://graph.microsoft.com/beta/deviceManagement/deviceManagementScripts Body must include scriptContent as Base64-encoded string. ⚠️ SAFETY: Confirm before uploading. Show the script content to the user first.
GET https://graph.microsoft.com/beta/deviceManagement/deviceHealthScripts
GET https://graph.microsoft.com/beta/deviceManagement/deviceHealthScripts/{scriptId}/deviceRunStates
GET https://graph.microsoft.com/v1.0/users?$select=displayName,userPrincipalName,accountEnabled,jobTitle
GET https://graph.microsoft.com/v1.0/users?$filter=startsWith(displayName,'{name}')
GET https://graph.microsoft.com/v1.0/users/{userId}
GET https://graph.microsoft.com/v1.0/groups?$select=displayName,description,groupTypes,membershipRule
GET https://graph.microsoft.com/v1.0/groups/{groupId}/members
POST https://graph.microsoft.com/v1.0/groups/{groupId}/members/$ref Body: {"@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/{userId}"} ⚠️ SAFETY: Confirm before adding.
DELETE https://graph.microsoft.com/v1.0/groups/{groupId}/members/{userId}/$ref ⚠️ SAFETY: Confirm before removing.
GET https://graph.microsoft.com/v1.0/users/{userId}/managedDevices
GET https://graph.microsoft.com/v1.0/deviceManagement/managedDevices?$select=complianceState Agent should calculate: X compliant, Y non-compliant, Z in-grace-period, and present as summary + table.
GET https://graph.microsoft.com/v1.0/deviceManagement/managedDevices?$select=operatingSystem Agent should group by OS and present: "42 Windows, 15 iOS, 8 Android, 3 macOS"
GET https://graph.microsoft.com/v1.0/deviceManagement/managedDevices?$filter=lastSyncDateTime lt {30_days_ago}&$select=deviceName,lastSyncDateTime,userPrincipalName Agent should calculate the date for 30 days ago automatically.
GET https://graph.microsoft.com/v1.0/deviceManagement/managedDevices?$filter=complianceState eq 'noncompliant'&$select=deviceName,complianceState,userPrincipalName,operatingSystem
POST https://graph.microsoft.com/beta/deviceManagement/reports/exportJobs Body: {"reportName": "Devices", "filter": "", "select": ["DeviceName","OS","ComplianceState"]}
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceCategories
POST https://graph.microsoft.com/v1.0/deviceManagement/deviceCategories Body: {"displayName": "Kategoriename", "description": "Beschreibung"}
PUT https://graph.microsoft.com/v1.0/deviceManagement/managedDevices/{deviceId}/deviceCategory/$ref
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceEnrollmentConfigurations
GET https://graph.microsoft.com/v1.0/deviceManagement/roleDefinitions
GET https://graph.microsoft.com/v1.0/deviceManagement/roleAssignments
GET https://graph.microsoft.com/v1.0/deviceManagement/roleDefinitions/{roleId}
When the user asks a question, follow this logic: "Zeig mir alle Geräte" → Use 1.1, format as table. "Ist Gerät X compliant?" → Use 1.2 to find it, then check complianceState. "Sync Laptop von Max" → Use 1.2 to find managedDeviceId, then use 1.4 Sync. "Wie viele Geräte hab ich?" → Use 9.2, give OS distribution + total count. "Welche Geräte haben sich lange nicht gemeldet?" → Use 9.3. "Erstell mir eine Compliance Policy für Windows" → Use 2.5, ask for requirements first. "Welche Apps sind deployed?" → Use 4.1. "Füg User Max zur Gruppe IT-Geräte hinzu" → Use 8.2 to find user, 8.4 to find group, then 8.6. "Zeig mir den Status vom PowerShell Script XY" → Use 7.3. "Gib mir einen Compliance Report" → Use 9.1 + 9.4. "Zeig mir die Conditional Access Policies" → Use 12.1. "Welche WLAN-Profile sind deployed?" → Use 13.1. "Wie sind meine Windows Update Ringe konfiguriert?" → Use 14.1. "Wer hat letzte Woche was in Intune geändert?" → Use 17.1. "Kann Intune die Einstellung XY konfigurieren?" → Use 18.1 Settings Catalog search. "Zeig mir alle Autopilot-Geräte ohne zugewiesenes Profil" → Use 6.1 + filter.
GET https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies Present as: | Policy Name | State (enabled/disabled/report) | Conditions | Grant Controls |
GET https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies/{policyId}
POST https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies ⚠️ SAFETY: Always confirm before creating. Show the user a summary of what the policy will do first. 💡 TIP: Recommend creating in "reportOnly" state first for testing.
PATCH https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies/{policyId} ⚠️ SAFETY: Confirm before modifying. Explain what will change.
DELETE https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies/{policyId} ⚠️ SAFETY: Requires explicit user confirmation!
GET https://graph.microsoft.com/v1.0/identity/conditionalAccess/namedLocations
POST https://graph.microsoft.com/v1.0/identity/conditionalAccess/namedLocations Example IP-based: { "@odata.type": "#microsoft.graph.ipNamedLocation", "displayName": "Büro-Netzwerk", "isTrusted": true, "ipRanges": [{"@odata.type": "#microsoft.graph.iPv4CidrRange", "cidrAddress": "192.168.1.0/24"}] }
GET https://graph.microsoft.com/v1.0/identity/conditionalAccess/authenticationStrength/policies
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceConfigurations?$filter=isof('microsoft.graph.windowsWifiConfiguration') or isof('microsoft.graph.iosWiFiConfiguration') or isof('microsoft.graph.androidWorkProfileWiFiConfiguration') Alternative (all configs, then filter by odata.type for Wi-Fi): GET https://graph.microsoft.com/v1.0/deviceManagement/deviceConfigurations Agent should filter results where @odata.type contains WiFi or wifi.
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceConfigurations Agent should filter results where @odata.type contains Vpn or vpn.
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceConfigurations/{configId}
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceConfigurations/{configId}/assignments
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceConfigurations Agent should filter results where @odata.type contains Scep or Certificate.
Same endpoint, filter for Pkcs in @odata.type.
Same endpoint, filter for TrustedRootCertificate in @odata.type.
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceConfigurations?$filter=isof('microsoft.graph.windowsUpdateForBusinessConfiguration') Present as: | Ring Name | Deferral (Days) | Quality Updates | Feature Updates | Assigned To |
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceConfigurations/{ringId}
GET https://graph.microsoft.com/beta/deviceManagement/windowsFeatureUpdateProfiles
GET https://graph.microsoft.com/beta/deviceManagement/windowsFeatureUpdateProfiles/{profileId}
GET https://graph.microsoft.com/beta/deviceManagement/windowsFeatureUpdateProfiles/{profileId}/deviceUpdateStates
GET https://graph.microsoft.com/beta/deviceManagement/windowsDriverUpdateProfiles
GET https://graph.microsoft.com/beta/deviceManagement/windowsDriverUpdateProfiles/{profileId}
GET https://graph.microsoft.com/beta/deviceManagement/windowsQualityUpdateProfiles
POST https://graph.microsoft.com/beta/deviceManagement/deviceConfigurations/{ringId}/windowsUpdateForBusinessConfiguration/pause POST https://graph.microsoft.com/beta/deviceManagement/deviceConfigurations/{ringId}/windowsUpdateForBusinessConfiguration/resume ⚠️ SAFETY: Confirm before pausing/resuming.
GET https://graph.microsoft.com/beta/deviceManagement/depOnboardingSettings
GET https://graph.microsoft.com/beta/deviceManagement/depOnboardingSettings/{depId}/enrollmentProfiles
GET https://graph.microsoft.com/v1.0/deviceManagement/applePushNotificationCertificate Shows: Expiration date, Subject, Certificate serial number. 💡 Agent should proactively warn if certificate expires within 30 days!
GET https://graph.microsoft.com/beta/deviceManagement/vppTokens
GET https://graph.microsoft.com/v1.0/deviceAppManagement/managedAppPolicies Filter for iOS/macOS types.
POST https://graph.microsoft.com/v1.0/deviceManagement/managedDevices/{managedDeviceId}/bypassActivationLock ⚠️ SAFETY: Requires explicit user confirmation!
GET https://graph.microsoft.com/beta/deviceManagement/androidManagedStoreAccountEnterpriseSettings
GET https://graph.microsoft.com/beta/deviceManagement/androidDeviceOwnerEnrollmentProfiles
GET https://graph.microsoft.com/beta/deviceManagement/androidManagedStoreAccountEnterpriseSettings Shows if Android Enterprise (Work Profile / Fully Managed / Dedicated) is connected.
GET https://graph.microsoft.com/v1.0/deviceAppManagement/androidManagedAppProtections
GET https://graph.microsoft.com/v1.0/deviceManagement/auditEvents Present as: | Date | Activity | Actor (who) | Target | Result |
GET https://graph.microsoft.com/v1.0/deviceManagement/auditEvents?$filter=activityDateTime gt {startDate} and activityDateTime lt {endDate} Agent should calculate the date range based on user request (e.g., "letzte Woche" → last 7 days).
GET https://graph.microsoft.com/v1.0/deviceManagement/auditEvents?$filter=actor/userPrincipalName eq '{user@domain.com}'
GET https://graph.microsoft.com/v1.0/deviceManagement/auditEvents/{auditEventId}
GET https://graph.microsoft.com/v1.0/auditLogs/directoryAudits?$filter=category eq 'Device'
GET https://graph.microsoft.com/v1.0/auditLogs/signIns?$filter=appDisplayName eq 'Microsoft Intune'
GET https://graph.microsoft.com/beta/deviceManagement/configurationSettings?$search="{searchTerm}" This is extremely useful when the user asks: "Can Intune configure setting X?" or "Hat Intune eine Einstellung für Bildschirmschoner?"
GET https://graph.microsoft.com/beta/deviceManagement/groupPolicyMigrationReports Use this when the user asks about migrating from on-premises GPO to Intune.
GET https://graph.microsoft.com/beta/deviceManagement/groupPolicyMigrationReports/{reportId} Shows: Which GPO settings are supported in Intune, which are not, and recommended alternatives.
GET https://graph.microsoft.com/beta/deviceManagement/groupPolicyUploadedDefinitionFiles
GET https://graph.microsoft.com/v1.0/deviceManagement/termsAndConditions
GET https://graph.microsoft.com/v1.0/deviceManagement/termsAndConditions/{termsId}
GET https://graph.microsoft.com/v1.0/deviceManagement/termsAndConditions/{termsId}/acceptanceStatuses Shows which users have accepted which version.
POST https://graph.microsoft.com/v1.0/deviceManagement/termsAndConditions ⚠️ SAFETY: Confirm before creating.
GET https://graph.microsoft.com/v1.0/deviceManagement/notificationMessageTemplates
POST https://graph.microsoft.com/v1.0/deviceManagement/notificationMessageTemplates ⚠️ SAFETY: Confirm before creating.
POST https://graph.microsoft.com/v1.0/deviceManagement/notificationMessageTemplates/{templateId}/sendTestMessage
GET https://graph.microsoft.com/v1.0/deviceAppManagement/iosManagedAppProtections
GET https://graph.microsoft.com/v1.0/deviceAppManagement/androidManagedAppProtections
GET https://graph.microsoft.com/v1.0/deviceAppManagement/windowsInformationProtectionPolicies
GET https://graph.microsoft.com/v1.0/deviceAppManagement/iosManagedAppProtections/{policyId} or GET https://graph.microsoft.com/v1.0/deviceAppManagement/androidManagedAppProtections/{policyId}
GET https://graph.microsoft.com/v1.0/deviceAppManagement/managedAppRegistrations?$filter=userId eq '{userId}'
POST https://graph.microsoft.com/v1.0/deviceAppManagement/iosManagedAppProtections or POST https://graph.microsoft.com/v1.0/deviceAppManagement/androidManagedAppProtections ⚠️ SAFETY: Confirm before creating. Show policy summary first.
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceEnrollmentConfigurations Includes: Device Limit Restrictions, Platform Restrictions, Enrollment Status Page (ESP), Windows Hello for Business.
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceEnrollmentConfigurations/{configId}
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceEnrollmentConfigurations/{configId}/assignments
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceEnrollmentConfigurations?$filter=isof('microsoft.graph.windows10EnrollmentCompletionPageConfiguration')
GET https://graph.microsoft.com/v1.0/deviceManagement/deviceEnrollmentConfigurations?$filter=isof('microsoft.graph.deviceEnrollmentWindowsHelloForBusinessConfiguration')
GET https://graph.microsoft.com/beta/deviceManagement/assignmentFilters Present as: | Filter Name | Platform | Rule | Created |
GET https://graph.microsoft.com/beta/deviceManagement/assignmentFilters/{filterId}
POST https://graph.microsoft.com/beta/deviceManagement/assignmentFilters ⚠️ SAFETY: Confirm before creating.
POST https://graph.microsoft.com/beta/deviceManagement/assignmentFilters/{filterId}/getState
GET https://graph.microsoft.com/beta/deviceManagement/roleScopeTags
POST https://graph.microsoft.com/beta/deviceManagement/roleScopeTags ⚠️ SAFETY: Confirm before creating.
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.