Skip to main content
Tools Reference

Microsoft Graph Tools

Written By Christopher Scaminaci

Last updated 7 days ago

Microsoft Graph Tools

graph_ · 530 tools · Free 284 · Pro 246 Microsoft Graph v1.0 - the Microsoft 365 identity, device and collaboration surface: users, groups, devices, applications, directory roles, conditional access, audit logs, mail, calendars, files, Teams, security alerts and Intune. The sign-in model matches the Microsoft Azure connector, including the optional entraTenant parameter for a customer directory you administer, but this is a separate connection with its own consent. Paging follows Graph's own next link as sent. Authorization is per-scope delegated permission rather than one blanket scope, so most directory, Intune and security tools need a Global Administrator to grant tenant-wide consent once; ordinary members then connect without prompts. The consent step offers three permission tiers - full, standard and read - so an organization can connect with less than the whole scope set. The beta endpoint is reachable only through the raw request tools.

All connector tools · Microsoft Graph setup guide

Microsoft Graph tool groups

Users

ToolPlanAccessSummary
graph_assign_user_licenseProWriteAssign one or more Microsoft 365 licences to a user.
graph_create_userProWriteCreate a new user account.
graph_delete_userProDestructiveDelete a user account.
graph_get_signed_in_userFreeRead-onlyGet the profile of the person whose Microsoft sign-in this connection was made with — the account StackJack is acting as.
graph_get_userFreeRead-onlyGet one user account in full, by object id or user principal name (their sign-in address).
graph_get_user_managerFreeRead-onlyGet the person recorded as a user's manager.
graph_list_deleted_usersFreeRead-onlyList user accounts that have been deleted but are still recoverable.
graph_list_inactive_usersFreeRead-onlyList users together with their last sign-in and last non-interactive sign-in times — the licence-reclamation and offboarding-audit read.
graph_list_user_app_role_assignmentsFreeRead-onlyList the enterprise applications a user has been assigned to, and the role they hold in each.
graph_list_user_devicesFreeRead-onlyList the devices registered to a user in the directory — the machines and phones their identity is attached to.
graph_list_user_direct_reportsFreeRead-onlyList the people who report to a user.
graph_list_user_groupsFreeRead-onlyList the groups, directory roles and administrative units a user belongs to DIRECTLY.
graph_list_user_licensesFreeRead-onlyList the Microsoft 365 licences assigned to one user, with the individual service plans inside each and whether each is enabled or switched off.
graph_list_user_owned_objectsFreeRead-onlyList the directory objects a user owns — groups, application registrations and service principals.
graph_list_user_transitive_groupsFreeRead-onlyList every group a user belongs to INCLUDING the ones reached through nested groups — their effective membership.
graph_list_usersFreeRead-onlyList the user accounts in an Entra ID (Azure AD) directory — the starting point for almost any question about who works somewhere.
graph_permanently_delete_userProDestructivePermanently remove a deleted user from the directory's recycle bin, ending the 30-day recovery window immediately.
graph_remove_user_licenseProDestructiveRemove one or more Microsoft 365 licences from a user.
graph_remove_user_managerProDestructiveClear the manager relationship on a user, leaving them with none.
graph_reset_user_passwordProDestructiveSet a new password on a user account.
graph_restore_deleted_userProWriteRestore a user account from the directory's recycle bin, within the 30-day window.
graph_revoke_user_sign_in_sessionsProDestructiveInvalidate every refresh token and session cookie a user holds, forcing them to sign in again everywhere — browsers, Outlook, Teams, phones.
graph_set_user_account_enabledProDestructiveEnable or disable a user's account — the standard first step of an offboarding, and the standard containment step for a compromised one.
graph_set_user_managerProWriteSet or replace the person recorded as a user's manager.
graph_update_userProWriteUpdate a user's profile details — display name, job title, department, office, phone numbers, usage location.

[Microsoft Graph] Assign one or more Microsoft 365 licences to a user. Additive, so not marked destructive — though it does consume a seat and therefore costs money, and the available count is worth reading first. Two failures are common and neither says what it means: the user must have a usage location set or the assignment is rejected, and a licence with no free seats fails rather than queueing. Use the subscribed SKU listing to find the SKU id and check remaining seats before calling this. Optionally disable individual service plans within a licence to hand out a subset of what it contains.

ParamTypeRequiredDefaultDescription
disabledServicePlanIdsstringnonullOptional comma-separated service plan ids WITHIN that SKU to leave switched off.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
skuIdstringyesThe SKU id (a GUID) to assign, from the subscribed SKU listing.
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] Create a new user account. Requires a display name, a user principal name (their sign-in address, which must use a domain already verified in the directory), a mail nickname and an initial password. Additive and reversible — a mistake here is deleted, and the account is recoverable for 30 days after that — which is why it is not marked destructive. Two things worth getting right at creation rather than afterwards: set the usage location, because licences cannot be assigned without one and the failure message does not say so; and leave forceChangePasswordNextSignIn on unless there is a specific reason not to, so the initial password you set does not become the one they keep. Creating the account does not licence it or add it to any group — those are separate steps.

ParamTypeRequiredDefaultDescription
departmentstringnonullDepartment.
displayNamestringyesDisplay name, for example "Alice Smith".
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
forceChangePasswordNextSignInbooleannotrueWhether the user must change this password at their next sign-in. Defaults to true.
jobTitlestringnonullJob title.
mailNicknamestringyesMail nickname — the local part of the address, for example "alice".
passwordstringyesInitial password. Must satisfy the directory's password policy.
usageLocationstringnonullTwo-letter usage location, for example "US" or "GB". Required before any licence can be assigned.
userPrincipalNamestringyesUser principal name — the full sign-in address, for example "alice@contoso.com". The domain must already be verified in the directory.

[Microsoft Graph] Delete a user account. The account goes to the directory's recycle bin and is fully restorable for 30 days — object id, group memberships, licences and all — after which it is removed permanently. Marked destructive because it removes the person's access to everything at once and because the recovery window, while generous, does expire. For an offboarding, disabling the account and revoking its sessions is the safer sequence: it has the same immediate effect, keeps the mailbox reachable for whoever inherits the work, and can be undone the moment somebody realizes the wrong Alice was picked.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] Get the profile of the person whose Microsoft sign-in this connection was made with — the account StackJack is acting as. Useful mainly for orientation and for diagnosing a permissions surprise: when a tool is refused and it is not obvious why, this answers "who does Microsoft think is asking", which is the first thing to establish before looking at roles. In a customer's directory it also confirms that delegated access resolved to the expected identity rather than falling back to your own tenant.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one user account in full, by object id or user principal name (their sign-in address). This is the detail view behind a name found in the listing: department, office, phone numbers, employee id, usage location, when the account was created, and whether sign-in is currently allowed. Reach for it before any change to a person — confirming you have the right Alice Smith costs one call and is the difference between resetting a password and locking out a stranger. If the answer is that no such object exists, the identifier is usually a display name rather than a sign-in address; list users with a search instead.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
selectstringnonullComma-separated properties to return. Omit for the default set.
userIdstringyesThe user's object id or user principal name (sign-in address).

[Microsoft Graph] Get the person recorded as a user's manager. Worth knowing that this is a real directory relationship rather than a text field, so it is what approval workflows, dynamic group rules and access reviews actually read — and it is also what an offboarding process needs, because a departing manager leaves their reports pointing at a disabled account. A 404 here means no manager is set, which is a legitimate answer for executives and service accounts rather than an error.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] List user accounts that have been deleted but are still recoverable. Entra ID keeps a deleted user for 30 days before removing them for good, and during that window the account can be restored complete with its object id, group memberships and licences — which is what makes an accidental deletion a five-minute problem rather than a rebuild. Each entry carries the date it was deleted, so the remaining window is easy to work out. After 30 days the account is gone and only a fresh one with a new identity can be created.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "startsWith(displayName,'Smith')".
maxItemsintegerno1000Maximum users to return (1-1000, default 1000).

[Microsoft Graph] List users together with their last sign-in and last non-interactive sign-in times — the licence-reclamation and offboarding-audit read. Sort by the sign-in date or filter on it to find accounts nobody has used in months, which are simultaneously a cost (each may hold a paid licence) and a risk (an unused enabled account is an unwatched way in). Two cautions worth stating: this data needs Entra ID P1 or P2 in the directory being queried and comes back empty rather than erroring without it, and an account showing no sign-in at all is more often a service or shared mailbox account than a dormant human — check what it is before recommending anyone disable it.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter over sign-in activity, for example "signInActivity/lastSignInDateTime le 2026-01-01T00:00:00Z".
maxItemsintegerno1000Maximum users to return (1-1000, default 1000). Microsoft serves this read 500 at a time rather than 999, so a large answer takes more pages than an ordinary user listing.
orderbystringnonullOData sort, for example "signInActivity/lastSignInDateTime".

[Microsoft Graph] List the enterprise applications a user has been assigned to, and the role they hold in each. This answers "which apps does this person have" from the directory's side rather than by asking each application, and it is what an access review or a licence-cost conversation needs. During offboarding it is also the list of third-party systems that will keep working after the Microsoft account is disabled unless each is dealt with separately.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno1000Maximum assignments to return (1-1000, default 1000).
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] List the devices registered to a user in the directory — the machines and phones their identity is attached to. Useful for confirming what a person actually works on before troubleshooting a sign-in problem, and for spotting the residue of old hardware that was replaced but never removed. Note this is the DIRECTORY's view of a device, which is not the same as Intune's management record: a device can be registered here and not enrolled in Intune, and the Intune device tools are where compliance, configuration and remote actions live.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno1000Maximum devices to return (1-1000, default 1000).
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] List the people who report to a user. The other half of the manager relationship, and the one that matters during an offboarding: before disabling a manager's account, this is what tells you whose manager field is about to point at a dead object, which quietly breaks approval flows and any dynamic group built on the org chart. It returns direct reports only, not the whole tree beneath someone.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno1000Maximum reports to return (1-1000, default 1000).
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] List the groups, directory roles and administrative units a user belongs to DIRECTLY. This is the fast answer to "what does this person have access to", and it is the one to start with — but read the transitive version too before concluding anything about access, because most real permission comes through nested groups that do not appear here. Direct membership is what you edit; transitive membership is what actually applies.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "displayName eq 'Finance'".
maxItemsintegerno1000Maximum objects to return (1-1000, default 1000).
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] List the Microsoft 365 licences assigned to one user, with the individual service plans inside each and whether each is enabled or switched off. Two jobs this does that nothing else does as directly: it explains a missing feature (someone has the licence but the specific service plan within it is disabled), and it shows whether a licence came from a direct assignment or was inherited from a group, which decides where you would have to go to remove it. A licence inherited from a group cannot be taken off the user — you change the group membership instead.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno1000Maximum licences to return (1-1000, default 1000).
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] List the directory objects a user owns — groups, application registrations and service principals. This is the offboarding read people forget, and the one that causes trouble months later: an application registration whose only owner has left is one nobody can manage, and its client secret will eventually expire and break whatever depends on it with no obvious owner to call. Run it before disabling anyone and reassign what comes back.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno1000Maximum objects to return (1-1000, default 1000).
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] List every group a user belongs to INCLUDING the ones reached through nested groups — their effective membership. This is the honest answer to "why can this person open that", and it routinely returns several times what the direct listing does, because access is normally granted to a broad group that contains the narrow one somebody was actually added to. Use it for access reviews and for investigating an access surprise; use the direct listing when you are about to change a membership, since a nested one cannot be removed from the user's side.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno1000Maximum groups to return (1-1000, default 1000).
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] List the user accounts in an Entra ID (Azure AD) directory — the starting point for almost any question about who works somewhere. Returns each user's id, display name, user principal name, mail address, job title and whether the account is enabled. Use the filter argument to narrow it rather than reading the whole directory: "accountEnabled eq false" finds disabled accounts left behind by a departure process, "userType eq 'Guest'" finds external collaborators, and "startsWith(department,'Finance')" scopes to a team. Prefer the search argument for a name someone half-remembers, because it matches across several fields at once where a filter has to name one. Note the object id and the user principal name are both accepted everywhere a user is asked for, but a display name is neither — resolve a person here first, then pass their id on.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "accountEnabled eq false" or "userType eq 'Guest'".
maxItemsintegerno1000Maximum users to return (1-1000, default 1000).
orderbystringnonullOData sort, for example "displayName".
searchstringnonullFree-text search across name, mail and other indexed fields, for example "displayName:smith".
selectstringnonullComma-separated properties to return. Fewer properties makes a large directory read markedly faster.

[Microsoft Graph] Permanently remove a deleted user from the directory's recycle bin, ending the 30-day recovery window immediately. There is NO undo of any kind: the object id is gone, and an account recreated with the same name is a different object that inherits none of the original's group memberships, licences or permissions. This exists for the cases where a record genuinely must not remain — a data-deletion request, or an account created in error that should never have existed — and it should not be used to tidy up. Ordinary deletion already removes the person's access; letting the window expire on its own costs nothing and keeps the recovery option open.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe deleted user's object id, from the deleted-user listing.

[Microsoft Graph] Remove one or more Microsoft 365 licences from a user. Marked destructive because removing a licence can DELETE DATA: taking Exchange Online off an account starts a 30-day clock after which the mailbox and its contents are gone, and the same pattern applies to OneDrive. If the goal is to stop someone using an account rather than to reclaim a seat, disable the account instead and remove the licence only once the mailbox has been dealt with. A licence inherited from a group cannot be removed here at all — that one is changed by editing the group membership, and attempting it on the user fails.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
skuIdsstringyesComma-separated SKU ids (GUIDs) to remove.
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] Clear the manager relationship on a user, leaving them with none. Marked destructive because the relationship is what approval workflows and dynamic group rules read, so removing it can silently stop an approval chain or drop the person out of a group they were in by virtue of their reporting line — neither of which announces itself. Reversible by setting a manager again, provided you know who it was; read the current one before clearing it.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] Set a new password on a user account. The password you supply takes effect immediately and the old one stops working, so this locks the person out until they are given the new one — which is why it is marked destructive despite being a routine helpdesk action. Leave forceChangePasswordNextSignIn on so the temporary password you communicate does not become their permanent one. Two limits are Microsoft's rather than StackJack's and are worth expecting: an administrator can only reset the password of a user whose own role is no higher than theirs, so a Helpdesk Administrator is correctly refused on a Global Administrator; and resetting a password does not sign the user out of existing sessions, so during an account compromise revoke their sign-in sessions as well.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
forceChangePasswordNextSignInbooleannotrueWhether the user must change it at next sign-in. Defaults to true and should normally stay on.
newPasswordstringyesThe new password. Must satisfy the directory's password policy.
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] Restore a user account from the directory's recycle bin, within the 30-day window. The account comes back with its original object id, which is what makes the restore genuinely complete rather than a lookalike — group memberships, licences and every permission granted to that id are intact, where a freshly created account with the same name would have none of them. Not marked destructive: it undoes a deletion. Use the deleted-user listing to find the object id, since the account no longer answers to its sign-in address.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe deleted user's object id, from the deleted-user listing.

[Microsoft Graph] Invalidate every refresh token and session cookie a user holds, forcing them to sign in again everywhere — browsers, Outlook, Teams, phones. This is the containment action for a compromised account, and the piece that disabling alone does not do: a disabled account's existing sessions keep working until their tokens expire, which can be hours. Marked destructive because it interrupts the person's work on every device at once. Use it together with a password reset during an incident; on its own it only buys time, since whoever has the password can sign back in.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] Enable or disable a user's account — the standard first step of an offboarding, and the standard containment step for a compromised one. Disabling blocks new sign-ins immediately but does NOT end sessions that are already running; revoking the sign-in sessions is the companion call and both are needed to actually get someone out. Marked destructive because it locks a human out of their work, and because the same call re-enabling an account is how a mistaken disable during an incident quietly restores an attacker's access. It is reversible, unlike deletion, which is why disabling is the right thing to do first while a departure is confirmed.

ParamTypeRequiredDefaultDescription
accountEnabledbooleanyesTrue to allow sign-in, false to block it.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] Set or replace the person recorded as a user's manager. Additive and immediately reversible by setting a different one, so it is not marked destructive — but it is worth knowing that this relationship is load-bearing rather than decorative: approval workflows, access reviews and dynamic group rules read it, so setting it wrong quietly routes approvals to the wrong person. Assigning a new manager replaces any existing one; there is only ever one.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managerIdstringyesThe manager's object id or user principal name.
userIdstringyesThe user's object id or user principal name.

[Microsoft Graph] Update a user's profile details — display name, job title, department, office, phone numbers, usage location. This is a merge: properties you do not name are left exactly as they were, so it is safe to change one field without restating the rest. Not marked destructive because every field it touches is a label that can be set back. Changing the sign-in address is deliberately NOT part of this tool: renaming a user principal name affects sign-in, licensing and any system that keys on the address, and it belongs in a deliberate process rather than a general update.

ParamTypeRequiredDefaultDescription
departmentstringnonullNew department.
displayNamestringnonullNew display name.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
jobTitlestringnonullNew job title.
mobilePhonestringnonullNew mobile phone number.
officeLocationstringnonullNew office location.
usageLocationstringnonullNew two-letter usage location, for example "US". Required before licences can be assigned.
userIdstringyesThe user's object id or user principal name.

Groups

ToolPlanAccessSummary
graph_add_group_memberProWriteAdd a user, device, service principal or another group to a group.
graph_add_group_ownerProWriteAdd an owner to a group.
graph_create_groupProWriteCreate a security group or a Microsoft 365 group.
graph_delete_groupProDestructiveDelete a group.
graph_get_groupFreeRead-onlyGet one group in full by object id, including its kind, description, mail address, visibility, expiry date and — for a dynamic group — the membership rule that decides who is in it.
graph_list_deleted_groupsFreeRead-onlyList groups that have been deleted but are still recoverable.
graph_list_group_app_role_assignmentsFreeRead-onlyList the enterprise applications a group is assigned to, and the role it holds in each.
graph_list_group_membersFreeRead-onlyList the DIRECT members of a group — the users, other groups, devices and service principals added to it explicitly.
graph_list_group_membershipsFreeRead-onlyList the groups and directory roles that a GROUP is itself a member of — the upward view of nesting.
graph_list_group_ownersFreeRead-onlyList the owners of a group — the people who can manage its membership and settings without being directory administrators.
graph_list_group_transitive_membersFreeRead-onlyList everyone who is effectively a member of a group, flattening every level of nesting.
graph_list_groupsFreeRead-onlyList the groups in an Entra ID directory — security groups, Microsoft 365 groups and distribution lists.
graph_permanently_delete_groupProDestructivePermanently remove a deleted group from the recycle bin, ending the 30-day recovery window immediately.
graph_remove_group_memberProDestructiveRemove a member from a group.
graph_remove_group_ownerProDestructiveRemove an owner from a group.
graph_renew_groupProWriteRenew a Microsoft 365 group, restarting its expiration clock.
graph_restore_deleted_groupProWriteRestore a group from the directory's recycle bin, within the 30-day window.
graph_update_groupProWriteUpdate a group's name, description or visibility.
graph_update_group_dynamic_membership_ruleProDestructiveChange the rule that decides who belongs to a dynamic group.

[Microsoft Graph] Add a user, device, service principal or another group to a group. Additive and undone by the matching removal, so not marked destructive — but be aware of what it grants: whatever the group was assigned, including anything reached by nesting the group inside a broader one, applies to the new member immediately. Check the group's own memberships and application assignments first if the grant is not obvious. Adding to a DYNAMIC group is refused by Microsoft rather than ignored: its membership comes from a rule, and the rule is the only way in.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id.
memberIdstringyesObject id of the user, group, device or service principal to add.

[Microsoft Graph] Add an owner to a group. Owners manage the group's membership and settings without needing a directory-wide administrator role, which makes this the least-privilege way to hand a team control of its own group. Additive and reversible, so not destructive — though note an owner can add themselves and anyone else to the group, so the grant is broader than it first appears when the group carries real access.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id.
ownerIdstringyesObject id of the user to make an owner.

[Microsoft Graph] Create a security group or a Microsoft 365 group. Additive and deletable, so not marked destructive — but choose the kind deliberately, because it cannot be changed afterwards: a security group grants access and nothing more, while a Microsoft 365 group also provisions a mailbox, a SharePoint site and a Teams team, which is either exactly what was wanted or a surprising amount of infrastructure for a permissions container. Mail-enabled security groups cannot be created through this API at all. The creator is not automatically an owner, so set owners as a separate step, and note a new Microsoft 365 group's SharePoint site takes a few minutes to finish provisioning.

ParamTypeRequiredDefaultDescription
descriptionstringnonullDescription of the group's purpose.
displayNamestringyesDisplay name for the group.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
mailNicknamestringyesMail nickname — the local part of the address, letters and digits only, for example "finance-team".
microsoft365GroupbooleannofalseTrue for a Microsoft 365 group (adds a mailbox, SharePoint site and Teams team); false for a plain security group.
visibilitystringnonullVisibility for a Microsoft 365 group: "Private", "Public" or "HiddenMembership".

[Microsoft Graph] Delete a group. Recoverable for 30 days, then permanent. Marked destructive, and for a Microsoft 365 group the weight is much greater than the word suggests: the mailbox, the SharePoint site and every Teams conversation go with it, so this is a content deletion rather than a permissions change. Read the group first to see which kind it is, and read its effective membership to see who loses access — for a nested group that number is routinely far larger than the direct member count. If the goal is only to stop the group granting access, removing its application assignments is narrower and reversible.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id.

[Microsoft Graph] Get one group in full by object id, including its kind, description, mail address, visibility, expiry date and — for a dynamic group — the membership rule that decides who is in it. Read this before changing a group's membership: it is what tells you whether the group is dynamic, in which case adding and removing members will be refused and the rule is the only lever, and whether it is a Microsoft 365 group carrying a mailbox and a site that a deletion would take with it.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id.
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] List groups that have been deleted but are still recoverable. Entra ID keeps a deleted group for 30 days, and restoring one brings back its object id, its membership and — for a Microsoft 365 group — its mailbox, SharePoint site and Teams conversations. That last point is why this read matters more for groups than for users: a deleted Microsoft 365 group is not just a lost permission, it is a team's content sitting on a 30-day timer, and nobody notices until someone tries to open a file.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "startsWith(displayName,'Project')".
maxItemsintegerno1000Maximum groups to return (1-1000, default 1000).

[Microsoft Graph] List the enterprise applications a group is assigned to, and the role it holds in each. This is the read that turns "who is in this group" into "what does this group actually get you" — membership means nothing until you know what the group was granted, and this is the directory's own answer. Pair it with the effective-membership listing to size an application's real user base, which is usually the number a licence conversation needs.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id.
maxItemsintegerno1000Maximum assignments to return (1-1000, default 1000).

[Microsoft Graph] List the DIRECT members of a group — the users, other groups, devices and service principals added to it explicitly. This is the list you edit: a member that appears here can be removed from this group, and one that does not appear but still has access is reaching it through nesting, which the effective-membership read exposes. Note that nested groups appear as members in their own right rather than being flattened, so a short list here can still mean hundreds of people have access.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter over the members.
groupIdstringyesThe group's object id.
maxItemsintegerno1000Maximum members to return (1-1000, default 1000).

[Microsoft Graph] List the groups and directory roles that a GROUP is itself a member of — the upward view of nesting. This is what explains an access surprise that the membership reads cannot: everyone in a small team group turns out to reach a sensitive resource because that group was nested inside a broad one years ago. Read it before deleting or repurposing any group, since removing it detaches everyone inside it from whatever the parent granted.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id.
maxItemsintegerno1000Maximum objects to return (1-1000, default 1000).

[Microsoft Graph] List the owners of a group — the people who can manage its membership and settings without being directory administrators. Worth checking during offboarding for the same reason owned applications matter: a group whose only owner has left is one that self-service requests cannot be approved for, and for a Microsoft 365 group that quietly blocks the team's own ability to manage itself. An empty owner list is legitimate for groups managed centrally, but it is usually worth flagging.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id.
maxItemsintegerno1000Maximum owners to return (1-1000, default 1000).

[Microsoft Graph] List everyone who is effectively a member of a group, flattening every level of nesting. This is the honest answer to "who can actually reach this", and for an access review it is the only one worth quoting — the direct listing routinely understates it by an order of magnitude in a directory that nests groups, which most do. Use it to size the blast radius before granting a group access to something, and use the direct listing when you intend to change a membership, because someone who appears only here cannot be removed from this group.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id.
maxItemsintegerno1000Maximum members to return (1-1000, default 1000).

[Microsoft Graph] List the groups in an Entra ID directory — security groups, Microsoft 365 groups and distribution lists. Groups are where access is granted in practice, so this is the starting point for almost any permissions question. Two filters earn their keep: "securityEnabled eq true" separates access-granting groups from collaboration ones, and "groupTypes/any(c:c eq 'DynamicMembership')" finds the rule-driven groups whose membership cannot be edited by hand. The response distinguishes the kinds only indirectly — a Microsoft 365 group has "Unified" in its groupTypes — and the distinction matters before any deletion, because deleting a Microsoft 365 group takes its mailbox, SharePoint site and Teams team with it.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "securityEnabled eq true" or "startsWith(displayName,'Finance')".
maxItemsintegerno1000Maximum groups to return (1-1000, default 1000).
orderbystringnonullOData sort, for example "displayName".
searchstringnonullFree-text search, for example "displayName:finance".
selectstringnonullComma-separated properties to return.

[Microsoft Graph] Permanently remove a deleted group from the recycle bin, ending the 30-day recovery window immediately. There is NO undo: for a Microsoft 365 group this destroys the mailbox, the SharePoint site and the Teams conversation history outright, and a group recreated with the same name inherits none of it. This exists for cases where a record genuinely must not remain, not for tidying — ordinary deletion has already removed the group's effect, and letting the window expire naturally costs nothing while keeping the recovery option open.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe deleted group's object id, from the deleted-group listing.

[Microsoft Graph] Remove a member from a group. Marked destructive because it takes away access the person is relying on and nothing tells them what broke — the failure they experience is a document that will not open, not a message about group membership. For a Microsoft 365 group it also removes them from the associated Teams team and its conversations. Only DIRECT members can be removed: somebody who is in the group through nesting is refused here, and the removal has to happen in whichever group holds their direct membership. Reversible by adding them back, provided the loss is noticed.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id.
memberIdstringyesObject id of the member to remove.

[Microsoft Graph] Remove an owner from a group. Marked destructive because of what it can leave behind: a group with no owners at all, which nobody outside the directory administrators can then manage, and which blocks self-service membership requests and — for a Microsoft 365 group — the team's own ability to administer itself. Read the owner list first and confirm at least one will remain. Recovering from an ownerless group needs an administrator, so this is easy to undo and easy not to notice.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id.
ownerIdstringyesObject id of the owner to remove.

[Microsoft Graph] Renew a Microsoft 365 group, restarting its expiration clock. Directories with an expiration policy delete groups nobody has renewed — along with the mailbox, SharePoint site and Teams conversations — so this is the call that saves a team's content when the owner has stopped reading the renewal reminders, which is most of them. Purely additive: it extends a lifetime and takes nothing away.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id.

[Microsoft Graph] Restore a group from the directory's recycle bin, within the 30-day window. The group returns with its original object id, which is what makes the restore complete rather than a lookalike — every permission granted to that id comes back with it, where a new group of the same name would have none. For a Microsoft 365 group the mailbox, SharePoint site and Teams conversations are restored too, though the site can take a while to reappear. Not destructive: it undoes a deletion.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe deleted group's object id, from the deleted-group listing.

[Microsoft Graph] Update a group's name, description or visibility. A merge, so properties you do not name are left alone, and every field it touches is a label that can be set back — hence not destructive. The group's KIND is deliberately not changeable here because Microsoft does not allow it: a security group cannot become a Microsoft 365 group or the reverse, and the only route between them is to create the other kind and move the membership.

ParamTypeRequiredDefaultDescription
descriptionstringnonullNew description.
displayNamestringnonullNew display name.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id.
visibilitystringnonullNew visibility for a Microsoft 365 group: "Private", "Public" or "HiddenMembership".

[Microsoft Graph] Change the rule that decides who belongs to a dynamic group. This is the sharpest write in the family and is marked destructive for a reason that is easy to miss: the rule is not a filter on a list you can review first, it is the membership itself, so a wrong expression silently adds or removes hundreds of people the moment Entra re-evaluates it — and everything those people gained or lost access to changes with them. Read the current rule and record it before changing anything, because there is no undo beyond putting the old expression back, and a rule that returns nobody looks exactly like a rule that is still processing. Membership is recomputed asynchronously and can take minutes to settle in a large directory.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id. Must already be a dynamic group.
membershipRulestringyesThe membership rule, for example "(user.department -eq "Finance")".
membershipRuleProcessingStatestringno"On"Processing state: "On" to evaluate the rule, "Paused" to stop re-evaluating it.

Delegated Admin (GDAP)

ToolPlanAccessSummary
graph_approve_delegated_admin_relationshipProWriteApprove a GDAP relationship that an indirect provider created for you as an indirect reseller.
graph_create_delegated_admin_access_assignmentProDestructiveGrant one of the partner's security groups a set of administrative roles inside a customer's tenant.
graph_create_delegated_admin_relationshipProWriteCreate a GDAP relationship request for a customer.
graph_delete_delegated_admin_access_assignmentProDestructiveRemove an access assignment, revoking that partner group's administrative roles in the customer's tenant.
graph_delete_delegated_admin_relationshipProDestructiveDelete a GDAP relationship outright.
graph_get_delegated_admin_access_assignmentFreeRead-onlyGet one GDAP access assignment, naming the partner security group it is built on and the exact customer roles that group receives.
graph_get_delegated_admin_customerFreeRead-onlyGet one delegated-admin customer by id, with its display name and tenant id.
graph_get_delegated_admin_relationshipFreeRead-onlyGet one GDAP relationship in full, including the exact set of Entra role definition ids it grants, its activation and end dates, and whether it auto-extends.
graph_get_delegated_admin_relationship_operationFreeRead-onlyGet one long-running GDAP operation by id and see whether it succeeded, is still running, or failed and why.
graph_get_delegated_admin_relationship_requestFreeRead-onlyGet one GDAP relationship request by id, with the action it carried and its outcome.
graph_list_delegated_admin_access_assignmentsFreeRead-onlyList the access assignments on one GDAP relationship — which of the partner's own security groups holds which of the customer's Entra roles.
graph_list_delegated_admin_customer_service_management_detailsFreeRead-onlyList the service-management links for one delegated-admin customer — the per-workload administration URLs (Exchange, Teams, SharePoint and the rest) that open that customer's admin centre directly.
graph_list_delegated_admin_customersFreeRead-onlyList the customers this partner can administer, as the delegated-admin surface sees them.
graph_list_delegated_admin_relationship_operationsFreeRead-onlyList the long-running operations on one GDAP relationship.
graph_list_delegated_admin_relationship_requestsFreeRead-onlyList the requests raised against one GDAP relationship — the lock-for-approval, approve, reject and terminate actions and how each of them finished.
graph_list_delegated_admin_relationshipsFreeRead-onlyList every GDAP relationship this partner tenant holds — one per customer per grant, with the roles it carries, its duration and its status.
graph_lock_delegated_admin_relationship_for_approvalProWriteFinalize a draft GDAP relationship and lock it for the customer's approval, moving it from "created" to "approvalPending".
graph_reject_delegated_admin_relationshipProDestructiveReject a pending GDAP relationship that an indirect provider created for you as an indirect reseller.
graph_terminate_delegated_admin_relationshipProDestructiveEnd an active GDAP relationship.
graph_update_delegated_admin_access_assignmentProDestructiveReplace the set of customer roles an existing access assignment grants.
graph_update_delegated_admin_relationshipProWriteUpdate a GDAP relationship's name, duration, requested roles or auto-extension.

[Microsoft Graph] Approve a GDAP relationship that an indirect provider created for you as an indirect reseller. Additive — it accepts a grant rather than removing one — but understand what is being accepted: approving activates every role named in the relationship, so read the relationship first and confirm the role list is what was agreed rather than the provider's default. This is not the tool a partner uses on their own relationships; the CUSTOMER approves those through their admin portal, not through this API.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
relationshipIdstringyesThe relationship's id. Must be in the "approvalPending" status.

[Microsoft Graph] Grant one of the partner's security groups a set of administrative roles inside a customer's tenant. Marked destructive despite being a grant, which is deliberate and worth understanding: unlike adding one person to one group, this hands every current AND future member of that group live administrative power in somebody else's production tenant, and the customer's own directory shows only the group, never who is in it. Deleting the assignment later stops future access but undoes nothing that was already done with it. Name the narrowest group and the fewest roles that do the job — the roles must be a subset of what the relationship itself carries, and anything beyond that is refused. Assignment is asynchronous and takes a few minutes to become usable.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
relationshipIdstringyesThe relationship's id. Must be in the "active" status.
roleDefinitionIdsstringyesComma-separated Entra role definition template ids to grant. Must be a subset of the relationship's own roles.
securityGroupIdstringyesObject id of the PARTNER security group whose members receive the roles.

[Microsoft Graph] Create a GDAP relationship request for a customer. Not destructive: it creates a DRAFT in the "created" status that grants nothing at all — the customer must approve it before any access exists, and until then it is freely editable and deletable. Choose the roles deliberately anyway, because the set you name here is the ceiling for the relationship's whole life and widening it later means going back to the customer for another approval. Leave the customer tenant id empty to create a relationship any customer can accept via the invitation link; supply it to lock the draft to one specific tenant, which is the safer default. The duration is ISO 8601 between P1D and P2Y.

ParamTypeRequiredDefaultDescription
autoExtendDurationstringnonullAuto-extension in ISO 8601: "P180D" to auto-extend, or "PT0S" to expire at the end date.
customerTenantIdstringnonullCustomer tenant id to lock this relationship to. Omit to allow any customer to accept the invitation.
displayNamestringyesDisplay name for the relationship. Must be unique across all of this partner's relationships; 50 characters maximum.
durationstringyesRelationship duration in ISO 8601, between "P1D" and "P2Y" — for example "P180D".
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
roleDefinitionIdsstringyesComma-separated Entra role definition template ids the relationship requests.

[Microsoft Graph] Remove an access assignment, revoking that partner group's administrative roles in the customer's tenant. Destructive: everyone in the group loses that access, and what they experience is an admin centre that stops working rather than any message explaining why. This is the RIGHT tool for narrowing access — it is far less drastic than terminating the relationship, which ends the customer engagement entirely — but check the remaining assignments first, because removing the last one leaves an active relationship that grants nobody anything and looks exactly like a platform fault. Requires the If-Match ETag from a preceding read.

ParamTypeRequiredDefaultDescription
accessAssignmentIdstringyesThe access assignment's id.
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
etagstringyesThe @odata.etag from a preceding get or list of this assignment. Required by Microsoft.
relationshipIdstringyesThe relationship's id.

[Microsoft Graph] Delete a GDAP relationship outright. Destructive and permanent — there is no recycle bin for these, and recreating one means another approval cycle with the customer. Microsoft only accepts this on a relationship that never became active; an active one must be terminated instead, which is a different tool with a different asynchronous lifecycle. In practice this is the tidy-up call for abandoned drafts and rejected invitations, and it is worth reading the relationship's status first so the refusal on an active one is expected rather than confusing. Requires the If-Match ETag from a preceding read.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
etagstringyesThe @odata.etag from a preceding get or list of this relationship. Required by Microsoft.
relationshipIdstringyesThe relationship's id.

[Microsoft Graph] Get one GDAP access assignment, naming the partner security group it is built on and the exact customer roles that group receives. Read it before changing or removing an assignment: the response carries the @odata.etag that the update and delete tools require, and the group id it names is where the technicians actually come from — removing someone from that group is usually the narrower fix than touching the assignment at all.

ParamTypeRequiredDefaultDescription
accessAssignmentIdstringyesThe access assignment's id.
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
relationshipIdstringyesThe relationship's id.

[Microsoft Graph] Get one delegated-admin customer by id, with its display name and tenant id. Use it to confirm you are pointing a customer-directory call at the tenant you think you are — the display names MSPs give relationships drift from the customer's real organisation name over time, and acting in the wrong customer's directory is the mistake this connector most needs to make hard.

ParamTypeRequiredDefaultDescription
customerIdstringyesThe delegated admin customer's id.
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one GDAP relationship in full, including the exact set of Entra role definition ids it grants, its activation and end dates, and whether it auto-extends. Read this before any relationship write for two separate reasons: the status decides which writes are legal at all, and the response carries the @odata.etag that the update and delete tools require as their If-Match value. The role list here is the CEILING — an access assignment can grant a subset of it to a technician group but never more, so a role missing from this list explains a 403 that no amount of group membership will fix.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
relationshipIdstringyesThe relationship's id.
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] Get one long-running GDAP operation by id and see whether it succeeded, is still running, or failed and why. This is the tool to poll after a write that answered with a job rather than a result; the operation id comes from the operations listing or from the Location header Graph returned on the original write.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
operationIdstringyesThe operation's id.
relationshipIdstringyesThe relationship's id.

[Microsoft Graph] Get one GDAP relationship request by id, with the action it carried and its outcome. Use it to poll after submitting a relationship for approval or terminating one: both are asynchronous, so the tool that raised the request returns before anything has actually changed, and this is what tells you whether the platform finished the job.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
relationshipIdstringyesThe relationship's id.
requestIdstringyesThe request's id.

[Microsoft Graph] List the access assignments on one GDAP relationship — which of the partner's own security groups holds which of the customer's Entra roles. This is the answer to "who at my company can administer this customer, and as what", and it is the read every access review needs, because the relationship alone only says what the customer permitted, not who the partner pointed at it. An empty list on an active relationship is the classic half-finished onboarding: the customer has approved everything and no technician can do a thing.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter over the assignments.
maxItemsintegerno1000Maximum assignments to return (1-1000, default 1000). Graph serves at most 300 per page here.
relationshipIdstringyesThe relationship's id.

[Microsoft Graph] List the service-management links for one delegated-admin customer — the per-workload administration URLs (Exchange, Teams, SharePoint and the rest) that open that customer's admin centre directly. Useful when a task genuinely needs a portal rather than an API: these are the correct deep links for the customer's tenant, which is otherwise a fiddly URL to construct by hand and easy to construct for the wrong tenant.

ParamTypeRequiredDefaultDescription
customerIdstringyesThe delegated admin customer's id.
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
maxItemsintegerno1000Maximum links to return (1-1000, default 1000).

[Microsoft Graph] List the customers this partner can administer, as the delegated-admin surface sees them. Distinct from the relationship listing and worth knowing which you want: this is one row per CUSTOMER, so it is the clean answer to "who are my managed tenants", while the relationship listing is one row per GRANT and a customer with three overlapping relationships appears three times there. The tenant ids returned here are what every other tool in this connector accepts as its target directory.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "startsWith(displayName,'Contoso')".
maxItemsintegerno1000Maximum customers to return (1-1000, default 1000).

[Microsoft Graph] List the long-running operations on one GDAP relationship. Several GDAP writes do not finish when the call returns — removing the Global Administrator role from an active relationship and terminating a relationship both hand back a job rather than a result — and this is where that job's progress lives. If a change looks like it did not take, check here before repeating it: a second attempt against an in-flight operation is how a relationship ends up in a state nobody intended.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
maxItemsintegerno1000Maximum operations to return (1-1000, default 1000).
relationshipIdstringyesThe relationship's id.

[Microsoft Graph] List the requests raised against one GDAP relationship — the lock-for-approval, approve, reject and terminate actions and how each of them finished. This is the audit trail for how a relationship reached its current status, and the place to look when a customer says they approved something that is not active: a request sitting at "pending" means the platform is still provisioning, while "failed" means the action was rejected and the relationship never moved.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
maxItemsintegerno1000Maximum requests to return (1-1000, default 1000).
relationshipIdstringyesThe relationship's id.

[Microsoft Graph] List every GDAP relationship this partner tenant holds — one per customer per grant, with the roles it carries, its duration and its status. This is the entry point for the whole connector: the customer tenant ids it returns are what every other tool's tenant parameter takes, and the status tells you whether that access is usable today. Filter "status eq 'active'" for the customers you can actually administer right now, or "status eq 'expiring'" for the renewal list, which is the report most MSPs never build and then get surprised by. A relationship listed as active still grants nobody anything until an access assignment maps a technician group onto it.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "status eq 'active'" or "customer/tenantId eq '<guid>'".
maxItemsintegerno1000Maximum relationships to return (1-1000, default 1000).
orderbystringnonullOData sort, for example "status".
selectstringnonullComma-separated properties to return.

[Microsoft Graph] Finalize a draft GDAP relationship and lock it for the customer's approval, moving it from "created" to "approvalPending". Not destructive — it grants nothing and the customer still has to accept — but it is the point of no return for EDITING: once locked, the roles and duration can no longer be changed, and getting them wrong means deleting the draft and starting over. After this succeeds, send the customer their invitation link at https://admin.microsoft.com/AdminPortal/Home#/partners/invitation/granularAdminRelationships/ followed by the relationship id.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
relationshipIdstringyesThe relationship's id. Must be in the "created" status.

[Microsoft Graph] Reject a pending GDAP relationship that an indirect provider created for you as an indirect reseller. Marked destructive because it is terminal and one-way: the relationship cannot be revived, and restoring the intended access means asking the provider to create a new one and waiting for that cycle again. Read the relationship first — a rejection because the role list looked wrong costs days, where asking the provider to amend the draft costs minutes. Note that a rejected request may read back with the action "unknownFutureValue" rather than "reject", which is Graph's evolvable-enum behaviour and not a failure.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
relationshipIdstringyesThe relationship's id. Must be in the "approvalPending" status.

[Microsoft Graph] End an active GDAP relationship. This is the single most destructive call in the connector: it removes the partner's entire administrative access to that customer's tenant, every access assignment on it stops working, and no technician can manage that customer afterwards — including, if this was the last relationship, whoever needs to fix it. It is not reversible; restoring access means creating a new relationship and getting the customer to approve it again, which needs a human at the customer who may not be reachable. Termination is asynchronous, so the relationship moves to "terminationRequested" and then "terminated" over the following minutes; poll the operations listing rather than repeating the call. Use it for genuine offboarding, and prefer deleting individual access assignments when the goal is only to narrow who can act.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
relationshipIdstringyesThe relationship's id. Must be in the "active" status.

[Microsoft Graph] Replace the set of customer roles an existing access assignment grants. Destructive for the same reason a dynamic group's membership rule is: the role list IS the access, so this single call both grants and revokes — any role you omit is removed from everyone in that group, immediately and with no warning to them. Read the assignment first, decide against its current list rather than from memory, and send the full intended set; this is not an additive call. Requires the If-Match ETag from that read, which Microsoft mandates and which is what prevents two concurrent edits from silently discarding one another.

ParamTypeRequiredDefaultDescription
accessAssignmentIdstringyesThe access assignment's id.
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
etagstringyesThe @odata.etag from a preceding get or list of this assignment. Required by Microsoft.
relationshipIdstringyesThe relationship's id.
roleDefinitionIdsstringyesThe COMPLETE comma-separated set of Entra role definition template ids the group should hold. Roles omitted here are revoked.

[Microsoft Graph] Update a GDAP relationship's name, duration, requested roles or auto-extension. Requires the If-Match ETag from a preceding get, which is Microsoft's requirement rather than StackJack's, and which is what stops two technicians overwriting each other on an access-control record. Not destructive, because what it can reach is bounded by status: while the relationship is "created" it is a draft nobody has access through yet, and once it is "active" the only property that can change is the auto-extension — a scheduled future expiry, reversible by setting it back, with no effect on access today. The one exception to that is asynchronous: removing the Global Administrator role from an active relationship returns a long-running operation instead of a result, so poll the operations listing rather than assuming it finished.

ParamTypeRequiredDefaultDescription
autoExtendDurationstringnonullNew auto-extension in ISO 8601: "P180D" or "PT0S". Settable while "created" or "active".
displayNamestringnonullNew display name.
durationstringnonullNew duration in ISO 8601, between "P1D" and "P2Y". Only settable while the relationship is in the "created" status.
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own directory.
etagstringyesThe @odata.etag from a preceding get or list of this relationship. Required by Microsoft.
relationshipIdstringyesThe relationship's id.
roleDefinitionIdsstringnonullNew comma-separated Entra role definition template ids. Only settable while the relationship is in the "created" status, except that removing the Global Administrator role is also allowed while active.

Licensing

ToolPlanAccessSummary
graph_assign_group_licenseProWriteAssign licence SKUs to a group, so every member receives them automatically.
graph_get_group_license_assignmentFreeRead-onlyGet the licences assigned to a group and the current state of applying them to its members.
graph_get_subscribed_skuFreeRead-onlyGet one purchased SKU in full, including every service plan it contains and each plan's provisioning status.
graph_get_user_license_assignment_statesFreeRead-onlyGet the per-SKU assignment state for one user — where each licence came from, whether it applied cleanly, and the exact error when it did not.
graph_list_subscribed_skusFreeRead-onlyList every licence SKU the tenant has bought, with how many units were purchased, how many are assigned and how many remain.
graph_list_users_with_licenseFreeRead-onlyList everyone assigned a particular licence SKU.
graph_remove_group_licenseProDestructiveRemove licence SKUs from a group, which unlicenses every member who was relying on that group for them.
graph_reprocess_user_license_assignmentProWriteRe-evaluate a user's group-based licence assignments.

[Microsoft Graph] Assign licence SKUs to a group, so every member receives them automatically. This is the right way to license a role rather than a person — new starters get licensed by being added to the group and nobody has to remember — and it is additive, so not destructive. Be deliberate about the group though: the assignment applies to every current member and everyone added later, so pointing it at a broad group can consume a SKU's remaining units in one action. Assignment is asynchronous and fans out over minutes or longer; check the group's processing state rather than assuming it finished.

ParamTypeRequiredDefaultDescription
disabledPlanIdsstringnonullComma-separated service plan ids to switch OFF inside the assigned licences.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id.
skuIdsstringyesComma-separated licence SKU ids (GUIDs) to assign.

[Microsoft Graph] Get the licences assigned to a group and the current state of applying them to its members. Group-based licensing fans out asynchronously, so a processing state of ProcessingInProgress means members are still being licensed and an empty-looking result is premature rather than wrong. A state of ProcessingWithErrors means some members failed — usually a missing usage location or an exhausted SKU — and each affected user's own assignment states name the reason.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id.

[Microsoft Graph] Get one purchased SKU in full, including every service plan it contains and each plan's provisioning status. Read it before a partial assignment: disabling plans is done by service plan id, those ids live only here, and guessing one produces a refusal rather than a partial licence. It is also how to answer "does this licence include Intune" without consulting a product page that may not match what the tenant actually bought.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
subscribedSkuIdstringyesThe subscribed SKU's object id.

[Microsoft Graph] Get the per-SKU assignment state for one user — where each licence came from, whether it applied cleanly, and the exact error when it did not. This is the diagnostic read of the family and the answer to the two questions the friendly licence list cannot settle. First, provenance: a state carrying a group id was INHERITED, and an inherited licence cannot be removed from the user — the removal has to happen on that group or the user has to leave it. Second, failure: an error of CountViolation means the tenant ran out of units, MutuallyExclusiveViolation means a conflicting licence is already assigned, DependencyViolation means a prerequisite plan is switched off, and ProhibitedInUsageLocationViolation means the service is not offered in the user's country.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] List every licence SKU the tenant has bought, with how many units were purchased, how many are assigned and how many remain. This is the true-up read and the starting point for anything licensing-related: the sku ids it returns are what every assignment tool takes, and the service plans inside each SKU are what a partial assignment disables. The gap between enabled and consumed units is the number a renewal conversation turns on, and a SKU showing warning units is one already past its grace period.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno1000Maximum SKUs to return (1-1000, default 1000).

[Microsoft Graph] List everyone assigned a particular licence SKU. This is the read that turns a purchased-unit count into names — the reclamation list before a renewal, and the answer to "who is this SKU actually for". Pair it with the sign-in activity on those users to find licences paid for by people who have not signed in for months, which is where most licence savings in a real tenant come from. Note this reflects assignment however it arrived, so people licensed through a group appear here too.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno1000Maximum users to return (1-1000, default 1000).
selectstringnonullComma-separated properties to return. Omit for the default set.
skuIdstringyesThe licence SKU id (GUID) from the purchased-SKU listing.

[Microsoft Graph] Remove licence SKUs from a group, which unlicenses every member who was relying on that group for them. The most destructive call in this family by blast radius: it is the per-user removal multiplied by the membership, so the same 30-day mailbox and file deletion clock starts for everyone who had no other source for the licence. Read the group's effective membership first to see the real number — for a nested group it is routinely far larger than the direct member count — and remember that members who ALSO hold the licence directly keep it, which is why the after-state is rarely uniform. Removal fans out asynchronously like the assignment does.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringyesThe group's object id.
skuIdsstringyesComma-separated licence SKU ids (GUIDs) to remove.

[Microsoft Graph] Re-evaluate a user's group-based licence assignments. Not destructive — it changes nothing by itself, it asks Entra to try again — and it is the specific fix for a user stuck in an error state after the underlying cause was resolved. Having bought more units, cleared a conflicting licence or set a missing usage location, this is what makes the assignment take effect rather than waiting for Entra to notice on its own schedule.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or userPrincipalName.

Organization & Domains

ToolPlanAccessSummary
graph_create_domainProWriteAdd a DNS domain to the tenant.
graph_delete_domainProDestructiveRemove a domain from the tenant.
graph_force_delete_domainProDestructiveDelete a domain even though objects still reference it, by RENAMING every referencing user and group onto the tenant's initial onmicrosoft.com domain first — and, unless told otherwise, disabling…
graph_get_domainFreeRead-onlyGet one domain in full.
graph_get_domain_root_domainFreeRead-onlyGet the root domain a subdomain hangs off.
graph_get_organizationFreeRead-onlyGet the tenant's own organization record — display name, postal address, contact emails, preferred language, default usage location, every verified domain, and the service plans the tenant is entitled…
graph_get_organization_brandingFreeRead-onlyGet the company branding applied to the tenant's sign-in experience — background image and colour, banner logo, sign-in page text, username hint and the self-service password reset links.
graph_list_certificate_based_auth_configurationsFreeRead-onlyList the tenant's certificate-based authentication configuration — the trusted certificate authorities that let users sign in with a smart card or client certificate instead of a password.
graph_list_domain_name_referencesFreeRead-onlyList the users, groups and applications whose identity references a domain.
graph_list_domain_service_configuration_recordsFreeRead-onlyGet the DNS records that make Microsoft 365 services actually work on a verified domain — the MX record mail delivery depends on, the SPF TXT record that stops the tenant's own mail being marked as…
graph_list_domain_verification_dns_recordsFreeRead-onlyGet the DNS records that must be published in a domain's zone file BEFORE ownership can be verified.
graph_list_domainsFreeRead-onlyList every DNS domain associated with the tenant, with the four flags that answer most domain questions at a glance: isVerified says whether ownership was proven, isDefault marks the domain new users…
graph_list_group_setting_templatesFreeRead-onlyList the setting templates Entra publishes, each naming the settings it contains, their types and their default values.
graph_list_group_settingsFreeRead-onlyList the tenant-wide directory settings currently in force — despite the endpoint's name these are not per-group settings but organization-wide policy, and they are where several answers live that…
graph_list_organization_branding_localizationsFreeRead-onlyList the per-language overrides of the tenant's sign-in branding.
graph_promote_domainProDestructivePromote a verified subdomain to be a root domain in its own right, so it stops inheriting authentication settings from its parent and carries its own.
graph_update_domainProWriteUpdate a verified domain's supported services, password policy or default status.
graph_update_group_settingProWriteUpdate a tenant-wide directory settings object — guest invitation policy, who may create Microsoft 365 groups, the group naming policy, the banned password list.
graph_update_organizationProWriteUpdate the tenant's organization record — the notification addresses Microsoft uses to reach the customer, the postal address, and the preferred language.
graph_verify_domainProWriteProve ownership of a domain by having Entra look for the verification record in its public DNS.

[Microsoft Graph] Add a DNS domain to the tenant. This is step one of three and on its own achieves nothing visible: Entra creates the domain UNVERIFIED, and until ownership is proven no mailbox or user can use it. Follow it immediately with the verification-DNS-records read, publish those records in the domain's zone file, and then call the verify action. Additive and reversible, so not destructive — an unverified domain added by mistake deletes cleanly because nothing references it yet. The domain name itself becomes the object's id.

ParamTypeRequiredDefaultDescription
domainNamestringyesThe fully qualified domain name to add, e.g. contoso.com.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Remove a domain from the tenant. This is the SAFE delete and it refuses while any user, group or application still references the domain — treat that refusal as the system working rather than an obstacle, and list the domain's references to see what is holding it. Removing a domain that mail is still delivered to stops that mail arriving, which is why it is destructive even when the delete succeeds. The tenant's initial onmicrosoft.com domain can never be deleted. If the refusal has to be overridden, that is the separate forcing delete, and it is a different and much larger operation.

ParamTypeRequiredDefaultDescription
domainNamestringyesThe fully qualified domain name, e.g. contoso.com.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Delete a domain even though objects still reference it, by RENAMING every referencing user and group onto the tenant's initial onmicrosoft.com domain first — and, unless told otherwise, disabling those user accounts. This is the most consequential operation in this family: people lose the address they are known by, mail to the old domain stops, and by default they cannot sign in afterwards. It is a separate tool from the ordinary delete rather than a flag on it, because the ordinary delete's refusal is the only thing standing between a routine tidy-up and a tenant-wide rename. List the domain's references first so the blast radius is a known number, and remove Exchange as the provisioning service beforehand or the operation fails partway. It runs asynchronously, so re-read the domain to confirm it actually completed.

ParamTypeRequiredDefaultDescription
disableUserAccountsbooleannotrueWhether to disable the renamed user accounts. Microsoft's default is true; set false to leave people able to sign in under their new name.
domainNamestringyesThe fully qualified domain name, e.g. contoso.com.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one domain in full. The id is the fully qualified domain name itself — contoso.com, not a GUID — which is unusual for this API and worth knowing before an agent goes looking for an object id that does not exist. Beyond the verification flags this carries the password policy overrides for the domain (how long passwords live and how far ahead users are warned) and, on a domain mid-operation, a state block describing an asynchronous verification or force-delete still running.

ParamTypeRequiredDefaultDescription
domainNamestringyesThe fully qualified domain name, e.g. contoso.com.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get the root domain a subdomain hangs off. A subdomain inherits its authentication type from its root, so when a subdomain behaves unexpectedly at sign-in this identifies the domain whose settings are actually in force. Called against a domain that is already a root, it answers empty rather than failing.

ParamTypeRequiredDefaultDescription
domainNamestringyesThe subdomain's fully qualified name, e.g. sales.contoso.com.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get the tenant's own organization record — display name, postal address, contact emails, preferred language, default usage location, every verified domain, and the service plans the tenant is entitled to. This is the orientation read for a tenant you have just connected to, and the id it returns is the TENANT id that the organization update tool requires. Two properties repay attention on an MSP's own record: partnerTenantType states what kind of Microsoft partnership this tenant holds, and defaultUsageLocation is what stops licence assignment failing for every newly created user. Note Graph returns this as a collection containing exactly one object, so read the first entry of value rather than expecting a bare object.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get the company branding applied to the tenant's sign-in experience — background image and colour, banner logo, sign-in page text, username hint and the self-service password reset links. Useful when a customer reports an unbranded or wrong-looking sign-in page, because that is almost always missing or partially configured branding rather than a fault. This returns the DEFAULT branding object; per-language overrides live in the localizations listing, and a tenant that has never configured branding answers 404 rather than an empty object, which is the expected answer rather than an error.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
organizationIdstringyesThe tenant id, from graph_get_organization.

[Microsoft Graph] List the tenant's certificate-based authentication configuration — the trusted certificate authorities that let users sign in with a smart card or client certificate instead of a password. Relevant mainly to government and regulated customers, where an expired or missing CA in this collection is what breaks sign-in for everyone using a card. Entra permits only a single configuration object in the collection, so this returns at most one entry.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum entries to return (1-999, default 999).
organizationIdstringyesThe tenant id, from graph_get_organization.

[Microsoft Graph] List the users, groups and applications whose identity references a domain. This is the impact assessment before any domain removal, and the answer to a delete that was refused: the ordinary domain delete fails while ANY object still references the domain, and this names them. Run it before considering the forcing delete, because that operation renames every object listed here onto the tenant's initial onmicrosoft.com domain and by default disables the user accounts among them.

ParamTypeRequiredDefaultDescription
domainNamestringyesThe fully qualified domain name, e.g. contoso.com.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum objects to return (1-999, default 999).

[Microsoft Graph] Get the DNS records that make Microsoft 365 services actually work on a verified domain — the MX record mail delivery depends on, the SPF TXT record that stops the tenant's own mail being marked as spam, and the CNAME and SRV records Teams and Skype signalling need. This is the read that answers "the domain is verified, so why is mail not arriving": verification and service configuration are separate steps, and a domain can pass the first while none of these records exist. Compare each returned record against what is actually published in the zone.

ParamTypeRequiredDefaultDescription
domainNamestringyesThe fully qualified domain name, e.g. contoso.com.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum records to return (1-999, default 999).

[Microsoft Graph] Get the DNS records that must be published in a domain's zone file BEFORE ownership can be verified. This is step two of adding a domain and the only step StackJack cannot do for the customer: the records go into the registrar or DNS host, by a human with access to it, and the verify action fails until they have propagated. Read this immediately after creating a domain and hand the values to whoever administers DNS. These are NOT the same as the service configuration records, which come later and make mail and Teams actually work.

ParamTypeRequiredDefaultDescription
domainNamestringyesThe fully qualified domain name, e.g. contoso.com.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum records to return (1-999, default 999).

[Microsoft Graph] List every DNS domain associated with the tenant, with the four flags that answer most domain questions at a glance: isVerified says whether ownership was proven, isDefault marks the domain new users are created under, isInitial marks the permanent onmicrosoft.com domain Microsoft issued and which can never be deleted, and isRoot distinguishes a root domain from a subdomain. The supportedServices collection is what actually decides whether mail and Teams route to a domain, so a verified domain missing Email there is verified but not in use. Start a domain onboarding or a mail-delivery investigation here.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum domains to return (1-999, default 999).

[Microsoft Graph] List the setting templates Entra publishes, each naming the settings it contains, their types and their default values. Read this BEFORE changing any directory setting: the update takes name-value pairs, the names are defined by the template rather than free text, and a misspelled name is accepted and silently does nothing. This is also how to see what a tenant's behaviour currently is when no settings object exists for a template — the template's defaults are what is in force.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum templates to return (1-999, default 999).

[Microsoft Graph] List the tenant-wide directory settings currently in force — despite the endpoint's name these are not per-group settings but organization-wide policy, and they are where several answers live that people expect to find elsewhere: whether members may invite guests, whether ordinary users may create Microsoft 365 groups, the group naming and blocked-word policy, and the custom banned password list. Each entry is a template that has been instantiated and customized; a setting NOT listed here is still at its Microsoft default rather than absent. Read the setting templates to see what the defaults are and which names are valid.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum settings objects to return (1-999, default 999).

[Microsoft Graph] List the per-language overrides of the tenant's sign-in branding. Each entry is keyed by a locale and replaces only the properties it sets, falling back to the default branding for the rest — so a customer reporting that one language looks wrong is describing a localization, not the default. An empty list means every language sees the default branding.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum localizations to return (1-999, default 999).
organizationIdstringyesThe tenant id, from graph_get_organization.

[Microsoft Graph] Promote a verified subdomain to be a root domain in its own right, so it stops inheriting authentication settings from its parent and carries its own. Marked destructive because it is ONE-WAY: Microsoft publishes no demote operation, so the previous inheritance cannot be restored through this API, and every user signing in on that subdomain is authenticated by the new settings from that moment. The subdomain must already be verified. Do this deliberately as part of a planned split — typically when an acquired business on a subdomain needs its own federation — and not to tidy up a domain list.

ParamTypeRequiredDefaultDescription
domainNamestringyesThe verified subdomain's fully qualified name, e.g. sales.contoso.com.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Update a verified domain's supported services, password policy or default status. The supported-services list is the property that decides whether mail and Teams actually route to this domain — Email, OfficeCommunicationsOnline and Yammer are the values that can be set here — and it REPLACES the existing list rather than adding to it, so send every service the domain should keep. Note it cannot be emptied here: an omitted or blank value leaves the current list alone rather than clearing it, which is what makes every other parameter safe to omit, so removing the last service is a portal operation rather than this tool. Making a domain the default changes which domain new users are created under and does not touch existing accounts. Federated authentication is deliberately NOT settable through this tool: switching a domain between managed and federated needs a permission this connector does not request, and getting it wrong stops sign-in for everyone on the domain.

ParamTypeRequiredDefaultDescription
domainNamestringyesThe fully qualified domain name, e.g. contoso.com.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
isDefaultbooleannonullTrue to make this the domain new users are created under.
passwordNotificationWindowInDaysintegernonullDays before expiry that users are warned.
passwordValidityPeriodInDaysintegernonullDays a password stays valid before it must be changed.
supportedServicesstringnonullComma-separated services to support. Settable values: Email, OfficeCommunicationsOnline, Yammer. REPLACES the current list.

[Microsoft Graph] Update a tenant-wide directory settings object — guest invitation policy, who may create Microsoft 365 groups, the group naming policy, the banned password list. Read the current settings first and send the FULL set of name-value pairs you want in force: the setting names come from the object's template and are not free text, and a name that does not exist in the template is accepted and silently does nothing, so a typo looks exactly like a successful change. Sending the complete set also makes the result identical whether Graph merges the collection or replaces it. The values parameter is a JSON array such as [{"name":"AllowToAddGuests","value":"false"}], and every value is a STRING even when it represents a boolean.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupSettingIdstringyesThe settings object's id, from graph_list_group_settings.
valuesstringyesJSON array of name-value pairs, e.g. [{"name":"AllowToAddGuests","value":"false"}].

[Microsoft Graph] Update the tenant's organization record — the notification addresses Microsoft uses to reach the customer, the postal address, and the preferred language. The technical notification address is the one worth getting right on every tenant an MSP manages: it is where Microsoft sends service incidents and expiry warnings, and left pointing at a departed employee those notices go nowhere. This is a merge, so properties you omit are left alone, and it needs the tenant id that graph_get_organization returns. Read-only properties such as the tenant id, creation date and verified-domain list are refused by Graph with a message naming the property.

ParamTypeRequiredDefaultDescription
citystringnonullCity of the organization's address.
countryLetterCodestringnonullCountry or region in ISO 3166-2 format, e.g. GB.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
marketingNotificationEmailsstringnonullComma-separated addresses for Microsoft's marketing notifications.
organizationIdstringyesThe tenant id, from graph_get_organization.
postalCodestringnonullPostal code of the organization's address.
preferredLanguagestringnonullPreferred language as an ISO 639-1 code, e.g. en.
securityComplianceNotificationMailsstringnonullComma-separated addresses for security and compliance notifications.
statestringnonullState or province of the organization's address.
streetstringnonullStreet address of the organization.
technicalNotificationMailsstringnonullComma-separated addresses for Microsoft's technical and service notifications.

[Microsoft Graph] Prove ownership of a domain by having Entra look for the verification record in its public DNS. Step three of adding a domain, and it succeeds only once that record has been published AND propagated — a failure here usually means DNS has not caught up rather than that anything is wrong, so re-read the verification records and check them against the live zone before assuming a fault. Not destructive: it grants a capability rather than removing one. Note that a successful verification does NOT configure the domain for Microsoft 365 — mail, SharePoint and Teams each need their service configuration records published afterwards.

ParamTypeRequiredDefaultDescription
domainNamestringyesThe fully qualified domain name, e.g. contoso.com.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

Applications & Service Principals

ToolPlanAccessSummary
graph_add_application_keyProDestructiveAdd a certificate credential to an app registration, for rolling an expiring certificate without downtime.
graph_add_application_ownerProWriteAdd a user as an owner of an app registration.
graph_add_application_passwordProDestructiveGenerate a new client secret for an app registration and return its value.
graph_add_service_principal_keyProDestructiveAdd a certificate credential to a service principal, for rolling an expiring certificate.
graph_add_service_principal_ownerProWriteAdd a user as an owner of a service principal.
graph_add_service_principal_passwordProDestructiveGenerate a new client secret on a service principal and return its value — the same one-time disclosure as the app-registration version, and the same warning: this response is the only time Microsoft…
graph_create_applicationProWriteRegister a new application in this directory.
graph_create_delegated_grantProDestructiveConsent to delegated permissions for a client application, on behalf of one user or of everyone in the tenant.
graph_create_service_principalProWriteCreate a service principal for an application in this directory — giving an existing app registration an identity here so it can sign in and be assigned access.
graph_delete_applicationProDestructiveDelete an app registration into the 30-day recycle bin, where it can be restored with its object id, client id and credentials intact.
graph_delete_delegated_grantProDestructiveRevoke a delegated permission grant entirely.
graph_delete_service_principalProDestructiveDelete an application's identity in this tenant, taking its consent grants and role assignments with it.
graph_get_applicationFreeRead-onlyGet one app registration in full: its redirect URIs, the API permissions it requests, its credentials and their expiry dates, and whether it is single- or multi-tenant.
graph_get_service_principalFreeRead-onlyGet one service principal in full — an application's identity inside this specific tenant.
graph_grant_app_role_assignmentProDestructiveAssign an app role on a resource application to a user, group or service principal.
graph_list_application_ownersFreeRead-onlyList the owners of an app registration — the people who can change it, add credentials to it and consent on its behalf without holding any directory role.
graph_list_applicationsFreeRead-onlyList the app registrations defined in this directory — the applications the tenant itself owns, not the third-party apps it merely uses.
graph_list_delegated_grantsFreeRead-onlyList every delegated permission grant in the directory — the tenant-wide consent inventory.
graph_list_deleted_applicationsFreeRead-onlyList app registrations in the 30-day recycle bin.
graph_list_service_principal_app_role_assigned_toFreeRead-onlyList the app-role assignments made ON this service principal — who has been given a role in this application.
graph_list_service_principal_app_role_assignmentsFreeRead-onlyList the app-role assignments GRANTED TO this service principal — the application permissions it holds against other APIs, such as Mail.Read or Directory.ReadWrite.All over the whole tenant.
graph_list_service_principal_delegated_grantsFreeRead-onlyList the delegated permission grants for one client application — what it may do on behalf of a signed-in user.
graph_list_service_principal_ownersFreeRead-onlyList the owners of a service principal.
graph_list_service_principalsFreeRead-onlyList the service principals in a directory — every application that has an identity in this tenant, including Microsoft's own first-party services and every third-party app anyone has consented to.
graph_permanently_delete_applicationProDestructivePermanently remove a deleted app registration from the recycle bin.
graph_remove_application_keyProDestructiveRemove a certificate credential from an app registration.
graph_remove_application_ownerProDestructiveRemove an owner from an app registration.
graph_remove_application_passwordProDestructiveDelete a client secret from an app registration by its keyId.
graph_remove_service_principal_keyProDestructiveRemove a certificate credential from a service principal.
graph_remove_service_principal_ownerProDestructiveRemove an owner from a service principal.
graph_remove_service_principal_passwordProDestructiveDelete a client secret from a service principal by its keyId.
graph_restore_deleted_applicationProWriteRestore an app registration from the 30-day recycle bin.
graph_revoke_app_role_assignmentProDestructiveRemove an app-role assignment, revoking that access.
graph_set_service_principal_enabledProDestructiveTurn an application's sign-in on or off in this tenant.
graph_update_applicationProWriteUpdate an app registration's properties.
graph_update_delegated_grantProDestructiveReplace the scopes on an existing delegated permission grant.
graph_update_service_principalProWriteUpdate a service principal's local properties — its display name in this tenant, its notes, its home-page URL, its tags.

[Microsoft Graph] Add a certificate credential to an app registration, for rolling an expiring certificate without downtime. Adding a certificate hands whoever holds its private key the ability to authenticate as this application with all of its permissions, which is why this is Pro and flagged destructive even though it removes nothing. Two hard requirements from Microsoft: only the PUBLIC key should ever be uploaded, and the request must carry a proof — a self-signed JWT signed with the private key of a certificate already on this application. An application with no existing valid certificate cannot use this action at all and must be updated through graph_update_application instead, which is the supported path for the first certificate.

ParamTypeRequiredDefaultDescription
applicationIdstringyesThe application's OBJECT id (not the client/app id).
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
keyCredentialJsonstringyesJSON for the keyCredential — type, usage and key are required. Supply the PUBLIC certificate only.
passwordCredentialJsonstringnonullJSON for the passwordCredential — only needed for X509CertAndPassword keys, where secretText carries the certificate's password.
proofstringyesProof-of-possession JWT, self-signed with the private key of a certificate already on this application. Required by Microsoft; a request without it is refused.

[Microsoft Graph] Add a user as an owner of an app registration. Additive and reversible, so not destructive — but understand what it grants: an owner can change the application, add credentials to it and therefore authenticate as it, without holding any directory role. Prefer at least two owners on anything business-critical, because an application whose only owner leaves is one nobody can renew a secret for.

ParamTypeRequiredDefaultDescription
applicationIdstringyesThe application's OBJECT id (not the client/app id).
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
ownerIdstringyesThe new owner's user object id.

[Microsoft Graph] Generate a new client secret for an app registration and return its value. Microsoft generates the secret — it cannot be chosen — and the response is the ONLY time the value is ever shown: no later read recovers it, and a lost secret can only be replaced, not retrieved. Treat the response as a credential: whoever holds it can authenticate as this application with every permission the app has been consented, without a sign-in, an MFA prompt or a conditional-access check. Always set an end date; an omitted one gives Microsoft's default of two years, which is longer than most of the projects these get created for.

ParamTypeRequiredDefaultDescription
applicationIdstringyesThe application's OBJECT id (not the client/app id).
displayNamestringnonullLabel for the secret, so a later audit can tell what it was for.
endDateTimestringnonullExpiry as ISO 8601, for example 2027-01-31T00:00:00Z. Omit for Microsoft's default of two years.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Add a certificate credential to a service principal, for rolling an expiring certificate. Whoever holds the matching private key can then authenticate as that application in this tenant, which is why this is Pro and flagged destructive despite removing nothing. Requires a proof — a self-signed JWT signed with the private key of a certificate already on this principal — and cannot be used at all on a principal with no existing valid certificate; that case goes through the service principal update instead. Upload the public key only.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
keyCredentialJsonstringyesJSON for the keyCredential — type, usage and key are required. Supply the PUBLIC certificate only.
passwordCredentialJsonstringnonullJSON for the passwordCredential — only needed for X509CertAndPassword keys.
proofstringyesProof-of-possession JWT, self-signed with the private key of a certificate already on this principal. Required by Microsoft; a request without it is refused.
servicePrincipalIdstringyesThe service principal's OBJECT id (not the client/app id).

[Microsoft Graph] Add a user as an owner of a service principal. Additive and reversible. Be aware of what it means on a principal holding broad application permissions: an owner can add a credential to it and then authenticate as that application, so ownership of a highly-permissioned principal is equivalent to holding its permissions.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
ownerIdstringyesThe new owner's user object id.
servicePrincipalIdstringyesThe service principal's OBJECT id (not the client/app id).

[Microsoft Graph] Generate a new client secret on a service principal and return its value — the same one-time disclosure as the app-registration version, and the same warning: this response is the only time Microsoft ever shows the secret. Adding a secret to a service principal is worth a second thought, because it is the local identity of an application that may be published by somebody else: a secret here authenticates as that application in THIS tenant, with whatever it has been granted here. For an app the tenant owns, the credential normally belongs on the app registration instead.

ParamTypeRequiredDefaultDescription
displayNamestringnonullLabel for the secret, so a later audit can tell what it was for.
endDateTimestringnonullExpiry as ISO 8601, for example 2027-01-31T00:00:00Z. Omit for Microsoft's default of two years.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
servicePrincipalIdstringyesThe service principal's OBJECT id (not the client/app id).

[Microsoft Graph] Register a new application in this directory. Creating the registration is additive and harmless on its own — a new app with no credentials, no permissions and nobody consented can do nothing. Two properties are worth setting deliberately: signInAudience decides whether only this tenant can use it or any Microsoft work account can, and changing it later is restricted; and requiredResourceAccess declares the permissions the app will ASK for, which grants nothing by itself and still needs consent. Creating an application does not create its service principal — an app registration with no service principal cannot sign in to its own tenant.

ParamTypeRequiredDefaultDescription
descriptionstringnonullFree-text description.
displayNamestringyesDisplay name for the application.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
notesstringnonullInternal notes for whoever maintains it.
requiredResourceAccessJsonstringnonullJSON array for 'requiredResourceAccess' — the API permissions the app requests. Declaring them grants nothing without consent.
signInAudiencestringnonullWho can use it: AzureADMyOrg (this tenant only), AzureADMultipleOrgs, AzureADandPersonalMicrosoftAccount, or PersonalMicrosoftAccount. Omit for Microsoft's default.
webJsonstringnonullJSON for the 'web' object, for example {"redirectUris":["https://app.example.com/callback"]}.

[Microsoft Graph] Consent to delegated permissions for a client application, on behalf of one user or of everyone in the tenant. Destructive because of what an AllPrincipals grant is: administrator consent for the whole directory, letting the application act as any user for the scopes named, immediately and without anyone being asked. Scopes are a space-separated list and must be permissions the resource application actually publishes — read them from the resource service principal's oauth2PermissionScopes rather than guessing, because an unrecognized scope is accepted into the grant and simply never works. Both clientId and resourceId are service principal OBJECT ids, not client ids.

ParamTypeRequiredDefaultDescription
clientIdstringyesThe CLIENT service principal's OBJECT id — the app being granted access.
consentTypestringno"AllPrincipals"AllPrincipals for tenant-wide admin consent, or Principal for one named user.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
principalIdstringnonullThe user's object id. Required when consentType is Principal, and must be omitted for AllPrincipals.
resourceIdstringyesThe RESOURCE service principal's OBJECT id — the API being accessed.
scopestringyesSpace-separated permission scopes, for example "User.Read Mail.Read".

[Microsoft Graph] Create a service principal for an application in this directory — giving an existing app registration an identity here so it can sign in and be assigned access. The only required property is appId, the CLIENT id of the application. This is what an app registration needs before anything can authenticate as it in its own tenant, and it is also how a multi-tenant application is provisioned into a customer directory ahead of consent. Creating the principal grants it nothing; permissions still arrive through consent or assignment.

ParamTypeRequiredDefaultDescription
accountEnabledbooleannonullSet false to create the principal already disabled.
appIdstringyesThe application's CLIENT id (appId), not its object id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
tagsstringnonullComma-separated tags. WindowsAzureActiveDirectoryIntegratedApp is what makes an app appear on users' My Apps page.

[Microsoft Graph] Delete an app registration into the 30-day recycle bin, where it can be restored with its object id, client id and credentials intact. Destructive despite being recoverable: everything authenticating as this application stops working the moment it is deleted, and because those are integrations rather than people, the failure usually surfaces as a scheduled job that silently stopped rather than as somebody complaining. Check the sign-in logs for the app's client id before deleting anything that looks unused. Deleting the application does NOT delete its service principals in other tenants.

ParamTypeRequiredDefaultDescription
applicationIdstringyesThe application's OBJECT id (not the client/app id).
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Revoke a delegated permission grant entirely. This is the remediation for an illicit-consent finding, and it takes effect for everyone the grant covered as soon as their current access tokens expire — up to about an hour, which is why disabling the service principal is the stronger containment when an application is believed to be actively malicious. Destructive by the standing access-removal rule: revoking a legitimate grant breaks the application for every user of it, and restoring it means re-consenting rather than undoing.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
grantIdstringyesThe grant's id, from the delegated-grant listings.

[Microsoft Graph] Delete an application's identity in this tenant, taking its consent grants and role assignments with it. The application stops working here immediately for everyone. Prefer disabling first: it has the same containment effect, is reversible with one call, and leaves the assignments intact if the app turns out to be legitimate. Deleting the service principal does not delete the application registration, and for a Microsoft first-party service the principal is often recreated automatically the next time the service is used — with none of its previous assignments.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
servicePrincipalIdstringyesThe service principal's OBJECT id (not the client/app id).

[Microsoft Graph] Get one app registration in full: its redirect URIs, the API permissions it requests, its credentials and their expiry dates, and whether it is single- or multi-tenant. Read it before changing anything about the app, and read it when an integration breaks after a change — a mismatched redirect URI and an expired secret produce different sign-in failures that look identical from the outside. Note that the secret VALUES are never returned by any read: Microsoft shows a client secret exactly once, when it is created.

ParamTypeRequiredDefaultDescription
applicationIdstringyesThe application's OBJECT id (not the client/app id).
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] Get one service principal in full — an application's identity inside this specific tenant. The properties that matter most in an investigation are accountEnabled (whether the app can sign in at all), appRoles and oauth2PermissionScopes (what it can be granted), and appOwnerOrganizationId, which names the tenant that published it and is how a genuine Microsoft service is told apart from a third-party app with a Microsoft-sounding name. Disabling this object is what stops an application working in this tenant without affecting anyone else who uses it.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
selectstringnonullComma-separated properties to return. Omit for the default set.
servicePrincipalIdstringyesThe service principal's OBJECT id (not the client/app id).

[Microsoft Graph] Assign an app role on a resource application to a user, group or service principal. This one call covers two quite different jobs, and which one it is depends entirely on the principal. Granting a role to a USER or GROUP is ordinary access management — it is how people are given access to an application that requires assignment. Granting one to a SERVICE PRINCIPAL is the sharpest act in this connector: it hands an application a tenant-wide APPLICATION permission such as Mail.Read or Directory.ReadWrite.All, which works with no user signed in and is therefore limited by nobody's role and no conditional-access policy. Destructive either way, and worth stating which you are doing before you do it. All three ids are object ids: the resource service principal that DEFINES the role, the principal receiving it, and the appRole's own id from that resource's appRoles collection.

ParamTypeRequiredDefaultDescription
appRoleIdstringyesThe appRole's id, from the resource service principal's appRoles collection.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
principalIdstringyesThe object id of the user, group or service principal receiving the role.
resourceServicePrincipalIdstringyesThe RESOURCE service principal's object id — the application that defines the role.

[Microsoft Graph] List the owners of an app registration — the people who can change it, add credentials to it and consent on its behalf without holding any directory role. Ownership is the quiet privilege in an Entra tenant: it is granted once during a project and survives the project, so an offboarding review that checks only role assignments misses it entirely. An application whose only owner has left the company is the other finding worth acting on, because nobody can renew its expiring secret.

ParamTypeRequiredDefaultDescription
applicationIdstringyesThe application's OBJECT id (not the client/app id).
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum owners to return (1-999, default 999).

[Microsoft Graph] List the app registrations defined in this directory — the applications the tenant itself owns, not the third-party apps it merely uses. This is the inventory behind "what have we built or registered", and the read to start any credential-expiry audit from: each application carries its passwordCredentials and keyCredentials with their end dates, so the registrations whose secrets expire this month are visible here before the integration they power stops working. Filter on appId to resolve a client id someone quoted from the portal into the object this family's other tools take.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "appId eq '11111111-2222-3333-4444-555555555555'" or "startswith(displayName,'Contoso')".
maxItemsintegerno999Maximum applications to return (1-999, default 999).
orderbystringnonullOData sort, for example "displayName".
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] List every delegated permission grant in the directory — the tenant-wide consent inventory. Use this rather than the per-app listing when the question is "what has anyone consented to here", which is the sweep after a phishing report: filter on consentType eq 'AllPrincipals' to see only the grants an administrator made for everyone, or on a principalId to see what one user consented to on their own behalf. Each grant names a clientId and a resourceId, both service principal object ids, so resolving them through the service principal reads turns the answer into names.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "consentType eq 'AllPrincipals'" or "clientId eq '…'".
maxItemsintegerno999Maximum grants to return (1-999, default 999).

[Microsoft Graph] List app registrations in the 30-day recycle bin. A deleted application is recoverable for 30 days and permanently gone afterwards, and the deletion does not announce itself — the usual way this read gets used is an integration that stopped working with no configuration change, where the application it authenticated as is sitting here. Restoring it keeps the same object id, client id and credentials, so nothing downstream needs reconfiguring.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum applications to return (1-999, default 999).

[Microsoft Graph] List the app-role assignments made ON this service principal — who has been given a role in this application. For an app with defined roles this is its access list, and for an app configured to require assignment it is the complete set of people who can sign in to it at all. The principalType on each entry says whether the assignment reached a user directly, a group (in which case its membership is the real answer), or another application.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum assignments to return (1-999, default 999).
servicePrincipalIdstringyesThe service principal's OBJECT id (not the client/app id).

[Microsoft Graph] List the app-role assignments GRANTED TO this service principal — the application permissions it holds against other APIs, such as Mail.Read or Directory.ReadWrite.All over the whole tenant. These are the permissions that work with no user signed in, so they are not limited by anyone's role or conditional-access policy, and they are the ones worth auditing first. Each assignment names the resource it applies to and the appRoleId; resolve that id through the resource service principal's appRoles to get the permission's readable name.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum assignments to return (1-999, default 999).
servicePrincipalIdstringyesThe service principal's OBJECT id (not the client/app id).

[Microsoft Graph] List the delegated permission grants for one client application — what it may do on behalf of a signed-in user. The consentType is the property to read first: AllPrincipals means an administrator consented for the entire tenant and every user is covered, while Principal means one named user consented for themselves. The scope string holds the actual permissions as a space-separated list. This is the read that answers "what did we agree to give this app", and an AllPrincipals grant carrying Mail.Read or Files.ReadWrite.All on an app nobody recognizes is the classic illicit-consent finding.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum grants to return (1-999, default 999).
servicePrincipalIdstringyesThe CLIENT service principal's OBJECT id — the app doing the acting, not the API being called.

[Microsoft Graph] List the owners of a service principal. Distinct from the app registration's owners and frequently a different set of people: ownership here is local to this tenant and carries the ability to add credentials to the principal, which means authenticating as that application with whatever it has been granted. Worth checking on any service principal holding broad application permissions, because an owner of such a principal is effectively holding those permissions too.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum owners to return (1-999, default 999).
servicePrincipalIdstringyesThe service principal's OBJECT id (not the client/app id).

[Microsoft Graph] List the service principals in a directory — every application that has an identity in this tenant, including Microsoft's own first-party services and every third-party app anyone has consented to. This is the read behind "what applications have access to this tenant", and the honest answer in a real customer is hundreds, most of them Microsoft's. Filter on appId to find a specific app, or on accountEnabled to find principals someone disabled. Note that Microsoft serves this collection 100 objects at a time whatever page size is requested, so a full sweep takes many pages.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "appId eq '11111111-2222-3333-4444-555555555555'" or "accountEnabled eq false".
maxItemsintegerno100Maximum service principals to return (1-100, default 100 — Microsoft's real ceiling on this collection).
orderbystringnonullOData sort, for example "displayName".
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] Permanently remove a deleted app registration from the recycle bin. There is no recovery of any kind after this — a replacement registration gets a NEW client id, which means every consent, every credential and every configuration file naming the old one has to be redone in every tenant that used the app. A separate tool from the ordinary delete on purpose: recoverable and permanent deletion are different decisions, and a flag on one tool is something an agent gets wrong in a single token.

ParamTypeRequiredDefaultDescription
applicationIdstringyesThe deleted application's OBJECT id, from the deleted-applications listing.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Remove a certificate credential from an app registration. Anything authenticating with that certificate fails from this moment, and re-adding the same certificate later is a fresh upload rather than an undo. Like the matching add, this requires a proof — a self-signed JWT signed with the private key of a certificate still valid on the application — so removing the LAST certificate through this action is not possible; that case goes through graph_update_application. Confirm the replacement is in use before removing the old one.

ParamTypeRequiredDefaultDescription
applicationIdstringyesThe application's OBJECT id (not the client/app id).
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
keyIdstringyesThe certificate's keyId, from the application's keyCredentials.
proofstringyesProof-of-possession JWT, self-signed with the private key of a certificate already on this application. Required by Microsoft; a request without it is refused.

[Microsoft Graph] Remove an owner from an app registration. Destructive by this connector's standing rule that taking access away is the sharper direction: removing the last owner leaves an application only a Global or Application Administrator can maintain, and the consequence surfaces months later when its secret expires and nobody can renew it. List the owners first and confirm somebody else remains.

ParamTypeRequiredDefaultDescription
applicationIdstringyesThe application's OBJECT id (not the client/app id).
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
ownerIdstringyesThe owner's user object id.

[Microsoft Graph] Delete a client secret from an app registration by its keyId. Everything currently authenticating with that secret stops working immediately and cannot be made to work again — the value is unrecoverable, so the only remedy is a new secret and a configuration change everywhere it was used. During a rotation, add the replacement and confirm it is in use BEFORE removing the old one; the keyId comes from reading the application, and choosing the wrong entry from a list of similar-looking secrets is the mistake this call does not let you undo.

ParamTypeRequiredDefaultDescription
applicationIdstringyesThe application's OBJECT id (not the client/app id).
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
keyIdstringyesThe secret's keyId, from the application's passwordCredentials.

[Microsoft Graph] Remove a certificate credential from a service principal. Anything authenticating with it fails from this moment. Requires a proof signed with a certificate still valid on the principal, so the last certificate cannot be removed this way. Confirm the replacement is in use first.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
keyIdstringyesThe certificate's keyId, from the service principal's keyCredentials.
proofstringyesProof-of-possession JWT, self-signed with the private key of a certificate already on this principal. Required by Microsoft; a request without it is refused.
servicePrincipalIdstringyesThe service principal's OBJECT id (not the client/app id).

[Microsoft Graph] Remove an owner from a service principal. Destructive by the standing rule that removing access is the sharper direction — and the failure mode here is delayed rather than immediate: nobody notices until a certificate needs rolling and the people who could do it are gone. List the owners first.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
ownerIdstringyesThe owner's user object id.
servicePrincipalIdstringyesThe service principal's OBJECT id (not the client/app id).

[Microsoft Graph] Delete a client secret from a service principal by its keyId. Whatever was authenticating with it fails immediately and the value cannot be recovered, so during a rotation the replacement should be added and confirmed in use first. The keyId comes from reading the service principal.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
keyIdstringyesThe secret's keyId, from the service principal's passwordCredentials.
servicePrincipalIdstringyesThe service principal's OBJECT id (not the client/app id).

[Microsoft Graph] Restore an app registration from the 30-day recycle bin. The restored application keeps its object id, client id, credentials and consent grants, so integrations that authenticate as it start working again with no reconfiguration anywhere. Not destructive — it puts something back. Only works within the 30-day window; after that the registration is unrecoverable and a replacement needs a new client id and fresh consent from every tenant that used it.

ParamTypeRequiredDefaultDescription
applicationIdstringyesThe deleted application's OBJECT id, from the deleted-applications listing.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Remove an app-role assignment, revoking that access. For a user or group it takes away their access to the application, which they experience as the app disappearing or refusing them. For a service principal it removes an application permission — the correct remediation when an app is found holding more than it needs, and the one to reach for after an application-permission audit. Effective on the next token the application requests rather than instantly, so an app holding a current access token keeps the permission for up to about an hour; disabling the service principal is the immediate containment. The assignment's own id comes from the two app-role listings.

ParamTypeRequiredDefaultDescription
appRoleAssignmentIdstringyesThe app-role assignment's id, from the app-role listings.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
resourceServicePrincipalIdstringyesThe RESOURCE service principal's object id — the application that defines the role.

[Microsoft Graph] Turn an application's sign-in on or off in this tenant. This is the containment action for a compromised or unwanted application — faster and more complete than revoking individual consent grants, because nothing can authenticate as the application here at all while it is disabled, and it is reversible by setting it back. Destructive because disabling is instant and tenant-wide: every user of that app loses it at once with a sign-in error that names the app rather than explaining the cause, so confirm which application the principal belongs to before disabling anything that is merely unfamiliar. Most principals in a tenant are Microsoft's own first-party services.

ParamTypeRequiredDefaultDescription
enabledbooleanyesTrue to allow sign-in, false to block it tenant-wide.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
servicePrincipalIdstringyesThe service principal's OBJECT id (not the client/app id).

[Microsoft Graph] Update an app registration's properties. Graph merges rather than replaces at the top level, so an omitted property is left alone — but a nested object supplied in full REPLACES what was there, which is the trap on this particular resource: sending a web object with one redirect URI removes every other redirect URI the app had, and the sign-ins that used them fail immediately with an error that names the URI rather than the deletion. Read the application first and send the complete list. This is also the supported way to add a CERTIFICATE to an app that has none, because the dedicated key tools cannot be used until one valid certificate already exists.

ParamTypeRequiredDefaultDescription
applicationIdstringyesThe application's OBJECT id (not the client/app id).
descriptionstringnonullNew description.
displayNamestringnonullNew display name.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
keyCredentialsJsonstringnonullJSON array for 'keyCredentials' — the supported way to add a certificate to an app with no existing valid certificate. REPLACES the existing list.
notesstringnonullNew internal notes.
requiredResourceAccessJsonstringnonullJSON array for 'requiredResourceAccess'. REPLACES the existing declaration.
signInAudiencestringnonullNew sign-in audience.
webJsonstringnonullJSON for the 'web' object. REPLACES the existing one — include every redirect URI you intend to keep.

[Microsoft Graph] Replace the scopes on an existing delegated permission grant. The scope string is the whole state rather than a list to append to, so whatever is sent becomes the complete set and every permission left out is revoked — read the grant first and send the full list including the ones being kept. Destructive in both directions for that reason: this call both grants and removes, and a shortened string looks like a successful update while breaking the parts of an application nobody tested.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
grantIdstringyesThe grant's id, from the delegated-grant listings.
scopestringyesThe COMPLETE space-separated scope list. Replaces what is there; omitted permissions are revoked.

[Microsoft Graph] Update a service principal's local properties — its display name in this tenant, its notes, its home-page URL, its tags. Deliberately does NOT change whether the application can sign in: that is a different decision with a tenant-wide consequence and has its own tool. The property most worth knowing here is appRoleAssignmentRequired, which when true means only assigned users and groups can use the application at all — a real access control, and turning it on without first assigning anybody locks everyone out of that app.

ParamTypeRequiredDefaultDescription
appRoleAssignmentRequiredbooleannonullRequire assignment: when true, only assigned users and groups can use the application.
displayNamestringnonullNew display name for this tenant.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
homepagestringnonullNew home-page URL.
notesstringnonullNew internal notes.
servicePrincipalIdstringyesThe service principal's OBJECT id (not the client/app id).
tagsstringnonullComma-separated tags. REPLACES the existing list.

Directory Roles & PIM

ToolPlanAccessSummary
graph_activate_directory_roleProWriteActivate a directory role in this tenant from its template, creating the role object so members can be added to it.
graph_activate_eligible_roleProDestructiveActivate a role the signed-in user is already eligible for — the just-in-time elevation at the centre of Privileged Identity Management.
graph_add_directory_role_memberProDestructiveAdd a user, group or service principal to a directory role, granting that role's administrative permissions permanently and immediately.
graph_assign_role_with_scheduleProDestructiveAssign a directory role through Privileged Identity Management with a time limit — an ACTIVE grant that expires on its own.
graph_create_role_assignmentProDestructiveCreate a unified RBAC role assignment — the way to grant a role SCOPED to part of the directory rather than all of it.
graph_create_role_definitionProWriteCreate a custom directory role from a set of resource actions.
graph_deactivate_eligible_roleProWriteGive up a role the signed-in user activated, before it expires on its own.
graph_delete_role_assignmentProDestructiveRemove a unified RBAC role assignment, revoking those permissions immediately.
graph_delete_role_definitionProDestructiveDelete a custom role definition.
graph_get_directory_roleFreeRead-onlyGet one activated directory role by its object id, including the roleTemplateId that identifies WHICH Entra role it is.
graph_get_role_definitionFreeRead-onlyGet one role definition with its full permission set.
graph_get_role_management_policyFreeRead-onlyGet one PIM policy, expanding its rules — which is where the settings that matter actually live.
graph_list_directory_role_membersFreeRead-onlyList who holds a directory role.
graph_list_directory_role_templatesFreeRead-onlyList every directory role Entra defines, whether or not this tenant has ever used one.
graph_list_directory_rolesFreeRead-onlyList the directory roles that are ACTIVE in this tenant.
graph_list_role_assignment_instancesFreeRead-onlyList the role assignments in effect right NOW — the closest thing this API offers to "who is an administrator at this moment".
graph_list_role_assignment_requestsFreeRead-onlyList the requests that assigned, activated, extended or removed role assignments — the PIM audit trail, including every self-activation with the justification the person typed.
graph_list_role_assignment_schedulesFreeRead-onlyList the scheduled role ASSIGNMENTS — active grants managed through Privileged Identity Management, including the ones with an expiry date.
graph_list_role_assignmentsFreeRead-onlyList unified RBAC role assignments — the permanent grants, including the SCOPED ones that the directory-role member listing cannot express.
graph_list_role_definitionsFreeRead-onlyList the unified RBAC role definitions — every built-in Entra role plus any custom roles this tenant has defined, each with the exact permissions it carries in rolePermissions.
graph_list_role_eligibility_instancesFreeRead-onlyList the role eligibilities that are in effect right NOW, as opposed to the schedules that define them.
graph_list_role_eligibility_requestsFreeRead-onlyList the requests that created, changed or removed role eligibilities — the audit trail for who was made eligible for what, by whom, and with what justification.
graph_list_role_eligibility_schedulesFreeRead-onlyList who is ELIGIBLE for a directory role — the people who can elevate themselves into it whenever they choose, without asking anyone.
graph_list_role_management_policiesFreeRead-onlyList the Privileged Identity Management policies for directory roles — the rules that decide how elevation actually works: whether approval is required, whether multifactor authentication is enforced…
graph_list_role_management_policy_assignmentsFreeRead-onlyList which PIM policy applies to which role.
graph_make_principal_eligible_for_roleProDestructiveMake a user or group ELIGIBLE for a directory role through Privileged Identity Management — they hold nothing until they activate, and can activate whenever they choose subject to the role's PIM…
graph_remove_directory_role_memberProDestructiveRemove a member from a directory role, revoking those administrative permissions immediately.
graph_remove_role_eligibilityProDestructiveRemove someone's eligibility for a directory role, so they can no longer elevate into it.
graph_remove_scheduled_role_assignmentProDestructiveRemove a role assignment that was made through Privileged Identity Management, revoking it immediately rather than waiting for it to expire.
graph_update_role_definitionProDestructiveUpdate a custom role definition.

[Microsoft Graph] Activate a directory role in this tenant from its template, creating the role object so members can be added to it. Not destructive and grants nobody anything — it makes a role that Entra already defines available to assign. This is the fix for "that role does not exist in this tenant", which is what the directory-role listing reports for any role nobody has ever been assigned. Takes the roleTemplateId from the role-template listing.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
roleTemplateIdstringyesThe role's template id, from the role-template listing.

[Microsoft Graph] Activate a role the signed-in user is already eligible for — the just-in-time elevation at the centre of Privileged Identity Management. The principalId must be the signed-in user's own object id; this action cannot activate anybody else's eligibility, which is what makes it self-service rather than a grant. Destructive because the result is real administrative power, live immediately for the duration requested. Two conditions come from the role's PIM policy rather than from this call: it can require approval, in which case the request sits pending until a human acts, and it can require the caller to have completed multifactor authentication in the current session.

ParamTypeRequiredDefaultDescription
directoryScopeIdstringno"/"Scope to activate at. Must match an existing eligibility.
durationstringnonullHow long to hold the role, as ISO 8601, for example PT8H. Capped by the role's PIM policy.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
justificationstringnonullWhy the elevation is needed — usually required by the role's PIM policy and recorded in the audit trail.
principalIdstringyesThe signed-in user's own object id. Microsoft refuses an activation on anybody else's behalf.
roleDefinitionIdstringyesThe role definition's id, or the role template id for a built-in role.
ticketNumberstringnonullTicket number — required by some PIM policies.
ticketSystemstringnonullTicket system — required by some PIM policies.

[Microsoft Graph] Add a user, group or service principal to a directory role, granting that role's administrative permissions permanently and immediately. Destructive despite being an addition, and for the reason the whole connector applies to privilege grants: this hands someone power over other people's accounts, and removing the membership afterwards undoes nothing they did while they held it. Read the role definition before granting, and prefer the least-privileged role that covers the task — Global Administrator is rarely the correct answer and is the hardest grant to walk back. In a tenant using Privileged Identity Management, a permanent grant here bypasses the approval and time limits that PIM exists to impose.

ParamTypeRequiredDefaultDescription
directoryRoleIdstringyesThe directory role's object id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
principalIdstringyesThe object id of the user, group or service principal to grant it to.

[Microsoft Graph] Assign a directory role through Privileged Identity Management with a time limit — an ACTIVE grant that expires on its own. This is the right shape for temporary administrative access: a contractor for the length of a project, or a technician for the duration of an incident, without depending on anyone remembering to revoke it. Supplying neither a duration nor an end date creates a PERMANENT assignment, which is the same thing as an ordinary grant and defeats the point of using this tool. Re-issuing this call with a new schedule is also how an existing assignment is extended or renewed.

ParamTypeRequiredDefaultDescription
directoryScopeIdstringno"/"Scope of the grant: "/" for the whole tenant, or an administrative unit or application object id.
durationstringnonullHow long the assignment lasts, as ISO 8601, for example P7D or PT8H. Omit along with the end date for a permanent assignment.
endDateTimestringnonullWhen the assignment ends, as ISO 8601. Ignored when a duration is supplied.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
justificationstringnonullWhy — recorded on the request and often required by the role's PIM policy.
principalIdstringyesThe object id of the user, group or service principal to assign the role to.
roleDefinitionIdstringyesThe role definition's id, or the role template id for a built-in role.
ticketNumberstringnonullTicket number to record against the change.
ticketSystemstringnonullTicket system to record against the change.

[Microsoft Graph] Create a unified RBAC role assignment — the way to grant a role SCOPED to part of the directory rather than all of it. The directoryScopeId is the reason to use this over the directory-role membership tool: "/" grants tenant-wide, while an administrative unit id confines the grant to that unit's members, and an application object id confines it to that application. Scoping is the single most effective way to reduce the blast radius of an administrative grant. Destructive as every privilege grant here is.

ParamTypeRequiredDefaultDescription
directoryScopeIdstringno"/"Scope of the grant: "/" for the whole tenant, or an administrative unit or application object id to confine it.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
principalIdstringyesThe object id of the user, group or service principal to grant the role to.
roleDefinitionIdstringyesThe role definition's id, or the role template id for a built-in role.

[Microsoft Graph] Create a custom directory role from a set of resource actions. Not destructive: a definition nobody has been assigned grants nothing. The care belongs in the actions chosen — take them from the built-in role definitions rather than inventing strings, because an action that does not exist is accepted into the definition and simply never grants anything, producing a role that looks correct and does nothing. Custom roles need Entra ID P1 in the directory.

ParamTypeRequiredDefaultDescription
descriptionstringnonullWhat the role is for.
displayNamestringyesDisplay name for the role.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
isEnabledbooleannonullWhether the role can be assigned. Omit to create it enabled.
rolePermissionsJsonstringyesJSON array for rolePermissions, for example [{"allowedResourceActions":["microsoft.directory/applications/basic/update"]}].

[Microsoft Graph] Give up a role the signed-in user activated, before it expires on its own. The one write in this family that is NOT destructive, and the exception is narrow: it removes only the CALLER's own just-in-time activation, nobody else loses anything, and the same person can activate again in one call because the underlying eligibility is untouched. Good practice after finishing privileged work rather than holding the role for the rest of its window.

ParamTypeRequiredDefaultDescription
directoryScopeIdstringno"/"Scope the role was activated at.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
justificationstringnonullOptional note recorded on the request.
principalIdstringyesThe signed-in user's own object id.
roleDefinitionIdstringyesThe role definition's id, or the role template id for a built-in role.

[Microsoft Graph] Remove a unified RBAC role assignment, revoking those permissions immediately. Takes the assignment's own id from the assignment listing rather than a principal and role, which is deliberate on Microsoft's part: one person can hold the same role at several scopes, and naming the assignment is the only way to remove exactly the one intended.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
roleAssignmentIdstringyesThe role assignment's id, from the assignment listing.

[Microsoft Graph] Delete a custom role definition. Everyone assigned it loses those permissions at once, and because a custom role usually exists to give a specific team a specific capability, the people affected are the ones who will notice fastest. List the assignments for this definition before deleting. Built-in roles cannot be deleted.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
roleDefinitionIdstringyesThe custom role definition's id.

[Microsoft Graph] Get one activated directory role by its object id, including the roleTemplateId that identifies WHICH Entra role it is. The template id is the stable, tenant-independent identifier — Global Administrator is 62e90394-69f5-4237-9190-012177145e10 in every tenant on earth — while the object id differs per tenant. When comparing role configuration across customers, compare template ids.

ParamTypeRequiredDefaultDescription
directoryRoleIdstringyesThe directory role's object id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one role definition with its full permission set. Read it before granting the role to anybody: rolePermissions lists the exact allowedResourceActions, and the difference between two similar-sounding roles is usually one action that matters — the ability to reset another administrator's password, or to consent to application permissions on the tenant's behalf.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
roleDefinitionIdstringyesThe role definition's id, or the role template id for a built-in role.

[Microsoft Graph] Get one PIM policy, expanding its rules — which is where the settings that matter actually live. The rules are what say whether activation needs approval and from whom, whether MFA or a justification is required, the maximum activation duration, and whether permanent assignment is allowed at all. Reading the policy without expanding rules returns its name and scope and none of that, which reads as an empty policy rather than an unexpanded one.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
expandstringno"rules"Related objects to expand. Defaults to "rules", which is where the activation settings live.
policyIdstringyesThe policy's id, from the policy listing.

[Microsoft Graph] List who holds a directory role. This is the answer to "who are the Global Administrators here", the first read of any tenant security review, and the number Microsoft recommends keeping under five. Two cautions: members can be service principals as well as people, and an application holding a privileged role is easy to miss in a list of names; and this shows PERMANENT membership, so a tenant using Privileged Identity Management will show far fewer administrators here than can actually become one — the eligibility schedules hold the rest. This collection is returned whole with no paging.

ParamTypeRequiredDefaultDescription
directoryRoleIdstringyesThe directory role's object id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] List every directory role Entra defines, whether or not this tenant has ever used one. This is the catalogue — the place to find a role's template id and its description before granting it, and the answer to "which role is the least privileged one that can do this". Granting Global Administrator because it was the recognizable name in a list is the single most common over-privileging mistake in Entra, and reading this first is what avoids it.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] List the directory roles that are ACTIVE in this tenant. Not the catalogue of roles that exist in Entra — only the ones this tenant has ever used, because Entra activates a role lazily the first time somebody is assigned to it. A role missing from this list has no members by definition, which is why "that role is not in the list" almost never means what it appears to. For the full catalogue, read the role templates instead. This collection is returned whole with no paging.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] List the role assignments in effect right NOW — the closest thing this API offers to "who is an administrator at this moment". This is the read for an incident: it includes people currently elevated through a just-in-time activation, who are absent from the permanent assignment listing and present here only until their activation expires. Comparing this against the eligibility instances is what separates "is an administrator" from "could be one".

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
expandstringnonullRelated objects to expand, for example "principal".
filterstringnonullOData filter, for example "principalId eq '…'".
maxItemsintegerno999Maximum instances to return (1-999, default 999).

[Microsoft Graph] List the requests that assigned, activated, extended or removed role assignments — the PIM audit trail, including every self-activation with the justification the person typed. This is the read behind "who elevated to Global Administrator last night and why", and the one to reach for when an approval is believed to be stuck: a request in PendingApproval status is waiting on a human, and its justification and ticketInfo say what it was for.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "principalId eq '…'", "status eq 'PendingApproval'" or "action eq 'selfActivate'".
maxItemsintegerno999Maximum requests to return (1-999, default 999).

[Microsoft Graph] List the scheduled role ASSIGNMENTS — active grants managed through Privileged Identity Management, including the ones with an expiry date. The assignmentType property is the one to read: Assigned means a standing grant, while Activated means the person elevated from an eligibility and will drop back when it expires. A tenant with many Assigned entries carrying no end date is running PIM in name only.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
expandstringnonullRelated objects to expand, for example "principal".
filterstringnonullOData filter, for example "principalId eq '…'" or "roleDefinitionId eq '…'".
maxItemsintegerno999Maximum schedules to return (1-999, default 999).

[Microsoft Graph] List unified RBAC role assignments — the permanent grants, including the SCOPED ones that the directory-role member listing cannot express. Filter by roleDefinitionId to answer "who holds this role" or by principalId to answer "what does this person hold"; expanding the principal turns the object ids into names in the same call, which is usually worth doing. The directoryScopeId is what makes this read worth having: "/" means the whole tenant, while anything else scopes the grant to one administrative unit or application, and a scoped Helpdesk Administrator is a very different finding from a tenant-wide one.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
expandstringnonullRelated objects to expand, for example "principal" to return the assigned user or group inline.
filterstringnonullOData filter, for example "roleDefinitionId eq '62e90394-69f5-4237-9190-012177145e10'" or "principalId eq '…'".
maxItemsintegerno999Maximum assignments to return (1-999, default 999).

[Microsoft Graph] List the unified RBAC role definitions — every built-in Entra role plus any custom roles this tenant has defined, each with the exact permissions it carries in rolePermissions. Unlike the directory-role listing, this is complete whether or not a role has ever been used. Filter on isBuiltIn eq false to see only the tenant's own custom roles, which are worth reviewing on their own: a custom role is where an over-broad permission hides behind a reassuring name.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "isBuiltIn eq false" or "displayName eq 'Helpdesk Administrator'".
maxItemsintegerno999Maximum definitions to return (1-999, default 999).

[Microsoft Graph] List the role eligibilities that are in effect right NOW, as opposed to the schedules that define them. The distinction matters when eligibility is time-bounded: a schedule starting next month or expired last week still exists as a schedule and is absent from this collection. Use this when the question is what a person can currently elevate into, and the schedules listing when the question is what was arranged.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
expandstringnonullRelated objects to expand, for example "principal".
filterstringnonullOData filter, for example "principalId eq '…'".
maxItemsintegerno999Maximum instances to return (1-999, default 999).

[Microsoft Graph] List the requests that created, changed or removed role eligibilities — the audit trail for who was made eligible for what, by whom, and with what justification. Each request carries its status, so this is also where a change that is waiting on approval or failed validation is visible; an eligibility somebody believes they granted but that never took effect is usually a request sitting in a non-terminal status here.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "principalId eq '…'" or "status eq 'PendingApproval'".
maxItemsintegerno999Maximum requests to return (1-999, default 999).

[Microsoft Graph] List who is ELIGIBLE for a directory role — the people who can elevate themselves into it whenever they choose, without asking anyone. This is the read that completes a privileged-access review: a tenant using Privileged Identity Management shows few permanent administrators, and everyone else who can become one is here. Treat eligibility as equivalent to holding the role for risk purposes, because the only thing between the person and the permission is a single self-service call. Filter by principalId or roleDefinitionId; expand the principal to get names.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
expandstringnonullRelated objects to expand, for example "principal".
filterstringnonullOData filter, for example "principalId eq '…'" or "roleDefinitionId eq '…'".
maxItemsintegerno999Maximum schedules to return (1-999, default 999).

[Microsoft Graph] List the Privileged Identity Management policies for directory roles — the rules that decide how elevation actually works: whether approval is required, whether multifactor authentication is enforced at activation, how long an activation lasts, and who gets notified. A tenant can look well-governed because PIM is switched on while every role allows unapproved eight-hour self-activation with no MFA, and this is the read that tells the difference. The policy id found here is what the policy detail read expands the rules of.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum policies to return (1-999, default 999).
scopeIdstringno"/"The scope the policies apply to. "/" is the whole directory and is what almost every directory-role policy uses.

[Microsoft Graph] List which PIM policy applies to which role. The policies themselves are not named after roles, so this is the join between them: given a roleDefinitionId it names the policyId whose rules govern elevation into that role. Read it before concluding anything from a policy — the same tenant routinely has a strict policy on Global Administrator and the default one on everything else.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum assignments to return (1-999, default 999).
scopeIdstringno"/"The scope the assignments apply to. "/" is the whole directory.

[Microsoft Graph] Make a user or group ELIGIBLE for a directory role through Privileged Identity Management — they hold nothing until they activate, and can activate whenever they choose subject to the role's PIM policy. Destructive for the same reason a direct grant is: eligibility is administrative power with a delay on it, and the delay is however long it takes to make one self-activation call. Prefer it over a permanent assignment anyway, because activation is time-bounded, logged with a justification and can require approval and MFA. Set a duration to make the ELIGIBILITY itself expire; omitting both duration and end date makes it permanent eligibility, which is the common configuration for standing administrators.

ParamTypeRequiredDefaultDescription
directoryScopeIdstringno"/"Scope of the eligibility: "/" for the whole tenant, or an administrative unit or application object id.
durationstringnonullHow long the ELIGIBILITY lasts, as ISO 8601, for example P180D. Omit along with the end date for permanent eligibility.
endDateTimestringnonullWhen the eligibility ends, as ISO 8601. Ignored when a duration is supplied.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
justificationstringnonullWhy — recorded on the request and often required by the role's PIM policy.
principalIdstringyesThe object id of the user or group to make eligible.
roleDefinitionIdstringyesThe role definition's id, or the role template id for a built-in role.
ticketNumberstringnonullTicket number to record against the change.
ticketSystemstringnonullTicket system to record against the change.

[Microsoft Graph] Remove a member from a directory role, revoking those administrative permissions immediately. The standard offboarding and least-privilege action, and the one place to be careful about locking a tenant out of itself: removing the last Global Administrator leaves nobody able to grant it back, and Microsoft support recovery for that is slow. List the members first and confirm somebody else remains. Note that removing a permanent membership does not affect a PIM eligibility for the same role — the person can elevate straight back.

ParamTypeRequiredDefaultDescription
directoryRoleIdstringyesThe directory role's object id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
principalIdstringyesThe member's object id.

[Microsoft Graph] Remove someone's eligibility for a directory role, so they can no longer elevate into it. The offboarding step people forget: removing a permanent role membership leaves an eligibility untouched, and the person elevates straight back into the role they were just removed from. Check the eligibility schedules for anyone whose access is being withdrawn. Note this does not end an activation already in progress — that is the deactivation, or waiting for it to expire.

ParamTypeRequiredDefaultDescription
directoryScopeIdstringno"/"Scope the eligibility was granted at. Must match the existing eligibility.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
justificationstringnonullWhy — recorded on the request.
principalIdstringyesThe object id of the user or group whose eligibility is being removed.
roleDefinitionIdstringyesThe role definition's id, or the role template id for a built-in role.
ticketNumberstringnonullTicket number to record against the change.
ticketSystemstringnonullTicket system to record against the change.

[Microsoft Graph] Remove a role assignment that was made through Privileged Identity Management, revoking it immediately rather than waiting for it to expire. Use this rather than the plain assignment delete for anything PIM created, so the removal is recorded as a PIM request with its justification alongside the grant it undoes. The same lockout caution applies as to any Global Administrator removal.

ParamTypeRequiredDefaultDescription
directoryScopeIdstringno"/"Scope the assignment was granted at. Must match the existing assignment.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
justificationstringnonullWhy — recorded on the request.
principalIdstringyesThe object id of the principal whose assignment is being removed.
roleDefinitionIdstringyesThe role definition's id, or the role template id for a built-in role.
ticketNumberstringnonullTicket number to record against the change.
ticketSystemstringnonullTicket system to record against the change.

[Microsoft Graph] Update a custom role definition. Destructive because the definition IS the state: changing rolePermissions changes what every person already holding this role can do, immediately and without any of them being told, and the permission array REPLACES rather than merges — a shorter list silently strips capabilities from everyone assigned. Read the definition first and send the complete set. Built-in roles cannot be updated at all.

ParamTypeRequiredDefaultDescription
descriptionstringnonullNew description.
displayNamestringnonullNew display name.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
isEnabledbooleannonullWhether the role can be assigned.
roleDefinitionIdstringyesThe custom role definition's id.
rolePermissionsJsonstringnonullJSON array for rolePermissions. REPLACES the existing permissions for everyone holding this role.

Authentication Methods

ToolPlanAccessSummary
graph_add_user_email_methodProDestructiveRegister an email address on an account for self-service password reset.
graph_add_user_phone_methodProDestructiveRegister a phone number for multifactor authentication on an account.
graph_create_temporary_access_passProDestructiveIssue a Temporary Access Pass for a user and RETURN THE PASSCODE.
graph_delete_temporary_access_passProDestructiveRevoke a Temporary Access Pass immediately, before it expires on its own.
graph_delete_user_authenticator_methodProDestructiveRemove a Microsoft Authenticator registration from an account — the standard lost-phone and replaced-phone action.
graph_delete_user_email_methodProDestructiveRemove an email address from an account's password-reset methods.
graph_delete_user_fido2_methodProDestructiveRemove a FIDO2 security key from an account.
graph_delete_user_phone_methodProDestructiveRemove a phone number from an account's authentication methods.
graph_delete_user_software_oath_methodProDestructiveRemove a third-party authenticator (software OATH) token from an account.
graph_delete_user_windows_hello_methodProDestructiveRemove a Windows Hello for Business registration from an account.
graph_disable_user_sms_sign_inProDestructiveStop a user signing in with an SMS code, leaving the number registered as a second factor.
graph_enable_user_sms_sign_inProDestructiveAllow a user to sign IN with a code sent to their registered mobile number, rather than only using it as a second factor.
graph_get_authentication_methods_policyFreeRead-onlyGet the tenant's authentication methods policy — which methods are permitted, and for whom.
graph_list_authentication_method_registrationsFreeRead-onlyList every user's authentication-method registration status in one report — who is registered for multifactor authentication, who is capable of self-service password reset, and which methods each has.
graph_list_user_authentication_methodsFreeRead-onlyList every authentication method registered on one account, of every type, in a single call.
graph_list_user_authenticator_methodsFreeRead-onlyList the Microsoft Authenticator registrations on an account, including the device each one is installed on.
graph_list_user_email_methodsFreeRead-onlyList the email addresses registered on an account for self-service password reset.
graph_list_user_fido2_methodsFreeRead-onlyList the FIDO2 security keys registered on an account, with each key's model and the display name its owner gave it.
graph_list_user_phone_methodsFreeRead-onlyList the phone numbers registered for multifactor authentication on one account, each with its type — mobile, alternateMobile or office.
graph_list_user_software_oath_methodsFreeRead-onlyList the third-party authenticator (software OATH) tokens registered on an account — the codes generated by apps other than Microsoft Authenticator.
graph_list_user_temporary_access_passesFreeRead-onlyList the Temporary Access Passes on an account, with each one's lifetime, whether it is single-use, and whether it is currently usable.
graph_list_user_windows_hello_methodsFreeRead-onlyList the Windows Hello for Business registrations on an account — the PIN or biometric sign-in bound to a specific device.
graph_reset_user_password_generatedProDestructiveAsk Entra to generate a new password for a user and RETURN IT.
graph_set_authentication_method_configurationProDestructiveTurn an authentication method on or off for the whole tenant, or restrict it to particular groups.
graph_update_authentication_methods_policyProDestructiveUpdate the tenant-wide authentication methods policy — the settings that sit above the individual methods, most usefully the registration campaign that nudges users onto the Authenticator app and the…
graph_update_user_phone_methodProDestructiveChange the number on an existing phone authentication method — the ordinary fix when somebody changes handset or carrier.

[Microsoft Graph] Register an email address on an account for self-service password reset. Destructive because of what it is rather than what it does: this is an account RECOVERY path, so whoever controls the address can reset the password later without needing the current one. The address is normally external to the tenant — a personal account — which is what makes an unexpected entry here both serious and easy to overlook in any review that only looks at internal mailboxes.

ParamTypeRequiredDefaultDescription
emailAddressstringyesThe email address to register for password reset.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] Register a phone number for multifactor authentication on an account. Destructive despite being an addition: from this moment that number can receive the codes and approvals that prove the person's identity, which is exactly the step an intruder takes to make their access survive a password reset. Confirm the number with the person through a channel that is not the account itself. The number must be in international format with a space after the country code, for example +1 5551234567, and a tenant whose policy disables SMS refuses the registration with an error that names the method rather than the policy.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
phoneNumberstringyesThe phone number in international format, for example "+1 5551234567".
phoneTypestringno"mobile"Which number this is: mobile, alternateMobile or office.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] Issue a Temporary Access Pass for a user and RETURN THE PASSCODE. Treat the response as a live credential: the passcode signs in as that person AND lets them register new authentication methods, which makes it a complete bypass of whatever multifactor protection the account had. That is exactly why it exists — it is how somebody onboards, or recovers after losing every method — and exactly why it is the most dangerous call in this family. Microsoft shows the value once and never again. Prefer a single-use pass with the shortest workable lifetime, deliver it through a channel that is not the account itself, and verify who you are talking to first: an unsolicited request for one is a standard social-engineering approach.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
isUsableOncebooleannonullWhether the pass can be used only once. True is the safer choice and suits onboarding and recovery.
lifetimeInMinutesintegernonullHow long the pass stays valid, in minutes. Tenant policy sets the permitted range; keep it short.
startDateTimestringnonullWhen the pass becomes valid, as ISO 8601. Omit to make it valid immediately.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] Revoke a Temporary Access Pass immediately, before it expires on its own. The containment action when a pass was issued to the wrong person, delivered through a channel that turned out to be compromised, or simply is no longer needed — a pass sitting unused until it expires is an open door with a timer on it. An account with an unexplained active pass should have it revoked first and investigated afterwards.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
passIdstringyesThe pass's id, from the temporary-access-pass listing.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] Remove a Microsoft Authenticator registration from an account — the standard lost-phone and replaced-phone action. The person will need to register the app again on their new device, which itself requires them to authenticate, so make sure they still have another method or a Temporary Access Pass before removing their only one. Check the device name on the registration first: removing the wrong one silently breaks the phone they are actually using.

ParamTypeRequiredDefaultDescription
authenticatorMethodIdstringyesThe Authenticator registration's method id, from the authenticator listing.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] Remove an email address from an account's password-reset methods. The containment step when an unrecognized recovery address is found, and a routine one when somebody's personal address changes. Removing it does not affect sign-in — this method is only used for self-service password reset — but a person left with no reset method has to call the helpdesk instead.

ParamTypeRequiredDefaultDescription
emailMethodIdstringyesThe email method's id, from the email-method listing.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] Remove a FIDO2 security key from an account. The deprovisioning step for a lost key and part of a complete offboarding, since the physical key leaves with the person. Removing the registration is what actually revokes it — possession of the key means nothing once Entra no longer knows about it — but check what else the person has registered, because security-key users often have nothing else.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
fido2MethodIdstringyesThe security key's method id, from the security-key listing.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] Remove a phone number from an account's authentication methods. The correct response to an unrecognized number during an incident, and the routine step when a person leaves or changes number. Check what else they have registered first: removing the last method locks the account out of multifactor authentication entirely, which in a tenant that requires MFA means locked out of everything.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
phoneMethodIdstringyesThe phone method's id, from the phone-method listing.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] Remove a third-party authenticator (software OATH) token from an account. Worth doing deliberately during offboarding and phone replacement, because these are the registrations people forget they have: the code keeps generating in an app on a device nobody is tracking, and it stays valid until removed here.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
softwareOathMethodIdstringyesThe token's method id, from the software OATH listing.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] Remove a Windows Hello for Business registration from an account. Each registration is bound to one device, so this is what unlinks a machine being returned, reassigned or wiped. The person keeps signing in normally on their other devices; on that one they fall back to a password, which is worth telling them, because a Hello user may not know theirs.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or userPrincipalName.
windowsHelloMethodIdstringyesThe registration's method id, from the Windows Hello listing.

[Microsoft Graph] Stop a user signing in with an SMS code, leaving the number registered as a second factor. A hardening action rather than a punishment, but destructive by this connector's rule that removing a sign-in path is the sharper direction: anyone who has been signing in this way loses their only means of doing so, and a frontline worker with no password set will be locked out until one is issued. Check how the person actually signs in before switching it off.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
phoneMethodIdstringyesThe phone method's id, from the phone-method listing.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] Allow a user to sign IN with a code sent to their registered mobile number, rather than only using it as a second factor. Destructive because it changes what the number is: a phone that could previously only confirm an identity can now establish one, so a SIM swap or a redirected number becomes a complete account takeover rather than one factor of two. Usually reserved for frontline staff who share devices and have no password worth typing; it is rarely the right answer for an administrator.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
phoneMethodIdstringyesThe phone method's id, from the phone-method listing. Must be the mobile number.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] Get the tenant's authentication methods policy — which methods are permitted, and for whom. Read it before registering a method on anyone's behalf: a tenant that has disabled SMS refuses a phone registration with an error about the method rather than about the policy, which sends people looking in the wrong place. It is also the honest answer to "is this tenant enforcing strong authentication", because a tenant can permit every weak method while appearing modern. Changing this policy needs a permission this connector does not request, so it is read-only here.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] List every user's authentication-method registration status in one report — who is registered for multifactor authentication, who is capable of self-service password reset, and which methods each has. This is the tenant-wide read the per-user listings cannot give: filter on isMfaRegistered eq false to get the gap list an MFA rollout works from, which is the single most useful security report in this connector. Note it reflects REGISTRATION rather than enforcement — someone registered may still not be required to use it, and that is a Conditional Access question.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "isMfaRegistered eq false" or "isAdmin eq true".
maxItemsintegerno999Maximum users to return (1-999, default 999).

[Microsoft Graph] List every authentication method registered on one account, of every type, in a single call. This is the first read of any "I cannot sign in" call and the one to reach for before assuming anything: the @odata.type on each entry names the method, and a user with only a passwordAuthenticationMethod has no second factor registered at all. The specific-type listings exist for when a method needs its own id to be changed or removed; this one answers the question that comes first.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] List the Microsoft Authenticator registrations on an account, including the device each one is installed on. The device name is the useful part during a lost-phone call: it distinguishes the registration that needs removing from the one on the replacement handset, and two registrations where the person remembers one is worth asking about.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] List the email addresses registered on an account for self-service password reset. Worth reading during any account investigation, because this is an account-RECOVERY path rather than a sign-in one: an attacker who adds their own address here can reset the password later without needing anything else, and the address is usually external so it does not appear in any tenant-wide review of mailboxes.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] List the FIDO2 security keys registered on an account, with each key's model and the display name its owner gave it. These are the strongest methods available and the ones an offboarding process most often misses, because the credential is a physical object that leaves the building with the person. Reading this before deprovisioning is how you find out whether a key needs to be collected as well as removed.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] List the phone numbers registered for multifactor authentication on one account, each with its type — mobile, alternateMobile or office. The number is returned in full, which is the point: an unrecognized mobile number on a privileged account is one of the clearest indicators of a compromised identity, because adding one is how an attacker keeps access after a password reset. Compare against what the person believes is registered rather than against what looks plausible.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] List the third-party authenticator (software OATH) tokens registered on an account — the codes generated by apps other than Microsoft Authenticator. Worth checking separately because they are easy to forget: they appear in no Microsoft app, the person may not remember which authenticator they used, and a stale one from a replaced phone stays valid indefinitely.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] List the Temporary Access Passes on an account, with each one's lifetime, whether it is single-use, and whether it is currently usable. The passcode itself is NOT returned — Microsoft shows that once, at creation — so this is the read for "is there an active pass on this account", which is exactly the question after a suspicious sign-in. An unexplained active pass on a privileged account is a serious finding: a pass both signs in and registers new methods, so it is a complete bypass of whatever MFA the account had.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] List the Windows Hello for Business registrations on an account — the PIN or biometric sign-in bound to a specific device. Each registration belongs to one machine, so this doubles as a list of the devices a person actually signs in on with Hello, and a registration for a device that was returned or replaced is a loose end worth closing.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] Ask Entra to generate a new password for a user and RETURN IT. The response carries a working credential for that account and Microsoft will not show it again, so treat it exactly as such: deliver it out of band, and expect the person to be prompted to change it at first sign-in. This is NOT the same tool as graph_reset_user_password, which sets a password an administrator chose and returns nothing — use that one when the password is already agreed, and this one when a generated password is what is wanted. Resetting does not sign the person out of existing sessions; revoking their sign-in sessions is a separate act and the one that actually ends an intruder's access.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
passwordMethodIdstringno"28c10230-6103-485e-b985-444c60001490"The password method's id. Microsoft's well-known singleton id is the default and is the same in every tenant.
userIdstringyesThe user's object id or userPrincipalName.

[Microsoft Graph] Turn an authentication method on or off for the whole tenant, or restrict it to particular groups. This is the tenant-wide security control the per-user tools cannot reach: disabling SMS here is how an organization stops phone-based multifactor authentication being an option at all, which is the standard hardening step against SIM-swap and phishing attacks. Destructive and tenant-wide — anyone whose ONLY registered method is the one being disabled can no longer complete multifactor authentication, so read the registration report first and confirm those people have an alternative. The method id is the configuration's name, such as Sms, Fido2, MicrosoftAuthenticator, TemporaryAccessPass or Email, and the includeTargets JSON decides who the method applies to.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
includeTargetsJsonstringnonullJSON array for includeTargets — who the method applies to. REPLACES the existing targets; omit to leave them alone.
methodConfigurationIdstringyesThe method configuration's id, for example Sms, Fido2, MicrosoftAuthenticator, TemporaryAccessPass or Email.
odataTypestringyesThe @odata.type of the configuration, for example #microsoft.graph.smsAuthenticationMethodConfiguration. Graph requires it on this polymorphic resource.
statestringyesenabled or disabled.

[Microsoft Graph] Update the tenant-wide authentication methods policy — the settings that sit above the individual methods, most usefully the registration campaign that nudges users onto the Authenticator app and the policy's migration state. Destructive because it applies to everybody at once and takes effect without warning anyone: a registration campaign begins prompting people at sign-in from the moment it is switched on. To enable or disable a specific METHOD, use the method-configuration tool instead — this one is for the policy around them.

ParamTypeRequiredDefaultDescription
descriptionstringnonullNew description for the policy.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
policyMigrationStatestringnonullPolicy migration state, for example migrationComplete.
registrationEnforcementJsonstringnonullJSON for registrationEnforcement — the registration campaign settings.

[Microsoft Graph] Change the number on an existing phone authentication method — the ordinary fix when somebody changes handset or carrier. Destructive for the same reason the addition is, and slightly sharper: it REPLACES the number that was proving their identity, so the previous one stops working immediately and a mistyped digit leaves the person unable to complete multifactor authentication with no obvious cause. Verify the new number and confirm the person can use it before removing any other method they still have.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
phoneMethodIdstringyesThe phone method's id, from the phone-method listing.
phoneNumberstringyesThe new phone number in international format.
userIdstringyesThe user's object id or userPrincipalName.

Conditional Access

ToolPlanAccessSummary
graph_create_authentication_contextProWriteDefine an authentication context — one of the c1 to c25 labels an application can request to force step-up authentication on a specific action.
graph_create_authentication_strength_policyProWriteDefine a custom authentication strength — a named set of method combinations that a Conditional Access policy can require.
graph_create_conditional_access_policyProDestructiveCreate a Conditional Access policy.
graph_create_country_named_locationProWriteDefine a named location from a list of countries, for policies to refer to by name.
graph_create_ip_named_locationProWriteDefine a named location from IP ranges, for policies to refer to by name.
graph_delete_authentication_contextProDestructiveDelete an authentication context.
graph_delete_authentication_strength_policyProDestructiveDelete a custom authentication strength policy.
graph_delete_conditional_access_policyProDestructiveDelete a Conditional Access policy permanently.
graph_delete_named_locationProDestructiveDelete a named location.
graph_get_authentication_strength_policyFreeRead-onlyGet one authentication strength policy with its allowedCombinations — the exact method combinations that satisfy it.
graph_get_conditional_access_policyFreeRead-onlyGet one Conditional Access policy in full.
graph_get_named_locationFreeRead-onlyGet one named location with its full definition.
graph_list_authentication_contextsFreeRead-onlyList the authentication context class references — the c1 to c25 labels that let an application ask for step-up authentication on a specific action rather than at sign-in.
graph_list_authentication_strength_policiesFreeRead-onlyList the authentication strength policies — the named combinations of methods a Conditional Access policy can demand, such as Microsoft's built-in phishing-resistant MFA.
graph_list_conditional_access_policiesFreeRead-onlyList every Conditional Access policy in the tenant with its conditions and grant controls.
graph_list_named_locationsFreeRead-onlyList the named locations defined in the tenant — the IP ranges and countries that Conditional Access policies refer to by name.
graph_set_conditional_access_policy_stateProDestructiveTurn a Conditional Access policy on, off, or into report-only mode.
graph_update_conditional_access_policyProDestructiveUpdate a Conditional Access policy's conditions or controls.
graph_update_named_locationProDestructiveUpdate a named location's ranges, countries or trusted flag.

[Microsoft Graph] Define an authentication context — one of the c1 to c25 labels an application can request to force step-up authentication on a specific action. Not destructive: it does nothing until a Conditional Access policy targets it and an application requests it. The id must be one of the reserved c1 through c25 values, and isAvailable must be true before applications can see it, which is the step most often missed when a context appears configured and never triggers.

ParamTypeRequiredDefaultDescription
contextIdstringyesThe reserved id, c1 through c25.
descriptionstringnonullWhat the context is for.
displayNamestringyesDisplay name shown to administrators and in application pickers.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
isAvailablebooleannotrueWhether applications can see and request it. False means it is defined and inert.

[Microsoft Graph] Define a custom authentication strength — a named set of method combinations that a Conditional Access policy can require. Not destructive until a policy references it. This is how a tenant demands phishing-resistant authentication specifically rather than "MFA" in general: the allowedCombinations list names exactly which methods count, so excluding sms and voice here is what closes the gap an attacker uses when they move a phone number. Microsoft's built-in strengths cannot be modified, which is why custom ones exist.

ParamTypeRequiredDefaultDescription
allowedCombinationsstringyesComma-separated allowed combinations, for example "fido2,windowsHelloForBusiness,x509CertificateMultiFactor".
descriptionstringnonullWhat the strength is for.
displayNamestringyesDisplay name for the strength.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Create a Conditional Access policy. Destructive despite creating rather than removing, and this is the tool in the connector most capable of a tenant-wide outage: a policy targeting All users with a control nobody can satisfy takes effect within minutes and applies to whoever created it. Two habits prevent that and nothing else does — create it as enabledForReportingButNotEnforced and read the report-only sign-in results before enabling, and exclude a break-glass account in the conditions. Note that grantControls.operator decides everything: OR means any one control is enough, AND means all of them.

ParamTypeRequiredDefaultDescription
conditionsJsonstringyesJSON for 'conditions' — who and what the policy applies to (users, applications, platforms, locations, risk levels). Include your break-glass account in excludeUsers.
displayNamestringyesDisplay name for the policy.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
grantControlsJsonstringnonullJSON for 'grantControls' — what to require or block. The 'operator' field is OR (any one control) or AND (all of them).
sessionControlsJsonstringnonullJSON for 'sessionControls' — sign-in frequency, persistent browser, app-enforced restrictions.
statestringno"enabledForReportingButNotEnforced"Policy state: enabledForReportingButNotEnforced (recommended first), enabled, or disabled.

[Microsoft Graph] Define a named location from a list of countries, for policies to refer to by name. Not destructive on its own. Country locations are what "block sign-ins from outside our countries" is built from, and the caution belongs with that use rather than with this call: country determination is by IP address, so a VPN or a mobile network routing through another country produces a false result in both directions, and a policy blocking every country except one will eventually block a genuine traveller. Countries are two-letter ISO codes.

ParamTypeRequiredDefaultDescription
countriesstringyesComma-separated two-letter ISO country codes, for example "GB,IE,US".
displayNamestringyesDisplay name for the location.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
includeUnknownCountriesAndRegionsbooleannofalseWhether IP addresses that map to no country count as inside this location.
lookupMethodstringnonullHow unknown countries are treated: countryLookupMethod values are clientIpAddress or authenticatorAppGps.

[Microsoft Graph] Define a named location from IP ranges, for policies to refer to by name. Not destructive: until a policy references it this changes nothing. Be deliberate about isTrusted, which is the property that matters — a trusted location is treated as lower risk and is commonly what allows sign-ins to skip multifactor authentication, so marking a range trusted is a security decision rather than a label. Ranges are CIDR, and IPv4 and IPv6 are different @odata.types inside the array; a separate tool exists for country-based locations, which are a different object entirely.

ParamTypeRequiredDefaultDescription
displayNamestringyesDisplay name for the location.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
ipRangesJsonstringyesJSON array of ipRanges, for example [{"@odata.type":"#microsoft.graph.iPv4CidrRange","cidrAddress":"203.0.113.0/24"}].
isTrustedbooleannofalseWhether sign-ins from here are treated as lower risk. A security decision, not a label.

[Microsoft Graph] Delete an authentication context. Destructive because the protection travels with it: an application or SharePoint site that was demanding step-up authentication through this context stops demanding anything, and nothing in that application announces the change. Check which policies target the context first, and prefer setting isAvailable to false if the intent is only to stop new use.

ParamTypeRequiredDefaultDescription
contextIdstringyesThe context's id, c1 through c25.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Delete a custom authentication strength policy. Destructive because of what depends on it: a Conditional Access policy requiring this strength loses the requirement, so sign-ins it was protecting proceed under whatever remains. Microsoft refuses to delete a strength that is still referenced, which is a genuine safeguard — treat that refusal as information rather than an obstacle, and find the referencing policy. Built-in strengths cannot be deleted at all.

ParamTypeRequiredDefaultDescription
authenticationStrengthPolicyIdstringyesThe authentication strength policy's id. Built-in strengths cannot be deleted.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Delete a Conditional Access policy permanently. There is no recycle bin for these and no version history: a policy representing months of accumulated exceptions is gone, and rebuilding it means rediscovering every exclusion the hard way. Disable it instead unless removal is genuinely intended — a disabled policy enforces nothing and can be turned back on in one call. Deleting a policy also silently REMOVES the protection it was providing, so anything it was blocking is permitted from that moment.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
policyIdstringyesThe policy's id.

[Microsoft Graph] Delete a named location. Destructive beyond the object itself: any policy referencing it is affected, and a policy whose only location condition disappears may stop matching anything or start matching everything depending on whether the reference was an include or an exclude. List the policies and check for the location's id before deleting it — Graph will not warn you.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
namedLocationIdstringyesThe named location's id.

[Microsoft Graph] Get one authentication strength policy with its allowedCombinations — the exact method combinations that satisfy it. This is the read that answers whether a policy demanding "strong authentication" actually excludes the weak methods: a combination list containing sms or voice is not phishing-resistant however the policy is named, and the difference decides whether a token-theft attack succeeds.

ParamTypeRequiredDefaultDescription
authenticationStrengthPolicyIdstringyesThe authentication strength policy's id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one Conditional Access policy in full. Read it before every update, because the update REPLACES whole nested objects rather than merging inside them — sending a conditions object built from memory is how an exclusion list gets silently emptied. Two fields deserve the most attention: grantControls.operator, where OR means any single control suffices and AND means all of them, and the excludeUsers and excludeGroups arrays, which override every inclusion in the policy and are the usual explanation for a policy that is not applying to the account being investigated.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
policyIdstringyesThe policy's id.

[Microsoft Graph] Get one named location with its full definition. The @odata.type distinguishes the two kinds that exist — an ipNamedLocation holds CIDR ranges, a countryNamedLocation holds country codes — and they are not interchangeable in an update, so read this before changing one. Read it before deleting one too: a location referenced by a live policy cannot simply be removed without changing what that policy does.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
namedLocationIdstringyesThe named location's id.

[Microsoft Graph] List the authentication context class references — the c1 to c25 labels that let an application ask for step-up authentication on a specific action rather than at sign-in. They are how a SharePoint site or a custom app requires fresh multifactor authentication for one sensitive operation. The isAvailable flag decides whether applications can see and request a context at all, so a context that appears configured but unavailable is defined and doing nothing.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] List the authentication strength policies — the named combinations of methods a Conditional Access policy can demand, such as Microsoft's built-in phishing-resistant MFA. An authentication strength is the modern replacement for "require MFA": it says WHICH methods count, which matters because requiring MFA in general still accepts SMS, and SMS is the method an attacker defeats by moving a phone number. Built-in strengths cannot be modified; custom ones can be created and deleted here.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum policies to return (1-999, default 999).

[Microsoft Graph] List every Conditional Access policy in the tenant with its conditions and grant controls. This is the complete answer to "what is actually enforcing sign-in security here", and the read to do ONCE and work from — the surface is rate-limited to roughly one request per second tenant-wide, so fetching policies individually in a loop gets throttled with no Retry-After to guide the wait. Read each policy's state first: enabled is live, disabled is inert, and enabledForReportingButNotEnforced logs what WOULD have happened without doing it, which is the state a tenant with impressive-looking policies is often entirely in.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "state eq 'enabled'".
maxItemsintegerno999Maximum policies to return (1-999, default 999).

[Microsoft Graph] List the named locations defined in the tenant — the IP ranges and countries that Conditional Access policies refer to by name. Two things worth reading rather than assuming: the isTrusted flag, because a trusted location is treated as lower risk and is frequently what allows sign-ins to skip multifactor authentication entirely, and whether the ranges still describe the customer's actual offices, since an office that moved leaves a range trusting somebody else's building.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum locations to return (1-999, default 999).

[Microsoft Graph] Turn a Conditional Access policy on, off, or into report-only mode. A separate tool from the general update because it is both the most common change and the one with the largest effect for the smallest body — and because it is the emergency lever: disabling a policy is how a lockout in progress is stopped, and it works in seconds. The three states are enabled (live), disabled (inert), and enabledForReportingButNotEnforced (logs what it would have done). Moving a policy from report-only to enabled is the moment it starts blocking people, so read its report-only results first.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
policyIdstringyesThe policy's id.
statestringyesenabled, disabled, or enabledForReportingButNotEnforced.

[Microsoft Graph] Update a Conditional Access policy's conditions or controls. The sharpest trap in this family: Graph merges at the TOP level only, so a conditions object sent here REPLACES the whole existing one — every exclusion not present in what you send is gone, break-glass account included, and the policy still looks correct in a summary. Read the policy first and send its conditions back with your change applied. To turn a policy on or off, use the dedicated state tool rather than this one.

ParamTypeRequiredDefaultDescription
conditionsJsonstringnonullJSON for 'conditions'. REPLACES the existing conditions entirely — include every exclusion you intend to keep.
displayNamestringnonullNew display name.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
grantControlsJsonstringnonullJSON for 'grantControls'. REPLACES the existing controls entirely.
policyIdstringyesThe policy's id.
sessionControlsJsonstringnonullJSON for 'sessionControls'. REPLACES the existing session controls entirely.

[Microsoft Graph] Update a named location's ranges, countries or trusted flag. Destructive because the definition IS the state: every policy referencing this location changes behaviour immediately, without any of those policies being touched or reviewed. Adding a range to a TRUSTED location is the sharpest version — it can exempt a whole network from multifactor authentication with a change that reads like an inventory update. Supply ipRanges for an IP location or countries for a country location, matching what the location already is; the two are different object types and cannot be swapped by an update.

ParamTypeRequiredDefaultDescription
countriesstringnonullComma-separated ISO country codes for a country location. REPLACES the existing list.
displayNamestringnonullNew display name.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
ipRangesJsonstringnonullJSON array of ipRanges for an IP location. REPLACES the existing ranges.
isTrustedbooleannonullWhether sign-ins from here are treated as lower risk. IP locations only.
namedLocationIdstringyesThe named location's id.

Administrative Units

ToolPlanAccessSummary
graph_add_administrative_unit_memberProWriteAdd a user, group or device to an administrative unit.
graph_add_administrative_unit_scoped_roleProDestructiveGrant somebody an administrative role limited to this unit's members.
graph_create_administrative_unitProWriteCreate an administrative unit.
graph_delete_administrative_unitProDestructiveDelete an administrative unit.
graph_get_administrative_unitFreeRead-onlyGet one administrative unit, including its membership rule if it has one and its visibility.
graph_list_administrative_unit_membersFreeRead-onlyList the users, groups and devices inside an administrative unit.
graph_list_administrative_unit_scoped_role_membersFreeRead-onlyList who holds an administrative role SCOPED to this unit — the people who can administer its members and nobody else.
graph_list_administrative_unitsFreeRead-onlyList the administrative units in a directory — the containers that let administrative power be scoped to part of the tenant rather than all of it.
graph_remove_administrative_unit_memberProDestructiveRemove a user, group or device from an administrative unit.
graph_remove_administrative_unit_scoped_roleProDestructiveRevoke somebody's administrative role over this unit.
graph_update_administrative_unitProWriteUpdate an administrative unit's name, description or visibility.
graph_update_administrative_unit_membership_ruleProDestructiveChange the membership rule of a dynamic administrative unit.

[Microsoft Graph] Add a user, group or device to an administrative unit. Not destructive by the connector's standing rule — the matching removal undoes it — but be aware of what it means: everyone holding a scoped role on this unit immediately gains administrative power over the object just added, so adding a privileged account to a unit administered by a helpdesk is how a low-privilege administrator ends up able to reset a high-privilege password. Only works on a hand-curated unit; a dynamic unit's membership comes from its rule.

ParamTypeRequiredDefaultDescription
administrativeUnitIdstringyesThe administrative unit's object id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
memberIdstringyesThe object id of the user, group or device to add.

[Microsoft Graph] Grant somebody an administrative role limited to this unit's members. Destructive as every privilege grant in this connector is — it confers real administrative power and removing it later undoes nothing done with it — but this is the SAFER shape of that act, and the one to reach for instead of a tenant-wide grant: the same Helpdesk Administrator role bounded to one branch office rather than to everybody. Read the unit's membership first, because the membership is the true blast radius, and check it is not a dynamic unit whose rule could later pull in accounts nobody intended.

ParamTypeRequiredDefaultDescription
administrativeUnitIdstringyesThe administrative unit's object id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
principalIdstringyesThe object id of the user receiving the scoped role.
roleIdstringyesThe directory role's id or role template id — the role being granted within this unit.

[Microsoft Graph] Create an administrative unit. Not destructive: an empty unit with no scoped administrators confers nothing on anybody. Decide the membership model at creation, because it cannot be changed afterwards — supplying a membership rule makes the unit DYNAMIC, and a dynamic unit refuses members added by hand for the rest of its life. Leave the rule empty for a unit whose membership will be curated. Setting isMemberManagementRestricted protects the unit's members from tenant-wide administrators, which is the right choice for executives or service accounts and the wrong one for an ordinary branch office.

ParamTypeRequiredDefaultDescription
descriptionstringnonullWhat the unit is for.
displayNamestringyesDisplay name for the unit.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
isMemberManagementRestrictedbooleannonullSet true to protect this unit's members from tenant-wide administrators.
membershipRulestringnonullMembership rule, for example "(user.department -eq "Sales")". Supplying one makes the unit DYNAMIC and permanently unable to take hand-added members.
visibilitystringnonullSet to HiddenMembership to hide the membership from ordinary users.

[Microsoft Graph] Delete an administrative unit. The members themselves are untouched — users, groups and devices continue to exist — but every scoped role assignment on the unit disappears with it, so the administrators who could help those people can no longer do so, and nothing tells them why. Restoring the arrangement means recreating the unit, its membership and every scoped role. List the scoped role members first; that list is the thing that cannot be recovered.

ParamTypeRequiredDefaultDescription
administrativeUnitIdstringyesThe administrative unit's object id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one administrative unit, including its membership rule if it has one and its visibility. Read it before changing anything: a unit whose membershipType is dynamic cannot have members added by hand, and attempting it fails in a way that reads as a permissions problem rather than a configuration one. The isMemberManagementRestricted flag is the other property worth checking — a restricted unit protects its members from tenant-wide administrators, which is powerful and easy to forget when troubleshooting why an administrator cannot act on somebody.

ParamTypeRequiredDefaultDescription
administrativeUnitIdstringyesThe administrative unit's object id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] List the users, groups and devices inside an administrative unit. This is the real answer to "who can the administrators scoped to this unit act on", and the read to do before granting anybody a scoped role — the unit's name says what somebody intended, its membership says what they actually built. For a dynamic unit this reflects the current evaluation of the rule, which can lag a recent attribute change by a few minutes.

ParamTypeRequiredDefaultDescription
administrativeUnitIdstringyesThe administrative unit's object id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum members to return (1-999, default 999).

[Microsoft Graph] List who holds an administrative role SCOPED to this unit — the people who can administer its members and nobody else. This is the read that completes a privileged-access review, because these administrators are invisible to a tenant-wide directory-role listing: somebody who is a Helpdesk Administrator over one branch office does not appear in the tenant's Helpdesk Administrator members at all. An offboarding review that checks only tenant-wide roles misses every one of them.

ParamTypeRequiredDefaultDescription
administrativeUnitIdstringyesThe administrative unit's object id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum scoped role members to return (1-999, default 999).

[Microsoft Graph] List the administrative units in a directory — the containers that let administrative power be scoped to part of the tenant rather than all of it. A tenant with none is one where every administrator is a tenant-wide administrator, which is worth noticing during a security review. Read membershipType on each: dynamic means the unit recalculates itself from a rule, so its membership is not something anybody curates by hand.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "startswith(displayName,'Branch')".
maxItemsintegerno999Maximum units to return (1-999, default 999).

[Microsoft Graph] Remove a user, group or device from an administrative unit. The object itself is not deleted — only its membership — but the administrators scoped to this unit lose the ability to act on it immediately, which for a helpdesk arrangement means the person can no longer be helped by the team that supports them. Destructive by the standing access-removal rule.

ParamTypeRequiredDefaultDescription
administrativeUnitIdstringyesThe administrative unit's object id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
memberIdstringyesThe member's object id.

[Microsoft Graph] Revoke somebody's administrative role over this unit. The offboarding step that a tenant-wide role review will never prompt, because a scoped administrator does not appear in the tenant's directory-role membership at all — the scoped-role listing on each unit is the only place they are visible. Takes the scoped role membership's own id rather than a person and a role, since one person can hold several scoped roles on one unit.

ParamTypeRequiredDefaultDescription
administrativeUnitIdstringyesThe administrative unit's object id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
scopedRoleMembershipIdstringyesThe scoped role membership's id, from the scoped-administrator listing.

[Microsoft Graph] Update an administrative unit's name, description or visibility. Not destructive — none of these change who is in the unit or who administers it. The membership RULE is deliberately not editable here and has its own tool, because changing a rule moves people in and out of administrative scope, which is a different kind of act from renaming a container.

ParamTypeRequiredDefaultDescription
administrativeUnitIdstringyesThe administrative unit's object id.
descriptionstringnonullNew description.
displayNamestringnonullNew display name.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
visibilitystringnonullNew visibility, for example HiddenMembership.

[Microsoft Graph] Change the membership rule of a dynamic administrative unit. Destructive because the rule IS the membership: there is no list to review before it takes effect, people move in and out as Entra re-evaluates, and everyone scoped to administer this unit gains or loses authority over them accordingly. A rule that matches nobody looks identical to one still processing, so verify against the member listing rather than assuming success. Only works on a unit created as dynamic — a hand-curated unit cannot be converted.

ParamTypeRequiredDefaultDescription
administrativeUnitIdstringyesThe administrative unit's object id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
membershipRulestringyesThe new membership rule, for example "(user.department -eq "Sales")".
membershipRuleProcessingStatestringno"On"Rule processing state: On to evaluate it, Paused to stop re-evaluating without discarding it.

Devices

ToolPlanAccessSummary
graph_add_device_registered_ownerProDestructiveRegister a user as an OWNER of a device.
graph_add_device_registered_userProWriteRegister a user on a device — the record that this person uses this machine.
graph_delete_deviceProDestructiveDelete a device object from the directory.
graph_get_deviceFreeRead-onlyGet one device object in full — operating system and version, join and trust type, management authority, compliance flag and when it last signed in.
graph_list_device_membershipsFreeRead-onlyList the groups and administrative units a device belongs to DIRECTLY.
graph_list_device_registered_ownersFreeRead-onlyList the registered OWNERS of a device — normally the person who joined it to the directory.
graph_list_device_registered_usersFreeRead-onlyList the users registered on a device — everyone who has signed in and established a device registration, which on a shared machine is a longer list than anyone expects.
graph_list_device_transitive_membershipsFreeRead-onlyList every group and administrative unit a device belongs to, INCLUDING through nesting.
graph_list_devicesFreeRead-onlyList the devices registered in a directory.
graph_remove_device_registered_ownerProDestructiveRemove a user's OWNER registration on a device — the inverse of adding one, and destructive because it withdraws the local administrator rights an Entra-joined Windows machine grants its registered…
graph_remove_device_registered_userProDestructiveRemove a user's registration on a device.
graph_set_device_account_enabledProDestructiveEnable or disable a device's directory account.
graph_update_deviceProWriteUpdate a device object's descriptive properties — its display name, operating system and version.

[Microsoft Graph] Register a user as an OWNER of a device. Additive, and undone by the matching removal — but understand what it grants before using it: by default the registered owner can self-service retrieve the device's BITLOCKER RECOVERY KEY (unless the tenant has enabled the restriction blocking non-admin key access), which is the key to an encrypted disk. This is an access grant, not a bookkeeping label. It does NOT change the machine's local Administrators group — Microsoft populates that at join time only. Use graph_add_device_registered_user for somebody who merely needs to sign in.

ParamTypeRequiredDefaultDescription
deviceIdstringyesThe device's OBJECT id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesObject id of the user to register as an owner.

[Microsoft Graph] Register a user on a device — the record that this person uses this machine. Additive and reversible, and NOT the same as ownership: a registered user has signed in, an owner administers the machine and holds local administrator rights on it. Use graph_add_device_registered_owner when the intent is to make somebody responsible for the endpoint.

ParamTypeRequiredDefaultDescription
deviceIdstringyesThe device's OBJECT id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesObject id of the user to register.

[Microsoft Graph] Delete a device object from the directory. The machine itself is untouched — this removes its identity, not its data — but everything that identity was doing stops: it no longer satisfies any Conditional Access device condition, it drops out of every group it was a member of, and BitLocker recovery keys escrowed against the object go with it, which is the loss people discover months later at the worst moment. Read the recovery keys out first if the disk is encrypted. Deleted device objects are recoverable for 30 days through the deleted-items surface. For a machine you want to keep but stop trusting, graph_set_device_account_enabled is the reversible answer.

ParamTypeRequiredDefaultDescription
deviceIdstringyesThe device's OBJECT id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one device object in full — operating system and version, join and trust type, management authority, compliance flag and when it last signed in. Note the two identifiers this resource carries: the OBJECT id, which every tool here takes, and the deviceId, which is the value Intune and the Windows client report and therefore the one somebody reading from a device itself will have. Confusing them produces a not-found that looks like the device is missing from the directory.

ParamTypeRequiredDefaultDescription
deviceIdstringyesThe device's OBJECT id (not the deviceId reported by the machine itself).
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] List the groups and administrative units a device belongs to DIRECTLY. Device group membership is what most policy targeting is built on — Intune configuration profiles, compliance policies and Conditional Access device filters all resolve through these groups — so this is the first read when a policy is not reaching a machine. Direct membership only; a device inside a nested group appears here under the group it was added to, not the parent.

ParamTypeRequiredDefaultDescription
deviceIdstringyesThe device's OBJECT id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum groups to return (1-999, default 999).

[Microsoft Graph] List the registered OWNERS of a device — normally the person who joined it to the directory. The owner is not merely a label: on an Entra-joined Windows machine the registered owner is granted local administrator rights on it by default, which makes this list a genuine privilege read. A device whose owner has left the company, or one owned by somebody who never used it, is worth investigating rather than tidying away.

ParamTypeRequiredDefaultDescription
deviceIdstringyesThe device's OBJECT id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum owners to return (1-999, default 999).

[Microsoft Graph] List the users registered on a device — everyone who has signed in and established a device registration, which on a shared machine is a longer list than anyone expects. Distinct from the owners: a registered user has used the device, an owner administers it. This is the read for "who has actually been on this laptop", and the one that turns a lost-device report into a list of the accounts whose sessions should be revoked.

ParamTypeRequiredDefaultDescription
deviceIdstringyesThe device's OBJECT id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum users to return (1-999, default 999).

[Microsoft Graph] List every group and administrative unit a device belongs to, INCLUDING through nesting. This is the one to use when a policy is or is not applying and the direct listing does not explain it: a device three levels down a group hierarchy is targeted by a policy aimed at the top, and only this read shows that. The usual finding is the reverse of what people expect — a machine is caught by a policy through a nested group nobody remembered existed.

ParamTypeRequiredDefaultDescription
deviceIdstringyesThe device's OBJECT id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum groups to return (1-999, default 999).

[Microsoft Graph] List the devices registered in a directory. The three properties that decide what a device actually IS are trustType, isCompliant and approximateLastSignInDateTime. trustType distinguishes a fully Entra-joined corporate machine (AzureAd) from a hybrid-joined one (ServerAd) and from a personal device someone registered (Workplace) — and a Workplace device holding corporate data is a finding in most tenants. Filtering on approximateLastSignInDateTime is how stale objects are found: a directory accumulates devices that were rebuilt or thrown away years ago, and each is a credential that still exists.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "trustType eq 'Workplace'" or "accountEnabled eq false".
maxItemsintegerno999Maximum devices to return (1-999, default 999).
orderbystringnonullOData sort, for example "displayName".
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] Remove a user's OWNER registration on a device — the inverse of adding one, and destructive because it withdraws the local administrator rights an Entra-joined Windows machine grants its registered owner. The person is not told; they discover it the next time something needs elevation. Removing the last owner leaves a device nobody administers, which Microsoft permits and which is worth checking against graph_list_device_registered_owners first.

ParamTypeRequiredDefaultDescription
deviceIdstringyesThe device's OBJECT id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesObject id of the owner to remove.

[Microsoft Graph] Remove a user's registration on a device. Destructive because on an Entra-joined machine the registration is what backs that user's device-based access from it, so removing it can stop them working from a laptop that still looks fine to them. This is the deliberate step when somebody hands a machine on to a colleague, and the read that tells you who is on it is graph_list_device_registered_users.

ParamTypeRequiredDefaultDescription
deviceIdstringyesThe device's OBJECT id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesObject id of the registered user to remove.

[Microsoft Graph] Enable or disable a device's directory account. DESTRUCTIVE when disabling, and the reason is worth understanding before using it: a disabled device object stops satisfying Conditional Access device conditions, so a policy requiring a compliant or hybrid-joined device blocks every sign-in FROM that machine — the person at the keyboard sees their work accounts stop working with no explanation, and nothing on the device says why. That is also what makes it the right immediate action on a machine reported lost. It is reversible by enabling the device again, but the interruption is real and the user is not notified either way. Separate from graph_update_device on purpose: this one property is the whole difference between relabelling a record and locking somebody out.

ParamTypeRequiredDefaultDescription
accountEnabledbooleanyestrue to enable the device account, false to disable it.
deviceIdstringyesThe device's OBJECT id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Update a device object's descriptive properties — its display name, operating system and version. Not destructive: it relabels a directory record and takes no access away from anybody. Note what Graph will NOT let you set here even though the properties exist on the resource: isCompliant and isManaged are writable only by Intune or an approved MDM app, so an attempt to mark a machine compliant from this tool is refused rather than honoured. Use graph_set_device_account_enabled for the account state, which is a separate operation because its blast radius is completely different.

ParamTypeRequiredDefaultDescription
deviceIdstringyesThe device's OBJECT id (not the deviceId reported by the machine itself).
displayNamestringnonullNew display name for the device.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
operatingSystemstringnonullOperating system type, for example "Windows".
operatingSystemVersionstringnonullOperating system version.

Intune Devices

ToolPlanAccessSummary
graph_bypass_activation_lockProDestructiveRemove Apple's Activation Lock from a supervised device so it can be set up under a different Apple Account.
graph_clean_windows_deviceProDestructiveReset a Windows device to its factory settings, the 'Autopilot Reset / fresh start' action.
graph_create_device_categoryProWriteCreate an Intune device category.
graph_delete_device_categoryProDestructiveDelete an Intune device category.
graph_delete_managed_deviceProDestructiveDelete a device's RECORD from Intune.
graph_delete_user_from_shared_apple_deviceProDestructiveRemove one named user's account and cached data from a shared iPad.
graph_disable_managed_device_lost_modeProDestructiveTurn off Lost Mode on a supervised Apple device, returning it to ordinary use and ending the location tracking that Lost Mode enables.
graph_get_detected_appFreeRead-onlyGet one detected application — its display name, version, publisher, size and the number of devices reporting it.
graph_get_device_categoryFreeRead-onlyGet one Intune device category by id — its display name and description.
graph_get_managed_deviceFreeRead-onlyGet one Intune-managed device in full — hardware, operating system, storage, compliance and encryption state, enrolment details and the results of any remote actions already sent to it…
graph_get_managed_device_categoryFreeRead-onlyGet the device category assigned to one Intune-managed device.
graph_get_managed_device_protection_stateFreeRead-onlyGet the Microsoft Defender protection state of a Windows device — real-time protection status, network inspection, signature version and age, malware protection enablement, last quick and full scan…
graph_list_detected_app_devicesFreeRead-onlyList the managed devices reporting a particular detected application.
graph_list_detected_appsFreeRead-onlyList the applications Intune has DETECTED across the enrolled fleet, with a device count for each.
graph_list_device_categoriesFreeRead-onlyList the Intune device categories defined in a tenant.
graph_list_managed_device_log_collectionsFreeRead-onlyList the diagnostic log collection requests raised against an Intune-managed device, with each request's status, size, the time it was requested and when it expires.
graph_list_managed_device_usersFreeRead-onlyList the primary users associated with an Intune-managed device.
graph_list_managed_devicesFreeRead-onlyList the devices enrolled in Intune.
graph_locate_managed_deviceProWriteAsk a supervised iOS/iPadOS or macOS device to report its location.
graph_logout_shared_apple_device_userProDestructiveSign out whoever is currently signed in on a shared iPad.
graph_reboot_managed_deviceProDestructiveRestart a device now.
graph_recover_managed_device_passcodeProDestructiveAsk a supervised device to surrender its current passcode to Intune.
graph_remote_lock_managed_deviceProDestructiveLock a device remotely so it requires its passcode to be used again.
graph_request_remote_assistanceProWriteRequest a remote-assistance session for a device.
graph_reset_managed_device_passcodeProDestructiveRemove or reset the passcode on a device.
graph_retire_managed_deviceProDestructiveUnenrol a device from Intune, removing company data, policies, certificates, Wi-Fi and VPN profiles and company applications while leaving the person's own data in place.
graph_shut_down_managed_deviceProDestructivePower a device off immediately.
graph_sync_managed_deviceProWriteAsk a device to check in with Intune immediately rather than waiting for its scheduled cycle.
graph_update_device_categoryProWriteUpdate an Intune device category's name or description.
graph_update_managed_deviceProWriteUpdate the two properties Intune lets an administrator write on a managed device: managedDeviceName, the friendly name shown throughout the console, and notes.
graph_windows_defender_scanProWriteStart a Microsoft Defender scan on a Windows device.
graph_windows_defender_update_signaturesProWriteTell a Windows device to update its Microsoft Defender malware signatures now.
graph_wipe_managed_deviceProDestructiveFACTORY-RESET a device.

[Microsoft Graph] Remove Apple's Activation Lock from a supervised device so it can be set up under a different Apple Account. This is the action for reclaiming a company-owned Mac, iPhone or iPad from a departed employee, and it is irreversible — the previous owner's claim on the hardware is gone. Only defensible on company-owned devices, and the corresponding bypass code stored on the device record is a credential in its own right.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] Reset a Windows device to its factory settings, the 'Autopilot Reset / fresh start' action. keepUserData is REQUIRED here rather than optional, because it is the whole difference between removing the machine's installed applications and settings while the person keeps their files, and erasing the person's files with them. There is no undo either way, and the device is unusable while it rebuilds. Windows only.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
keepUserDatabooleanyesREQUIRED and consequential. True keeps the user's files; false erases them along with everything else.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] Create an Intune device category. Additive and reversible — nothing is targeted by a category until a device is placed in it or a dynamic group rule names it. Write the description as the enrolling user will read it, because on tenants with category mapping enabled that text is the prompt they answer during enrolment.

ParamTypeRequiredDefaultDescription
descriptionstringnonullDescription shown to users during enrolment. Optional but strongly recommended.
displayNamestringyesDisplay name for the category, for example "Warehouse scanner".
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Delete an Intune device category. Destructive for a reason that is invisible at the moment of deletion: every device currently in the category loses it, so any dynamic Entra group whose rule matched that category empties, and every policy and application targeted through that group stops reaching those machines. The devices keep working and simply stop being managed the way somebody intended. List the category's devices and the tenant's dynamic rules before removing one.

ParamTypeRequiredDefaultDescription
deviceCategoryIdstringyesThe device-category id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Delete a device's RECORD from Intune. This removes the object from the console and nothing else: the device is not wiped, not retired and not unenrolled, so a machine that is still checking in simply reappears at its next sync while keeping every policy it already had. That makes this the tool for tidying stale records of machines that no longer exist, and the wrong tool for removing a device from management — retire does that. Compliance and reporting history for the record are lost.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] Remove one named user's account and cached data from a shared iPad. Their local data on that device is deleted; anything already synced to their cloud storage survives, anything that had not is gone. This frees space on a shared device that has accumulated dormant accounts, and it is the action to run when a person leaves rather than logging them out. Identify the person by user principal name.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.
userPrincipalNamestringyesUser principal name of the account to remove from the device, for example sam@contoso.com.

[Microsoft Graph] Turn off Lost Mode on a supervised Apple device, returning it to ordinary use and ending the location tracking that Lost Mode enables. Destructive because it removes a protection rather than adding one: a device taken out of Lost Mode while it is still missing becomes usable by whoever has it, and stops reporting where it is. Confirm the device is genuinely back in the right hands first.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] Get one detected application — its display name, version, publisher, size and the number of devices reporting it. Intune treats each VERSION as its own detected application, so the same product appears many times across a fleet and 'how many devices have this app' is really the sum over its versions. That is the detail that makes an audit count look wrong when it is not.

ParamTypeRequiredDefaultDescription
detectedAppIdstringyesThe detected-application id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one Intune device category by id — its display name and description. The description is what the user sees when Intune asks them to pick a category during enrolment, so it is worth reading before changing it: a category whose description no longer matches its intended use quietly steers self-enrolling users into the wrong policy set.

ParamTypeRequiredDefaultDescription
deviceCategoryIdstringyesThe device-category id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one Intune-managed device in full — hardware, operating system, storage, compliance and encryption state, enrolment details and the results of any remote actions already sent to it (deviceActionResults). SECURITY NOTE: a handful of properties are withheld from the list view and returned only when named in select — activationLockBypassCode, udid, iccid, ethernetMacAddress, notes and remoteAssistanceSessionUrl. activationLockBypassCode is a working credential: whoever has it can remove an Apple device from its owner's Activation Lock, so ask for it only when that is the task. Use azureADDeviceId to cross-reference this machine with its Entra directory object.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id (not the Entra device object id).
selectstringnonullComma-separated properties to return. Omit for the default set; several sensitive properties are returned ONLY when named here.

[Microsoft Graph] Get the device category assigned to one Intune-managed device. Categories are the tenant's own taxonomy — 'Laptop', 'Warehouse scanner', 'Executive' — and they matter beyond labelling because dynamic Entra groups commonly key on deviceCategory, which then drives policy and application targeting. A device that landed in the wrong category is targeted by the wrong policies.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] Get the Microsoft Defender protection state of a Windows device — real-time protection status, network inspection, signature version and age, malware protection enablement, last quick and full scan times, and whether a reboot is required to finish remediation. This is the read that answers 'is antivirus actually working on this machine', as opposed to 'is a policy assigned to it'. Signature age is the value most worth checking: a device with protection enabled but signatures weeks old is unprotected in practice.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] List the managed devices reporting a particular detected application. This is the other half of a software audit: the detected-app list says how many machines carry a version, and this says WHICH ones, which is what turns 'forty devices still run the vulnerable release' into a remediation list. Each entry is a full managed device, so the compliance state and last check-in needed to plan the work are already here.

ParamTypeRequiredDefaultDescription
detectedAppIdstringyesThe detected-application id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum devices to return (1-999, default 999).

[Microsoft Graph] List the applications Intune has DETECTED across the enrolled fleet, with a device count for each. Detected apps are what the devices actually report as installed, which is a different question from what Intune was asked to deploy — so this is the inventory read behind software-audit and unwanted-software work, and the fastest way to find how many machines still carry a version with a known vulnerability. Detection runs on the device check-in cycle, so a freshly installed application appears here on a delay rather than immediately.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "startswith(displayName,'Google Chrome')".
maxItemsintegerno999Maximum applications to return (1-999, default 999).
orderbystringnonullOData sort, for example "deviceCount desc".
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] List the Intune device categories defined in a tenant. Categories are the tenant's own device taxonomy, offered to the user during enrolment when category mapping is switched on, and commonly used as the rule property behind dynamic Entra device groups — which is what makes them a targeting mechanism rather than a label. Read these before assigning one to a device, because the assignment matches on the category's display name.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum categories to return (1-999, default 999).

[Microsoft Graph] List the diagnostic log collection requests raised against an Intune-managed device, with each request's status, size, the time it was requested and when it expires. Intune's collected logs are retained for a limited window, so an expired request explains a missing download far more often than a failure does. Useful when reconstructing what an earlier technician already gathered before asking the customer for it again.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.
maxItemsintegerno999Maximum requests to return (1-999, default 999).

[Microsoft Graph] List the primary users associated with an Intune-managed device. The primary user is what Intune uses to decide which user-targeted policies and applications reach the machine, so a device with the wrong primary user quietly receives the wrong software — a common cause of 'the app never installed' where nothing appears to be failing. On a shared or kiosk device this list is legitimately empty.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.
maxItemsintegerno999Maximum users to return (1-999, default 999).

[Microsoft Graph] List the devices enrolled in Intune. This is the fleet read every other Intune answer starts from. The properties worth filtering on: complianceState (compliant / noncompliant / inGracePeriod / error — 'error' means Intune could not evaluate the device rather than that it failed), lastSyncDateTime (a device that has not checked in for weeks is not being managed, whatever its stored compliance says), isEncrypted, osVersion and managedDeviceOwnerType (company or personal). Filter supports 'eq' and 'or' on complianceState, managementAgent, ownerType and jailBroken, and 'lt'/'gt' on enrolledDateTime and lastSyncDateTime.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "complianceState eq 'noncompliant'" or "lastSyncDateTime lt 2026-07-01T00:00:00Z".
maxItemsintegerno999Maximum devices to return (1-999, default 999).
orderbystringnonullOData sort, for example "deviceName".
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] Ask a supervised iOS/iPadOS or macOS device to report its location. The action only requests the fix; the coordinates arrive asynchronously and are read afterwards from the device's own record, so a location is not in this response. Supervised Apple devices only — an unsupervised or Windows device refuses. Locating someone's device is a privacy-sensitive act even when the device is company-owned, and on personally-owned hardware it is usually one the person must be told about.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] Sign out whoever is currently signed in on a shared iPad. Their session ends immediately with no prompt, and because a shared-iPad session syncs and then clears on logout, work that had not finished syncing is lost. The right action for a device left signed in at the end of a shift, and the wrong one to run against a classroom mid-lesson.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] Restart a device now. There is no grace period, no prompt and no way for the person using it to defer: unsaved work is lost, and a call, meeting or long-running job ends mid-sentence. That is why an action this ordinary-sounding is flagged destructive — the damage is somebody's afternoon rather than their data, and it cannot be recalled once sent. Schedule reboots through an update ring or a configuration profile when the goal is maintenance rather than an emergency.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] Ask a supervised device to surrender its current passcode to Intune. The v1.0 action returns no body — the recovered passcode is retrieved from Intune afterwards, not from this response. Treated as destructive rather than as a read because it disarms a person's own protection on their device: after this runs, the passcode is knowable by whoever can see the tenant's Intune data, and the person is not told. Supervised devices only.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] Lock a device remotely so it requires its passcode to be used again. The first action for a device reported lost or stolen, and reversible only by whoever knows the passcode — which means locking a device whose owner has forgotten theirs, or one with no passcode set, strands it until a passcode reset or a wipe. There is no unlock action; that is why this is flagged destructive despite sounding mild.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] Request a remote-assistance session for a device. The action creates the session; the resulting connection URL is not in this response — it lands on the device record as remoteAssistanceSessionUrl, which is one of the properties returned only when explicitly selected on a device get. A session still needs the person at the far end to accept it, so nothing here connects to anybody unattended.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] Remove or reset the passcode on a device. On iOS the existing passcode is cleared and the person sets a new one; on Android a new passcode is generated and delivered to the device. Destructive because the person loses access with no warning until they are told the new arrangement, and on some platforms clearing the passcode also invalidates data protected by it. This action does NOT return a passcode in its response.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] Unenrol a device from Intune, removing company data, policies, certificates, Wi-Fi and VPN profiles and company applications while leaving the person's own data in place. This is the correct offboarding action for a personally-owned device, and the wrong one for a lost machine — retire leaves the user's data on it. Destructive and unrecallable: company applications and their data are removed, the device stops receiving policy, and re-enrolling it is a fresh enrolment rather than an undo.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] Power a device off immediately. Worse than a reboot in one specific way that matters for remote work: a device that is off cannot check in, so it receives no further Intune action — including the one that would undo this — until somebody physically turns it back on. Unsaved work is lost. Use it when a machine must stop right now, not as a tidy-up.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] Ask a device to check in with Intune immediately rather than waiting for its scheduled cycle. This is the first troubleshooting step for 'the policy has not applied yet' and it is safe to repeat — nothing is removed, nothing is reset, the device simply pulls its assignments early. It is a request rather than a guarantee: a device that is offline, asleep or out of battery receives it when it next reaches the service.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] Update an Intune device category's name or description. Renaming is not cosmetic when dynamic Entra group rules match on the category's display name: the rule keeps matching the OLD string, so the devices in the renamed category silently drop out of the group and lose whatever it targeted. Check the tenant's dynamic device rules before renaming one.

ParamTypeRequiredDefaultDescription
descriptionstringnonullNew description. Omit to leave it unchanged.
deviceCategoryIdstringyesThe device-category id.
displayNamestringnonullNew display name. Omit to leave it unchanged.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Update the two properties Intune lets an administrator write on a managed device: managedDeviceName, the friendly name shown throughout the console, and notes. Everything else on a managed device is reported BY the device and is read-only here — a rename does not reach the machine, it renames the record. Notes are the field worth using: they survive re-enrolment of the same record and are where 'shipped to the Denver office, do not wipe' belongs.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.
managedDeviceNamestringnonullNew friendly name for the device record. Omit to leave it unchanged.
notesstringnonullAdministrator notes on the device. Omit to leave them unchanged.

[Microsoft Graph] Start a Microsoft Defender scan on a Windows device. quickScan true runs the quick scan — minutes, the usual choice, and what to send when responding to an alert; false runs a full scan, which reads every file on the disk, takes hours and is noticeably felt by whoever is using the machine. Scanning finds and quarantines threats but changes no configuration, so this is a non-destructive write; the disruption is performance, not data.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.
quickScanbooleannotrueTrue for a quick scan (default). False runs a full disk scan, which takes hours and slows the device noticeably.

[Microsoft Graph] Tell a Windows device to update its Microsoft Defender malware signatures now. Pair it with the protection-state read: a device whose signature age is measured in weeks is running antivirus that cannot see anything recent, and this is the cheapest remedy. Safe and repeatable — it downloads definitions and does not touch policy, files or the user's session.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
managedDeviceIdstringyesThe Intune managed-device id.

[Microsoft Graph] FACTORY-RESET a device. By default this erases everything on it — the user's documents, photographs and accounts as well as the company's — and it cannot be undone or recalled once the device checks in. Use retire instead when the intent is to remove company data and management from a device someone owns personally. keepUserData true performs the reset while preserving the user's data where the platform supports it; keepEnrollmentData true keeps the device enrolled so it re-provisions rather than returning to out-of-box. Omitting both means a full wipe. macOsUnlockCode is the six-digit PIN a Mac will require afterwards — record it before sending, because a wiped Mac without it can be unrecoverable.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
keepEnrollmentDatabooleannonullTrue keeps the device enrolled so it re-provisions instead of returning to out-of-box.
keepUserDatabooleannonullTrue preserves the user's data where the platform allows. OMITTING THIS MEANS A FULL ERASE.
macOsUnlockCodestringnonullSix-digit recovery PIN a Mac will require after the wipe. Record it before sending.
managedDeviceIdstringyesThe Intune managed-device id.

Intune Configuration

ToolPlanAccessSummary
graph_assign_device_compliance_policyProDestructiveSet which groups a compliance policy applies to.
graph_assign_device_configurationProDestructiveSet which groups a configuration profile applies to.
graph_create_device_compliance_policyProWriteCreate an Intune compliance policy.
graph_create_device_configurationProWriteCreate an Intune configuration profile.
graph_delete_device_compliance_policyProDestructiveDelete an Intune compliance policy.
graph_delete_device_configurationProDestructiveDelete an Intune configuration profile.
graph_get_device_compliance_device_overviewFreeRead-onlyGet the device-level summary for a compliance policy — compliant, non-compliant, error, conflict, not-applicable and pending counts in one object.
graph_get_device_compliance_policyFreeRead-onlyGet one Intune compliance policy in full, with every rule it evaluates.
graph_get_device_compliance_user_overviewFreeRead-onlyGet the user-level summary for a compliance policy — the same verdict counts aggregated by person rather than by machine.
graph_get_device_configurationFreeRead-onlyGet one Intune configuration profile in full, including every setting it carries.
graph_get_device_configuration_device_overviewFreeRead-onlyGet the device-level rollout summary for a configuration profile — the counts of succeeded, error, conflict, not-applicable and pending devices in one small object.
graph_get_device_configuration_user_overviewFreeRead-onlyGet the user-level rollout summary for a configuration profile — succeeded, error, conflict, not-applicable and pending counted by PERSON rather than by machine.
graph_get_oma_setting_secretProDestructiveReturn the PLAIN-TEXT SECRET behind an encrypted OMA-URI setting in a Windows custom configuration profile — typically a VPN pre-shared key, a Wi-Fi passphrase or a certificate password.
graph_list_device_compliance_device_statusesFreeRead-onlyList each targeted device's verdict against a compliance policy, with the device name and when it last reported.
graph_list_device_compliance_policiesFreeRead-onlyList the Intune device compliance policies in a tenant — the policies that MEASURE whether a device meets the rules, as opposed to configuration profiles, which set them.
graph_list_device_compliance_policy_assignmentsFreeRead-onlyList the groups a compliance policy is assigned to, including exclusions.
graph_list_device_compliance_scheduled_actionsFreeRead-onlyList the scheduled actions attached to a compliance policy — what Intune does when a device fails, and how long it waits first.
graph_list_device_compliance_user_statusesFreeRead-onlyList each targeted user's aggregated verdict against a compliance policy.
graph_list_device_configuration_assignmentsFreeRead-onlyList the groups a configuration profile is assigned to, including whether each assignment INCLUDES or EXCLUDES that group.
graph_list_device_configuration_device_statusesFreeRead-onlyList how a configuration profile landed on each targeted DEVICE — succeeded, pending, error or conflict, with the device name and the time it last reported.
graph_list_device_configuration_user_statusesFreeRead-onlyList how a configuration profile landed for each targeted USER, aggregated across all of that person's devices.
graph_list_device_configurationsFreeRead-onlyList the Intune device configuration profiles in a tenant — the profiles that SET things on devices, as opposed to compliance policies, which measure them.
graph_update_device_compliance_policyProWriteUpdate an Intune compliance policy.
graph_update_device_configurationProWriteUpdate an Intune configuration profile.

[Microsoft Graph] Set which groups a compliance policy applies to. THIS REPLACES THE ENTIRE ASSIGNMENT LIST — anything not included is removed, and the devices in a removed group stop being measured. Each entry needs a target with an @odata.type: #microsoft.graph.groupAssignmentTarget with a groupId, #microsoft.graph.exclusionGroupAssignmentTarget, or #microsoft.graph.allDevicesAssignmentTarget. Destructive in both directions: adding a group can make a large number of people non-compliant at once and lock them out through Conditional Access, and removing one silently stops enforcing a control.

ParamTypeRequiredDefaultDescription
assignmentsJsonstringyesThe COMPLETE assignment array as JSON. Anything omitted is removed. Send [] to unassign entirely.
deviceCompliancePolicyIdstringyesThe compliance-policy id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Set which groups a configuration profile applies to. THIS REPLACES THE ENTIRE ASSIGNMENT LIST — a group you do not include is a group you have removed, and every device in it loses the profile. List the current assignments first and send them back alongside whatever you are adding. Each entry needs a target with an @odata.type: #microsoft.graph.groupAssignmentTarget with a groupId, #microsoft.graph.exclusionGroupAssignmentTarget to exclude one, or #microsoft.graph.allDevicesAssignmentTarget for everything. Destructive because there is no list to review afterwards and hundreds of devices change at once.

ParamTypeRequiredDefaultDescription
assignmentsJsonstringyesThe COMPLETE assignment array as JSON, for example [{"target":{"@odata.type":"#microsoft.graph.groupAssignmentTarget","groupId":"..."}}]. Anything omitted is removed. Send [] to unassign entirely.
deviceConfigurationIdstringyesThe device-configuration profile id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Create an Intune compliance policy. The body is the whole policy as JSON and must carry an @odata.type such as #microsoft.graph.windows10CompliancePolicy or #microsoft.graph.iosCompliancePolicy, plus displayName and that type's rules. Microsoft also requires scheduledActionsForRule on creation for the per-platform policies — a policy with no scheduled action is rejected, and the usual minimum is a single block action with a grace period. Additive: a new policy judges nothing until it is assigned.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
policyJsonstringyesThe complete policy as a JSON object. Must include @odata.type, displayName and scheduledActionsForRule. Read an existing policy of the same type to see the shape.

[Microsoft Graph] Create an Intune configuration profile. The body is the whole profile as JSON because the shape depends entirely on which platform and profile kind you are creating: it MUST carry an @odata.type such as #microsoft.graph.windows10GeneralConfiguration or #microsoft.graph.iosGeneralDeviceConfiguration, plus displayName and the root-level settings that type defines. Get an existing profile of the same type first and use its response as the template. Additive and reversible — a new profile reaches no device until it is assigned.

ParamTypeRequiredDefaultDescription
configurationJsonstringyesThe complete profile as a JSON object. Must include @odata.type and displayName. Read an existing profile of the same type to see the shape.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Delete an Intune compliance policy. Every device it judged stops being judged by it, and the effect on access is not the obvious one: depending on the tenant's 'mark devices with no compliance policy as' setting, machines that were correctly failing can become COMPLIANT the moment the policy is gone, and Conditional Access then lets them straight through. Deleting a policy to stop an outage can therefore silently disable the control it was enforcing. There is no undo.

ParamTypeRequiredDefaultDescription
deviceCompliancePolicyIdstringyesThe compliance-policy id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Delete an Intune configuration profile. Every device it was applied to loses the settings it carried at the next check-in, and what happens then depends on the setting: some revert to a platform default, some simply stay as they were with nothing enforcing them any more. The second case is the dangerous one — a deleted encryption or firewall profile leaves machines that LOOK configured while nothing maintains it. There is no undo and no recycle bin. Read the profile and its assignments first.

ParamTypeRequiredDefaultDescription
deviceConfigurationIdstringyesThe device-configuration profile id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get the device-level summary for a compliance policy — compliant, non-compliant, error, conflict, not-applicable and pending counts in one object. The single cheapest read for 'how compliant is this customer', and the right one to poll: the per-device list would page through the whole fleet to produce the same numbers, against a throttle budget shared with everything else the tenant runs.

ParamTypeRequiredDefaultDescription
deviceCompliancePolicyIdstringyesThe compliance-policy id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one Intune compliance policy in full, with every rule it evaluates. As with configuration profiles, the response is the shape a create body takes for that @odata.type, so this is the read to run before authoring a similar policy. What it does NOT include is the scheduled actions — the grace period and what happens when it expires live on a separate relationship and are read separately.

ParamTypeRequiredDefaultDescription
deviceCompliancePolicyIdstringyesThe compliance-policy id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] Get the user-level summary for a compliance policy — the same verdict counts aggregated by person rather than by machine. Use it alongside the device summary when reporting to a customer: the device number describes the estate, the user number describes how many of their staff are affected, and those are the two different questions an account manager and an engineer are each asking.

ParamTypeRequiredDefaultDescription
deviceCompliancePolicyIdstringyesThe compliance-policy id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one Intune configuration profile in full, including every setting it carries. This is the read to run BEFORE creating a similar profile: the response is exactly the shape a create body takes for that @odata.type, which saves guessing at a polymorphic schema. Note that secret settings are not returned in plain text here — an OMA-URI secret comes back as a reference id rather than its value.

ParamTypeRequiredDefaultDescription
deviceConfigurationIdstringyesThe device-configuration profile id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] Get the device-level rollout summary for a configuration profile — the counts of succeeded, error, conflict, not-applicable and pending devices in one small object. Read this first when asked how a deployment is going: it answers the question in a single request, where the per-device list would page through thousands of rows to reach the same four numbers. 'Not applicable' is normal rather than a fault — it counts devices the profile does not target, such as a Windows profile reaching an iPhone in a mixed group.

ParamTypeRequiredDefaultDescription
deviceConfigurationIdstringyesThe device-configuration profile id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get the user-level rollout summary for a configuration profile — succeeded, error, conflict, not-applicable and pending counted by PERSON rather than by machine. The two summaries disagree on any tenant where people have more than one device, and the disagreement is informative: a small user-error count beside a large device-error count usually means a handful of people with several broken machines each, which is a different investigation from many people with one.

ParamTypeRequiredDefaultDescription
deviceConfigurationIdstringyesThe device-configuration profile id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Return the PLAIN-TEXT SECRET behind an encrypted OMA-URI setting in a Windows custom configuration profile — typically a VPN pre-shared key, a Wi-Fi passphrase or a certificate password. Understand what this hands the caller: the value is the credential itself, it is the one thing the Intune console deliberately hides after it is saved, and anyone holding it can join the network or use the certificate it protects from anywhere, with no Intune role and no audit trail of their own. Marked DESTRUCTIVE even though it changes nothing, because it DISCLOSES a credential — that classification is deliberate and must not be "fixed" to read-only. Do not put the value in a chat transcript, a ticket or a log. Get the secretReferenceValueId from the profile's omaSettings via graph_get_device_configuration; only settings with isEncrypted true have one.

ParamTypeRequiredDefaultDescription
deviceConfigurationIdstringyesThe device-configuration profile id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
secretReferenceValueIdstringyesThe secretReferenceValueId from the encrypted omaSetting.

[Microsoft Graph] List each targeted device's verdict against a compliance policy, with the device name and when it last reported. The status to read carefully is 'inGracePeriod': the device has FAILED the policy but is still allowed through Conditional Access until its grace period expires, so a fleet that looks compliant today can lock a customer's staff out on a date nobody has written down. 'Error' means Intune could not evaluate the device at all, which is a different problem from failing.

ParamTypeRequiredDefaultDescription
deviceCompliancePolicyIdstringyesThe compliance-policy id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "status eq 'noncompliant'".
maxItemsintegerno999Maximum rows to return (1-999, default 999).

[Microsoft Graph] List the Intune device compliance policies in a tenant — the policies that MEASURE whether a device meets the rules, as opposed to configuration profiles, which set them. Compliance is only half a control on its own: the verdict matters because Conditional Access consumes it, so a tenant with strict compliance policies and no Conditional Access rule requiring compliance is measuring without enforcing. Reads the CLASSIC compliance surface; policies built on the newer settings-catalog-style compliance endpoint are not visible here, so an empty result is not proof there are none.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "startswith(displayName,'Windows')".
maxItemsintegerno999Maximum policies to return (1-999, default 999).
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] List the groups a compliance policy is assigned to, including exclusions. Read this before assigning, because assignment replaces the whole list. It also answers a question that looks like a bug: a device reported compliant when nobody expected it to be is usually a device no compliance policy targets at all, and whether an untargeted device counts as compliant depends on the tenant's 'mark devices with no compliance policy as' setting.

ParamTypeRequiredDefaultDescription
deviceCompliancePolicyIdstringyesThe compliance-policy id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum assignments to return (1-999, default 999).

[Microsoft Graph] List the scheduled actions attached to a compliance policy — what Intune does when a device fails, and how long it waits first. This is where the grace period actually lives, and it is the read that turns a non-compliance report into a date: an action configured to block after 3 days means the devices sitting in grace today lose access on a specific morning. Actions can also email the user or retire the device, so this read is how you find out whether a policy will send mail to a customer's staff before it does.

ParamTypeRequiredDefaultDescription
deviceCompliancePolicyIdstringyesThe compliance-policy id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum rules to return (1-999, default 999).

[Microsoft Graph] List each targeted user's aggregated verdict against a compliance policy. This is the view that predicts who is about to be locked out, because Conditional Access blocks a PERSON on a non-compliant device rather than blocking the device in the abstract. Somebody whose only machine is failing is an outage waiting to happen; somebody with three machines and one failure is not.

ParamTypeRequiredDefaultDescription
deviceCompliancePolicyIdstringyesThe compliance-policy id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "status eq 'noncompliant'".
maxItemsintegerno999Maximum rows to return (1-999, default 999).

[Microsoft Graph] List the groups a configuration profile is assigned to, including whether each assignment INCLUDES or EXCLUDES that group. Run this before any assign call: assigning replaces the whole list, so this response is the only record of what would be lost. It is also the first read when a setting is not reaching a machine — a profile assigned to a group the device is not in explains far more failures than a broken setting does.

ParamTypeRequiredDefaultDescription
deviceConfigurationIdstringyesThe device-configuration profile id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum assignments to return (1-999, default 999).

[Microsoft Graph] List how a configuration profile landed on each targeted DEVICE — succeeded, pending, error or conflict, with the device name and the time it last reported. 'Conflict' is the value worth hunting: it means two profiles set the same setting to different values, and Intune applies neither, so the setting is silently absent rather than wrong. Pending on a device that has not checked in recently is a sync problem, not a policy problem.

ParamTypeRequiredDefaultDescription
deviceConfigurationIdstringyesThe device-configuration profile id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "status eq 'error'".
maxItemsintegerno999Maximum rows to return (1-999, default 999).

[Microsoft Graph] List how a configuration profile landed for each targeted USER, aggregated across all of that person's devices. Distinct from the per-device view and worth reading when a profile is user-targeted rather than device-targeted: somebody with one working laptop and one failing tablet appears as a failure here and as a mixed result there, and only the pair tells you which machine to look at.

ParamTypeRequiredDefaultDescription
deviceConfigurationIdstringyesThe device-configuration profile id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "status eq 'error'".
maxItemsintegerno999Maximum rows to return (1-999, default 999).

[Microsoft Graph] List the Intune device configuration profiles in a tenant — the profiles that SET things on devices, as opposed to compliance policies, which measure them. Each entry's @odata.type is the property that matters most: it names the platform and profile kind, and it is what a create body must repeat. IMPORTANT: this reads the CLASSIC configuration surface. Profiles built with the newer settings catalog live on a different endpoint that is not yet available in the stable API, so a tenant that standardised on the settings catalog will look empty here while its Intune console is full — an empty result is not proof there are no profiles.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "startswith(displayName,'Windows')".
maxItemsintegerno999Maximum profiles to return (1-999, default 999).
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] Update an Intune compliance policy. PATCH merges, so absent properties are left alone, but the body must repeat the policy's @odata.type or Graph cannot resolve the derived type. Tightening a rule re-evaluates every targeted device at its next check-in, so an edit that looks small can move a large number of machines to non-compliant — and from there into whatever Conditional Access does about it. Read the device summary before and after.

ParamTypeRequiredDefaultDescription
deviceCompliancePolicyIdstringyesThe compliance-policy id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
policyJsonstringyesThe properties to change, as a JSON object. Must repeat the policy's @odata.type. Absent properties are left unchanged.

[Microsoft Graph] Update an Intune configuration profile. Graph PATCH is a merge, so properties absent from the body are left alone and an explicit null clears one — but the body must still repeat the profile's @odata.type, or Graph cannot tell which derived type it is being asked to modify and refuses. Changing a setting takes effect on each device at its next check-in, so a profile edited now is applied over hours rather than immediately.

ParamTypeRequiredDefaultDescription
configurationJsonstringyesThe properties to change, as a JSON object. Must repeat the profile's @odata.type. Absent properties are left unchanged.
deviceConfigurationIdstringyesThe device-configuration profile id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

Identity Protection

ToolPlanAccessSummary
graph_confirm_users_compromisedProWriteTell Entra ID Protection that these accounts really were compromised, setting each to confirmedCompromised at high risk.
graph_dismiss_user_riskProWriteDismiss the risk on these accounts, setting each to dismissed at none.
graph_get_risk_detectionFreeRead-onlyGet one risk detection event in full — the detection type and its source, the IP address and resolved location, the client application, and the sign-in or user it was raised against.
graph_get_risky_userFreeRead-onlyGet one account's current risk verdict — level, state, detail and when it was last updated.
graph_list_risk_detectionsFreeRead-onlyList individual risk detection events — one row per thing Microsoft noticed, with the detection type, the IP address, the location and the activity it was attached to.
graph_list_risky_user_historyFreeRead-onlyList how one account's risk state changed over time — every transition, what caused it, and the activity behind it.
graph_list_risky_usersFreeRead-onlyList the accounts Entra ID Protection currently considers at risk.

[Microsoft Graph] Tell Entra ID Protection that these accounts really were compromised, setting each to confirmedCompromised at high risk. Not destructive — it changes Microsoft's verdict rather than the account, is undone by dismissing the risk, and revokes no access on its own. What it DOES do is twofold and worth intending: it feeds Microsoft's model so similar activity is scored higher in future, and it can trigger any risk-based Conditional Access policy the tenant has, which may immediately force a password reset or block sign-in. Confirming compromise is NOT containment on its own — revoking sessions and resetting the password are separate tools. Takes a comma-separated batch, which is one call rather than one per user on a surface limited to roughly 1 request per second.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdsstringyesComma-separated user object ids to confirm as compromised.

[Microsoft Graph] Dismiss the risk on these accounts, setting each to dismissed at none. Not destructive — it is the inverse of confirming compromise, is itself reversible, and the underlying risk detections remain readable afterwards, so no evidence is lost. The consequence to intend: any risk-based Conditional Access policy keying on this user's risk stops applying, so an account that was being forced through a password reset or blocked will sign in normally again. Dismiss when the activity has been investigated and explained (a known trip abroad, a corporate VPN egress), not to clear a list. Takes a comma-separated batch.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdsstringyesComma-separated user object ids whose risk should be dismissed.

[Microsoft Graph] Get one risk detection event in full — the detection type and its source, the IP address and resolved location, the client application, and the sign-in or user it was raised against. This is the evidence record behind a risky-user verdict, and the level of detail a customer asks for when they want to know why an account was flagged.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
riskDetectionIdstringyesThe risk detection's id.

[Microsoft Graph] Get one account's current risk verdict — level, state, detail and when it was last updated. The riskDetail field is the one worth reading closely: it records WHY the state is what it is, including whether an administrator confirmed the compromise, dismissed it, or whether the user remediated it themselves by a password change or an MFA prompt. That distinction decides whether an atRisk account is an open incident or a closed one.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's object id.

[Microsoft Graph] List individual risk detection events — one row per thing Microsoft noticed, with the detection type, the IP address, the location and the activity it was attached to. Distinct from the risky-users list, which is the account-level verdict accumulated from these. Note that detectionTimingType separates realtime detections (evaluated during the sign-in, so a Conditional Access policy could act on them) from offline ones (found afterwards by correlation, so nothing was blocked at the time) — an offline detection on a successful sign-in means the session already happened. Requires Entra ID P2 for the full list. Rate-limited to roughly 1 request per second tenant-wide with NO Retry-After header.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "riskLevel eq 'high'" or "userPrincipalName eq 'sam@contoso.com'".
maxItemsintegerno999Maximum detections to return (1-999, default 999).
orderbystringnonullOData sort, for example "detectedDateTime desc".

[Microsoft Graph] List how one account's risk state changed over time — every transition, what caused it, and the activity behind it. This is the read that turns "this account is at risk" into a timeline: when risk was first raised, whether the user remediated it themselves, whether an administrator dismissed it, and whether it came back afterwards. Risk that is dismissed and returns within days is the pattern worth escalating, and it is only visible here.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum history entries to return (1-999, default 999).
userIdstringyesThe user's object id.

[Microsoft Graph] List the accounts Entra ID Protection currently considers at risk. Read riskLevel together with riskState, because riskLevel alone is misleading: a 'high' risk that was already remediated or dismissed is history, and the accounts that need attention are the ones whose riskState is atRisk or confirmedCompromised. Filter on those rather than on level — "riskState eq 'atRisk'" is the real worklist. Requires Entra ID P2 for full detail; a P1 or unlicensed tenant returns little or nothing, which is indistinguishable from a genuinely clean tenant. Rate-limited to roughly 1 request per second tenant-wide with NO Retry-After header.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "riskState eq 'atRisk'" or "riskLevel eq 'high'".
maxItemsintegerno999Maximum users to return (1-999, default 999).
orderbystringnonullOData sort, for example "riskLastUpdatedDateTime desc".

Audit Logs

ToolPlanAccessSummary
graph_get_directory_auditFreeRead-onlyGet one directory audit event in full — the initiator, the category and result, and the targetResources array with the OLD and NEW values of every property that changed.
graph_get_sign_inFreeRead-onlyGet one sign-in event in full — the account and application, the client and device, the resolved location, the authentication methods that were satisfied, and every Conditional Access policy that was…
graph_list_directory_auditsFreeRead-onlyList directory audit events — every administrative change made in the tenant, with who made it, what it targeted and whether it succeeded.
graph_list_provisioning_logsFreeRead-onlyList provisioning events — what Entra's provisioning service synchronised into or out of a connected application, per object, with the outcome and the reason for it.
graph_list_sign_insFreeRead-onlyList sign-in events — who signed in, when, from which IP address and location, on what device, to which application, and whether it succeeded.

[Microsoft Graph] Get one directory audit event in full — the initiator, the category and result, and the targetResources array with the OLD and NEW values of every property that changed. That last part is what the list view does not give you and what makes this the tool for reconstructing a specific change: it shows what a setting was before somebody altered it, which is the answer needed to put it back.

ParamTypeRequiredDefaultDescription
directoryAuditIdstringyesThe directory audit event's id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one sign-in event in full — the account and application, the client and device, the resolved location, the authentication methods that were satisfied, and every Conditional Access policy that was evaluated with the decision each reached. This is the record to pull when a customer asks why a specific sign-in was blocked or, more often, why one that should have been blocked was not. Carries the sign-in-log permission rather than the general audit one.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
signInIdstringyesThe sign-in event's id.

[Microsoft Graph] List directory audit events — every administrative change made in the tenant, with who made it, what it targeted and whether it succeeded. This is the read that answers "who added that account to Global Administrator" and "when did this policy change". Filter server-side: the collection is enormous, and activityDateTime plus activityDisplayName are the fields that narrow it, for example "activityDateTime ge 2026-08-01T00:00:00Z". Note that initiatedBy can be a USER or an APPLICATION, and a change attributed to an application is a service principal acting on its own — often the more interesting finding. Retention is 7 days without a premium licence and 30 days with Entra ID P1 or P2; older events are gone rather than hidden, so an empty result is usually retention rather than innocence. Throttled at roughly 5 requests per 10 seconds per tenant with NO Retry-After header.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "activityDateTime ge 2026-08-01T00:00:00Z" or "activityDisplayName eq 'Add member to role'".
maxItemsintegerno1000Maximum events to return (1-1000, default 1000).
orderbystringnonullOData sort, for example "activityDateTime desc".

[Microsoft Graph] List provisioning events — what Entra's provisioning service synchronised into or out of a connected application, per object, with the outcome and the reason for it. This is the read for "why does this person not have an account in the SaaS app we provision", and the answer is usually visible in provisioningSteps, which records each stage from scoping through matching to the export and says which one stopped. Note that a SKIPPED result is the common case and not an error: it normally means the user fell outside the configured scope, which is a configuration answer rather than a failure.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "result eq 'failure'" or "activityDateTime ge 2026-08-01T00:00:00Z".
maxItemsintegerno1000Maximum events to return (1-1000, default 1000).
orderbystringnonullOData sort, for example "activityDateTime desc".

[Microsoft Graph] List sign-in events — who signed in, when, from which IP address and location, on what device, to which application, and whether it succeeded. Carries a separate permission from the other audit reads because of how much per-user location and device detail it exposes, so a customer can grant directory audits without it. Filter server-side or this is unusable: createdDateTime narrows the window and status/errorCode narrows the outcome, for example "status/errorCode eq 0" for successes only. The field that answers most investigations is conditionalAccessStatus together with appliedConditionalAccessPolicies — it shows which policies were evaluated and what each decided, which is how you find out why a sign-in was allowed. REQUIRES Entra ID P1 or higher on the tenant being read; a free-tier customer gets a refusal rather than an empty list. Retention 7 days without a premium licence, 30 with P1/P2. Throttled at roughly 5 requests per 10 seconds per tenant with NO Retry-After header.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "createdDateTime ge 2026-08-01T00:00:00Z" or "userPrincipalName eq 'sam@contoso.com'".
maxItemsintegerno1000Maximum sign-ins to return (1-1000, default 1000).
orderbystringnonullOData sort, for example "createdDateTime desc".

Directory Objects

ToolPlanAccessSummary
graph_check_member_objectsFreeRead-onlyGiven a directory object and a list of group, role or administrative-unit ids, return the SUBSET it actually belongs to — transitively.
graph_create_invitationProDestructiveInvite an external person into the directory as a B2B guest.
graph_get_available_extension_propertiesFreeRead-onlyList the directory extension properties defined in this tenant — the custom fields an organization or a synchronisation tool has added to users, groups, devices or applications.
graph_get_directory_objectFreeRead-onlyGet any directory object by its id without knowing what type it is.
graph_get_directory_objects_by_idsFreeRead-onlyResolve many object ids to their directory objects in ONE call.
graph_get_member_groupsFreeRead-onlyReturn the ids of every GROUP a directory object belongs to, including through nesting.
graph_get_member_objectsFreeRead-onlyReturn the ids of every group, DIRECTORY ROLE and administrative unit a directory object belongs to, including through nesting.

[Microsoft Graph] Given a directory object and a list of group, role or administrative-unit ids, return the SUBSET it actually belongs to — transitively. The inverse of asking for all memberships, and the right tool when you already have a specific list to test against: checking one account against five sensitive groups is one small call, where fetching its full effective membership and filtering client-side may return thousands of ids. An empty response means it belongs to none of them.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdsstringyesComma-separated group, directory role or administrative unit ids to test membership against.
objectIdstringyesThe directory object's id — a user, group, service principal or device.

[Microsoft Graph] Invite an external person into the directory as a B2B guest. Destructive for two reasons that survive deleting the guest afterwards: it creates a real identity that can then be added to groups and granted access, and with sendInvitationMessage set it EMAILS a named human at an address you supplied, which cannot be unsent. Check the address before calling — a typo invites a stranger. Note that inviteRedirectUrl is REQUIRED by Microsoft and is where the person lands after redeeming (https://myapps.microsoft.com is the usual choice), and that the response carries inviteRedeemUrl, which is the redemption link if you would rather deliver it yourself than have Microsoft send the mail. A guest can read directory information by default, so treat this as granting access rather than as sending a message.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
inviteRedirectUrlstringyesWhere the person lands after redeeming, for example https://myapps.microsoft.com. Required by Microsoft.
invitedUserDisplayNamestringnonullDisplay name for the guest in the directory. Omit to let Microsoft derive one.
invitedUserEmailAddressstringyesThe external person's email address. Verify it before calling — the invitation is unrecallable once sent.
invitedUserTypestringnonullGuest user type: Guest (default) or Member.
sendInvitationMessagebooleannofalseWhether Microsoft sends the invitation email. False creates the guest and returns inviteRedeemUrl for you to deliver instead.

[Microsoft Graph] List the directory extension properties defined in this tenant — the custom fields an organization or a synchronisation tool has added to users, groups, devices or applications. Worth reading before concluding a property does not exist: employee numbers, cost centres and HR identifiers usually live in extension properties rather than in the built-in schema, and each is addressed by its full generated name (extension__) rather than the friendly one. KNOWN MICROSOFT ISSUE, and it fails silently: this API only processes tenants with up to 1,000 service principals and returns an EMPTY response for larger ones rather than an error — so an empty result here means "no answer" as often as it means "none defined", and must not be reported as the latter. On a large tenant, read a specific application's extensionProperties instead.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
isSyncedFromOnPremisesbooleannonullSet true to return only properties that can be synchronised from on-premises AD.

[Microsoft Graph] Get any directory object by its id without knowing what type it is. Useful precisely when you do NOT know: audit logs, group memberships and role assignments all reference principals by bare object id, and this resolves one to the real thing. Read the @odata.type field in the response to find out what came back — a user, a group, a service principal or a device — because the properties that follow depend entirely on it. Returns the object's full representation; there is deliberately no property filter, because $select on this base-type path addresses the few properties directoryObject itself declares rather than the derived type's, and narrowing to a user or group property needs a type cast this tool does not take. Use the type-specific get tool once you know what it is.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
objectIdstringyesThe directory object's id.

[Microsoft Graph] Resolve many object ids to their directory objects in ONE call. This is the tool that turns a list of bare GUIDs — from an audit log, a role assignment, a group's members — into names, and doing it in one request rather than one per id is the difference between a readable report and a throttled sweep. A read despite being a POST: the ids go in the body because a URL cannot carry a thousand of them. Ids that do not resolve are simply absent from the response rather than raising an error, so compare the counts if that matters.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
objectIdsstringyesComma-separated directory object ids to resolve.
typesstringnonullOptional comma-separated types to restrict the lookup to, for example "user,group". Omit to resolve any type.

[Microsoft Graph] Return the ids of every GROUP a directory object belongs to, including through nesting. Works for a user, a group, a service principal or a device — the same call with a different id. This is the read that explains why somebody has a licence or is caught by a policy when the direct membership list does not mention it: assignment flows down nested groups, and only a transitive answer shows the path. Returns bare ids; pair with the resolve-by-id tool to turn them into names in one further call.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
objectIdstringyesThe directory object's id — a user, group, service principal or device.
securityEnabledOnlybooleannofalseSet true to return only groups that can be assigned an Entra role.

[Microsoft Graph] Return the ids of every group, DIRECTORY ROLE and administrative unit a directory object belongs to, including through nesting. Broader than the group-only tool and usually the one you want for a privilege question: it is the single call that answers "what does this account actually belong to", and directory roles are the part that matters most in that answer. Returns bare ids, so pair it with the resolve-by-id tool to see what they are.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
objectIdstringyesThe directory object's id — a user, group, service principal or device.
securityEnabledOnlybooleannofalseSet true to return only groups that can be assigned an Entra role.

Security

ToolPlanAccessSummary
graph_get_secure_scoreFreeRead-onlyGet one Secure Score snapshot in full, including controlScores — the per-control detail saying what each control contributed on that day and why.
graph_get_secure_score_control_profileFreeRead-onlyGet one Secure Score control definition in full — its title and category, the maximum score it can contribute, the threats it addresses, its user impact and implementation cost, and the remediation…
graph_get_security_alertFreeRead-onlyGet one Defender XDR alert in full — the detection and its source, the incident it belongs to, and the evidence array naming the devices, accounts, files, processes and URLs involved.
graph_get_security_incidentFreeRead-onlyGet one Defender XDR incident — its severity, status, assigned owner, classification and determination, plus the tags and comments analysts have added.
graph_list_secure_score_control_profilesFreeRead-onlyList the Secure Score control definitions — what each control is, which service it belongs to, what it is worth, the user impact of turning it on and the remediation steps.
graph_list_secure_scoresFreeRead-onlyList Microsoft Secure Score snapshots — one per day, each with the tenant's score out of the maximum and the per-control breakdown behind it.
graph_list_security_alertsFreeRead-onlyList Defender XDR alerts — individual detections from Defender for Endpoint, Office 365, Identity and Cloud Apps.
graph_list_security_incident_alertsFreeRead-onlyList the alerts Defender correlated into one incident — the evidence behind the story.
graph_list_security_incidentsFreeRead-onlyList Defender XDR incidents — correlated groups of alerts, which is the right unit to triage from.
graph_run_hunting_queryFreeRead-onlyRun a Kusto Query Language (KQL) query against Microsoft Defender's advanced hunting schema — raw event data across devices, email, identities and cloud apps, going back 30 days by default.
graph_update_secure_score_control_profileProWriteRecord a tenant's own position on a Secure Score control — Default, Ignored, ThirdParty or Reviewed — with an optional note.
graph_update_security_alertProWriteUpdate an alert's status, classification, determination or assigned owner.
graph_update_security_incidentProWriteUpdate an incident's status, classification, determination, assigned owner or display name.

[Microsoft Graph] Get one Secure Score snapshot in full, including controlScores — the per-control detail saying what each control contributed on that day and why. This is the read behind a remediation plan: it shows which controls are scoring zero, which is the list of things worth fixing, ordered by what they would be worth.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
secureScoreIdstringyesThe secure score snapshot's id.

[Microsoft Graph] Get one Secure Score control definition in full — its title and category, the maximum score it can contribute, the threats it addresses, its user impact and implementation cost, and the remediation text. Read this before recommending a control to a customer: the userImpact and implementationCost fields are what decide whether a fix is a five-minute change or a project, and they are the difference between good advice and a support ticket.

ParamTypeRequiredDefaultDescription
controlNamestringyesThe control profile's id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one Defender XDR alert in full — the detection and its source, the incident it belongs to, and the evidence array naming the devices, accounts, files, processes and URLs involved. The evidence array is the part worth reading: it is what turns an alert title into the specific machine and user an engineer has to go and look at, and each entry carries its own remediation status.

ParamTypeRequiredDefaultDescription
alertIdstringyesThe alert's id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one Defender XDR incident — its severity, status, assigned owner, classification and determination, plus the tags and comments analysts have added. Expand 'alerts' to bring the underlying evidence back in the same call. The classification and determination fields together are what say whether this was a genuine attack, a false positive, or expected activity somebody authorised.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
expandstringnonullOData expand, for example "alerts".
incidentIdstringyesThe incident's id.

[Microsoft Graph] List the Secure Score control definitions — what each control is, which service it belongs to, what it is worth, the user impact of turning it on and the remediation steps. A score snapshot tells you WHICH controls are failing; this tells you what they mean and how to fix them, so the two together are what a remediation plan is built from. Includes the tenant's own state for each control, which is where an intentionally-ignored control shows up.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "controlCategory eq 'Identity'".
maxItemsintegerno999Maximum control profiles to return (1-999, default 999).

[Microsoft Graph] List Microsoft Secure Score snapshots — one per day, each with the tenant's score out of the maximum and the per-control breakdown behind it. Because it is a daily series this is how you show a customer that posture is improving rather than asserting it: read a range and compare. Note that comparing the raw score between two TENANTS is misleading, since the maximum depends on which products each has licensed; compare percentages, or compare a tenant with itself over time. Roughly 90 days are retained.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno999Maximum snapshots to return (1-999, default 999).

[Microsoft Graph] List Defender XDR alerts — individual detections from Defender for Endpoint, Office 365, Identity and Cloud Apps. Remember these are correlated into incidents, so an alert-first sweep will double-count one attack; triage from incidents and come here for the detail. The serviceSource field says which product raised each alert, which is usually the fastest way to narrow a noisy list. This is the current alerts_v2 collection, not the deprecated legacy alert API.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "status eq 'new'" or "severity eq 'high'".
maxItemsintegerno999Maximum alerts to return (1-999, default 999).

[Microsoft Graph] List the alerts Defender correlated into one incident — the evidence behind the story. This is the read that turns "there is an active high-severity incident" into which products detected what, on which devices and accounts, and in what order. Prefer it over expanding alerts on the incident when you want to page through a large correlation rather than pull it all at once.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
incidentIdstringyesThe incident's id.
maxItemsintegerno999Maximum alerts to return (1-999, default 999).

[Microsoft Graph] List Defender XDR incidents — correlated groups of alerts, which is the right unit to triage from. Start here rather than at the alert list: Defender groups related signals across Endpoint, Office 365, Identity and Cloud Apps into one incident, so an alert-first view makes a single attack look like several unrelated problems. Filter on status and severity to get the real worklist, for example "status eq 'active'". Use the expand parameter with 'alerts' to pull the evidence in the same call when you already know you will need it.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
expandstringnonullOData expand, for example "alerts" to include each incident's alerts inline.
filterstringnonullOData filter, for example "status eq 'active'" or "severity eq 'high'".
maxItemsintegerno999Maximum incidents to return (1-999, default 999).

[Microsoft Graph] Run a Kusto Query Language (KQL) query against Microsoft Defender's advanced hunting schema — raw event data across devices, email, identities and cloud apps, going back 30 days by default. This is the tool for questions the alert and incident lists cannot answer, because it queries the underlying telemetry rather than what Defender chose to alert on: which other machines ran that binary, who else received that sender's mail, what a process did after it launched. Always end a query with a limit clause — the schema holds billions of rows and an unbounded query is rejected or times out. Common tables: DeviceProcessEvents, DeviceNetworkEvents, DeviceFileEvents, EmailEvents, IdentityLogonEvents, CloudAppEvents. A read, despite being a POST, because it only queries. Beyond the connector's permission, the signed-in user needs a Defender or Entra role that grants hunting access (Security Reader, Security Operator, Security Administrator or Global Reader) — without one this returns a clean 403 that is a correct answer about their role rather than a fault.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
querystringyesThe KQL query. End it with a limit clause, for example: DeviceProcessEvents | where InitiatingProcessFileName =~ "powershell.exe" | project Timestamp, DeviceName, FileName | order by Timestamp desc | limit 50
timespanstringnonullISO 8601 time range, default 30 days. Accepts a duration ("P90D"), a start/end pair ("2026-08-01T00:00:00Z/2026-08-13T00:00:00Z"), or a single start time. When the query also filters on time, the SHORTER of the two wins.

[Microsoft Graph] Record a tenant's own position on a Secure Score control — Default, Ignored, ThirdParty or Reviewed — with an optional note. Not destructive: it changes how the control is SCORED and nothing about the tenant's actual configuration, and it is settable back. Use ThirdParty when the risk is genuinely covered by another product, since that credits the score honestly. Be careful with Ignored — it removes the control from the denominator, so the score goes UP without anything being safer, and a report built from it will overstate a customer's posture. Say why in the note.

ParamTypeRequiredDefaultDescription
controlNamestringyesThe control profile's id.
controlStatestringyesTenant state for the control: Default, Ignored, ThirdParty or Reviewed.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
tenantNotestringnonullNote explaining the decision — worth writing, because Ignored raises the score without changing the risk.

[Microsoft Graph] Update an alert's status, classification, determination or assigned owner. Not destructive — an annotation on a detection, with the evidence left readable and every field settable back. Intend the two side effects: resolving removes it from the analyst queue, and classifying it falsePositive feeds Defender's tuning. Note the direction of travel between alerts and incidents — resolving the parent INCIDENT resolves its alerts, but resolving one alert does not resolve the incident, so closing a case means updating the incident rather than its alerts one by one.

ParamTypeRequiredDefaultDescription
alertIdstringyesThe alert's id.
assignedTostringnonullUPN of the analyst to assign it to.
classificationstringnonullClassification: unknown, informationalExpectedActivity, falsePositive or truePositive.
determinationstringnonullDetermination, for example phishing, malware, securityTesting, maliciousUserActivity or other.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
statusstringnonullNew status: new, inProgress or resolved.

[Microsoft Graph] Update an incident's status, classification, determination, assigned owner or display name. Not destructive — it annotates a finding rather than changing anything on a device or an account, the evidence stays readable, and every field can be set back. Two consequences to intend all the same: resolving takes the incident out of the queue analysts work from, and setting classification to falsePositive feeds Defender's tuning so similar activity is scored lower in future. Resolving an incident also resolves its alerts. Classification accepts unknown, informationalExpectedActivity, falsePositive or truePositive.

ParamTypeRequiredDefaultDescription
assignedTostringnonullUPN of the analyst to assign it to.
classificationstringnonullClassification: unknown, informationalExpectedActivity, falsePositive or truePositive.
determinationstringnonullDetermination, for example multiStagedAttack, phishing, malware, securityTesting or other.
displayNamestringnonullNew display name for the incident.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
incidentIdstringyesThe incident's id.
statusstringnonullNew status: active, resolved, inProgress or redirected.

Usage Reports

ToolPlanAccessSummary
graph_report_email_activity_countsFreeRead-onlyTenant-wide email totals per day — messages sent, received and read across the whole organization.
graph_report_email_activity_user_detailFreeRead-onlyPer-user email activity — send, receive and read counts, and each mailbox's last activity date.
graph_report_email_app_usage_user_detailFreeRead-onlyWhich email CLIENTS each user actually connects with — Outlook desktop, Outlook mobile, Outlook Web, IMAP, POP, SMTP.
graph_report_m365_app_platform_user_countsFreeRead-onlyDaily counts of users active on each PLATFORM — Windows, Mac, mobile and web.
graph_report_m365_app_user_countsFreeRead-onlyDaily counts of users active in each Microsoft 365 app across the tenant.
graph_report_m365_app_user_detailFreeRead-onlyPer-user Microsoft 365 Apps usage broken down by application AND platform — Word, Excel, Outlook, Teams and the rest, on Windows, Mac, mobile and web.
graph_report_mailbox_usage_detailFreeRead-onlyPer-mailbox storage — bytes used against the quota, item count, and quota status.
graph_report_mailbox_usage_storageFreeRead-onlyTotal mailbox storage consumed across the tenant, per day.
graph_report_office365_activation_countsFreeRead-onlyOffice activation totals per product and platform across the tenant — how many activations exist for each, rather than who holds them.
graph_report_office365_activations_user_detailFreeRead-onlyPer-user desktop Office activations — which platforms each person has activated on (Windows, Mac, iOS, Android) and whether it was a shared computer.
graph_report_office365_active_user_countsFreeRead-onlyDaily counts of active users per service across the tenant.
graph_report_office365_active_user_detailFreeRead-onlyThe single most useful report here: one row per user, with which products they are LICENSED for and their last activity date in EACH — Exchange, OneDrive, SharePoint, Teams, Yammer.
graph_report_office365_services_user_countsFreeRead-onlyEnabled versus ACTIVE user counts per service — how many people are licensed for each product against how many actually used it.
graph_report_onedrive_activity_user_detailFreeRead-onlyPer-user OneDrive activity — files viewed or edited, synced, shared internally and shared EXTERNALLY.
graph_report_onedrive_usage_account_detailFreeRead-onlyPer-account OneDrive storage — files, active files, bytes used against bytes allocated, and last activity.
graph_report_sharepoint_activity_user_detailFreeRead-onlyPer-user SharePoint activity — files viewed or edited, synced, shared internally and externally, and pages visited.
graph_report_sharepoint_site_usage_detailFreeRead-onlyPer-SITE SharePoint usage — storage used and allocated, file and page counts, visitors, and last activity.
graph_report_teams_device_usage_user_detailFreeRead-onlyWhich DEVICES each person uses Teams from — Windows, Mac, iOS, Android, web and Linux.
graph_report_teams_user_activity_countsFreeRead-onlyTenant-wide Teams totals per day — messages, meetings and calls across the organization.
graph_report_teams_user_activity_user_detailFreeRead-onlyPer-user Teams activity — channel messages, chat messages, meetings attended and organised, and calls.
graph_report_yammer_activity_user_detailFreeRead-onlyPer-user Viva Engage (formerly Yammer) activity — messages posted, read and liked, with last activity date.

[Microsoft Graph] Tenant-wide email totals per day — messages sent, received and read across the whole organization. RETURNS CSV TEXT, not JSON. Use this rather than the per-user report when the question is about trend rather than about people: it is a handful of rows instead of one per mailbox, which matters on a tight throttle.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Per-user email activity — send, receive and read counts, and each mailbox's last activity date. RETURNS CSV TEXT with a header row, not JSON. This is the report behind "who is not using their mailbox", which is the usual first evidence for reclaiming a licence: a user with a licence and no activity date is paying for nothing. Throttled at roughly 5 requests per 10 seconds per tenant with NO Retry-After header, and the data lags 48 hours or more.

ParamTypeRequiredDefaultDescription
datestringnonullA single day instead, as yyyy-MM-dd, within roughly the last 30 days. Overrides period.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Which email CLIENTS each user actually connects with — Outlook desktop, Outlook mobile, Outlook Web, IMAP, POP, SMTP. RETURNS CSV TEXT, not JSON. The security read hiding in a usage report: IMAP, POP and SMTP AUTH columns are the legacy protocols that bypass modern authentication, and this is the evidence for who would break if they were disabled. Also the fastest way to find people still on an unsupported Outlook build.

ParamTypeRequiredDefaultDescription
datestringnonullA single day instead, as yyyy-MM-dd, within roughly the last 30 days. Overrides period.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Daily counts of users active on each PLATFORM — Windows, Mac, mobile and web. RETURNS JSON, unlike most reports here. The estate shape in one report, and the number to check before planning anything that assumes Windows: a Mac or mobile population nobody counted is how a deployment plan becomes a ticket queue.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Daily counts of users active in each Microsoft 365 app across the tenant. RETURNS JSON, unlike most reports here. The adoption trend per application — which is what shows whether an Excel or Teams rollout actually moved, rather than whether people are licensed for it.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Per-user Microsoft 365 Apps usage broken down by application AND platform — Word, Excel, Outlook, Teams and the rest, on Windows, Mac, mobile and web. RETURNS JSON, unlike the other reports in this family: this is one of three that document $format=application/json, which is requested explicitly. The report that answers whether a customer needs the full desktop suite or would be fine on web and mobile, per person rather than per tenant.

ParamTypeRequiredDefaultDescription
datestringnonullA single day instead, as yyyy-MM-dd, within roughly the last 30 days. Overrides period.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Per-mailbox storage — bytes used against the quota, item count, and quota status. RETURNS CSV TEXT, not JSON. This is the report that finds mailboxes about to stop receiving mail: the status column moves through warning to send-prohibited to send-and-receive-prohibited, and a mailbox in the last state is already losing messages. Worth running before a customer reports it rather than after.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Total mailbox storage consumed across the tenant, per day. RETURNS CSV TEXT, not JSON. The trend view behind capacity planning — a few rows rather than one per mailbox, so it is the cheap call on a tight throttle when the question is growth rather than which mailbox.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Office activation totals per product and platform across the tenant — how many activations exist for each, rather than who holds them. RETURNS CSV TEXT, not JSON. Takes NO period or date; it is a current-state report. The counterpart to the per-user activations report: this says whether a customer's desktop Office estate is mostly Windows, Mac or mobile in a handful of rows, which is the cheap call when the question is shape rather than individuals.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Per-user desktop Office activations — which platforms each person has activated on (Windows, Mac, iOS, Android) and whether it was a shared computer. RETURNS CSV TEXT, not JSON. Takes NO period or date: it is a current-state report rather than a windowed one. The read for "has this person actually installed Office", and for finding users at the five-device activation limit, which presents to a helpdesk as Office refusing to activate on a new laptop.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Daily counts of active users per service across the tenant. RETURNS CSV TEXT, not JSON. The trend summary behind the per-user active-user report, and the one to use for a monthly review where the per-user detail would be thousands of rows against a 5-per-10-seconds budget.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] The single most useful report here: one row per user, with which products they are LICENSED for and their last activity date in EACH — Exchange, OneDrive, SharePoint, Teams, Yammer. RETURNS CSV TEXT, not JSON. This is the licence-reclaim report in one call, and it replaces running five per-service reports and joining them by hand. A user licensed for a product with a blank last-activity date in that column has never used it.

ParamTypeRequiredDefaultDescription
datestringnonullA single day instead, as yyyy-MM-dd, within roughly the last 30 days. Overrides period.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Enabled versus ACTIVE user counts per service — how many people are licensed for each product against how many actually used it. RETURNS CSV TEXT, not JSON. The gap between those two numbers is the licence waste in one line per service, which makes this the report to open a cost conversation with before drilling into who.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Per-user OneDrive activity — files viewed or edited, synced, shared internally and shared EXTERNALLY. RETURNS CSV TEXT, not JSON. The external-sharing column is the one worth reading first; it is the cheapest tenant-wide signal that company files are leaving the organization, and unlike the storage report it says who is doing it rather than how much is stored.

ParamTypeRequiredDefaultDescription
datestringnonullA single day instead, as yyyy-MM-dd, within roughly the last 30 days. Overrides period.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Per-account OneDrive storage — files, active files, bytes used against bytes allocated, and last activity. RETURNS CSV TEXT, not JSON. Read the Is Deleted column before acting on anything here: a deleted user's OneDrive survives them by the retention period, so the largest consumers in a tenant are often people who left, and that is reclaimable storage rather than a user to chase.

ParamTypeRequiredDefaultDescription
datestringnonullA single day instead, as yyyy-MM-dd, within roughly the last 30 days. Overrides period.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Per-user SharePoint activity — files viewed or edited, synced, shared internally and externally, and pages visited. RETURNS CSV TEXT, not JSON. The people-side counterpart to the site usage report: sites tell you where the data is, this tells you who is touching it, and external sharing per user is the column that turns a governance policy into a list of conversations.

ParamTypeRequiredDefaultDescription
datestringnonullA single day instead, as yyyy-MM-dd, within roughly the last 30 days. Overrides period.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Per-SITE SharePoint usage — storage used and allocated, file and page counts, visitors, and last activity. RETURNS CSV TEXT, not JSON. The inventory behind a storage conversation, and the way abandoned sites are found: a site with files, no activity for months and a named owner who has left is both a cost and a governance finding.

ParamTypeRequiredDefaultDescription
datestringnonullA single day instead, as yyyy-MM-dd, within roughly the last 30 days. Overrides period.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Which DEVICES each person uses Teams from — Windows, Mac, iOS, Android, web and Linux. RETURNS CSV TEXT, not JSON. Useful well beyond adoption: a user active only on a personal mobile is a mobile-device-management gap, and a rollout plan built without knowing the Mac and Linux population is the one that generates tickets.

ParamTypeRequiredDefaultDescription
datestringnonullA single day instead, as yyyy-MM-dd, within roughly the last 30 days. Overrides period.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Tenant-wide Teams totals per day — messages, meetings and calls across the organization. RETURNS CSV TEXT, not JSON. The trend view for adoption reporting, and cheap enough to run on a schedule where the per-user report is not.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Per-user Teams activity — channel messages, chat messages, meetings attended and organised, and calls. RETURNS CSV TEXT, not JSON. The adoption report customers ask for by name, and the one that distinguishes a tenant that has Teams from a tenant that uses it. Pair it with the email activity report before recommending a licence change, because a quiet mailbox and a busy Teams account is a person who simply moved channels.

ParamTypeRequiredDefaultDescription
datestringnonullA single day instead, as yyyy-MM-dd, within roughly the last 30 days. Overrides period.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

[Microsoft Graph] Per-user Viva Engage (formerly Yammer) activity — messages posted, read and liked, with last activity date. RETURNS CSV TEXT, not JSON. Usually the least-used service in a tenant, which is exactly what makes it worth reading: it is the clearest evidence for whether a licence bundle's social component is used at all.

ParamTypeRequiredDefaultDescription
datestringnonullA single day instead, as yyyy-MM-dd, within roughly the last 30 days. Overrides period.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
periodstringno"D7"Aggregation window: D7, D30, D90 or D180. Default D7.

Mail

ToolPlanAccessSummary
graph_copy_messageProWriteCopy a message into another folder, leaving the original where it is.
graph_create_draft_messageProWriteCreate a message in the Drafts folder without sending it.
graph_create_forward_draftProWriteCreate a forward DRAFT of a message, with its attachments, without sending it.
graph_create_mail_folderProWriteCreate a mail folder, either at the top level or beneath an existing folder.
graph_create_message_ruleProDestructiveCreate a rule on the signed-in user's Inbox.
graph_create_reply_draftProWriteCreate a reply DRAFT to a message — correctly threaded and addressed, quoting the original — without sending it.
graph_delete_mail_folderProDestructiveDelete a mail folder AND EVERYTHING IN IT, including its subfolders and every message they hold.
graph_delete_messageProDestructiveDelete a message.
graph_delete_message_ruleProDestructiveDelete an inbox rule permanently — there is no undo and no copy kept.
graph_download_message_attachmentFreeRead-onlyDownload an attachment's raw bytes and return a short-lived read-only download link, together with the content type, filename and size.
graph_forward_messageProDestructiveForward a message, with its attachments, to new recipients and send it immediately.
graph_get_mail_folderFreeRead-onlyGet one mail folder by id or by well-known name.
graph_get_mailbox_settingsFreeRead-onlyGet the signed-in user's mailbox settings — automatic replies (out-of-office) and their schedule, time zone, working hours, language, date and time format, and how delegated meeting messages are…
graph_get_messageFreeRead-onlyGet one message in full, including its body and internet headers.
graph_get_message_attachmentFreeRead-onlyGet one attachment as JSON.
graph_get_message_ruleFreeRead-onlyGet one inbox rule in full.
graph_list_child_mail_foldersFreeRead-onlyList the folders directly beneath one mail folder.
graph_list_mail_categoriesFreeRead-onlyList the signed-in user's master list of Outlook categories — the coloured labels shared across messages, events, contacts and tasks.
graph_list_mail_folder_messagesFreeRead-onlyList the messages inside one mail folder, by folder id or well-known name.
graph_list_mail_foldersFreeRead-onlyList the top-level mail folders in the signed-in user's mailbox, with unread and total item counts.
graph_list_message_attachmentsFreeRead-onlyList a message's attachments as METADATA — name, content type and size — without pulling any content down.
graph_list_message_rulesFreeRead-onlyList every rule on the signed-in user's INBOX, with its conditions, actions and exceptions.
graph_list_messagesFreeRead-onlyList messages in the signed-in user's mailbox, newest first unless you order them otherwise.
graph_move_messageProWriteMove a message to another folder, by folder id or well-known name such as "archive", "junkemail" or "deleteditems".
graph_reply_all_to_messageProDestructiveReply to EVERYONE on a message — sender, To and CC — and send it immediately.
graph_reply_to_messageProDestructiveReply to a message's SENDER only and send it immediately.
graph_search_messagesFreeRead-onlyFree-text search across the signed-in user's mailbox, including message bodies and the text of supported attachment types.
graph_send_draft_messageProDestructiveSend a draft that already exists in the mailbox.
graph_send_mailProDestructiveSend a message immediately AS THE SIGNED-IN USER, from their real address.
graph_set_automatic_repliesProWriteTurn the signed-in user's out-of-office automatic reply on, off, or on for a scheduled window.
graph_update_mail_folderProWriteRename a mail folder.
graph_update_messageProWriteUpdate a message's mutable properties — read state, importance and categories.
graph_update_message_ruleProDestructiveChange an existing inbox rule.

[Microsoft Graph] Copy a message into another folder, leaving the original where it is. The copy is an independent message with its own id, so later changes to either do not affect the other.

ParamTypeRequiredDefaultDescription
destinationFolderIdstringyesDestination folder id, or a well-known name such as "archive".
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageIdstringyesThe message id.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Create a message in the Drafts folder without sending it. Nothing reaches anybody until a person opens it, or until graph_send_draft_message is called deliberately. This is the tool to reach for whenever a workflow composes mail for review rather than delivery.

ParamTypeRequiredDefaultDescription
bccstringnonullComma-separated BCC addresses. Optional.
bodystringyesThe message body.
bodyTypestringnonullBody format: "Text" (default) or "HTML".
ccstringnonullComma-separated CC addresses. Optional.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
importancestringnonullImportance: "low", "normal" or "high". Optional.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.
subjectstringyesThe subject line.
tostringnonullComma-separated recipient addresses. Optional — a draft may be addressed later.

[Microsoft Graph] Create a forward DRAFT of a message, with its attachments, without sending it. Nothing leaves the mailbox until somebody sends the draft. Recipients can be set now or left for the person who reviews it.

ParamTypeRequiredDefaultDescription
commentstringnonullText to add above the forwarded message. Optional.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageIdstringyesThe message id being forwarded.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.
tostringnonullComma-separated recipient addresses. Optional.

[Microsoft Graph] Create a mail folder, either at the top level or beneath an existing folder. Useful for staging an investigation or an archiving workflow. Note that creating a folder marked hidden makes it invisible in Outlook while remaining a valid target for rules, which is why the parameter is here and why it defaults to false.

ParamTypeRequiredDefaultDescription
displayNamestringyesThe folder's display name.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
isHiddenbooleannofalseHide the folder from Outlook. Default false.
parentFolderIdstringnonullParent folder id or well-known name. Omit to create at the top level.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Create a rule on the signed-in user's Inbox. READ THIS BEFORE USING IT: a rule whose actions contain forwardTo, forwardAsAttachmentTo or redirectTo sends the mailbox's incoming mail to that address CONTINUOUSLY and invisibly — nothing appears in Sent Items, and it survives a password reset. That is the standard business-email-compromise persistence mechanism, so a forwarding rule created by an automation is indistinguishable from one created by an intruder. Only create one when a person has asked for that specific rule. actions is required; conditions and exceptions are optional, and a rule with no conditions applies to EVERY incoming message.

ParamTypeRequiredDefaultDescription
actionsstringyesThe rule's actions as a JSON object, for example {"moveToFolder":"<folderId>","stopProcessingRules":true}. Required.
conditionsstringnonullThe rule's conditions as a JSON object, for example {"senderContains":["contoso.com"]}. Omit to apply the rule to every incoming message.
displayNamestringyesThe rule's display name.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
exceptionsstringnonullException conditions as a JSON object. Optional.
isEnabledbooleannotrueWhether the rule is active. Default true.
sequenceintegeryesOrder in which this rule runs among the others. Lower runs first.

[Microsoft Graph] Create a reply DRAFT to a message — correctly threaded and addressed, quoting the original — without sending it. The response includes the new draft's id, which a person can then review in Outlook or which graph_send_draft_message can release. Prefer this over graph_reply_to_message in any workflow that is not explicitly authorised to mail people.

ParamTypeRequiredDefaultDescription
commentstringnonullReply text to place above the quoted original. Optional.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageIdstringyesThe message id being replied to.
replyAllbooleannofalseReply to everyone on the thread rather than the sender alone. Default false.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Delete a mail folder AND EVERYTHING IN IT, including its subfolders and every message they hold. That is the whole reason this is flagged: the folder's name says nothing about how much mail is inside, so list its messages first. Deleting a folder a rule files into does not delete the rule — the rule stays and starts failing.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
mailFolderIdstringyesThe folder id.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Delete a message. Graph moves it to Deleted Items rather than erasing it, so a person can retrieve it — but it has left the folder it was in, and the retention policy that governs Deleted Items decides how long that stays true. Flagged destructive because deleting somebody's mail is not something to do incidentally; move it to a folder instead when the intent is to tidy.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageIdstringyesThe message id.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Delete an inbox rule permanently — there is no undo and no copy kept. This is the remediation step for a malicious forwarding rule, and equally the way somebody's carefully built filing disappears. Read the rule first so its definition exists somewhere before it stops existing here. Deleting a rule does not move any mail it already filed.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageRuleIdstringyesThe message-rule id.

[Microsoft Graph] Download an attachment's raw bytes and return a short-lived read-only download link, together with the content type, filename and size. Binary cannot travel through a tool response, so the bytes are stored and linked rather than inlined. The link expires — treat it as something to hand to a person or a downstream fetch promptly, not as a permanent address. Works on fileAttachment only; a referenceAttachment has no bytes here, and an itemAttachment is an embedded message rather than a file.

ParamTypeRequiredDefaultDescription
attachmentIdstringyesThe attachment id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
fileNamestringnonullFilename to use if Microsoft's response does not name the file. Optional.
messageIdstringyesThe message id.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Forward a message, with its attachments, to new recipients and send it immediately. This is the tool that moves a mailbox's contents OUT: whatever was in the original — attachments, quoted threads, addresses — goes wherever you point it, including outside the organisation, and nothing recalls it. Read the message first if you are not certain what it contains.

ParamTypeRequiredDefaultDescription
commentstringnonullText to add above the forwarded message. Optional.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageIdstringyesThe message id being forwarded.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to send AS, for example support@contoso.com. Omit to send from your own mailbox. You must already hold Exchange delegate rights to that mailbox: Send As or Send on Behalf, granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack. Send As makes the message appear to come from the mailbox itself; Send on Behalf shows it as sent by you on its behalf, and which one applies is decided in Exchange rather than here.
tostringyesComma-separated recipient addresses.

[Microsoft Graph] Get one mail folder by id or by well-known name. The well-known names save a lookup and are the stable way to address a mailbox's structure: inbox, drafts, sentitems, deleteditems, junkemail, archive, outbox, recoverableitemsdeletions. Returns the unread and total counts along with the folder's parent, which is how you confirm where a rule has been filing things.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
mailFolderIdstringyesThe folder id, or a well-known name such as "inbox", "sentitems" or "junkemail".
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Get the signed-in user's mailbox settings — automatic replies (out-of-office) and their schedule, time zone, working hours, language, date and time format, and how delegated meeting messages are handled. Automatic replies are the part worth checking during an investigation as well as for the obvious reason: an attacker sometimes enables one to keep a compromised account looking normal while mail is being diverted.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
selectstringnonullComma-separated settings to return, for example "automaticRepliesSetting". Omit for all of them.

[Microsoft Graph] Get one message in full, including its body and internet headers. Ask for internetMessageHeaders in select when investigating a suspicious mail: the authentication-results header is what tells you whether SPF, DKIM and DMARC actually passed, which the display name never does. hasAttachments tells you whether graph_list_message_attachments is worth calling.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageIdstringyesThe message id.
selectstringnonullComma-separated properties to return, for example "subject,from,internetMessageHeaders". Omit for the default set.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Get one attachment as JSON. For a fileAttachment the response includes contentBytes, the file base64-encoded INLINE — fine for a small text or CSV file, and a very expensive way to move a 20 MB PDF through a conversation. Use graph_download_message_attachment instead for anything sizeable: it returns a download link rather than the bytes. Check size from graph_list_message_attachments first.

ParamTypeRequiredDefaultDescription
attachmentIdstringyesThe attachment id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageIdstringyesThe message id.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Get one inbox rule in full. Read this before updating a rule: an update is a PATCH, so any conditions or actions object you send REPLACES the existing one wholesale rather than merging into it, and this response is the only record of what was there.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageRuleIdstringyesThe message-rule id.

[Microsoft Graph] List the folders directly beneath one mail folder. Graph exposes no whole-tree read, so a nested structure is walked a level at a time from graph_list_mail_folders. Include hidden folders when investigating: a folder created to hide diverted mail is routinely marked hidden so it does not appear in Outlook.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
includeHiddenbooleannofalseInclude hidden folders. Default false.
mailFolderIdstringyesThe parent folder id, or a well-known name such as "inbox".
maxItemsintegerno100Maximum folders to return (1-999, default 100).
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] List the signed-in user's master list of Outlook categories — the coloured labels shared across messages, events, contacts and tasks. Worth reading before setting categories on a message: assigning a name that is not on this list stores the text but shows no colour, which looks like the write silently failed.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] List the messages inside one mail folder, by folder id or well-known name. This is the read for questions scoped to a place rather than a mailbox: what is sitting in junkemail, what was actually sent from sentitems, what a rule has been filing into a subfolder. Supports $filter and $orderby but not $search.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "isRead eq false".
mailFolderIdstringyesThe folder id, or a well-known name such as "inbox", "junkemail" or "sentitems".
maxItemsintegerno50Maximum messages to return (1-999, default 50).
orderbystringnonullOData order, for example "receivedDateTime desc".
selectstringnonullComma-separated properties to return. Omit for the default set.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] List the top-level mail folders in the signed-in user's mailbox, with unread and total item counts. Only the ROOT level is returned — a folder tree is walked with graph_list_child_mail_folders one level at a time. Alongside the folders a user made, this is where an unexpected folder created by a mailbox rule shows up, which is a routine finding in a compromise investigation.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
includeHiddenbooleannofalseInclude hidden folders, which Outlook does not show but rules can still target. Default false.
maxItemsintegerno100Maximum folders to return (1-999, default 100).
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] List a message's attachments as METADATA — name, content type and size — without pulling any content down. Size is the number to read before deciding how to fetch one. Attachments come in three kinds and they behave differently: a file attachment carries real bytes and downloads normally; an item attachment is an embedded Outlook message or event rather than a file; and a reference attachment is only a LINK to something in OneDrive or SharePoint, so its bytes are not in the mail at all and cannot be downloaded from here. Call graph_get_message_attachment on a single attachment when you need its exact kind confirmed.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum attachments to return (1-999, default 100).
messageIdstringyesThe message id.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] List every rule on the signed-in user's INBOX, with its conditions, actions and exceptions. This is the single highest-value read in the mail family for a compromise investigation: a rule whose actions contain forwardTo, forwardAsAttachmentTo or redirectTo pointing at an address outside the tenant is the classic business-email-compromise persistence mechanism — it survives a password reset, leaves nothing in Sent Items, and keeps exfiltrating. A rule that moves mail to Deleted Items or a hidden folder is the same trick aimed at hiding the replies. Note that Graph exposes rules on the Inbox folder only.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] List messages in the signed-in user's mailbox, newest first unless you order them otherwise. Reads YOUR OWN mailbox only — delegated Graph cannot reach another person's mail even for a Global Administrator. Supports $filter and $orderby but NOT $search: Outlook rejects that combination, so use graph_search_messages for free-text hunting. Note the service returns only 10 messages when no page size is given, so this tool always sends one.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "isRead eq false" or "receivedDateTime ge 2026-08-01T00:00:00Z".
maxItemsintegerno50Maximum messages to return (1-999, default 50).
orderbystringnonullOData order, for example "receivedDateTime desc".
selectstringnonullComma-separated properties to return. Narrowing this to subject,from,receivedDateTime,isRead makes a mailbox sweep dramatically cheaper.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Move a message to another folder, by folder id or well-known name such as "archive", "junkemail" or "deleteditems". Moving assigns the message a NEW id in the destination folder — the response carries it, and the old id stops resolving, so anything holding the previous id must use the new one.

ParamTypeRequiredDefaultDescription
destinationFolderIdstringyesDestination folder id, or a well-known name such as "archive".
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageIdstringyesThe message id.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Reply to EVERYONE on a message — sender, To and CC — and send it immediately. Reaches every one of those people, cannot be recalled, and on a thread that includes a distribution list that can be a very large number of them. Check the recipient list with graph_get_message before calling this. Separate from graph_reply_to_message on purpose: a flag is the kind of thing that gets set wrong in a single token.

ParamTypeRequiredDefaultDescription
commentstringyesThe reply text. Graph adds it above the quoted original.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageIdstringyesThe message id being replied to.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to send AS, for example support@contoso.com. Omit to send from your own mailbox. You must already hold Exchange delegate rights to that mailbox: Send As or Send on Behalf, granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack. Send As makes the message appear to come from the mailbox itself; Send on Behalf shows it as sent by you on its behalf, and which one applies is decided in Exchange rather than here.

[Microsoft Graph] Reply to a message's SENDER only and send it immediately. Reaches a real person and cannot be recalled. Graph appends your comment to the original message body and threads the reply, so send only the new text rather than quoting the original yourself. Use graph_reply_all_to_message when everyone on the thread needs it — the two are different tools rather than a flag, because getting that choice wrong sends a private answer to a whole distribution list.

ParamTypeRequiredDefaultDescription
commentstringyesThe reply text. Graph adds it above the quoted original.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageIdstringyesThe message id being replied to.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to send AS, for example support@contoso.com. Omit to send from your own mailbox. You must already hold Exchange delegate rights to that mailbox: Send As or Send on Behalf, granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack. Send As makes the message appear to come from the mailbox itself; Send on Behalf shows it as sent by you on its behalf, and which one applies is decided in Exchange rather than here.

[Microsoft Graph] Free-text search across the signed-in user's mailbox, including message bodies and the text of supported attachment types. Accepts either a bare phrase or Outlook KQL such as from:accounts@contoso.com or subject:invoice or received>=2026-08-01 — the tool adds the quoting Graph requires. Deliberately offers no $filter or $orderby: Outlook rejects search combined with either, and results come back ranked rather than sorted. Searches YOUR OWN mailbox only; delegated mailboxes are not searchable.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno25Maximum messages to return (1-999, default 25).
searchstringyesThe search term or KQL expression, for example "invoice" or "from:finance@contoso.com".
selectstringnonullComma-separated properties to return. Omit for the default set.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Send a draft that already exists in the mailbox. It carries the send scope and the destructive flag for the same reason graph_send_mail does — the message leaves and reaches people — even though the drafting happened earlier. The draft's own recipients are used; this tool changes nothing about it. Only a draft can be sent, so a message already delivered returns an error rather than sending twice.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageIdstringyesThe id of the draft message to send.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to send AS, for example support@contoso.com. Omit to send from your own mailbox. You must already hold Exchange delegate rights to that mailbox: Send As or Send on Behalf, granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack. Send As makes the message appear to come from the mailbox itself; Send on Behalf shows it as sent by you on its behalf, and which one applies is decided in Exchange rather than here.

[Microsoft Graph] Send a message immediately AS THE SIGNED-IN USER, from their real address. This reaches actual people and there is no unsend: recipients see a genuine internal mail from a colleague, which is exactly why it is powerful and why it is flagged. Confirm the recipients and the wording with a person before calling it in any unattended workflow. Use graph_create_draft_message instead when the intent is to prepare something for a human to review and send.

ParamTypeRequiredDefaultDescription
bccstringnonullComma-separated BCC addresses. Optional.
bodystringyesThe message body.
bodyTypestringnonullBody format: "Text" (default) or "HTML".
ccstringnonullComma-separated CC addresses. Optional.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
importancestringnonullImportance: "low", "normal" or "high". Optional.
saveToSentItemsbooleannotrueKeep a copy in Sent Items. Default true — turning it off leaves no record in the mailbox that this was sent.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to send AS, for example support@contoso.com. Omit to send from your own mailbox. You must already hold Exchange delegate rights to that mailbox: Send As or Send on Behalf, granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack. Send As makes the message appear to come from the mailbox itself; Send on Behalf shows it as sent by you on its behalf, and which one applies is decided in Exchange rather than here.
subjectstringyesThe subject line.
tostringyesComma-separated recipient addresses.

[Microsoft Graph] Turn the signed-in user's out-of-office automatic reply on, off, or on for a scheduled window. Anyone who mails them gets the reply, so the external message is read by people outside the organisation — say only what the customer would put on a public page. Set status to "scheduled" to have Exchange start and stop it for you; "alwaysEnabled" runs until somebody turns it off, which is how an out-of-office survives the holiday it was set for. externalAudience decides whether outsiders get a reply at all. Anything you omit is LEFT ALONE, including the reply text — so turning automatic replies off and back on again keeps the wording that was already there, and you only need to send the messages when you mean to change them.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
externalAudiencestringnonullWho outside the organisation gets a reply: "none", "contactsOnly" or "all". Optional.
externalReplyMessagestringnonullReply sent to people outside the organisation. Optional when disabling.
internalReplyMessagestringnonullReply sent to people inside the organisation. Optional when disabling.
scheduledEndstringnonullEnd of the window for "scheduled", ISO 8601. Required when scheduled.
scheduledStartstringnonullStart of the window for "scheduled", ISO 8601 such as 2026-08-20T09:00:00. Required when scheduled.
statusstringyes"disabled", "alwaysEnabled" or "scheduled".
timeZonestringnonullTime zone for the scheduled window, for example "UTC" or "Pacific Standard Time". Defaults to UTC — set it deliberately, because the window is stored in whatever zone is given.

[Microsoft Graph] Rename a mail folder. Only the display name is writable; a folder is moved by changing its parent, which Graph exposes as a separate operation not offered here. Renaming does not disturb the messages inside it or the rules that file into it, because both address the folder by id.

ParamTypeRequiredDefaultDescription
displayNamestringyesThe new display name.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
mailFolderIdstringyesThe folder id.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Update a message's mutable properties — read state, importance and categories. A PATCH merges, so anything you omit is left alone. Categories are the exception to that: the list you send REPLACES the message's existing categories rather than adding to them, so read the message first if you mean to add one. Sending an empty categories value clears them.

ParamTypeRequiredDefaultDescription
categoriesstringnonullComma-separated category names, which REPLACE the message's current ones. Omit to leave unchanged.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
importancestringnonullImportance: "low", "normal" or "high". Omit to leave unchanged.
isReadbooleannonullMark read (true) or unread (false). Omit to leave unchanged.
messageIdstringyesThe message id.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Change an existing inbox rule. Any conditions or actions object you send REPLACES the whole existing one rather than merging into it, so a partial body silently drops every condition you did not repeat — turning a rule that matched one sender into one that matches all mail. Read the rule with graph_get_message_rule first and send the complete object back with your change applied. Setting isEnabled alone is the safe way to pause a rule without touching its definition.

ParamTypeRequiredDefaultDescription
actionsstringnonullThe COMPLETE replacement actions object as JSON. Omit to leave the existing actions alone.
conditionsstringnonullThe COMPLETE replacement conditions object as JSON. Omit to leave the existing conditions alone.
displayNamestringnonullNew display name. Omit to leave unchanged.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
exceptionsstringnonullThe COMPLETE replacement exceptions object as JSON. Omit to leave them alone.
isEnabledbooleannonullEnable or disable the rule. Omit to leave unchanged.
messageRuleIdstringyesThe message-rule id.
sequenceintegernonullNew sequence. Omit to leave unchanged.

Files

ToolPlanAccessSummary
graph_copy_drive_itemProWriteCopy a file or folder, optionally into a different drive and optionally under a new name.
graph_create_folderProWriteCreate a folder, in the drive's root or inside an existing folder.
graph_create_sharing_linkProDestructiveCreate a sharing link for a file or folder and RETURN THE URL.
graph_delete_drive_itemProDestructiveDelete a file or folder.
graph_delete_item_permissionProDestructiveRemove a permission from a file or folder — the remediation for an oversharing finding, and the way an anonymous link is killed.
graph_download_drive_itemFreeRead-onlyDownload a file's content and return a short-lived read-only download link, with its content type, filename and size.
graph_get_driveFreeRead-onlyGet one drive, including its quota — total, used, remaining and the deleted bytes still held in the recycle bin.
graph_get_drive_itemFreeRead-onlyGet one file or folder by id — size, timestamps, the person who last changed it, and the webUrl that opens it in a browser for someone who already has access.
graph_get_drive_item_by_pathFreeRead-onlyGet a file or folder by its path within the drive, for example "Documents/Invoices/2026-Q3.xlsx".
graph_invite_to_drive_itemProDestructiveGrant named people access to a file or folder, optionally emailing them an invitation.
graph_list_drive_item_versionsFreeRead-onlyList the stored versions of a file, newest first, with who saved each one and how large it was.
graph_list_drive_itemsFreeRead-onlyList the files and folders directly inside one folder, or inside the drive's root when no folder is named.
graph_list_drivesFreeRead-onlyList drives — the signed-in user's own OneDrive by default, or every document library belonging to a SharePoint site or a Microsoft 365 group when you name one.
graph_list_item_permissionsFreeRead-onlyList everyone and everything that can reach a file or folder — people granted access directly, permissions inherited from a parent folder, and every sharing link that exists on it.
graph_list_recent_filesFreeRead-onlyList the files the signed-in user most recently viewed or edited, across every drive they can reach rather than one at a time.
graph_list_shared_with_meFreeRead-onlyList files and folders other people have shared with the signed-in user.
graph_move_drive_itemProWriteMove a file or folder to a different folder in the SAME drive, optionally renaming it on the way.
graph_rename_drive_itemProWriteRename a file or folder.
graph_restore_drive_item_versionProWriteRestore a previous version of a file, making it the current content.
graph_search_drive_itemsFreeRead-onlySearch a drive for files and folders matching a term, across the whole hierarchy rather than one folder.
graph_update_item_permissionProDestructiveChange an existing permission's roles or expiry — turning read access into write, or putting an expiry on a link that has none.

[Microsoft Graph] Copy a file or folder, optionally into a different drive and optionally under a new name. This is ASYNCHRONOUS: Graph answers immediately with a monitor URL rather than the finished copy, so a large folder is still copying after the call returns and the new item does not exist yet. The copy is a new item with its own id and NO sharing links — permissions are not carried across, which is usually what you want.

ParamTypeRequiredDefaultDescription
destinationDriveIdstringnonullThe destination drive id, when copying into a different drive. Optional.
destinationFolderIdstringyesThe destination folder's item id.
driveIdstringnonullThe SOURCE drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
itemIdstringyesThe item id to copy.
namestringnonullA name for the copy. Optional.

[Microsoft Graph] Create a folder, in the drive's root or inside an existing folder. A folder of the same name already existing is the interesting case, and conflictBehavior decides it: "rename" makes "Reports 1", "replace" REUSES the existing folder rather than erasing it, and "fail" stops. The default is fail, so a duplicate name is reported rather than guessed at.

ParamTypeRequiredDefaultDescription
conflictBehaviorstringnonullWhat to do if the name is taken: "fail" (default), "rename" or "replace".
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
namestringyesThe folder's name.
parentItemIdstringnonullThe parent folder's item id. Omit to create in the drive's root.

[Microsoft Graph] Delete a file or folder. It goes to the recycle bin rather than disappearing, so it can be restored from OneDrive or SharePoint for a limited retention period — but deleting a FOLDER takes everything inside it, and the folder's name says nothing about how much that is. List its children first. Deleted content keeps counting against the drive's quota until the recycle bin is emptied.

ParamTypeRequiredDefaultDescription
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
itemIdstringyesThe item id.

[Microsoft Graph] Remove a permission from a file or folder — the remediation for an oversharing finding, and the way an anonymous link is killed. Destructive by the connector's standing rule that removing access is destructive while granting it is not: the person who loses it experiences a broken document rather than a message, and a sharing link cannot be recreated with the same URL once revoked. Inherited permissions cannot be deleted here; remove them from the folder they come from.

ParamTypeRequiredDefaultDescription
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
itemIdstringyesThe item id.
permissionIdstringyesThe permission id, from graph_list_item_permissions.

[Microsoft Graph] Download a file's content and return a short-lived read-only download link, with its content type, filename and size. Binary cannot travel through a tool response, so the bytes are stored and linked rather than inlined. The link expires — hand it onward promptly rather than treating it as a permanent address. Folders have no content and cannot be downloaded here.

ParamTypeRequiredDefaultDescription
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
fileNamestringnonullFilename to use if Microsoft's response does not name the file. Optional.
itemIdstringyesThe item id.

[Microsoft Graph] Get one drive, including its quota — total, used, remaining and the deleted bytes still held in the recycle bin. The deleted figure is the one that surprises people: emptying a recycle bin is often what actually frees a full OneDrive, because deleted files keep counting against the quota until it is.

ParamTypeRequiredDefaultDescription
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one file or folder by id — size, timestamps, the person who last changed it, and the webUrl that opens it in a browser for someone who already has access. Note that webUrl is NOT a sharing link: it works only for people the file is already shared with, which is exactly what makes it safe to pass around internally.

ParamTypeRequiredDefaultDescription
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
itemIdstringyesThe item id.
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] Get a file or folder by its path within the drive, for example "Documents/Invoices/2026-Q3.xlsx". Use this when a person has told you where something lives rather than given you an id — it saves walking the tree a folder at a time. The path is relative to the drive's root, with no leading slash, and it may not contain ".." or a colon.

ParamTypeRequiredDefaultDescription
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
itemPathstringyesPath relative to the drive root, for example "Documents/Invoices/2026-Q3.xlsx".

[Microsoft Graph] Grant named people access to a file or folder, optionally emailing them an invitation. Unlike a sharing link this grants access to identities rather than to whoever holds a URL, so it is revocable, attributable and visible in the audit log — the better choice whenever the recipients are known. It can still reach OUTSIDE the organisation if the address is external and the tenant allows it, which is why it is flagged. Granting on a folder grants everything inside.

ParamTypeRequiredDefaultDescription
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
expirationDateTimestringnonullWhen access expires, ISO 8601. Optional.
itemIdstringyesThe item id.
messagestringnonullA message for the invitation email. Optional.
recipientsstringyesComma-separated email addresses to grant access to.
requireSignInbooleannotrueRequire the recipients to sign in. Default true — setting it false is what turns this into an anonymous grant.
rolesstringyesComma-separated roles: "read" or "write".
sendInvitationbooleannofalseSend an invitation email. Default false.

[Microsoft Graph] List the stored versions of a file, newest first, with who saved each one and how large it was. This is the read behind ransomware recovery and undoing a bad edit: SharePoint and OneDrive keep prior versions even when the current content has been encrypted or overwritten, and graph_restore_drive_item_version puts one back.

ParamTypeRequiredDefaultDescription
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
itemIdstringyesThe item id.
maxItemsintegerno100Maximum versions to return (1-999, default 100).

[Microsoft Graph] List the files and folders directly inside one folder, or inside the drive's root when no folder is named. Each entry carries either a file facet or a folder facet — that is how you tell them apart, since the name alone does not. A folder's childCount tells you whether recursing is worth it. Only one level is returned; there is no whole-tree read.

ParamTypeRequiredDefaultDescription
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
itemIdstringnonullThe folder's item id. Omit to list the drive's root.
maxItemsintegerno200Maximum items to return (1-999, default 200).
orderbystringnonullOData order, for example "lastModifiedDateTime desc" or "name".

[Microsoft Graph] List drives — the signed-in user's own OneDrive by default, or every document library belonging to a SharePoint site or a Microsoft 365 group when you name one. A site usually has more than one library, so this is the read that turns a site id into the drive id the rest of these tools take. Give at most one of siteId or groupId.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
groupIdstringnonullA Microsoft 365 group id, to list that group's drives. Optional.
maxItemsintegerno100Maximum drives to return (1-999, default 100).
siteIdstringnonullA SharePoint site id, to list that site's document libraries. Optional.

[Microsoft Graph] List everyone and everything that can reach a file or folder — people granted access directly, permissions inherited from a parent folder, and every sharing link that exists on it. This is the oversharing audit: look for a link whose scope is "anonymous", which means anyone holding the URL can open the file without signing in, and check whether grantedToIdentitiesV2 includes people outside the organisation. IMPORTANT: the response includes those link URLs in full, so it discloses working access addresses — treat the output as sensitive and do not paste it somewhere the file itself would not belong.

ParamTypeRequiredDefaultDescription
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
itemIdstringyesThe item id.
maxItemsintegerno200Maximum permissions to return (1-999, default 200).

[Microsoft Graph] List the files the signed-in user most recently viewed or edited, across every drive they can reach rather than one at a time. The entries carry a remoteItem facet naming the drive each one actually lives in, which is how you get from a recent file to the drive id the other tools need.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum items to return (1-999, default 100).

[Microsoft Graph] List files and folders other people have shared with the signed-in user. Each entry's remoteItem facet names the drive and item id in their OWNER's drive, which is what the other tools in this family need — the item does not live in the signed-in user's drive, so its own id will not resolve there.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum items to return (1-999, default 100).

[Microsoft Graph] Move a file or folder to a different folder in the SAME drive, optionally renaming it on the way. Moving a folder takes everything inside it. The item keeps its id, so its sharing links survive — but the permissions it INHERITED from its old parent do not, and it picks up the new parent's instead, which can quietly widen or narrow who can see it. Crossing drives is a copy rather than a move; use graph_copy_drive_item.

ParamTypeRequiredDefaultDescription
destinationFolderIdstringyesThe destination folder's item id.
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
itemIdstringyesThe item id.
namestringnonullA new name for the item. Optional.

[Microsoft Graph] Rename a file or folder. The item keeps its id, its version history and its sharing links, so anything already pointing at it keeps working — a rename is genuinely just a label change here, unlike on a file system. Use graph_move_drive_item to put it somewhere else.

ParamTypeRequiredDefaultDescription
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
itemIdstringyesThe item id.
namestringyesThe new name, including the file extension.

[Microsoft Graph] Restore a previous version of a file, making it the current content. Nothing is lost: the content being replaced becomes a version of its own, so this is reversible by restoring that one instead. It is the remediation step after a file has been encrypted by ransomware or overwritten by mistake — list the versions first and pick the last one saved before the damage.

ParamTypeRequiredDefaultDescription
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
itemIdstringyesThe item id.
versionIdstringyesThe version id to restore, from graph_list_drive_item_versions.

[Microsoft Graph] Search a drive for files and folders matching a term, across the whole hierarchy rather than one folder. The term matches file names AND indexed file contents, so searching for a phrase inside documents works. Results include items from folders the signed-in user can reach through sharing as well as ones they own.

ParamTypeRequiredDefaultDescription
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum items to return (1-999, default 100).
querystringyesThe search term.

[Microsoft Graph] Change an existing permission's roles or expiry — turning read access into write, or putting an expiry on a link that has none. The roles you send REPLACE the permission's current ones rather than adding to them, so this both grants and revokes depending on what you omit. Read the permission first with graph_list_item_permissions. Permissions inherited from a parent folder cannot be changed here; change them where they are defined.

ParamTypeRequiredDefaultDescription
driveIdstringnonullThe drive id. Omit for the signed-in user's own OneDrive.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
expirationDateTimestringnonullNew expiry, ISO 8601. Omit to leave unchanged.
itemIdstringyesThe item id.
permissionIdstringyesThe permission id, from graph_list_item_permissions.
rolesstringnonullComma-separated roles that REPLACE the current ones: "read" or "write". Omit to leave them unchanged.

Calendar

ToolPlanAccessSummary
graph_cancel_eventProDestructiveCancel a meeting the signed-in user ORGANISED, sending a cancellation notice to every attendee.
graph_create_calendarProWriteCreate an additional calendar for the signed-in user.
graph_create_calendar_permissionProDestructiveShare a calendar with somebody, choosing how much they can see.
graph_create_eventProDestructiveCreate an event.
graph_delete_calendarProDestructiveDelete a calendar AND EVERY EVENT IN IT.
graph_delete_calendar_permissionProDestructiveRemove somebody's access to a calendar — the remediation when an audit finds a share that should not exist.
graph_delete_eventProDestructiveDelete an event from the signed-in user's calendar.
graph_download_event_attachmentFreeRead-onlyDownload an event attachment's raw bytes and return a short-lived read-only download link, with its content type, filename and size.
graph_forward_eventProDestructiveForward a meeting invitation to additional people, who receive a real invitation and appear to the organiser as attendees.
graph_get_calendarFreeRead-onlyGet one calendar, or the signed-in user's default calendar when no id is given.
graph_get_eventFreeRead-onlyGet one event in full — attendees and each person's response status, the organiser, location, body, online-meeting join details and, for a series, its recurrence rule.
graph_get_scheduleFreeRead-onlyGet free/busy availability for one or more people, distribution lists, or bookable resources such as meeting rooms, over a time window.
graph_list_calendar_permissionsFreeRead-onlyList who a calendar is shared with and how much each of them can see.
graph_list_calendar_viewFreeRead-onlyList the events occurring between two times, with recurring series EXPANDED into their individual occurrences.
graph_list_calendarsFreeRead-onlyList the signed-in user's calendars — their default one plus any extra calendars they created or had shared with them.
graph_list_event_attachmentsFreeRead-onlyList an event's attachments as metadata — name, content type and size — without pulling any content down.
graph_list_event_instancesFreeRead-onlyList the individual occurrences of ONE recurring series within a date range, including any that were moved or cancelled separately from the rest.
graph_list_eventsFreeRead-onlyList events as they are STORED, which means a recurring series comes back as a single master entry carrying its recurrence rule rather than as its occurrences.
graph_respond_to_eventProDestructiveAnswer a meeting invitation as the signed-in user — accept, decline, or accept tentatively.
graph_update_calendarProWriteRename a calendar or change the colour Outlook shows it in.
graph_update_eventProDestructiveChange an event.

[Microsoft Graph] Cancel a meeting the signed-in user ORGANISED, sending a cancellation notice to every attendee. This is the correct way to call off a meeting — it removes the event from everyone's calendar and tells them why. Only the organiser can do it; an attendee wanting out uses graph_decline_event instead. Cancelling a recurring series cancels every remaining occurrence.

ParamTypeRequiredDefaultDescription
commentstringnonullA message explaining the cancellation, sent to the attendees. Optional but strongly preferred.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
eventIdstringyesThe event id.
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Create an additional calendar for the signed-in user. Nothing is shared and nobody is notified — a new calendar starts empty and private to them.

ParamTypeRequiredDefaultDescription
colorstringnonullOutlook colour preset: "auto", or lightBlue, lightGreen, lightOrange, lightGray, lightYellow, lightTeal, lightPink, lightBrown, lightRed. Optional.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
namestringyesThe calendar's name.
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Share a calendar with somebody, choosing how much they can see. Read the role values before picking: freeBusyRead shows only busy blocks, limitedRead adds subjects and locations, read shows the full contents of every appointment, and write or delegateWithoutPrivateEventAccess lets them change things. Granting read on a person's calendar exposes every meeting they attend, which is more revealing than it sounds — attendee lists disclose who is talking to whom.

ParamTypeRequiredDefaultDescription
calendarIdstringnonullThe calendar id. Omit for the default calendar.
emailAddressstringyesThe email address of the person to share with.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
rolestringyesHow much they may see: "freeBusyRead", "limitedRead", "read", "write", "delegateWithoutPrivateEventAccess" or "delegateWithPrivateEventAccess".
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Create an event. WITH attendees this SENDS MEETING INVITATIONS immediately — real people get a real invitation from the signed-in user, and declining it is the only way out. WITHOUT attendees it is a private appointment that notifies nobody. That difference is the argument you pass, not a different tool, which is why this is flagged regardless: check the attendee list before calling it. Times are ISO 8601 in the given time zone; set isOnlineMeeting to have Teams generate a join link.

ParamTypeRequiredDefaultDescription
attendeesstringnonullComma-separated attendee email addresses. LEAVE EMPTY for a private appointment that invites nobody.
bodystringnonullThe event body or agenda. Optional.
bodyTypestringnonullBody format: "Text" (default) or "HTML".
calendarIdstringnonullThe calendar id. Omit for the default calendar.
endDateTimestringyesEnd time, ISO 8601.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
isOnlineMeetingbooleannofalseGenerate a Teams join link for this event. Default false.
locationstringnonullLocation name, for example a room or address. Optional.
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.
startDateTimestringyesStart time, ISO 8601, for example 2026-08-20T14:00:00.
subjectstringyesThe event's subject line.
timeZonestringnonullTime zone for both times, for example "UTC" or "Pacific Standard Time". Defaults to UTC — set it deliberately.

[Microsoft Graph] Delete a calendar AND EVERY EVENT IN IT. The calendar's name says nothing about how much is inside, so read it with graph_list_calendar_view first. Meetings the user organised are not cancelled for their attendees by this — the events simply vanish from this calendar while everyone else still holds theirs, which is worse than a cancellation rather than better. The default calendar cannot be deleted.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe calendar id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Remove somebody's access to a calendar — the remediation when an audit finds a share that should not exist. Destructive by the standing rule that removing access is destructive while granting it is not: the person loses a calendar they may be relying on to schedule around, and they are not told, so it surfaces as meetings quietly clashing rather than as a message.

ParamTypeRequiredDefaultDescription
calendarIdstringnonullThe calendar id. Omit for the default calendar.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
permissionIdstringyesThe permission id, from graph_list_calendar_permissions.
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Delete an event from the signed-in user's calendar. On a meeting THEY ORGANISED this is the wrong tool and the difference matters: deleting removes it from their calendar while leaving it on everybody else's, with no cancellation sent, so the attendees keep an appointment nobody will attend. Use graph_cancel_event for an organised meeting; this one is right for a personal appointment or an invitation already declined.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
eventIdstringyesThe event id.
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Download an event attachment's raw bytes and return a short-lived read-only download link, with its content type, filename and size. Binary cannot travel through a tool response, so the bytes are stored and linked rather than inlined. The link expires; hand it onward promptly.

ParamTypeRequiredDefaultDescription
attachmentIdstringyesThe attachment id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
eventIdstringyesThe event id.
fileNamestringnonullFilename to use if Microsoft's response does not name the file. Optional.
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Forward a meeting invitation to additional people, who receive a real invitation and appear to the organiser as attendees. It reaches humans and cannot be recalled, and it discloses the meeting's subject, body and attendee list to whoever you name — worth checking before forwarding anything about personnel or commercial matters outside the original group.

ParamTypeRequiredDefaultDescription
commentstringnonullA note for the new recipients. Optional.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
eventIdstringyesThe event id.
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.
tostringyesComma-separated email addresses to forward it to.

[Microsoft Graph] Get one calendar, or the signed-in user's default calendar when no id is given. Includes the colour Outlook shows it in and the permission flags describing what this connection can do with it.

ParamTypeRequiredDefaultDescription
calendarIdstringnonullThe calendar id. Omit for the default calendar.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Get one event in full — attendees and each person's response status, the organiser, location, body, online-meeting join details and, for a series, its recurrence rule. responseStatus per attendee is the property worth reading before chasing anyone: it distinguishes people who declined from people who simply have not answered.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
eventIdstringyesThe event id.
selectstringnonullComma-separated properties to return. Omit for the default set.
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Get free/busy availability for one or more people, distribution lists, or bookable resources such as meeting rooms, over a time window. This is the ONE calendar tool that reads other people, and it works because free/busy is not mailbox content — it is the availability Outlook shows everyone, governed by the tenant's free/busy sharing settings. Each result carries an availabilityView string where each character is one time slot: 0 free, 1 tentative, 2 busy, 3 out of office, 4 working elsewhere. Subject and location appear only where that person's settings allow it. Nothing here reads the contents of anybody's calendar.

ParamTypeRequiredDefaultDescription
endDateTimestringyesEnd of the window, ISO 8601, for example 2026-08-14T18:00:00.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
schedulesstringyesComma-separated email addresses of the people, lists or rooms to check.
slotMinutesintegernonullMinutes per slot in availabilityView: 5 to 1440, default 30. Smaller means a longer, more precise string.
startDateTimestringyesStart of the window, ISO 8601, for example 2026-08-14T09:00:00.
timeZonestringnonullTime zone for the window and the response, for example "UTC" or "Pacific Standard Time". Defaults to UTC.

[Microsoft Graph] List who a calendar is shared with and how much each of them can see. This is the calendar equivalent of a file oversharing audit: role tells you whether somebody sees only free/busy, sees titles and locations, or can read and even edit the full contents, and allowedRoles says how far that could be raised. An entry whose role reads write or delegate on an executive's calendar is worth asking about.

ParamTypeRequiredDefaultDescription
calendarIdstringnonullThe calendar id. Omit for the default calendar.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum entries to return (1-999, default 100).
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] List the events occurring between two times, with recurring series EXPANDED into their individual occurrences. This is the right read for any question about a period — what is on today, who is booked on Thursday, what happened last week. Prefer it over graph_list_events, which returns a repeating meeting as one master entry rather than as its occurrences, and so undercounts every recurring commitment in the calendar. Times are ISO 8601 and are interpreted in the given time zone.

ParamTypeRequiredDefaultDescription
calendarIdstringnonullThe calendar id. Omit for the default calendar.
endDateTimestringyesEnd of the range, ISO 8601, for example 2026-08-15T00:00:00.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno200Maximum occurrences to return (1-999, default 200).
selectstringnonullComma-separated properties to return, for example "subject,start,end,organizer". Omit for the default set.
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.
startDateTimestringyesStart of the range, ISO 8601, for example 2026-08-14T00:00:00.

[Microsoft Graph] List the signed-in user's calendars — their default one plus any extra calendars they created or had shared with them. canEdit and canShare tell you what this connection may actually do with each; owner names the person whose calendar it really is, which is how a shared calendar is distinguished from one of their own.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum calendars to return (1-999, default 100).
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] List an event's attachments as metadata — name, content type and size — without pulling any content down. Meeting agendas and pre-reads live here. Use graph_download_event_attachment to fetch one.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
eventIdstringyesThe event id.
maxItemsintegerno100Maximum attachments to return (1-999, default 100).
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] List the individual occurrences of ONE recurring series within a date range, including any that were moved or cancelled separately from the rest. This is how you find the single exception in an otherwise regular series — the one week the meeting was an hour later, or the occurrence somebody deleted. Editing one occurrence means addressing the instance id returned here, not the series id.

ParamTypeRequiredDefaultDescription
endDateTimestringyesEnd of the range, ISO 8601.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
eventIdstringyesThe recurring series' event id.
maxItemsintegerno200Maximum occurrences to return (1-999, default 200).
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.
startDateTimestringyesStart of the range, ISO 8601.

[Microsoft Graph] List events as they are STORED, which means a recurring series comes back as a single master entry carrying its recurrence rule rather than as its occurrences. Use this when you want the series itself — to edit it, or to inventory what repeating meetings exist. For any question about what is happening during a period of time, use graph_list_calendar_view instead.

ParamTypeRequiredDefaultDescription
calendarIdstringnonullThe calendar id. Omit for the default calendar.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "start/dateTime ge '2026-08-01T00:00:00'".
maxItemsintegerno100Maximum events to return (1-999, default 100).
orderbystringnonullOData order, for example "start/dateTime desc".
selectstringnonullComma-separated properties to return. Omit for the default set.
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Answer a meeting invitation as the signed-in user — accept, decline, or accept tentatively. By default the organiser is told, which is the point of responding, so this reaches a human. Set sendResponse to false to update the calendar silently without notifying them. Declining removes the meeting from their calendar. This answers on behalf of a real person, so it should reflect a decision they actually made.

ParamTypeRequiredDefaultDescription
commentstringnonullA note for the organiser. Optional.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
eventIdstringyesThe event id.
responsestringyesThe response: "accept", "decline" or "tentativelyAccept".
sendResponsebooleannotrueNotify the organiser. Default true — false updates the calendar silently.
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Rename a calendar or change the colour Outlook shows it in. The events inside are untouched and nobody the calendar is shared with is notified.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe calendar id.
colorstringnonullNew Outlook colour preset. Omit to leave unchanged.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
namestringnonullThe new name. Omit to leave unchanged.
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Change an event. On a meeting this SENDS AN UPDATE to every attendee — moving a meeting notifies everyone who was invited, and there is no quiet edit. The attendee list you send REPLACES the existing one rather than adding to it, so anyone you omit is uninvited and told so; read the event first and send the complete list. Updating a recurring SERIES changes every occurrence, while updating one occurrence's id changes only that one.

ParamTypeRequiredDefaultDescription
attendeesstringnonullThe COMPLETE replacement attendee list, comma-separated. Omit to leave attendees alone; anyone missing from a supplied list is uninvited.
bodystringnonullNew body. Omit to leave unchanged.
bodyTypestringnonullBody format: "Text" (default) or "HTML".
endDateTimestringnonullNew end time, ISO 8601. Omit to leave unchanged.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
eventIdstringyesThe event id, or an occurrence id to change just that occurrence.
locationstringnonullNew location. Omit to leave unchanged.
sharedMailboxstringnonullSMTP address of a shared or delegated calendar to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.
startDateTimestringnonullNew start time, ISO 8601. Omit to leave unchanged.
subjectstringnonullNew subject. Omit to leave unchanged.
timeZonestringnonullTime zone for the times above. Defaults to UTC.

Contacts

ToolPlanAccessSummary
graph_create_contactProWriteAdd a contact to the signed-in user's personal address book, optionally inside a folder.
graph_delete_contactProDestructiveDelete a contact from the signed-in user's personal address book.
graph_get_contactFreeRead-onlyGet one personal contact in full — every email address and phone number on the record, the postal addresses, job title and company, and any personal notes.
graph_get_org_contactFreeRead-onlyGet one organizational contact from the directory.
graph_list_contact_folder_contactsFreeRead-onlyList the contacts inside one contact folder.
graph_list_contact_foldersFreeRead-onlyList the folders the signed-in user files contacts into.
graph_list_contactsFreeRead-onlyList the signed-in user's personal Outlook contacts — their own private address book, not the organisation's shared directory.
graph_list_org_contactsFreeRead-onlyList the tenant's ORGANIZATIONAL contacts — the shared directory entries everyone in the organisation sees in the global address list, typically outside accountants, suppliers and contractors who have…
graph_update_contactProWriteChange a personal contact.

[Microsoft Graph] Add a contact to the signed-in user's personal address book, optionally inside a folder. Nobody else sees it and nobody is notified — this changes one person's private records only. To publish an entry the whole organisation can see, a directory administrator creates an organizational contact instead.

ParamTypeRequiredDefaultDescription
companyNamestringnonullCompany name. Optional.
contactFolderIdstringnonullContact-folder id to create it in. Omit for the top level.
displayNamestringyesThe contact's display name.
emailAddressesstringnonullComma-separated email addresses. The first becomes the default.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
givenNamestringnonullGiven (first) name. Optional.
jobTitlestringnonullJob title. Optional.
mobilePhonestringnonullMobile phone number. Optional.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.
surnamestringnonullSurname (last name). Optional.

[Microsoft Graph] Delete a contact from the signed-in user's personal address book. Nobody else is affected and nobody is notified, but the record and its history of addresses and numbers are gone — read it first if anything on it might be needed. Organizational contacts cannot be deleted here; they are directory objects.

ParamTypeRequiredDefaultDescription
contactIdstringyesThe contact id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Get one personal contact in full — every email address and phone number on the record, the postal addresses, job title and company, and any personal notes. A contact can carry several email addresses; the first is the one Outlook uses by default.

ParamTypeRequiredDefaultDescription
contactIdstringyesThe contact id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] Get one organizational contact from the directory. Note the id space is the DIRECTORY's, not a mailbox's — an id from graph_list_contacts will not resolve here and the other way round, which is the most common way these two halves get confused.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
orgContactIdstringyesThe organizational contact's directory id.

[Microsoft Graph] List the contacts inside one contact folder. Pair it with graph_list_contact_folders to walk a filed address book: the top-level list and each folder's contents are disjoint, so a complete picture needs both.

ParamTypeRequiredDefaultDescription
contactFolderIdstringyesThe contact-folder id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum contacts to return (1-999, default 100).
selectstringnonullComma-separated properties to return. Omit for the default set.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] List the folders the signed-in user files contacts into. Contacts outside any folder live at the top level and are returned by graph_list_contacts, which does NOT reach into these folders — so a book that looks small may simply be organised, and this read is how you find the rest.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum folders to return (1-999, default 100).
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] List the signed-in user's personal Outlook contacts — their own private address book, not the organisation's shared directory. Use graph_list_org_contacts for the entries everyone can see. Filter on emailAddresses or companyName to narrow a large book rather than paging through it.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "companyName eq 'Contoso'".
maxItemsintegerno100Maximum contacts to return (1-999, default 100).
orderbystringnonullOData order, for example "displayName".
selectstringnonullComma-separated properties to return. Omit for the default set.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.

[Microsoft Graph] List the tenant's ORGANIZATIONAL contacts — the shared directory entries everyone in the organisation sees in the global address list, typically outside accountants, suppliers and contractors who have no mailbox of their own. Completely separate from anybody's personal address book. These are directory objects, so they are read-only through this family; creating or changing one is a directory administration task.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "startswith(displayName,'A')".
maxItemsintegerno100Maximum contacts to return (1-999, default 100).
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] Change a personal contact. Anything omitted is left alone — except email addresses, where the list you send REPLACES the record's existing ones rather than adding to them, so read the contact first if it has more than one and you mean to keep them.

ParamTypeRequiredDefaultDescription
companyNamestringnonullNew company name. Omit to leave unchanged.
contactIdstringyesThe contact id.
displayNamestringnonullNew display name. Omit to leave unchanged.
emailAddressesstringnonullThe COMPLETE replacement list of email addresses, comma-separated. Omit to leave them alone.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
givenNamestringnonullNew given name. Omit to leave unchanged.
jobTitlestringnonullNew job title. Omit to leave unchanged.
mobilePhonestringnonullNew mobile phone number. Omit to leave unchanged.
sharedMailboxstringnonullSMTP address of a shared or delegated mailbox to act on, for example support@contoso.com. Omit to act on your own. You must already hold Exchange delegate rights to that mailbox: they are granted per mailbox in Exchange by its owner or an administrator, NOT by any Entra role and NOT by connecting StackJack, so a mailbox nobody has shared with you returns 403.
surnamestringnonullNew surname. Omit to leave unchanged.

SharePoint

ToolPlanAccessSummary
graph_create_listProWriteCreate a new list in a SharePoint site.
graph_create_list_columnProWriteAdd a column to a SharePoint list.
graph_create_list_itemProWriteAdd a row to a SharePoint list.
graph_delete_listProDestructiveDelete a SharePoint list AND EVERY ITEM IN IT.
graph_delete_list_columnProDestructiveRemove a column from a SharePoint list.
graph_delete_list_itemProDestructiveDelete one row from a SharePoint list.
graph_get_listFreeRead-onlyGet one SharePoint list — its display name, template type, item count hints and whether it is hidden.
graph_get_list_itemFreeRead-onlyGet one row of a SharePoint list with all its column values.
graph_get_root_siteFreeRead-onlyGet the organisation's root SharePoint site — the tenant's default site collection, the one at the bare https://.sharepoint.com address.
graph_get_siteFreeRead-onlyGet one SharePoint site by its id.
graph_get_site_by_pathFreeRead-onlyResolve a SharePoint site from the address a person would paste from their browser, splitting it into its two halves.
graph_list_content_type_columnsFreeRead-onlyList the columns a site content type contributes.
graph_list_list_columnsFreeRead-onlyList the columns defined on one SharePoint list — their internal names, types, and whether each is required or read-only.
graph_list_list_item_versionsFreeRead-onlyList the previous versions of one list item, each with who changed it and when.
graph_list_list_itemsFreeRead-onlyList the rows in a SharePoint list, WITH their column values.
graph_list_site_columnsFreeRead-onlyList the SITE columns — reusable column definitions available to every list in the site, as opposed to the per-list columns graph_list_list_columns returns.
graph_list_site_content_typesFreeRead-onlyList the content types defined on a SharePoint site.
graph_list_site_listsFreeRead-onlyList the lists in a SharePoint site.
graph_list_sitesFreeRead-onlyList the SharePoint sites in the organisation.
graph_list_subsitesFreeRead-onlyList the subsites directly under one SharePoint site.
graph_search_sitesFreeRead-onlyFind SharePoint sites by keyword — the fastest way to turn a site NAME a person used into the site id every other tool here needs.
graph_update_listProWriteRename a list or change its description.
graph_update_list_itemProWriteChange column values on one row.

[Microsoft Graph] Create a new list in a SharePoint site. The columns are supplied as a JSON array of column definitions, each naming the column and its type, for example [{"name":"Owner","text":},{"name":"DueDate","dateTime":}]. Adds something that was not there before and affects nothing existing.

ParamTypeRequiredDefaultDescription
columnsstringnonullJSON array of column definitions, for example [{"name":"Owner","text":}].
displayNamestringyesThe list's display name.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
siteIdstringyesThe site id.
templatestringnonullThe list template, for example "genericList" (the default) or "documentLibrary".

[Microsoft Graph] Add a column to a SharePoint list. The definition is a JSON object naming the column and exactly one type facet, for example {"name":"Owner","text":} or {"name":"DueDate","dateTime":}. Existing rows gain the column empty; nothing already stored is changed.

ParamTypeRequiredDefaultDescription
columnstringyesJSON column definition, for example {"name":"Owner","text":}.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
listIdstringyesThe list id.
siteIdstringyesThe site id.

[Microsoft Graph] Add a row to a SharePoint list. The values are a JSON object keyed by INTERNAL column name, for example {"Title":"New laptop","Status":"Open"} — call graph_list_list_columns first, because a key that is not a real internal name is accepted and silently dropped rather than rejected, so the row appears with that value missing.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
fieldsstringyesJSON object of column values keyed by internal name, for example {"Title":"New laptop"}.
listIdstringyesThe list id.
siteIdstringyesThe site id.

[Microsoft Graph] Delete a SharePoint list AND EVERY ITEM IN IT. There is no partial form and no per-item confirmation: a list holding ten thousand rows goes in one call. The list lands in the site's recycle bin, where it can be restored until somebody empties it — but that is a site collection administrator's job, not something these tools can do. Read the list and its item count first.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
listIdstringyesThe list id.
siteIdstringyesThe site id.

[Microsoft Graph] Remove a column from a SharePoint list. THIS DELETES THE DATA IN THAT COLUMN FOR EVERY ROW — the rows survive, the values do not, and there is no per-row recycle bin for a dropped column. Anything a report or a Power Automate flow reads from that column stops working at the same moment. Read the column list and confirm nothing depends on it.

ParamTypeRequiredDefaultDescription
columnIdstringyesThe column id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
listIdstringyesThe list id.
siteIdstringyesThe site id.

[Microsoft Graph] Delete one row from a SharePoint list. It goes to the site's recycle bin rather than disappearing outright, but its version history goes with it, so a value somebody needs to trace is gone from the tools here. Read the item first.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
itemIdstringyesThe item id.
listIdstringyesThe list id.
siteIdstringyesThe site id.

[Microsoft Graph] Get one SharePoint list — its display name, template type, item count hints and whether it is hidden. Read this before writing items: the list's template tells you whether you are looking at a genuine list or a document library, and the two behave differently.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
listIdstringyesThe list id, or the list's display name.
siteIdstringyesThe site id.

[Microsoft Graph] Get one row of a SharePoint list with all its column values. The id is the list's own integer row id — small numbers like 1, 2, 42 — not a GUID, and it is unique only within its list.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
itemIdstringyesThe item id, normally a small integer.
listIdstringyesThe list id, or the list's display name.
siteIdstringyesThe site id.

[Microsoft Graph] Get the organisation's root SharePoint site — the tenant's default site collection, the one at the bare https://.sharepoint.com address. Useful as a starting point when you know nothing about a tenant's SharePoint layout: its id is what graph_list_subsites and graph_list_site_lists need.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one SharePoint site by its id. The id is the composite ",," that the list and search tools return — pass it exactly as given, commas included. To go the other way, from a browser URL to a site, use graph_get_site_by_path.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
selectstringnonullComma-separated properties to return. Omit for the default set.
siteIdstringyesThe site id, exactly as returned by graph_list_sites or graph_search_sites.

[Microsoft Graph] Resolve a SharePoint site from the address a person would paste from their browser, splitting it into its two halves. For https://contoso.sharepoint.com/sites/hr, hostname is "contoso.sharepoint.com" and sitePath is "sites/hr". Returns the site's composite id, which is what every other tool in this family takes.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
hostnamestringyesThe SharePoint hostname, for example "contoso.sharepoint.com".
sitePathstringyesThe server-relative path with no leading slash, for example "sites/hr" or "teams/hr/benefits".

[Microsoft Graph] List the columns a site content type contributes. Pair it with graph_list_site_content_types to work out which columns a list will gain if that content type is applied to it.

ParamTypeRequiredDefaultDescription
contentTypeIdstringyesThe content type id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum columns to return (1-200, default 100).
siteIdstringyesThe site id.

[Microsoft Graph] List the columns defined on one SharePoint list — their internal names, types, and whether each is required or read-only. READ THIS BEFORE WRITING ITEMS: the item write tools take the INTERNAL column name, which is often not what the column is labelled in the browser (a column shown as "Due Date" is usually "Due_x0020_Date" or "DueDate" underneath), and a wrong name is silently ignored rather than rejected.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
listIdstringyesThe list id, or the list's display name.
maxItemsintegerno100Maximum columns to return (1-200, default 100).
siteIdstringyesThe site id.

[Microsoft Graph] List the previous versions of one list item, each with who changed it and when. This is the audit trail for a row: when a value is wrong and nobody admits changing it, this read answers the question. Versions exist only if versioning is enabled on the list, which is on by default for most templates but not all.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
itemIdstringyesThe item id.
listIdstringyesThe list id, or the list's display name.
maxItemsintegerno100Maximum versions to return (1-200, default 100).
siteIdstringyesThe site id.

[Microsoft Graph] List the rows in a SharePoint list, WITH their column values. Filtering and sorting work on the columns rather than on the row itself, so they are written as "fields/Status eq 'Open'" and "fields/Created desc" — a filter naming a bare column name will not match anything. Very wide lists return large pages; narrow them with a filter rather than by raising the item count.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter over the columns, for example "fields/Status eq 'Open'".
listIdstringyesThe list id, or the list's display name.
maxItemsintegerno100Maximum items to return (1-200, default 100).
orderbystringnonullOData order over the columns, for example "fields/Created desc".
siteIdstringyesThe site id.

[Microsoft Graph] List the SITE columns — reusable column definitions available to every list in the site, as opposed to the per-list columns graph_list_list_columns returns. A site column changed once changes everywhere it is used, which is why the two are separate reads.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum columns to return (1-200, default 100).
siteIdstringyesThe site id.

[Microsoft Graph] List the content types defined on a SharePoint site. A content type is a named bundle of columns a list can adopt — "Contract", "Invoice" — so this read explains why two lists that look unrelated share the same column set.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum content types to return (1-200, default 100).
siteIdstringyesThe site id.

[Microsoft Graph] List the lists in a SharePoint site. DOCUMENT LIBRARIES appear here too — a library is a list whose items are files — but handle their contents through graph_list_drives and the file tools rather than the list-item tools here, which return the metadata rows instead of the files.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "displayName eq 'Assets'".
maxItemsintegerno100Maximum lists to return (1-200, default 100).
selectstringnonullComma-separated properties to return. Omit for the default set.
siteIdstringyesThe site id.

[Microsoft Graph] List the SharePoint sites in the organisation. This returns sites across the tenant, which on a large tenant is a long list — filter with "siteCollection/root ne null" to get only the top-level site collections rather than every subsite, or use graph_search_sites when you know part of the name.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "siteCollection/root ne null" for top-level site collections only.
maxItemsintegerno100Maximum sites to return (1-200, default 100).
selectstringnonullComma-separated properties to return, for example "displayName,webUrl".

[Microsoft Graph] List the subsites directly under one SharePoint site. Subsites nest, so this returns one level rather than the whole tree — walk it by calling this again with each returned id. A site with no subsites answers an empty collection, which is the normal modern layout.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum subsites to return (1-200, default 100).
siteIdstringyesThe parent site id.

[Microsoft Graph] Find SharePoint sites by keyword — the fastest way to turn a site NAME a person used into the site id every other tool here needs. Note this uses SharePoint's own search parameter rather than an OData filter, so it matches titles and paths loosely rather than exactly.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum sites to return (1-200, default 100).
querystringyesThe keyword to search site names and paths for.

[Microsoft Graph] Rename a list or change its description. Anything omitted is left alone. This changes the list's own properties only — it does not touch its columns or its items.

ParamTypeRequiredDefaultDescription
descriptionstringnonullNew description. Omit to leave unchanged.
displayNamestringnonullNew display name. Omit to leave unchanged.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
listIdstringyesThe list id.
siteIdstringyesThe site id.

[Microsoft Graph] Change column values on one row. Only the columns you name are touched; every other column keeps its value, so this is safe to use for a single field. Sending null for a column CLEARS it, which is how a value is removed.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
fieldsstringyesJSON object of the column values to change, keyed by internal name.
itemIdstringyesThe item id.
listIdstringyesThe list id.
siteIdstringyesThe site id.

Teams

ToolPlanAccessSummary
graph_add_channel_memberProDestructiveAdd somebody to a PRIVATE or SHARED channel, granting them its whole history and its own files.
graph_add_team_memberProDestructiveAdd somebody to a team.
graph_archive_channelProDestructiveArchive a channel, making it READ-ONLY for everyone: nobody can post, reply, react or change its settings until it is unarchived.
graph_archive_teamProDestructiveArchive a team, making it READ-ONLY FOR EVERY MEMBER at once — nobody can post, reply or change anything until it is unarchived.
graph_create_channelProWriteAdd a channel to a team.
graph_create_teamProWriteCreate a new team.
graph_delete_channelProDestructiveDelete a channel AND ITS ENTIRE CONVERSATION HISTORY.
graph_get_channelFreeRead-onlyGet one channel — its description, its membershipType (standard, private or shared) and its web URL.
graph_get_channel_files_folderFreeRead-onlyGet the SharePoint folder holding a channel's files.
graph_get_channel_messageFreeRead-onlyGet one channel post in full — its body, who wrote it, when, whether it has been edited or deleted, and any attachments or mentions.
graph_get_teamFreeRead-onlyGet one team with its settings — who may create channels, whether guests can be added, whether members can delete messages, and whether the team is archived.
graph_get_team_memberFreeRead-onlyGet one team membership.
graph_list_all_channelsFreeRead-onlyList EVERY channel in a team including private and shared ones, each with its membershipType.
graph_list_channel_membersFreeRead-onlyList the members of a PRIVATE or SHARED channel — the people who can see it beyond the team's own membership.
graph_list_channel_messagesFreeRead-onlyList the top-level posts in a channel, newest first.
graph_list_channel_tabsFreeRead-onlyList the tabs pinned across the top of a channel — the wikis, Planner boards, websites and documents a team has attached to it.
graph_list_channelsFreeRead-onlyList a team's STANDARD channels — the ones every member sees.
graph_list_joined_teamsFreeRead-onlyList the teams the SIGNED-IN user belongs to.
graph_list_message_repliesFreeRead-onlyList the replies to one channel post — the actual discussion, which the channel listing omits.
graph_list_team_installed_appsFreeRead-onlyList the Teams apps installed in a team.
graph_list_team_membersFreeRead-onlyList a team's members.
graph_list_teamsFreeRead-onlyList the teams in the organisation.
graph_remove_channel_memberProDestructiveRemove somebody from a private or shared channel.
graph_remove_team_memberProDestructiveRemove somebody from a team.
graph_reply_to_channel_messageProDestructiveReply to an existing channel post, in that post's thread.
graph_send_channel_messageProDestructivePost a message to a Teams channel.
graph_unarchive_channelProWriteRestore an archived channel, giving its members back the ability to post and edit.
graph_unarchive_teamProWriteRestore an archived team to normal use.
graph_update_channelProWriteRename a channel or change its description.
graph_update_teamProWriteChange a team's name or description.
graph_update_team_member_roleProDestructivePromote a team member to owner, or demote an owner back to a member.

[Microsoft Graph] Add somebody to a PRIVATE or SHARED channel, granting them its whole history and its own files. They must already be a member of the parent team. A standard channel has no membership of its own — adding somebody to one of those is graph_add_team_member instead, and this call fails against it.

ParamTypeRequiredDefaultDescription
channelIdstringyesThe channel id. Must be a private or shared channel.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
ownerbooleannofalseSet true to add them as a channel OWNER.
teamIdstringyesThe team id.
userIdstringyesThe user's id or user principal name.

[Microsoft Graph] Add somebody to a team. THIS GRANTS RETROACTIVE ACCESS: they can immediately read every past conversation in every standard channel and every file in the team's SharePoint site, not just what happens next. Adding them as an owner additionally lets them add and remove anyone else. Check what the team holds before adding somebody who should not see all of it.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
ownerbooleannofalseSet true to add them as an OWNER rather than an ordinary member.
teamIdstringyesThe team id.
userIdstringyesThe user's id or user principal name.

[Microsoft Graph] Archive a channel, making it READ-ONLY for everyone: nobody can post, reply, react or change its settings until it is unarchived. The conversation history survives and graph_unarchive_channel reverses it, but the channel stops working the moment this takes effect and the members are not told why — the same shape as archiving a whole team, scoped to one channel. Two refusals to expect rather than debug, both 400s: a channel whose TEAM is archived cannot be archived (unarchive the team first), and a channel with no owner cannot be archived at all. Archiving is ASYNCHRONOUS — this returns an empty body meaning accepted, not finished, so do not retry on the empty response.

ParamTypeRequiredDefaultDescription
channelIdstringyesThe channel id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
readOnlySharePointSitebooleannonullAlso make the channel's SharePoint site read-only for its members. Omit to skip that step, which is Microsoft's default.
teamIdstringyesThe team id.

[Microsoft Graph] Archive a team, making it READ-ONLY FOR EVERY MEMBER at once — nobody can post, reply or change anything until it is unarchived. The content survives and graph_unarchive_team reverses it, but a whole team stops working the moment this returns, and the members are not told why. Confirm with somebody who owns the team first.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
readOnlySharePointSitebooleannonullAlso make the team's SharePoint site read-only. Defaults to Microsoft's own default when omitted.
teamIdstringyesThe team id.

[Microsoft Graph] Add a channel to a team. membershipType decides who sees it: "standard" (every team member, the default) or "private" (only the people you then add). A private channel gets its own SharePoint site and its own membership, so choosing it changes where the content lives, not just who sees it.

ParamTypeRequiredDefaultDescription
descriptionstringnonullDescription. Optional.
displayNamestringyesThe channel's display name.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
membershipTypestringnonull"standard" (default) or "private".
teamIdstringyesThe team id.

[Microsoft Graph] Create a new team. THIS IS ASYNCHRONOUS: Graph accepts the request and returns nothing, and the team appears a few seconds later — an empty response is success, not failure, so do not retry or you will create two. Creating a team also creates a Microsoft 365 group, a mailbox and a SharePoint site behind it. List the teams afterwards to get the new id.

ParamTypeRequiredDefaultDescription
descriptionstringnonullDescription. Optional.
displayNamestringyesThe team's display name.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
templatestringno"standard"Team template, for example "standard" (the default).

[Microsoft Graph] Delete a channel AND ITS ENTIRE CONVERSATION HISTORY. Every post and reply goes with it. The channel is recoverable for a limited period through the Teams admin centre — not through these tools — and its files remain in the team's SharePoint site. Read the messages you need before calling this, because afterwards there is no read that reaches them.

ParamTypeRequiredDefaultDescription
channelIdstringyesThe channel id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
teamIdstringyesThe team id.

[Microsoft Graph] Get one channel — its description, its membershipType (standard, private or shared) and its web URL. The membershipType is the property worth reading before any membership change: a standard channel has no member list of its own, so adding somebody to it is a team-level operation, not a channel-level one.

ParamTypeRequiredDefaultDescription
channelIdstringyesThe channel id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
teamIdstringyesThe team id.

[Microsoft Graph] Get the SharePoint folder holding a channel's files. It returns a driveItem carrying both a parentReference driveId and its own id, which is the handoff into the file tools: pass those to graph_list_drive_children to see what a channel has stored. There is no file handling in this family for exactly that reason.

ParamTypeRequiredDefaultDescription
channelIdstringyesThe channel id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
teamIdstringyesThe team id.

[Microsoft Graph] Get one channel post in full — its body, who wrote it, when, whether it has been edited or deleted, and any attachments or mentions. A deleted message still returns, with a deletedDateTime and an empty body, which is how you tell "removed" from "never existed".

ParamTypeRequiredDefaultDescription
channelIdstringyesThe channel id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageIdstringyesThe message id.
teamIdstringyesThe team id.

[Microsoft Graph] Get one team with its settings — who may create channels, whether guests can be added, whether members can delete messages, and whether the team is archived. An archived team is read-only for everyone, which is the usual explanation for a message send that fails on a team that plainly exists.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
teamIdstringyesThe team id (also the backing group's id).

[Microsoft Graph] Get one team membership. Note the id here is the MEMBERSHIP's id, not the user's — they are different values, and the membership id is what the role-change and removal tools take. Get it from graph_list_team_members rather than reusing a user id.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
membershipIdstringyesThe membership id from graph_list_team_members, NOT the user's id.
teamIdstringyesThe team id.

[Microsoft Graph] List EVERY channel in a team including private and shared ones, each with its membershipType. This is the complete picture graph_list_channels deliberately does not give: a private channel has its own membership and its own files, so a team audit that skips them misses exactly the places sensitive material tends to sit.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum channels to return (1-999, default 100).
teamIdstringyesThe team id.

[Microsoft Graph] List the members of a PRIVATE or SHARED channel — the people who can see it beyond the team's own membership. A standard channel inherits the team's members and has no separate list, so this read is mainly how you answer "who can see what is in this private channel".

ParamTypeRequiredDefaultDescription
channelIdstringyesThe channel id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum members to return (1-999, default 100).
teamIdstringyesThe team id.

[Microsoft Graph] List the top-level posts in a channel, newest first. REPLIES ARE NOT INCLUDED — a Teams conversation is a post plus its own reply thread, so a channel read on its own shows the openings without the discussion. Use graph_list_message_replies for each post that matters. Pages are capped at 50 by Microsoft, so a busy channel needs several passes.

ParamTypeRequiredDefaultDescription
channelIdstringyesThe channel id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno50Maximum messages to return (1-50 per page, default 50).
teamIdstringyesThe team id.

[Microsoft Graph] List the tabs pinned across the top of a channel — the wikis, Planner boards, websites and documents a team has attached to it. Useful when auditing what a team is actually wired into, since a tab can point at a system nobody remembers connecting.

ParamTypeRequiredDefaultDescription
channelIdstringyesThe channel id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum tabs to return (1-999, default 100).
teamIdstringyesThe team id.

[Microsoft Graph] List a team's STANDARD channels — the ones every member sees. Private and shared channels are deliberately absent from this list; use graph_list_all_channels when the question is "where could this conversation be", because a private channel is invisible here even to a team owner.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "displayName eq 'General'".
maxItemsintegerno100Maximum channels to return (1-999, default 100).
teamIdstringyesThe team id.

[Microsoft Graph] List the teams the SIGNED-IN user belongs to. Narrower than graph_list_teams and often the right starting point, because it answers "which teams can I actually post in" rather than "which teams exist" — a distinction that matters, since the message tools here act as the signed-in user.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum teams to return (1-999, default 100).

[Microsoft Graph] List the replies to one channel post — the actual discussion, which the channel listing omits. Pages are capped at 50 by Microsoft. This is where an answer usually lives when a channel read shows a question and nothing else.

ParamTypeRequiredDefaultDescription
channelIdstringyesThe channel id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno50Maximum replies to return (1-50 per page, default 50).
messageIdstringyesThe id of the post whose replies you want.
teamIdstringyesThe team id.

[Microsoft Graph] List the Teams apps installed in a team. Expand teamsAppDefinition to see each app's name and publisher rather than only its id — an inventory of third-party apps with access to a team's conversations is a routine security question and this is where it is answered.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
expandstringno"teamsAppDefinition"Related data to include, for example "teamsAppDefinition" for app names.
maxItemsintegerno100Maximum apps to return (1-999, default 100).
teamIdstringyesThe team id.

[Microsoft Graph] List a team's members. Read the roles array on each: it is EMPTY for an ordinary member and contains "owner" for an owner, so an empty roles array means a normal member rather than missing data. A team with one owner is a standing risk worth reporting — if that person leaves, nobody can administer it.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum members to return (1-999, default 100).
teamIdstringyesThe team id.

[Microsoft Graph] List the teams in the organisation. Every team is backed by a Microsoft 365 group of the same id, so a team id and its group id are interchangeable — which is how you get from here to the group's mailbox, calendar or SharePoint site.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "startswith(displayName,'Finance')".
maxItemsintegerno100Maximum teams to return (1-999, default 100).

[Microsoft Graph] Remove somebody from a private or shared channel. They keep their place in the parent team and lose only this channel. Takes the channel MEMBERSHIP id from graph_list_channel_members, which is a different value from the team membership id for the same person.

ParamTypeRequiredDefaultDescription
channelIdstringyesThe channel id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
membershipIdstringyesThe channel membership id from graph_list_channel_members.
teamIdstringyesThe team id.

[Microsoft Graph] Remove somebody from a team. They lose access to every channel, conversation and file in it at once, and their past posts stay behind under their name. Takes the MEMBERSHIP id from graph_list_team_members, not a user id — a user id here does not resolve rather than removing the wrong person, which is the one mercy in this pairing.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
membershipIdstringyesThe membership id from graph_list_team_members, NOT the user's id.
teamIdstringyesThe team id.

[Microsoft Graph] Reply to an existing channel post, in that post's thread. Same permanence as posting: it appears at once under the signed-in person's name and notifies everyone following the thread, and nothing unsends it. Replying is the right verb when answering an existing conversation — a new top-level post starts a thread nobody was watching.

ParamTypeRequiredDefaultDescription
channelIdstringyesThe channel id.
contentstringyesThe reply text.
contentTypestringno"html""html" (default) or "text".
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageIdstringyesThe id of the post being replied to.
teamIdstringyesThe team id.

[Microsoft Graph] Post a message to a Teams channel. IT APPEARS IMMEDIATELY UNDER THE SIGNED-IN PERSON'S NAME AND NOTIFIES THE CHANNEL. Nothing unsends it: deleting a post afterwards leaves a visible tombstone and does not recall the notification anyone already received. This tool sits on a separate permission from the rest of the Teams tools, so an assistant can reorganise teams and channels without ever being able to speak in them.

ParamTypeRequiredDefaultDescription
channelIdstringyesThe channel id.
contentstringyesThe message text.
contentTypestringno"html""html" (default) or "text".
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
subjectstringnonullSubject line. Optional; channel posts usually have none.
teamIdstringyesThe team id.

[Microsoft Graph] Restore an archived channel, giving its members back the ability to post and edit. Not destructive — it returns a capability rather than removing one. An archived channel inside an ARCHIVED TEAM cannot be unarchived: unarchive the team with graph_unarchive_team first, or this fails with a 400 naming the channel. Asynchronous like archiving, so the empty response means accepted rather than finished.

ParamTypeRequiredDefaultDescription
channelIdstringyesThe channel id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
teamIdstringyesThe team id.

[Microsoft Graph] Restore an archived team to normal use. Like archiving, this is asynchronous and returns nothing — the team becomes writable a few seconds later. It takes nothing away, which is why it is not flagged where archiving is.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
teamIdstringyesThe team id.

[Microsoft Graph] Rename a channel or change its description. Renaming is visible to everyone in the team and breaks any bookmark to the old name, but nothing is lost. A channel's membershipType cannot be changed after it is created.

ParamTypeRequiredDefaultDescription
channelIdstringyesThe channel id.
descriptionstringnonullNew description. Omit to leave unchanged.
displayNamestringnonullNew display name. Omit to leave unchanged.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
teamIdstringyesThe team id.

[Microsoft Graph] Change a team's name or description. Anything omitted is left alone. This does not touch membership, channels or any content.

ParamTypeRequiredDefaultDescription
descriptionstringnonullNew description. Omit to leave unchanged.
displayNamestringnonullNew display name. Omit to leave unchanged.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
teamIdstringyesThe team id.

[Microsoft Graph] Promote a team member to owner, or demote an owner back to a member. Demoting the LAST owner leaves a team nobody can administer — no new channels, no membership changes, no way back without an administrator — so list the members and count the owners first. Takes the MEMBERSHIP id from graph_list_team_members, not a user id.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
membershipIdstringyesThe membership id from graph_list_team_members, NOT the user's id.
ownerbooleanyesTrue to make them an owner, false to make them an ordinary member.
teamIdstringyesThe team id.

Chats & Presence

ToolPlanAccessSummary
graph_add_chat_memberProDestructiveAdd somebody to a group chat.
graph_get_chatFreeRead-onlyGet one chat — its type (oneOnOne, group or meeting), its topic if it has one, and when it was last updated.
graph_get_chat_messageFreeRead-onlyGet one chat message in full — its body, sender, timestamps, attachments and mentions.
graph_get_presencesFreeRead-onlyGet the Teams availability of up to 650 people in ONE call.
graph_get_user_presenceFreeRead-onlyGet one person's Teams availability — Available, Busy, DoNotDisturb, Away or Offline, plus the activity behind it (InACall, InAMeeting, Presenting).
graph_list_chat_membersFreeRead-onlyList who is in a chat.
graph_list_chat_messagesFreeRead-onlyList the messages in one chat, newest first.
graph_list_chatsFreeRead-onlyList the SIGNED-IN user's Teams chats — one-to-one, group and meeting conversations.
graph_list_pinned_chat_messagesFreeRead-onlyList the messages pinned to the top of a chat.
graph_pin_chat_messageProWritePin a message to the top of a chat so everyone in it sees it first.
graph_send_chat_messageProDestructiveSend a message to an existing Teams chat.
graph_unpin_chat_messageProWriteRemove a pin from a chat.

[Microsoft Graph] Add somebody to a group chat. DECIDE HOW MUCH HISTORY THEY SEE: by default they see only what is said from now on, but shareHistory makes the ENTIRE past conversation readable to them, which is access to words said before they were in the room. This cannot be narrowed afterwards. One-to-one chats cannot take a third person — Teams requires a new group chat instead.

ParamTypeRequiredDefaultDescription
chatIdstringyesThe chat id. Must be a group chat, not a one-to-one.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
shareHistorybooleannofalseSet true to give them the chat's ENTIRE history. Defaults to false — future messages only.
userIdstringyesThe user's id or user principal name.

[Microsoft Graph] Get one chat — its type (oneOnOne, group or meeting), its topic if it has one, and when it was last updated. A one-to-one chat has no topic, so identify it by its members instead.

ParamTypeRequiredDefaultDescription
chatIdstringyesThe chat id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
expandstringnonullRelated data to include, for example "members".

[Microsoft Graph] Get one chat message in full — its body, sender, timestamps, attachments and mentions. A deleted message still returns, with a deletedDateTime and an empty body, which is how you tell "removed" from "never existed".

ParamTypeRequiredDefaultDescription
chatIdstringyesThe chat id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageIdstringyesThe message id.

[Microsoft Graph] Get the Teams availability of up to 650 people in ONE call. Use this rather than looping graph_get_user_presence over a team: presence is rate-limited, and one request for fifty people is one request rather than fifty. Takes user OBJECT IDs — user principal names are not accepted here, though the single-person tool accepts either.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdsstringyesComma-separated user object ids (GUIDs), up to 650.

[Microsoft Graph] Get one person's Teams availability — Available, Busy, DoNotDisturb, Away or Offline, plus the activity behind it (InACall, InAMeeting, Presenting). This DOES take another person's id, unlike the mail and calendar tools, because the presence permission genuinely spans the organisation: availability is what Teams already shows everyone.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
userIdstringyesThe user's id or user principal name.

[Microsoft Graph] List who is in a chat. Each member carries a visibleHistoryStartDateTime saying how far back they can read — somebody added later may see the whole conversation or only what followed, and this is the read that tells you which.

ParamTypeRequiredDefaultDescription
chatIdstringyesThe chat id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum members to return (1-999, default 100).

[Microsoft Graph] List the messages in one chat, newest first. Unlike a channel there are no reply threads here — a chat is a flat conversation, so this one read is the whole discussion. Pages are capped at 50 by Microsoft. Filtering by date requires ordering by the same property, which is a Graph rule specific to this endpoint.

ParamTypeRequiredDefaultDescription
chatIdstringyesThe chat id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter on createdDateTime or lastModifiedDateTime. Requires a matching orderby.
maxItemsintegerno50Maximum messages to return (1-50 per page, default 50).
orderbystringnonullOData order, for example "createdDateTime desc". Descending only.

[Microsoft Graph] List the SIGNED-IN user's Teams chats — one-to-one, group and meeting conversations. This reaches your own chats only; there is no way to list somebody else's through this connector, because a delegated Teams permission is limited to the conversations you are actually in. Expand members to see who each chat is with, since a one-to-one chat has no name of its own.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
expandstringnonullRelated data to include, for example "members" or "lastMessagePreview".
maxItemsintegerno50Maximum chats to return (1-50 per page, default 50).

[Microsoft Graph] List the messages pinned to the top of a chat. Pins are how a group marks the thing everybody needs — a meeting link, a decision — so this is a short, high-signal read where the full message list is long and mostly noise.

ParamTypeRequiredDefaultDescription
chatIdstringyesThe chat id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno50Maximum pinned messages to return (1-50, default 50).

[Microsoft Graph] Pin a message to the top of a chat so everyone in it sees it first. Everybody in the chat sees the pin, but nothing is sent and nothing is removed — it changes what is prominent, not what exists.

ParamTypeRequiredDefaultDescription
chatIdstringyesThe chat id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
messageIdstringyesThe id of the message to pin.

[Microsoft Graph] Send a message to an existing Teams chat. IT ARRIVES IMMEDIATELY UNDER THE SIGNED-IN PERSON'S NAME AND NOTIFIES EVERYONE IN THE CHAT. Nothing unsends it. This sits on a permission of its own, separate from the channel-posting one, so an automation can be allowed to broadcast to a team without being able to message individuals — or the other way round.

ParamTypeRequiredDefaultDescription
chatIdstringyesThe chat id. This sends to an EXISTING chat; it does not start a new one.
contentstringyesThe message text.
contentTypestringno"html""html" (default) or "text".
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Remove a pin from a chat. The MESSAGE itself is untouched and stays in the conversation — this only stops it being held at the top. Takes the PIN's id from graph_list_pinned_chat_messages, which is a different value from the message id it points at.

ParamTypeRequiredDefaultDescription
chatIdstringyesThe chat id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
pinnedMessageIdstringyesThe PIN id from graph_list_pinned_chat_messages, not the message id.

Intune Applications

ToolPlanAccessSummary
graph_assign_mobile_appProDestructiveSet which groups an app is deployed to.
graph_create_intune_role_assignmentProDestructiveGrant an Intune role to one or more security groups.
graph_create_intune_role_definitionProWriteAuthor a custom Intune administrator role.
graph_delete_intune_role_assignmentProDestructiveRevoke an Intune role assignment.
graph_delete_intune_role_definitionProDestructiveDelete a custom Intune role.
graph_get_intune_role_definitionFreeRead-onlyGet one Intune role with its full permission list.
graph_get_managed_app_policyFreeRead-onlyGet one app protection or app configuration policy with all its settings.
graph_get_managed_app_registrationFreeRead-onlyGet one app registration — which person, which app, which device, which platform version, and when it last checked in.
graph_get_mobile_appFreeRead-onlyGet one managed application in full.
graph_get_vpp_tokenProDestructiveGet one Apple Volume Purchase Program token, INCLUDING ITS VALUE — the same credential disclosure as graph_list_vpp_tokens, for a single token.
graph_list_applied_app_policiesFreeRead-onlyList the policies ACTUALLY IN FORCE for one app registration — what is really protecting that person's app right now.
graph_list_intended_app_policiesFreeRead-onlyList the policies that SHOULD apply to one app registration — what has been targeted at it, as opposed to what has actually taken effect.
graph_list_intune_role_assignmentsFreeRead-onlyList who holds one Intune role, and over which scope.
graph_list_intune_role_definitionsFreeRead-onlyList Intune's own administrator roles — the built-in ones (Help Desk Operator, Application Manager, Read Only Operator) and any custom roles.
graph_list_managed_app_policiesFreeRead-onlyList Intune's app protection and app configuration policies — the MAM rules that control copy-paste out of company apps, save-as to personal storage, and PIN requirements.
graph_list_managed_app_registrationsFreeRead-onlyList the app-and-user pairings MAM knows about — each is one person using one managed app on one device, with the platform, app version and last sync time.
graph_list_managed_app_statusesFreeRead-onlyGet Intune's own summary reports on app protection — aggregate counts of users and apps by policy state.
graph_list_mobile_app_assignmentsFreeRead-onlyList which groups an app is deployed to and how — required (installed automatically), available (offered in Company Portal) or uninstall (actively removed).
graph_list_mobile_appsFreeRead-onlyList the applications Intune manages — store apps, line-of-business packages and web links across every platform.
graph_list_vpp_tokensProDestructiveList the Apple Volume Purchase Program tokens uploaded to Intune, INCLUDING EACH TOKEN'S VALUE.
graph_target_managed_app_policyProDestructiveSet which apps an app protection policy covers.
graph_update_intune_role_assignmentProDestructiveChange an existing Intune role assignment's members or scope.
graph_update_intune_role_definitionProDestructiveChange a custom Intune role's name, description or permissions.

[Microsoft Graph] Set which groups an app is deployed to. THIS REPLACES THE ENTIRE ASSIGNMENT LIST — any group not in what you send is removed, and a removed 'required' assignment UNINSTALLS the app from every device in that group at its next check-in. There is no partial form and nothing warns the people using those machines. Call graph_list_mobile_app_assignments first and send the existing assignments plus your change.

ParamTypeRequiredDefaultDescription
appIdstringyesThe app id.
assignmentsstringyesThe COMPLETE JSON array of mobileAppAssignment objects. Anything omitted is removed.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Grant an Intune role to one or more security groups. DESTRUCTIVE because it changes who can administer a tenant's devices — the same reason granting a directory role is. The two list arguments do different jobs and confusing them is the classic error: members names the groups whose people GET the role, while resourceScopes names the groups of DEVICES AND USERS they may act on. Omitting a scope does not mean unrestricted — it means the assignment reaches nothing — so an assignment that appears to do nothing is usually a missing scope rather than a missing permission. The role is identified by the URL, so this creates the assignment underneath the role definition you name.

ParamTypeRequiredDefaultDescription
descriptionstringnonullDescription of the assignment.
displayNamestringyesDisplay name for the assignment, for example "Houston helpdesk".
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
membersstringyesComma-separated object ids of the security groups whose members RECEIVE the role.
resourceScopesstringyesComma-separated object ids of the security groups that define the SCOPE the role may act on.
roleDefinitionIdstringyesThe role definition id being assigned.

[Microsoft Graph] Author a custom Intune administrator role. NOT destructive, and the reason is worth being precise about: a role definition on its own grants nobody anything — it becomes real only when graph_create_intune_role_assignment ties it to a group, which is the destructive half. The permissions live in rolePermissions, whose allowedResourceActions are Intune's own action strings (for example "Microsoft.Intune_MobileApps_Read"); read an existing role with graph_get_intune_role_definition to see the exact vocabulary rather than guessing at it. Built-in roles cannot be created or modified, so a custom role is the only way to express anything Microsoft did not ship.

ParamTypeRequiredDefaultDescription
descriptionstringnonullDescription of what the role is for.
displayNamestringyesDisplay name for the role.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
rolePermissionsstringyesJSON array of rolePermission objects, each carrying resourceActions with allowedResourceActions and notAllowedResourceActions. Copy the shape from an existing role.

[Microsoft Graph] Revoke an Intune role assignment. Everybody in its member groups stops being able to administer the devices it scoped, immediately and without being told — the failure they see is an Intune console that has gone read-only or empty. This is the right tool when a helpdesk team's remit changes; it is the wrong one when a single person leaves, because the assignment targets GROUPS and removing them from the group is the narrower fix.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
roleAssignmentIdstringyesThe role ASSIGNMENT id (not the role definition id).

[Microsoft Graph] Delete a custom Intune role. Its ASSIGNMENTS go with it, so everybody who administered Intune through this role stops being able to — list them with graph_list_intune_role_assignments before deleting, because afterwards there is no record of who held it. There is no undo and no soft-delete for Intune roles, unlike deleted directory objects. Built-in roles cannot be deleted.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
roleDefinitionIdstringyesThe role definition id. Must be a CUSTOM role.

[Microsoft Graph] Get one Intune role with its full permission list. rolePermissions is where the detail is: it enumerates every action the role allows, which is how you tell a custom role that merely looks limited from one that actually is.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
roleDefinitionIdstringyesThe role definition id.

[Microsoft Graph] Get one app protection or app configuration policy with all its settings. As with apps, the @odata.type says which platform's rules these are (iosManagedAppProtection, androidManagedAppProtection, targetedManagedAppConfiguration) and the settings differ between them.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
policyIdstringyesThe policy id.

[Microsoft Graph] Get one app registration — which person, which app, which device, which platform version, and when it last checked in. A registration that has not synced in weeks is the usual explanation for a policy that appears not to be applying.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
registrationIdstringyesThe registration id.

[Microsoft Graph] Get one managed application in full. The @odata.type is the property worth reading first — it says what KIND of app this is (win32LobApp, iosStoreApp, androidManagedStoreApp, webApp and so on), and the rest of the payload differs completely between them, so a field present on one type is legitimately absent on another rather than missing.

ParamTypeRequiredDefaultDescription
appIdstringyesThe app id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.

[Microsoft Graph] Get one Apple Volume Purchase Program token, INCLUDING ITS VALUE — the same credential disclosure as graph_list_vpp_tokens, for a single token. Use it when you already know which token you mean and need its sync status, last sync time or app count. Marked DESTRUCTIVE for the disclosure rather than for any change it makes. lastSyncStatus and lastSyncDateTime are usually what you actually want, and select can exclude the token itself.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
selectstringnonullComma-separated properties to return. Omit the token property to avoid retrieving the credential.
vppTokenIdstringyesThe VPP token id.

[Microsoft Graph] List the policies ACTUALLY IN FORCE for one app registration — what is really protecting that person's app right now. Compare it with graph_list_intended_app_policies: where the two differ, a policy was targeted but has not reached the device, which is the specific finding worth acting on.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum policies to return (1-999, default 100).
registrationIdstringyesThe registration id.

[Microsoft Graph] List the policies that SHOULD apply to one app registration — what has been targeted at it, as opposed to what has actually taken effect. The gap between this and graph_list_applied_app_policies is the whole diagnostic: a policy intended but not applied means the app has not synced since it was targeted.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum policies to return (1-999, default 100).
registrationIdstringyesThe registration id.

[Microsoft Graph] List who holds one Intune role, and over which scope. An assignment ties a role to member groups AND to a scope of devices, so two people holding the same role can legitimately reach different machines — the scope is the half that gets forgotten when auditing who can do what.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum assignments to return (1-999, default 100).
roleDefinitionIdstringyesThe role definition id whose assignments you want.

[Microsoft Graph] List Intune's own administrator roles — the built-in ones (Help Desk Operator, Application Manager, Read Only Operator) and any custom roles. These are SEPARATE from Entra directory roles and grant Intune permissions independently, so somebody with no Entra admin role can still be an Intune administrator. Filter on isBuiltIn eq false to see only what this tenant authored, which is where surprises live.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "isBuiltIn eq false" to list only custom roles.
maxItemsintegerno100Maximum roles to return (1-999, default 100).

[Microsoft Graph] List Intune's app protection and app configuration policies — the MAM rules that control copy-paste out of company apps, save-as to personal storage, and PIN requirements. These apply to APPS rather than to devices, so they cover personal phones that are not enrolled at all, which is usually the point of them.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum policies to return (1-999, default 100).

[Microsoft Graph] List the app-and-user pairings MAM knows about — each is one person using one managed app on one device, with the platform, app version and last sync time. This is the inventory that answers "whose phone is actually covered", which is a different question from which policies exist.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum registrations to return (1-999, default 100).

[Microsoft Graph] Get Intune's own summary reports on app protection — aggregate counts of users and apps by policy state. This is the tenant-level health view; the registration tools answer the same question for one person.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum statuses to return (1-999, default 100).

[Microsoft Graph] List which groups an app is deployed to and how — required (installed automatically), available (offered in Company Portal) or uninstall (actively removed). READ THIS BEFORE graph_assign_mobile_app, which replaces the whole list rather than adding to it: this read is the only record of what you would be overwriting.

ParamTypeRequiredDefaultDescription
appIdstringyesThe app id.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum assignments to return (1-999, default 100).

[Microsoft Graph] List the applications Intune manages — store apps, line-of-business packages and web links across every platform. Read publishingState before assuming an app is usable: one still processing has not finished uploading and will not install anywhere. isAssigned tells you whether it reaches any device at all, which is how you find apps that were added and then forgotten.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
filterstringnonullOData filter, for example "isAssigned eq false" to find unassigned apps.
maxItemsintegerno100Maximum apps to return (1-999, default 100).
selectstringnonullComma-separated properties to return. Omit for the default set.

[Microsoft Graph] List the Apple Volume Purchase Program tokens uploaded to Intune, INCLUDING EACH TOKEN'S VALUE. The expiry dates are the reason to run this — a lapsed VPP token silently stops every iOS app assignment in the tenant, and expirationDateTime is where you see it coming. But the response also carries the token STRING itself, which is a bearer credential for the organisation's Apple VPP account: whoever holds it can see and reassign that organisation's app licences without signing in to Apple Business Manager. Marked DESTRUCTIVE even though it changes nothing, because it DISCLOSES a credential — that classification is deliberate and must not be "fixed" to read-only. Select only the fields you need when you just want expiry, and keep the value out of transcripts, tickets and logs.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
maxItemsintegerno100Maximum tokens to return (1-999, default 100).
selectstringnonullComma-separated properties to return. Pass "organizationName,expirationDateTime,state" to avoid retrieving the token value at all.

[Microsoft Graph] Set which apps an app protection policy covers. THIS REPLACES THE WHOLE LIST — an app you omit stops being protected by this policy, silently, which is a security control being removed rather than merely a setting changing. Read the policy first and send its current apps plus your change.

ParamTypeRequiredDefaultDescription
appGroupTypestringnonullApp group type, for example "selectedPublicApps" or "allCoreMicrosoftApps". Optional.
appsstringyesThe COMPLETE JSON array of managedMobileApp objects. Anything omitted loses this policy's protection.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
policyIdstringyesThe policy id.

[Microsoft Graph] Change an existing Intune role assignment's members or scope. DESTRUCTIVE because both lists REPLACE rather than merge: a group left out of members loses the role, and a group left out of resourceScopes loses the devices it could act on. Read the assignment first and send the complete intended lists. Note this addresses the flat roleAssignments collection by assignment id — the role it belongs to is not changed here, and moving an assignment to a different role means deleting it and creating a new one.

ParamTypeRequiredDefaultDescription
descriptionstringnonullNew description. Omit to leave it as it is.
displayNamestringnonullNew display name. Omit to leave it as it is.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
membersstringnonullComma-separated group object ids that REPLACE the current member list. Omit to leave members untouched.
resourceScopesstringnonullComma-separated group object ids that REPLACE the current scope list. Omit to leave the scope untouched.
roleAssignmentIdstringyesThe role ASSIGNMENT id (not the role definition id).

[Microsoft Graph] Change a custom Intune role's name, description or permissions. DESTRUCTIVE because rolePermissions is REPLACE rather than merge: sending a new list discards the old one, so an action omitted from the body is an action every holder of this role loses — mid-shift, with no notice, and the symptom they report is a button that no longer works rather than a permissions change. Read the current definition with graph_get_intune_role_definition and send the full intended list. Built-in roles cannot be modified at all; Graph refuses them.

ParamTypeRequiredDefaultDescription
descriptionstringnonullNew description. Omit to leave it as it is.
displayNamestringnonullNew display name. Omit to leave it as it is.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
roleDefinitionIdstringyesThe role definition id. Must be a CUSTOM role — built-in roles are immutable.
rolePermissionsstringnonullJSON array of rolePermission objects. REPLACES the whole list — omit to leave the permissions untouched.

Partner Center (CSP)

ToolPlanAccessSummary
graph_get_partner_customerFreeRead-onlyGet one CSP customer's account record — company profile, primary domain, relationship to the partner and the tenant id everything else keys on.
graph_get_partner_customer_usage_recordsFreeRead-onlyGet the current billing period's rated usage for a customer's Azure subscriptions — spend so far, per subscription, before the invoice exists.
graph_get_partner_invoiceFreeRead-onlyGet one invoice's header — billing period, totals by currency, due date and the document links.
graph_get_partner_orderFreeRead-onlyGet one CSP order by id, with its line items, quantities, offer ids and current status.
graph_get_partner_service_requestFreeRead-onlyGet one Microsoft service request in full — its status, severity, product area and the support engineer's notes.
graph_get_partner_subscriptionFreeRead-onlyGet one CSP subscription in full, including its offer, quantity, commitment term, auto-renew setting and — for an add-on — the parent subscription it hangs off.
graph_get_partner_subscription_resource_usage_recordsFreeRead-onlyBreak one Azure subscription's current-period spend down by resource.
graph_list_partner_customer_ordersFreeRead-onlyList the orders placed for a CSP customer — what was bought, when, at what quantity and on which billing cycle.
graph_list_partner_customer_service_requestsFreeRead-onlyList the Microsoft support tickets raised on a customer's behalf, with their status and severity.
graph_list_partner_customer_subscriptionsFreeRead-onlyList everything a CSP customer is subscribed to — offer, quantity, billing cycle, term, status and renewal settings.
graph_list_partner_customersFreeRead-onlyList the customers in this partner's CSP account — everyone the partner bills, with their company name, domain and tenant id.
graph_list_partner_invoice_line_itemsFreeRead-onlyList an invoice's line items for one billing provider — the per-customer, per-subscription detail that actually explains a bill.
graph_list_partner_invoicesFreeRead-onlyList the partner's own invoices from Microsoft — invoice id, billing period, currency, total and payment status.
graph_list_partner_subscriptions_by_orderFreeRead-onlyList the subscriptions one order produced.
graph_search_partner_customersFreeRead-onlyFind CSP customers whose company name starts with a given string.

[Microsoft Partner Center] Get one CSP customer's account record — company profile, primary domain, relationship to the partner and the tenant id everything else keys on. Worth reading before acting in a customer's directory for the same reason the GDAP customer read is: the display name a partner gave an account drifts from the customer's real organisation name over time, and this is the record that ties the commercial relationship to the actual tenant.

ParamTypeRequiredDefaultDescription
customerTenantIdstringyesThe customer's tenant id (GUID).
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own.

[Microsoft Partner Center] Get the current billing period's rated usage for a customer's Azure subscriptions — spend so far, per subscription, before the invoice exists. This is the read that turns Azure billing from a monthly surprise into something a partner can act on mid-month, and it is the natural input to a budget alert. Note the shape differs between a legacy MS-AZR-0145P subscription and an Azure plan: the plan form reports a currency code and a US-dollar total where the legacy form reports a currency locale.

ParamTypeRequiredDefaultDescription
customerTenantIdstringyesThe customer's tenant id (GUID).
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own.

[Microsoft Partner Center] Get one invoice's header — billing period, totals by currency, due date and the document links. The header alone will not explain a charge; it tells you which billing providers appear on the invoice, which is what the line-item read needs in order to return anything at all. Read this first for that reason rather than guessing a provider.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own.
invoiceIdstringyesThe invoice id.

[Microsoft Partner Center] Get one CSP order by id, with its line items, quantities, offer ids and current status. Use it to settle exactly what was purchased when an invoice and a subscription list disagree — the order is the authoritative record of intent, while the subscription is the record of what provisioning actually produced, and the two can differ when part of an order failed.

ParamTypeRequiredDefaultDescription
customerTenantIdstringyesThe customer's tenant id (GUID).
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own.
orderIdstringyesThe order's id.

[Microsoft Partner Center] Get one Microsoft service request in full — its status, severity, product area and the support engineer's notes. This is the detail behind a ticket listing and the answer to "what has Microsoft actually said". Note the id is alphanumeric rather than a GUID, and that this route reaches the partner's own service requests: a ticket raised for a specific customer is found through that customer's listing.

ParamTypeRequiredDefaultDescription
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own.
serviceRequestIdstringyesThe service request's id (alphanumeric, not a GUID).

[Microsoft Partner Center] Get one CSP subscription in full, including its offer, quantity, commitment term, auto-renew setting and — for an add-on — the parent subscription it hangs off. Read it before any renewal or true-up conversation: the term end date and the auto-renew flag together decide whether a change is possible now or only at renewal, and for a new-commerce subscription the cancellation window is measured in days from purchase rather than being open-ended.

ParamTypeRequiredDefaultDescription
customerTenantIdstringyesThe customer's tenant id (GUID).
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own.
subscriptionIdstringyesThe subscription's id (GUID).

[Microsoft Partner Center] Break one Azure subscription's current-period spend down by resource. This is the next question after a customer's total looks wrong — it names the resources driving the charge, which is where an orphaned disk, a forgotten test environment or a runaway egress bill actually shows up. For an Azure plan, pass the PLAN id here rather than a subscription id; the two are easy to confuse and the wrong one returns nothing rather than an error.

ParamTypeRequiredDefaultDescription
continuationTokenstringnonullContinuation token from a previous response, to fetch the next page.
customerTenantIdstringyesThe customer's tenant id (GUID).
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own.
subscriptionIdstringyesThe subscription id, or for an Azure plan the plan id.

[Microsoft Partner Center] List the orders placed for a CSP customer — what was bought, when, at what quantity and on which billing cycle. This is the purchase history behind the current subscription list, and it is where an unexplained invoice line usually resolves. One timing caveat worth knowing before concluding an order failed: Microsoft documents a delay of up to 15 minutes between an order being submitted and it appearing here, so a just-placed order legitimately shows nothing. Filter by billing cycle when reconciling a monthly invoice against annual commitments.

ParamTypeRequiredDefaultDescription
billingTypestringnonullBilling cycle to filter by, for example "monthly" or "annual". Omit for all orders.
continuationTokenstringnonullContinuation token from a previous response, to fetch the next page.
customerTenantIdstringyesThe customer's tenant id (GUID).
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own.

[Microsoft Partner Center] List the Microsoft support tickets raised on a customer's behalf, with their status and severity. Useful for the question a customer asks during an outage that a partner usually cannot answer quickly — whether Microsoft is already engaged and where that ticket stands. Note this surface requires App+User authentication, which is what StackJack uses, so it works here but will not work for any tool built on app-only credentials.

ParamTypeRequiredDefaultDescription
continuationTokenstringnonullContinuation token from a previous response, to fetch the next page.
customerTenantIdstringyesThe customer's tenant id (GUID).
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own.

[Microsoft Partner Center] List everything a CSP customer is subscribed to — offer, quantity, billing cycle, term, status and renewal settings. This is the licence-count question answered from the commerce side rather than the directory side, and the two disagree more often than anyone expects: Entra shows assigned licences, this shows PURCHASED ones, and the gap between them is what a partner is paying for and nobody is using. Note that new-commerce and legacy subscriptions return meaningfully different shapes, so read the status and term fields rather than assuming a layout.

ParamTypeRequiredDefaultDescription
continuationTokenstringnonullContinuation token from a previous response, to fetch the next page.
customerTenantIdstringyesThe customer's tenant id (GUID).
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own.

[Microsoft Partner Center] List the customers in this partner's CSP account — everyone the partner bills, with their company name, domain and tenant id. This is the commercial counterpart to the GDAP customer list and the two deliberately differ: a customer here with no delegated admin relationship is one the partner sells to but cannot administer, which is usually either a deliberate arrangement or an onboarding that was never finished. The tenant ids returned here are the same ones the rest of the connector accepts as a target directory. Paging is explicit: the response carries a continuation token, and passing it back returns the next page.

ParamTypeRequiredDefaultDescription
continuationTokenstringnonullContinuation token from a previous response, to fetch the next page. Omit for the first page.
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own. This is never a customer's tenant — customers are addressed by id.
sizeintegerno100Customers per page (1-500, default 100).

[Microsoft Partner Center] List an invoice's line items for one billing provider — the per-customer, per-subscription detail that actually explains a bill. Two parameters decide what comes back and neither has a safe default, which is why both are required: the billing provider ("onetime" for Azure plans, software, reservations, savings plans and Marketplace; "office" for legacy licence-based; "azure" for legacy MS-AZR-0145P) and the line item type ("billinglineitems" for charges, "usagelineitems" for metered detail). Microsoft is consolidating commercial consumption onto the "onetime" provider and no longer updates the Marketplace one, so prefer it. Large invoices page, and this is the read where that matters most — a month of Azure usage across a hundred customers is a great many rows.

ParamTypeRequiredDefaultDescription
billingProviderstringyesBilling provider: "onetime", "office" or "azure". Read the invoice header to see which apply.
continuationTokenstringnonullContinuation token from a previous response, to fetch the next page.
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own.
invoiceIdstringyesThe invoice id.
invoiceLineItemTypestringyesLine item type: "billinglineitems" for charges, or "usagelineitems" for metered detail.
offsetintegernonullZero-based offset into the line items. An alternative to the continuation token on providers that support it.
sizeintegerno100Line items per page (1-500, default 100).

[Microsoft Partner Center] List the partner's own invoices from Microsoft — invoice id, billing period, currency, total and payment status. These are what the PARTNER owes Microsoft, not what the partner bills its customers, and keeping that straight is the whole point of reading them: reconciling a customer's charges means starting here and drilling into the line items, because the invoice total spans every customer at once.

ParamTypeRequiredDefaultDescription
continuationTokenstringnonullContinuation token from a previous response, to fetch the next page.
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own.
sizeintegerno100Invoices per page (1-500, default 100).

[Microsoft Partner Center] List the subscriptions one order produced. This is the link between what was bought and what now exists, and it is the read that answers "did that purchase actually provision" — subscription ids do not always appear in an order's own checkout response, because provisioning is asynchronous and can complete minutes later. If this returns nothing for a recent order, the order is still provisioning rather than failed.

ParamTypeRequiredDefaultDescription
customerTenantIdstringyesThe customer's tenant id (GUID).
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own.
orderIdstringyesThe order's id (GUID).

[Microsoft Partner Center] Find CSP customers whose company name starts with a given string. Separate from the plain listing because Partner Center's filter is not an OData expression — it is a URL-encoded JSON object, and "starts_with" is the only operator this surface accepts — so this tool builds that shape from a plain search term rather than asking a caller to hand-assemble it. Matching is case-insensitive and prefix-only: searching "contoso" finds "Contoso Ltd" but not "The Contoso Group", which is the usual reason a customer looks missing.

ParamTypeRequiredDefaultDescription
companyNameStartsWithstringyesCompany name prefix to search for. Case-insensitive.
continuationTokenstringnonullContinuation token from a previous response, to fetch the next page.
entraTenantstringnonullPartner Entra directory to act in. Omit to use your own.
sizeintegerno100Customers per page (1-500, default 100).

Raw Requests

ToolPlanAccessSummary
graph_raw_getFreeRead-onlySend one GET to any Microsoft Graph path, on v1.0 or beta, and return the response exactly as Graph sent it.
graph_raw_requestProDestructiveSend one POST, PUT, PATCH or DELETE to any Microsoft Graph path, on v1.0 or beta, and return the response exactly as Graph sent it.

[Microsoft Graph] Send one GET to any Microsoft Graph path, on v1.0 or beta, and return the response exactly as Graph sent it. This is the escape hatch for everything this connector has no typed tool for, and the only way to reach the beta endpoint at all — every other graph_ tool is pinned to v1.0. The CIPP connector's cipp_bulk_graph_request is the same idea; here the sibling graph_raw_request also allows writes. It never bypasses a specific tool's own gate — your connector subscription, endpoint tool selection, plan and billing all still apply, and Graph still authorizes on the intersection of the consented app scope and your own Entra role, so this returns exactly what you could read anyway. Beta is not a newer v1.0: Microsoft documents it as subject to change without notice and not for production use, its properties appear and disappear between releases, and an automation built on a beta shape breaks silently when it changes. Use v1.0 unless the data only exists on beta. The path is relative to the version segment (users, me/messages, identityGovernance/...) and may carry its own OData query; ConsistencyLevel is not added for you, so an advanced query needing it should use the typed tool that knows it does. Paging is yours to drive: @odata.nextLink comes back in the body. Prefer the typed tool when one exists — it escapes the ids, adds the headers, and its description tells you what the answer means.

ParamTypeRequiredDefaultDescription
apiVersionstringno"v1.0"Which endpoint: v1.0 (default, generally available) or beta (preview, changes without notice).
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
pathstringyesThe Graph path relative to the version segment, e.g. users//authentication/methods. May carry its own OData query ($select, $filter, $top). No scheme, no '..', and no v1.0/beta segment of its own.

[Microsoft Graph] Send one POST, PUT, PATCH or DELETE to any Microsoft Graph path, on v1.0 or beta, and return the response exactly as Graph sent it. Destructive and unbounded by design: this is the write half of the escape hatch, so the blast radius is whatever path you name — a DELETE on a directory object removes it, and Graph's deletes are not all recoverable. The CIPP connector's cipp_bulk_graph_request is the same idea and is GET-only; this pair is wider, which is why the write half is Pro, marked destructive, and behind the agent consent gate. It never bypasses a specific tool's own gate: your connector subscription, endpoint tool selection, plan and billing all still apply, and Graph still authorizes on the intersection of the consented app scope and your own Entra role. Three Graph behaviours will surprise you. PATCH is a merge, so a property you omit is left alone while an explicit null clears it — the two are different operations and only the body tells them apart. A handful of surfaces, the GDAP relationship and access-assignment writes above all, require an If-Match ETag and refuse the call without one; this tool sends no If-Match, so use the typed GDAP tools for those. And most actions answer 202 or 204 with no body at all, which arrives as rather than as a failure — that is accepted, not confirmed, and no tracking reference reaches you, so re-read the object to see the result. Beta is not a newer v1.0 — it changes without notice, so a write built on a beta shape is a write that breaks quietly. GET is refused: use graph_raw_get, which needs no Pro plan.

ParamTypeRequiredDefaultDescription
apiVersionstringno"v1.0"Which endpoint: v1.0 (default, generally available) or beta (preview, changes without notice).
bodystringnonullThe request body as JSON, or omit for none. Passed to Graph untouched. The parameterless actions REJECT an empty , so omit rather than sending one.
entraTenantstringnonullCustomer Entra directory to act in. Omit to use your own directory.
methodstringyesThe HTTP verb: POST, PUT, PATCH or DELETE. GET is refused — use graph_raw_get.
pathstringyesThe Graph path relative to the version segment. May carry its own OData query. No scheme, no '..', and no v1.0/beta segment of its own.