entraadm-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| health_checkA | Fleet-standard health probe: service/version/status plus two independent Graph probes.
Read-only. Always returns the same keys regardless of outcome ( |
| get_userA | One account's identity/lifecycle state -- the first thing to check on any triage report.
A nonexistent account is a normal answer, not a tool failure: the result
is Read-only (User.Read.All application permission, or an equivalent delegated read). Requires an exact userPrincipalName, not a display name or partial match. Args: upn: The account's userPrincipalName, e.g. "user@example.edu". |
| signin_logsA | One user's recent sign-in events, AADSTS-annotated. The most direct answer to "why can't this person log in": each entry's
Because the filter is client-side, this walks pages until it has
collected Read-only (AuditLog.Read.All application permission, or -- for azure-cli
auth -- the Reports Reader directory role). Entra ID P1 retains sign-in
logs for 30 days; Args: user: The account's userPrincipalName. hours: How far back to look, clamped to [1, 720] (30 days). result: "failure" (default), "success", or "all". top: Maximum matching entries to return, clamped to [1, 500]. max_pages: Page budget for the client-side filter walk (default: ENTRAADM_MAX_PAGES_DEFAULT). |
| signin_failure_statsA | Tenant-wide sign-in failure aggregation -- the Entra ID counterpart to the RADIUS failure patrol. Aggregates failed sign-ins across the whole tenant into four views: top
AADSTS error codes (with the same meaning annotations as
Read-only (AuditLog.Read.All application permission, or -- for azure-cli
auth -- the Reports Reader directory role). Graph cannot filter sign-ins
on status/errorCode server-side, so this walks up to Args: hours: How far back to look, clamped to [1, 720] (30 days). max_pages: Page budget (default: ENTRAADM_MAX_PAGES_DEFAULT). |
| directory_auditsA | Who did what to the directory, and when -- the operator-side counterpart to signin_logs. Every admin action against a user object (block/unblock, password reset,
role assignment, attribute edits) appears here, naming the actor
(
Read-only (AuditLog.Read.All application permission, or -- for azure-cli auth -- the Reports Reader directory role). Entra ID retains directory audit logs for 30 days, same as sign-in logs. Args: user: Restrict to audits naming this userPrincipalName as actor or target (default: all). hours: How far back to look, clamped to [1, 720] (30 days). top: Maximum records to return, clamped to [1, 500]. max_pages: Page budget (default: ENTRAADM_MAX_PAGES_DEFAULT). |
| get_user_auth_methodsA | Registered authentication methods for one account -- is MFA actually set up?
A nonexistent account is a normal answer, not a tool failure: the result
is Read-only (UserAuthenticationMethod.Read.All application permission). This endpoint is app-only only: it is not exposed to delegated (azure-cli) auth under this tenant's current role assignment, so it degrades to a permission error under azure-cli auth even when other tools work. Args: upn: The account's userPrincipalName. |
| daily_briefA | One-call morning-patrol summary: sign-in failures, spray suspects, and admin actions. Combines Runs both sections synchronously in one tool call, unlike the sibling
gwsadm-mcp's job+poll Args: hours: How far back to look, clamped to [1, 720] (30 days). max_pages: Page budget passed to both sections (default: ENTRAADM_MAX_PAGES_DEFAULT). samples: Reserved for a future drill-down sample size; currently unused. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose: health check, single-user identity, per-user sign-in logs, tenant-wide failure stats, directory audits, user MFA status, and a daily brief aggregator. No two tools overlap in function; even signin_logs and signin_failure_stats differ by scope (one vs. tenant-wide) and are easily distinguishable.
All tool names follow a consistent snake_case pattern: health_check, get_user, signin_logs, signin_failure_stats, directory_audits, get_user_auth_methods, daily_brief. While some use 'get_' and others are noun phrases, the style is uniform and intuitive, with no mixed conventions or ambiguous verbs.
Seven tools is well within the ideal range for a focused read-only Entra administration/monitoring server. Each tool covers a distinct aspect of the domain (health, user, sign-ins, stats, audits, MFA, summary) without redundancy or bloat, making the surface area feel intentional and complete.
For its stated purpose of triaging account issues (e.g., sign-in failures, admin actions, MFA coverage), the tool set is comprehensive: it covers user identity, sign-in logs, tenant-wide failure aggregation, directory audits, MFA status, and a daily summary. There are no obvious dead ends—getting a user, checking their sign-ins, and checking MFA are all possible, and the daily_brief consolidates key metrics.